; LLVM IR from jrouwe/JoltPhysics :: Samples/SamplesApp.ll (ZN10SamplesApp9CastProbeEfRfRN3JPH4Vec3ERNS1_6BodyIDE)

; 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::BroadPhaseLayer" = type { i8 }
%"class.JPH::Color" = type { %union.anon.62 }
%union.anon.62 = type { i32 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.0 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.0 = type { i64, [8 x i8] }
%"class.JPH::RefConst.74" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::BodyID" = type { i32 }
%"struct.JPH::RRayCast" = type { %"struct.JPH::RayCastT" }
%"struct.JPH::RayCastT" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::RayCastResult" = type { %"class.JPH::BroadPhaseCastResult", %"class.JPH::SubShapeID" }
%"class.JPH::BroadPhaseCastResult" = type { %"class.JPH::BodyID", float }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::SpecifiedBroadPhaseLayerFilter" = type <{ %"class.JPH::BroadPhaseLayerFilter", %"class.JPH::BroadPhaseLayer", [7 x i8] }>
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::SpecifiedObjectLayerFilter" = type <{ %"class.JPH::ObjectLayerFilter", i16, [6 x i8] }>
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::BodyFilter" = type { ptr }
%"class.JPH::BodyLockRead" = type { %"class.JPH::BodyLockBase" }
%"class.JPH::BodyLockBase" = type { ptr, ptr, ptr }
%"class.std::basic_string_view" = type { i64, ptr }
%"class.JPH::StaticArray.149" = 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.JPH::TransformedShape" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::RefConst.74", %"class.JPH::Float3", %"class.JPH::BodyID", %"class.JPH::SubShapeIDCreator" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.55 }
%union.anon.55 = type { <4 x float> }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::SubShapeIDCreator" = type { %"class.JPH::SubShapeID", i32 }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RayCastSettings" = type { i8, i8, i8 }
%"class.JPH::Array.150" = type { i64, i64, ptr }
%"class.JPH::AnyHitCollisionCollector" = type <{ %"class.JPH::CollisionCollector", %"class.JPH::RayCastResult", i8, [3 x i8] }>
%"class.JPH::CollisionCollector" = type { ptr, float, ptr }
%"class.JPH::ShapeFilter" = type <{ ptr, %"class.JPH::BodyID", [4 x i8] }>
%"class.JPH::ClosestHitCollisionCollector" = type <{ %"class.JPH::CollisionCollector", %"class.JPH::RayCastResult", i8, [3 x i8] }>
%"class.JPH::ClosestHitPerBodyCollisionCollector" = type <{ %"class.JPH::CollisionCollector", %"class.JPH::Array.150", float, i8, [3 x i8] }>
%"class.JPH::AllHitCollisionCollector" = type { %"class.JPH::CollisionCollector", %"class.JPH::Array.150" }
%"class.JPH::AllHitCollisionCollector.153" = type { %"class.JPH::CollisionCollector.154", %"class.JPH::Array.155" }
%"class.JPH::CollisionCollector.154" = type { ptr, float, ptr }
%"class.JPH::Array.155" = type { i64, i64, ptr }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::CollideShapeSettings" = type <{ %"class.JPH::CollideSettingsBase", float, i8, [11 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::Array.158" = type { i64, i64, ptr }
%"class.JPH::AnyHitCollisionCollector.161" = type <{ %"class.JPH::CollisionCollector.162", [8 x i8], %"class.JPH::CollideShapeResult", i8, [15 x i8] }>
%"class.JPH::CollisionCollector.162" = type { ptr, float, ptr }
%"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.149", %"class.JPH::StaticArray.149" }
%"class.JPH::ClosestHitCollisionCollector.164" = type <{ %"class.JPH::CollisionCollector.162", [8 x i8], %"class.JPH::CollideShapeResult", i8, [15 x i8] }>
%"class.JPH::ClosestHitPerBodyCollisionCollector.166" = type <{ %"class.JPH::CollisionCollector.162", %"class.JPH::Array.158", float, i8, [3 x i8] }>
%"class.JPH::AllHitCollisionCollector.168" = type { %"class.JPH::CollisionCollector.162", %"class.JPH::Array.158" }
%"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::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::Array.169" = type { i64, i64, ptr }
%"class.JPH::AnyHitCollisionCollector.172" = type <{ %"class.JPH::CollisionCollector.173", [8 x i8], %"class.JPH::ShapeCastResult", i8, [15 x i8] }>
%"class.JPH::CollisionCollector.173" = type { ptr, float, ptr }
%"class.JPH::ShapeCastResult" = type <{ %"class.JPH::CollideShapeResult", float, i8, [11 x i8] }>
%"class.JPH::ClosestHitCollisionCollector.175" = type <{ %"class.JPH::CollisionCollector.173", [8 x i8], %"class.JPH::ShapeCastResult", i8, [15 x i8] }>
%"class.JPH::ClosestHitPerBodyCollisionCollector.177" = type <{ %"class.JPH::CollisionCollector.173", %"class.JPH::Array.169", float, i8, [3 x i8] }>
%"class.JPH::AllHitCollisionCollector.179" = type { %"class.JPH::CollisionCollector.173", %"class.JPH::Array.169" }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }
%"class.JPH::CollideSoftBodyVertexIterator" = type { %"class.JPH::StridedPtr", %"class.JPH::StridedPtr.180", %"class.JPH::StridedPtr.182", %"class.JPH::StridedPtr.184", %"class.JPH::StridedPtr.186" }
%"class.JPH::StridedPtr" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::StridedPtr.180" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::StridedPtr.182" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::StridedPtr.184" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::StridedPtr.186" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::AllHitCollisionCollector.188" = type { %"class.JPH::CollisionCollector.189", %"class.JPH::Array.190" }
%"class.JPH::CollisionCollector.189" = type { ptr, float, ptr }
%"class.JPH::Array.190" = type { i64, i64, ptr }
%"class.JPH::SphereShape" = type { %"class.JPH::ConvexShape.base", float }
%"class.JPH::ConvexShape.base" = type <{ %"class.JPH::Shape.base", [6 x i8], %"class.JPH::RefConst.76", float }>
%"class.JPH::Shape.base" = type <{ ptr, %"class.JPH::RefTarget.75", [4 x i8], i64, i8, i8 }>
%"class.JPH::RefTarget.75" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.76" = type { ptr }
%"struct.JPH::Shape::GetTrianglesContext" = type { [4288 x i8] }
%"struct.JPH::RayCast" = type { %"struct.JPH::RayCastT.193" }
%"struct.JPH::RayCastT.193" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::AllHitCollisionCollector.194" = type { %"class.JPH::CollisionCollector.195", %"class.JPH::Array.196" }
%"class.JPH::CollisionCollector.195" = type { ptr, float, ptr }
%"class.JPH::Array.196" = type { i64, i64, ptr }
%"class.JPH::AllHitCollisionCollector.199" = type { %"class.JPH::CollisionCollector.200", %"class.JPH::Array.43" }
%"class.JPH::CollisionCollector.200" = type { ptr, float, ptr }
%"class.JPH::Array.43" = type { i64, i64, ptr }
%"class.JPH::OrientedBox" = type { %"class.JPH::Mat44", %"class.JPH::Vec3" }
%"struct.JPH::AABoxCast" = type { %"class.JPH::AABox", %"class.JPH::Vec3" }
%"class.JPH::AllHitCollisionCollector.201" = type { %"class.JPH::CollisionCollector.202", %"class.JPH::Array.196" }
%"class.JPH::CollisionCollector.202" = type { ptr, float, ptr }
%struct.CameraState = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>
%class.SamplesApp = type <{ %class.Application, i32, float, i32, [4 x i8], ptr, ptr, ptr, %class.BPLayerInterfaceImpl, %class.ObjectVsBroadPhaseLayerFilterImpl, %class.ObjectLayerPairFilterImpl, ptr, ptr, %"struct.JPH::PhysicsSettings", [4 x i8], %"class.JPH::UnorderedMap", ptr, ptr, ptr, i32, i8, [3 x i8], float, i8, i8, i8, i8, %"class.JPH::Array", i32, i32, i32, i32, i8, [15 x i8], %"class.JPH::Vec3", i8, i8, i8, i8, float, i8, i8, i8, i8, i32, i8, [3 x i8], i32, float, i8, [3 x i8], float, float, i8, [7 x i8], %"class.JPH::Vec3", i8, [7 x i8], ptr, %"class.JPH::BodyID", [4 x i8], %"class.JPH::Ref", i32, float, float, i32, %"class.std::chrono::duration.3", [8 x i8] }>
%class.Application = type { ptr, [8 x i8], %struct.CameraState, %struct.CameraState, ptr, ptr, ptr, %"class.JPH::RefConst", ptr, ptr, ptr, ptr, %"class.std::__cxx11::basic_string", %"class.std::chrono::time_point", i8, i8, i8, i8, float, float, float, float, i32 }
%"class.JPH::RefConst" = type { ptr }
%"class.std::chrono::time_point" = type { %"class.std::chrono::duration" }
%"class.std::chrono::duration" = type { i64 }
%class.BPLayerInterfaceImpl = type <{ %"class.JPH::BroadPhaseLayerInterface", [2 x %"class.JPH::BroadPhaseLayer"], [6 x i8] }>
%"class.JPH::BroadPhaseLayerInterface" = type { ptr }
%class.ObjectVsBroadPhaseLayerFilterImpl = type { %"class.JPH::ObjectVsBroadPhaseLayerFilter" }
%"class.JPH::ObjectVsBroadPhaseLayerFilter" = type { ptr }
%class.ObjectLayerPairFilterImpl = type { %"class.JPH::ObjectLayerPairFilter" }
%"class.JPH::ObjectLayerPairFilter" = type { 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::UnorderedMap" = type { %"class.JPH::HashTable.base", [4 x i8] }
%"class.JPH::HashTable.base" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Ref" = type { ptr }
%"class.std::chrono::duration.3" = type { i64 }
%"class.JPH::CollidePointResult" = type { %"class.JPH::BodyID", %"class.JPH::SubShapeID" }

@_ZN16BroadPhaseLayersL6MOVINGE = external hidden constant %"class.JPH::BroadPhaseLayer", align 1
@_ZN3JPH5Color7sYellowE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color4sRedE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color7sOrangeE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color6sWhiteE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color5sGreyE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color6sGreenE = external global %"class.JPH::Color", align 4
@.str.150 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.151 = external hidden unnamed_addr constant [7 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

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

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

declare void @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ...) #4

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10SamplesApp16CreateProbeShapeEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::RefConst.74") align 8, ptr noundef nonnull align 16 dereferenceable(712)) #6 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272)) #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN10SamplesApp9CastProbeEfRfRN3JPH4Vec3ERNS1_6BodyIDE(ptr noundef nonnull align 16 dereferenceable(712) %0, float noundef %1, ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 16 dereferenceable(16) %3, ptr noundef nonnull align 4 dereferenceable(4) %4) #6 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca float, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::BodyID", align 4
  %21 = alloca i8, align 1
  %22 = alloca %"struct.JPH::RRayCast", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::RayCastResult", align 4
  %26 = alloca %"class.JPH::SpecifiedBroadPhaseLayerFilter", align 8
  %27 = alloca %"class.JPH::BroadPhaseLayer", align 1
  %28 = alloca %"class.JPH::SpecifiedObjectLayerFilter", align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca %"class.JPH::BodyFilter", align 8
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Color", align 4
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::Vec3", align 16
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Color", align 4
  %39 = alloca %"struct.JPH::RRayCast", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::RayCastResult", align 4
  %43 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %44 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %45 = alloca %"class.JPH::BodyFilter", align 8
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::BodyLockRead", align 8
  %48 = alloca ptr, align 8
  %49 = alloca %"class.JPH::Color", align 4
  %50 = alloca %"class.JPH::Vec3", align 16
  %51 = alloca %"class.JPH::Vec3", align 16
  %52 = alloca %"class.JPH::Color", align 4
  %53 = alloca %"class.JPH::Vec3", align 16
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca %"class.JPH::Vec3", align 16
  %56 = alloca %"class.JPH::Color", align 4
  %57 = alloca ptr, align 8
  %58 = alloca %"class.JPH::Vec3", align 16
  %59 = alloca %"class.std::basic_string_view", align 8
  %60 = alloca %"class.JPH::Color", align 4
  %61 = alloca %"class.JPH::Vec3", align 16
  %62 = alloca %"class.JPH::Vec3", align 16
  %63 = alloca %"class.JPH::Vec3", align 16
  %64 = alloca %"class.JPH::Vec3", align 16
  %65 = alloca %"class.JPH::Vec3", align 16
  %66 = alloca %"class.JPH::Color", align 4
  %67 = alloca %"class.JPH::Vec3", align 16
  %68 = alloca %"class.JPH::Vec3", align 16
  %69 = alloca %"class.JPH::Vec3", align 16
  %70 = alloca %"class.JPH::Vec3", align 16
  %71 = alloca %"class.JPH::Vec3", align 16
  %72 = alloca %"class.JPH::Vec3", align 16
  %73 = alloca %"class.JPH::Vec3", align 16
  %74 = alloca %"class.JPH::Vec3", align 16
  %75 = alloca %"class.JPH::Vec3", align 16
  %76 = alloca %"class.JPH::Color", align 4
  %77 = alloca %"class.JPH::Vec3", align 16
  %78 = alloca %"class.JPH::Vec3", align 16
  %79 = alloca %"class.JPH::Vec3", align 16
  %80 = alloca %"class.JPH::Vec3", align 16
  %81 = alloca %"class.JPH::Vec3", align 16
  %82 = alloca %"class.JPH::Vec3", align 16
  %83 = alloca %"class.JPH::Color", align 4
  %84 = alloca %"class.JPH::StaticArray.149", align 16
  %85 = alloca %"class.JPH::TransformedShape", align 16
  %86 = alloca %"class.JPH::Vec3", align 16
  %87 = alloca %"class.JPH::Vec3", align 16
  %88 = alloca %"class.JPH::Mat44", align 16
  %89 = alloca %"class.JPH::Vec3", align 16
  %90 = alloca %"class.JPH::Color", align 4
  %91 = alloca %"class.JPH::Vec3", align 16
  %92 = alloca %"class.JPH::Color", align 4
  %93 = alloca %"struct.JPH::RRayCast", align 16
  %94 = alloca %"class.JPH::Vec3", align 16
  %95 = alloca %"class.JPH::Vec3", align 16
  %96 = alloca %"class.JPH::RayCastSettings", align 1
  %97 = alloca %"class.JPH::Array.150", align 8
  %98 = alloca %"class.JPH::AnyHitCollisionCollector", align 8
  %99 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %100 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %101 = alloca %"class.JPH::BodyFilter", align 8
  %102 = alloca %"class.JPH::ShapeFilter", align 8
  %103 = alloca %"class.JPH::ClosestHitCollisionCollector", align 8
  %104 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %105 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %106 = alloca %"class.JPH::BodyFilter", align 8
  %107 = alloca %"class.JPH::ShapeFilter", align 8
  %108 = alloca %"class.JPH::ClosestHitPerBodyCollisionCollector", align 8
  %109 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %110 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %111 = alloca %"class.JPH::BodyFilter", align 8
  %112 = alloca %"class.JPH::ShapeFilter", align 8
  %113 = alloca %"class.JPH::AllHitCollisionCollector", align 8
  %114 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %115 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %116 = alloca %"class.JPH::BodyFilter", align 8
  %117 = alloca %"class.JPH::ShapeFilter", align 8
  %118 = alloca ptr, align 8
  %119 = alloca %"class.JPH::Vec3", align 16
  %120 = alloca %"class.JPH::Vec3", align 16
  %121 = alloca i8, align 1
  %122 = alloca ptr, align 8
  %123 = alloca ptr, align 8
  %124 = alloca ptr, align 8
  %125 = alloca ptr, align 8
  %126 = alloca %"class.JPH::Vec3", align 16
  %127 = alloca %"class.JPH::Vec3", align 16
  %128 = alloca %"class.JPH::Vec3", align 16
  %129 = alloca %"class.JPH::Color", align 4
  %130 = alloca %"class.JPH::BodyLockRead", align 8
  %131 = alloca ptr, align 8
  %132 = alloca ptr, align 8
  %133 = alloca %"class.JPH::Vec3", align 16
  %134 = alloca %"class.std::basic_string_view", align 8
  %135 = alloca %"class.JPH::Color", align 4
  %136 = alloca %"class.JPH::Color", align 4
  %137 = alloca %"class.JPH::Vec3", align 16
  %138 = alloca %"class.JPH::Vec3", align 16
  %139 = alloca %"class.JPH::Vec3", align 16
  %140 = alloca %"class.JPH::Vec3", align 16
  %141 = alloca %"class.JPH::Vec3", align 16
  %142 = alloca %"class.JPH::Color", align 4
  %143 = alloca %"class.JPH::Vec3", align 16
  %144 = alloca %"class.JPH::Vec3", align 16
  %145 = alloca %"class.JPH::Vec3", align 16
  %146 = alloca %"class.JPH::Vec3", align 16
  %147 = alloca %"class.JPH::Vec3", align 16
  %148 = alloca %"class.JPH::Vec3", align 16
  %149 = alloca %"class.JPH::Vec3", align 16
  %150 = alloca %"class.JPH::Vec3", align 16
  %151 = alloca %"class.JPH::Vec3", align 16
  %152 = alloca %"class.JPH::Color", align 4
  %153 = alloca %"class.JPH::Vec3", align 16
  %154 = alloca %"class.JPH::Vec3", align 16
  %155 = alloca %"class.JPH::Vec3", align 16
  %156 = alloca %"class.JPH::Vec3", align 16
  %157 = alloca %"class.JPH::Vec3", align 16
  %158 = alloca %"class.JPH::Vec3", align 16
  %159 = alloca %"class.JPH::Color", align 4
  %160 = alloca %"class.JPH::StaticArray.149", align 16
  %161 = alloca %"class.JPH::TransformedShape", align 16
  %162 = alloca %"class.JPH::Vec3", align 16
  %163 = alloca %"class.JPH::Vec3", align 16
  %164 = alloca %"class.JPH::Mat44", align 16
  %165 = alloca %"class.JPH::Vec3", align 16
  %166 = alloca %"class.JPH::Color", align 4
  %167 = alloca %"class.JPH::Vec3", align 16
  %168 = alloca %"class.JPH::Vec3", align 16
  %169 = alloca %"class.JPH::Vec3", align 16
  %170 = alloca %"class.JPH::Color", align 4
  %171 = alloca %"class.JPH::Vec3", align 16
  %172 = alloca %"class.JPH::Vec3", align 16
  %173 = alloca %"class.JPH::Vec3", align 16
  %174 = alloca %"class.JPH::Color", align 4
  %175 = alloca %"class.JPH::Vec3", align 16
  %176 = alloca %"class.JPH::Vec3", align 16
  %177 = alloca %"class.JPH::Color", align 4
  %178 = alloca float, align 4
  %179 = alloca %"class.JPH::Vec3", align 16
  %180 = alloca %"class.JPH::Vec3", align 16
  %181 = alloca %"class.JPH::Vec3", align 16
  %182 = alloca %"class.JPH::AllHitCollisionCollector.153", align 8
  %183 = alloca %"class.JPH::Vec3", align 16
  %184 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %185 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %186 = alloca %"class.JPH::BodyFilter", align 8
  %187 = alloca %"class.JPH::ShapeFilter", align 8
  %188 = alloca ptr, align 8
  %189 = alloca ptr, align 8
  %190 = alloca ptr, align 8
  %191 = alloca ptr, align 8
  %192 = alloca %"class.JPH::BodyLockRead", align 8
  %193 = alloca ptr, align 8
  %194 = alloca %"class.JPH::Color", align 4
  %195 = alloca %"class.JPH::Mat44", align 16
  %196 = alloca %"class.JPH::AABox", align 16
  %197 = alloca %"class.JPH::Color", align 4
  %198 = alloca %"class.JPH::Vec3", align 16
  %199 = alloca %"class.JPH::Color", align 4
  %200 = alloca %"class.JPH::RefConst.74", align 8
  %201 = alloca %"class.JPH::Mat44", align 16
  %202 = alloca %"class.JPH::Mat44", align 16
  %203 = alloca %"class.JPH::Vec3", align 16
  %204 = alloca %"class.JPH::Mat44", align 16
  %205 = alloca %"class.JPH::Vec3", align 16
  %206 = alloca %"class.JPH::Mat44", align 16
  %207 = alloca %"class.JPH::Vec3", align 16
  %208 = alloca %"class.JPH::Mat44", align 16
  %209 = alloca %"class.JPH::Mat44", align 16
  %210 = alloca %"class.JPH::Mat44", align 16
  %211 = alloca %"class.JPH::Vec3", align 16
  %212 = alloca %"class.JPH::Vec3", align 16
  %213 = alloca %"class.JPH::Vec3", align 16
  %214 = alloca %"class.JPH::CollideShapeSettings", align 16
  %215 = alloca { i64, i64 }, align 8
  %216 = alloca %"class.JPH::Array.158", align 8
  %217 = alloca %"class.JPH::AnyHitCollisionCollector.161", align 16
  %218 = alloca %"class.JPH::Vec3", align 16
  %219 = alloca %"class.JPH::Vec3", align 16
  %220 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %221 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %222 = alloca %"class.JPH::BodyFilter", align 8
  %223 = alloca %"class.JPH::ShapeFilter", align 8
  %224 = alloca %"class.JPH::ClosestHitCollisionCollector.164", align 16
  %225 = alloca %"class.JPH::Vec3", align 16
  %226 = alloca %"class.JPH::Vec3", align 16
  %227 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %228 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %229 = alloca %"class.JPH::BodyFilter", align 8
  %230 = alloca %"class.JPH::ShapeFilter", align 8
  %231 = alloca %"class.JPH::ClosestHitPerBodyCollisionCollector.166", align 8
  %232 = alloca %"class.JPH::Vec3", align 16
  %233 = alloca %"class.JPH::Vec3", align 16
  %234 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %235 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %236 = alloca %"class.JPH::BodyFilter", align 8
  %237 = alloca %"class.JPH::ShapeFilter", align 8
  %238 = alloca %"class.JPH::AllHitCollisionCollector.168", align 8
  %239 = alloca %"class.JPH::Vec3", align 16
  %240 = alloca %"class.JPH::Vec3", align 16
  %241 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %242 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %243 = alloca %"class.JPH::BodyFilter", align 8
  %244 = alloca %"class.JPH::ShapeFilter", align 8
  %245 = alloca ptr, align 8
  %246 = alloca ptr, align 8
  %247 = alloca ptr, align 8
  %248 = alloca ptr, align 8
  %249 = alloca %"class.JPH::BodyLockRead", align 8
  %250 = alloca ptr, align 8
  %251 = alloca %"class.JPH::Vec3", align 16
  %252 = alloca %"class.JPH::Vec3", align 16
  %253 = alloca %"class.JPH::Vec3", align 16
  %254 = alloca %"class.JPH::Vec3", align 16
  %255 = alloca %"class.JPH::Vec3", align 16
  %256 = alloca %"class.JPH::Color", align 4
  %257 = alloca %"class.JPH::Vec3", align 16
  %258 = alloca %"class.JPH::Color", align 4
  %259 = alloca %"class.JPH::Vec3", align 16
  %260 = alloca float, align 4
  %261 = alloca %"class.JPH::Vec3", align 16
  %262 = alloca %"class.JPH::Vec3", align 16
  %263 = alloca %"class.JPH::Vec3", align 16
  %264 = alloca %"class.JPH::Color", align 4
  %265 = alloca %"class.JPH::Vec3", align 16
  %266 = alloca %"class.JPH::Vec3", align 16
  %267 = alloca %"class.JPH::Vec3", align 16
  %268 = alloca %"class.JPH::Color", align 4
  %269 = alloca ptr, align 8
  %270 = alloca %"class.JPH::Vec3", align 16
  %271 = alloca %"class.std::basic_string_view", align 8
  %272 = alloca %"class.JPH::Color", align 4
  %273 = alloca %"class.JPH::Mat44", align 16
  %274 = alloca %"class.JPH::Vec3", align 16
  %275 = alloca %"class.JPH::Color", align 4
  %276 = alloca %"class.JPH::Mat44", align 16
  %277 = alloca %"class.JPH::Vec3", align 16
  %278 = alloca %"class.JPH::Color", align 4
  %279 = alloca %"class.JPH::RefConst.74", align 8
  %280 = alloca %"class.JPH::Mat44", align 16
  %281 = alloca %"class.JPH::Mat44", align 16
  %282 = alloca %"class.JPH::Vec3", align 16
  %283 = alloca %"class.JPH::Mat44", align 16
  %284 = alloca %"class.JPH::Vec3", align 16
  %285 = alloca %"struct.JPH::RShapeCast", align 16
  %286 = alloca %"class.JPH::Vec3", align 16
  %287 = alloca %"class.JPH::Mat44", align 16
  %288 = alloca %"class.JPH::Mat44", align 16
  %289 = alloca %"class.JPH::Vec3", align 16
  %290 = alloca %"class.JPH::Vec3", align 16
  %291 = alloca %"class.JPH::ShapeCastSettings", align 16
  %292 = alloca %"class.JPH::Array.169", align 8
  %293 = alloca %"class.JPH::AnyHitCollisionCollector.172", align 16
  %294 = alloca %"class.JPH::Vec3", align 16
  %295 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %296 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %297 = alloca %"class.JPH::BodyFilter", align 8
  %298 = alloca %"class.JPH::ShapeFilter", align 8
  %299 = alloca %"class.JPH::ClosestHitCollisionCollector.175", align 16
  %300 = alloca %"class.JPH::Vec3", align 16
  %301 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %302 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %303 = alloca %"class.JPH::BodyFilter", align 8
  %304 = alloca %"class.JPH::ShapeFilter", align 8
  %305 = alloca %"class.JPH::ClosestHitPerBodyCollisionCollector.177", align 8
  %306 = alloca %"class.JPH::Vec3", align 16
  %307 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %308 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %309 = alloca %"class.JPH::BodyFilter", align 8
  %310 = alloca %"class.JPH::ShapeFilter", align 8
  %311 = alloca %"class.JPH::AllHitCollisionCollector.179", align 8
  %312 = alloca %"class.JPH::Vec3", align 16
  %313 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %314 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %315 = alloca %"class.JPH::BodyFilter", align 8
  %316 = alloca %"class.JPH::ShapeFilter", align 8
  %317 = alloca ptr, align 8
  %318 = alloca %"class.JPH::Vec3", align 16
  %319 = alloca %"class.JPH::Vec3", align 16
  %320 = alloca i8, align 1
  %321 = alloca ptr, align 8
  %322 = alloca ptr, align 8
  %323 = alloca ptr, align 8
  %324 = alloca ptr, align 8
  %325 = alloca %"class.JPH::Vec3", align 16
  %326 = alloca %"class.JPH::Vec3", align 16
  %327 = alloca %"class.JPH::Vec3", align 16
  %328 = alloca %"class.JPH::Color", align 4
  %329 = alloca %"class.JPH::BodyLockRead", align 8
  %330 = alloca ptr, align 8
  %331 = alloca %"class.JPH::Color", align 4
  %332 = alloca %"class.JPH::Vec3", align 16
  %333 = alloca %"class.JPH::Vec3", align 16
  %334 = alloca %"class.JPH::Vec3", align 16
  %335 = alloca %"class.JPH::Vec3", align 16
  %336 = alloca %"class.JPH::Vec3", align 16
  %337 = alloca %"class.JPH::Vec3", align 16
  %338 = alloca %"class.JPH::Vec3", align 16
  %339 = alloca %"class.JPH::Vec3", align 16
  %340 = alloca %"class.JPH::Color", align 4
  %341 = alloca %"class.JPH::Vec3", align 16
  %342 = alloca %"class.JPH::Color", align 4
  %343 = alloca %"class.JPH::Vec3", align 16
  %344 = alloca %"class.JPH::Vec3", align 16
  %345 = alloca %"class.JPH::Vec3", align 16
  %346 = alloca %"class.JPH::Vec3", align 16
  %347 = alloca %"class.JPH::Vec3", align 16
  %348 = alloca %"class.JPH::Vec3", align 16
  %349 = alloca %"class.JPH::Vec3", align 16
  %350 = alloca %"class.JPH::Vec3", align 16
  %351 = alloca %"class.JPH::Vec3", align 16
  %352 = alloca %"class.JPH::Color", align 4
  %353 = alloca %"class.JPH::Vec3", align 16
  %354 = alloca %"class.JPH::Vec3", align 16
  %355 = alloca %"class.JPH::Vec3", align 16
  %356 = alloca %"class.JPH::Vec3", align 16
  %357 = alloca %"class.JPH::Vec3", align 16
  %358 = alloca %"class.JPH::Vec3", align 16
  %359 = alloca %"class.JPH::Color", align 4
  %360 = alloca ptr, align 8
  %361 = alloca %"class.JPH::Vec3", align 16
  %362 = alloca %"class.std::basic_string_view", align 8
  %363 = alloca %"class.JPH::Color", align 4
  %364 = alloca %"class.JPH::Mat44", align 16
  %365 = alloca %"class.JPH::Vec3", align 16
  %366 = alloca %"class.JPH::Color", align 4
  %367 = alloca %"class.JPH::Mat44", align 16
  %368 = alloca %"class.JPH::Vec3", align 16
  %369 = alloca %"class.JPH::Color", align 4
  %370 = alloca %"class.JPH::Vec3", align 16
  %371 = alloca %"class.JPH::Vec3", align 16
  %372 = alloca %"class.JPH::Vec3", align 16
  %373 = alloca %"class.JPH::Color", align 4
  %374 = alloca %"class.JPH::Vec3", align 16
  %375 = alloca %"class.JPH::Vec3", align 16
  %376 = alloca %"class.JPH::Vec3", align 16
  %377 = alloca %"class.JPH::Color", align 4
  %378 = alloca float, align 4
  %379 = alloca float, align 4
  %380 = alloca float, align 4
  %381 = alloca %"class.JPH::Vec3", align 16
  %382 = alloca %"class.JPH::Vec3", align 16
  %383 = alloca %"class.JPH::Plane", align 16
  %384 = alloca float, align 4
  %385 = alloca i32, align 4
  %386 = alloca %"class.JPH::CollideSoftBodyVertexIterator", align 8
  %387 = alloca %"class.JPH::StridedPtr", align 8
  %388 = alloca %"class.JPH::StridedPtr.180", align 8
  %389 = alloca %"class.JPH::StridedPtr.182", align 8
  %390 = alloca %"class.JPH::StridedPtr.184", align 8
  %391 = alloca %"class.JPH::StridedPtr.186", align 8
  %392 = alloca %"class.JPH::AABox", align 16
  %393 = alloca %"class.JPH::Vec3", align 16
  %394 = alloca %"class.JPH::Vec3", align 16
  %395 = alloca %"class.JPH::AllHitCollisionCollector.188", align 8
  %396 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %397 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %398 = alloca %"class.JPH::BodyFilter", align 8
  %399 = alloca %"class.JPH::ShapeFilter", align 8
  %400 = alloca %"class.JPH::Vec3", align 16
  %401 = alloca float, align 4
  %402 = alloca ptr, align 8
  %403 = alloca ptr, align 8
  %404 = alloca ptr, align 8
  %405 = alloca ptr, align 8
  %406 = alloca i32, align 4
  %407 = alloca %"class.JPH::Mat44", align 16
  %408 = alloca %"class.JPH::Mat44", align 16
  %409 = alloca %"class.JPH::Mat44", align 16
  %410 = alloca %"class.JPH::Vec3", align 16
  %411 = alloca %"class.JPH::Mat44", align 16
  %412 = alloca %"class.JPH::Vec3", align 16
  %413 = alloca %"class.JPH::SphereShape", align 8
  %414 = alloca %"class.JPH::CollideShapeSettings", align 16
  %415 = alloca %"class.JPH::ClosestHitCollisionCollector.164", align 16
  %416 = alloca %"class.JPH::Vec3", align 16
  %417 = alloca %"class.JPH::Mat44", align 16
  %418 = alloca %"class.JPH::Vec3", align 16
  %419 = alloca %"class.JPH::Vec3", align 16
  %420 = alloca %"class.JPH::Vec3", align 16
  %421 = alloca %"class.JPH::ShapeFilter", align 8
  %422 = alloca %"class.JPH::Vec3", align 16
  %423 = alloca %"class.JPH::Vec3", align 16
  %424 = alloca %"class.JPH::Color", align 4
  %425 = alloca %"class.JPH::Vec3", align 16
  %426 = alloca %"class.JPH::Vec3", align 16
  %427 = alloca %"class.JPH::Color", align 4
  %428 = alloca %"class.JPH::Vec3", align 16
  %429 = alloca %"class.JPH::Vec3", align 16
  %430 = alloca %"class.JPH::Vec3", align 16
  %431 = alloca %"class.JPH::Vec3", align 16
  %432 = alloca %"class.JPH::Vec3", align 16
  %433 = alloca %"class.JPH::Vec3", align 16
  %434 = alloca %"class.JPH::Vec3", align 16
  %435 = alloca %"class.JPH::Vec3", align 16
  %436 = alloca %"class.JPH::Color", align 4
  %437 = alloca %"class.JPH::Vec3", align 16
  %438 = alloca %"class.std::basic_string_view", align 8
  %439 = alloca %"class.std::__cxx11::basic_string", align 8
  %440 = alloca %"class.JPH::Color", align 4
  %441 = alloca %"class.JPH::Vec3", align 16
  %442 = alloca %"class.std::basic_string_view", align 8
  %443 = alloca %"class.std::__cxx11::basic_string", align 8
  %444 = alloca %"class.JPH::Color", align 4
  %445 = alloca float, align 4
  %446 = alloca %"class.JPH::Vec3", align 16
  %447 = alloca %"class.JPH::Vec3", align 16
  %448 = alloca %"class.JPH::Vec3", align 16
  %449 = alloca %"class.JPH::Vec3", align 16
  %450 = alloca %"class.JPH::Vec3", align 16
  %451 = alloca %"class.JPH::AABox", align 16
  %452 = alloca %"class.JPH::Vec3", align 16
  %453 = alloca %"class.JPH::Vec3", align 16
  %454 = alloca %"class.JPH::Vec3", align 16
  %455 = alloca %"class.JPH::Vec3", align 16
  %456 = alloca %"class.JPH::AllHitCollisionCollector.188", align 8
  %457 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %458 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %459 = alloca %"class.JPH::BodyFilter", align 8
  %460 = alloca %"class.JPH::ShapeFilter", align 8
  %461 = alloca ptr, align 8
  %462 = alloca ptr, align 8
  %463 = alloca ptr, align 8
  %464 = alloca ptr, align 8
  %465 = alloca %"class.JPH::Mat44", align 16
  %466 = alloca %"class.JPH::Mat44", align 16
  %467 = alloca %"class.JPH::Quat", align 16
  %468 = alloca %"class.JPH::Vec3", align 16
  %469 = alloca %"class.JPH::Mat44", align 16
  %470 = alloca %"class.JPH::Vec3", align 16
  %471 = alloca %"class.JPH::AABox", align 16
  %472 = alloca %"class.JPH::Color", align 4
  %473 = alloca %"class.JPH::Color", align 4
  %474 = alloca float, align 4
  %475 = alloca %"class.JPH::Vec3", align 16
  %476 = alloca %"class.JPH::Vec3", align 16
  %477 = alloca %"class.JPH::Vec3", align 16
  %478 = alloca %"class.JPH::Vec3", align 16
  %479 = alloca %"class.JPH::Vec3", align 16
  %480 = alloca %"class.JPH::AABox", align 16
  %481 = alloca %"class.JPH::Vec3", align 16
  %482 = alloca %"class.JPH::Vec3", align 16
  %483 = alloca %"class.JPH::Vec3", align 16
  %484 = alloca %"class.JPH::Vec3", align 16
  %485 = alloca %"class.JPH::AllHitCollisionCollector.188", align 8
  %486 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %487 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %488 = alloca %"class.JPH::BodyFilter", align 8
  %489 = alloca %"class.JPH::ShapeFilter", align 8
  %490 = alloca ptr, align 8
  %491 = alloca ptr, align 8
  %492 = alloca ptr, align 8
  %493 = alloca i32, align 4
  %494 = alloca ptr, align 8
  %495 = alloca i32, align 4
  %496 = alloca [96 x %"class.JPH::Float3"], align 16
  %497 = alloca [32 x ptr], align 16
  %498 = alloca %"struct.JPH::Shape::GetTrianglesContext", align 16
  %499 = alloca %"class.JPH::Vec3", align 16
  %500 = alloca i32, align 4
  %501 = alloca ptr, align 8
  %502 = alloca ptr, align 8
  %503 = alloca ptr, align 8
  %504 = alloca %"class.JPH::Vec3", align 16
  %505 = alloca %"class.JPH::Vec3", align 16
  %506 = alloca %"class.JPH::Vec3", align 16
  %507 = alloca %"class.JPH::Vec3", align 16
  %508 = alloca %"class.JPH::Vec3", align 16
  %509 = alloca %"class.JPH::Vec3", align 16
  %510 = alloca %"class.JPH::Vec3", align 16
  %511 = alloca %"class.JPH::Vec3", align 16
  %512 = alloca %"class.JPH::Vec3", align 16
  %513 = alloca %"class.JPH::Vec3", align 16
  %514 = alloca %"class.JPH::Vec3", align 16
  %515 = alloca %"class.JPH::Vec3", align 16
  %516 = alloca %"class.JPH::Vec3", align 16
  %517 = alloca %"class.JPH::Vec3", align 16
  %518 = alloca %"class.JPH::Vec3", align 16
  %519 = alloca %"class.JPH::Vec3", align 16
  %520 = alloca %"class.JPH::Vec3", align 16
  %521 = alloca %"class.JPH::Vec3", align 16
  %522 = alloca %"class.JPH::Vec3", align 16
  %523 = alloca %"class.JPH::Vec3", align 16
  %524 = alloca %"class.JPH::Color", align 4
  %525 = alloca %"class.JPH::Vec3", align 16
  %526 = alloca %"class.JPH::Vec3", align 16
  %527 = alloca %"class.JPH::Vec3", align 16
  %528 = alloca %"class.JPH::Color", align 4
  %529 = alloca %"class.JPH::Color", align 4
  %530 = alloca %"struct.JPH::RayCast", align 16
  %531 = alloca %"class.JPH::Vec3", align 16
  %532 = alloca %"class.JPH::Vec3", align 16
  %533 = alloca %"class.JPH::AllHitCollisionCollector.194", align 8
  %534 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %535 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %536 = alloca %"class.JPH::Vec3", align 16
  %537 = alloca i8, align 1
  %538 = alloca ptr, align 8
  %539 = alloca ptr, align 8
  %540 = alloca ptr, align 8
  %541 = alloca ptr, align 8
  %542 = alloca %"class.JPH::Vec3", align 16
  %543 = alloca %"class.JPH::Vec3", align 16
  %544 = alloca %"class.JPH::Vec3", align 16
  %545 = alloca %"class.JPH::Color", align 4
  %546 = alloca %"class.JPH::Vec3", align 16
  %547 = alloca %"class.JPH::Vec3", align 16
  %548 = alloca %"class.JPH::Color", align 4
  %549 = alloca %"class.JPH::Vec3", align 16
  %550 = alloca %"class.JPH::Color", align 4
  %551 = alloca %"class.JPH::BodyLockRead", align 8
  %552 = alloca ptr, align 8
  %553 = alloca %"class.JPH::Color", align 4
  %554 = alloca %"class.JPH::Mat44", align 16
  %555 = alloca %"class.JPH::AABox", align 16
  %556 = alloca %"class.JPH::Color", align 4
  %557 = alloca %"class.JPH::Vec3", align 16
  %558 = alloca %"class.JPH::Vec3", align 16
  %559 = alloca %"class.JPH::Vec3", align 16
  %560 = alloca %"class.JPH::Vec3", align 16
  %561 = alloca %"class.JPH::Vec3", align 16
  %562 = alloca %"class.JPH::Color", align 4
  %563 = alloca %"class.JPH::Vec3", align 16
  %564 = alloca %"class.JPH::Vec3", align 16
  %565 = alloca %"class.JPH::Vec3", align 16
  %566 = alloca %"class.JPH::Color", align 4
  %567 = alloca %"class.JPH::Vec3", align 16
  %568 = alloca %"class.JPH::Vec3", align 16
  %569 = alloca %"class.JPH::Color", align 4
  %570 = alloca float, align 4
  %571 = alloca %"class.JPH::Vec3", align 16
  %572 = alloca %"class.JPH::Vec3", align 16
  %573 = alloca %"class.JPH::Vec3", align 16
  %574 = alloca %"class.JPH::Vec3", align 16
  %575 = alloca %"class.JPH::Vec3", align 16
  %576 = alloca %"class.JPH::AABox", align 16
  %577 = alloca %"class.JPH::Vec3", align 16
  %578 = alloca %"class.JPH::Vec3", align 16
  %579 = alloca %"class.JPH::Vec3", align 16
  %580 = alloca %"class.JPH::Vec3", align 16
  %581 = alloca %"class.JPH::AllHitCollisionCollector.199", align 8
  %582 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %583 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %584 = alloca ptr, align 8
  %585 = alloca ptr, align 8
  %586 = alloca ptr, align 8
  %587 = alloca ptr, align 8
  %588 = alloca %"class.JPH::BodyLockRead", align 8
  %589 = alloca ptr, align 8
  %590 = alloca %"class.JPH::Color", align 4
  %591 = alloca %"class.JPH::Mat44", align 16
  %592 = alloca %"class.JPH::AABox", align 16
  %593 = alloca %"class.JPH::Color", align 4
  %594 = alloca %"class.JPH::Color", align 4
  %595 = alloca float, align 4
  %596 = alloca float, align 4
  %597 = alloca %"class.JPH::Vec3", align 16
  %598 = alloca %"class.JPH::Vec3", align 16
  %599 = alloca %"class.JPH::Vec3", align 16
  %600 = alloca %"class.JPH::AllHitCollisionCollector.199", align 8
  %601 = alloca %"class.JPH::Vec3", align 16
  %602 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %603 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %604 = alloca ptr, align 8
  %605 = alloca ptr, align 8
  %606 = alloca ptr, align 8
  %607 = alloca ptr, align 8
  %608 = alloca %"class.JPH::BodyLockRead", align 8
  %609 = alloca ptr, align 8
  %610 = alloca %"class.JPH::Color", align 4
  %611 = alloca %"class.JPH::Mat44", align 16
  %612 = alloca %"class.JPH::AABox", align 16
  %613 = alloca %"class.JPH::Color", align 4
  %614 = alloca %"class.JPH::Vec3", align 16
  %615 = alloca %"class.JPH::Color", align 4
  %616 = alloca float, align 4
  %617 = alloca %"class.JPH::Vec3", align 16
  %618 = alloca %"class.JPH::Vec3", align 16
  %619 = alloca %"class.JPH::Vec3", align 16
  %620 = alloca %"class.JPH::AllHitCollisionCollector.199", align 8
  %621 = alloca %"class.JPH::Vec3", align 16
  %622 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %623 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %624 = alloca ptr, align 8
  %625 = alloca ptr, align 8
  %626 = alloca ptr, align 8
  %627 = alloca ptr, align 8
  %628 = alloca %"class.JPH::BodyLockRead", align 8
  %629 = alloca ptr, align 8
  %630 = alloca %"class.JPH::Color", align 4
  %631 = alloca %"class.JPH::Mat44", align 16
  %632 = alloca %"class.JPH::AABox", align 16
  %633 = alloca %"class.JPH::Color", align 4
  %634 = alloca %"class.JPH::Vec3", align 16
  %635 = alloca %"class.JPH::Color", align 4
  %636 = alloca float, align 4
  %637 = alloca %"class.JPH::Vec3", align 16
  %638 = alloca %"class.JPH::Vec3", align 16
  %639 = alloca %"class.JPH::Vec3", align 16
  %640 = alloca %"class.JPH::Vec3", align 16
  %641 = alloca %"class.JPH::Vec3", align 16
  %642 = alloca %"class.JPH::OrientedBox", align 16
  %643 = alloca %"class.JPH::Mat44", align 16
  %644 = alloca %"class.JPH::Quat", align 16
  %645 = alloca %"class.JPH::Quat", align 16
  %646 = alloca %"class.JPH::Vec3", align 16
  %647 = alloca %"class.JPH::Quat", align 16
  %648 = alloca %"class.JPH::Vec3", align 16
  %649 = alloca %"class.JPH::Vec3", align 16
  %650 = alloca %"class.JPH::Vec3", align 16
  %651 = alloca %"class.JPH::AllHitCollisionCollector.199", align 8
  %652 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %653 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %654 = alloca ptr, align 8
  %655 = alloca ptr, align 8
  %656 = alloca ptr, align 8
  %657 = alloca ptr, align 8
  %658 = alloca %"class.JPH::BodyLockRead", align 8
  %659 = alloca ptr, align 8
  %660 = alloca %"class.JPH::Color", align 4
  %661 = alloca %"class.JPH::Mat44", align 16
  %662 = alloca %"class.JPH::AABox", align 16
  %663 = alloca %"class.JPH::Color", align 4
  %664 = alloca %"class.JPH::Color", align 4
  %665 = alloca %"class.JPH::Vec3", align 16
  %666 = alloca %"class.JPH::Vec3", align 16
  %667 = alloca %"class.JPH::AABox", align 16
  %668 = alloca %"class.JPH::Vec3", align 16
  %669 = alloca %"class.JPH::Vec3", align 16
  %670 = alloca %"class.JPH::Vec3", align 16
  %671 = alloca %"class.JPH::Vec3", align 16
  %672 = alloca %"struct.JPH::AABoxCast", align 16
  %673 = alloca %"class.JPH::AllHitCollisionCollector.201", align 8
  %674 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %675 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %676 = alloca %"class.JPH::Vec3", align 16
  %677 = alloca i8, align 1
  %678 = alloca ptr, align 8
  %679 = alloca ptr, align 8
  %680 = alloca ptr, align 8
  %681 = alloca ptr, align 8
  %682 = alloca %"class.JPH::Vec3", align 16
  %683 = alloca %"class.JPH::Vec3", align 16
  %684 = alloca %"class.JPH::Vec3", align 16
  %685 = alloca %"class.JPH::Color", align 4
  %686 = alloca %"class.JPH::Vec3", align 16
  %687 = alloca %"class.JPH::Vec3", align 16
  %688 = alloca %"class.JPH::Color", align 4
  %689 = alloca %"class.JPH::Mat44", align 16
  %690 = alloca %"class.JPH::Vec3", align 16
  %691 = alloca %"class.JPH::AABox", align 16
  %692 = alloca %"class.JPH::Vec3", align 16
  %693 = alloca %"class.JPH::Vec3", align 16
  %694 = alloca %"class.JPH::Color", align 4
  %695 = alloca %"class.JPH::BodyLockRead", align 8
  %696 = alloca ptr, align 8
  %697 = alloca %"class.JPH::Color", align 4
  %698 = alloca %"class.JPH::Mat44", align 16
  %699 = alloca %"class.JPH::AABox", align 16
  %700 = alloca %"class.JPH::Color", align 4
  %701 = alloca %"class.JPH::Vec3", align 16
  %702 = alloca %"class.JPH::Vec3", align 16
  %703 = alloca %"class.JPH::Vec3", align 16
  %704 = alloca %"class.JPH::Vec3", align 16
  %705 = alloca %"class.JPH::Vec3", align 16
  %706 = alloca %"class.JPH::Color", align 4
  %707 = alloca %"class.JPH::Vec3", align 16
  %708 = alloca %"class.JPH::Vec3", align 16
  %709 = alloca %"class.JPH::Vec3", align 16
  %710 = alloca %"class.JPH::Color", align 4
  %711 = alloca %"class.JPH::Mat44", align 16
  %712 = alloca %"class.JPH::Vec3", align 16
  %713 = alloca %"class.JPH::Vec3", align 16
  %714 = alloca %"class.JPH::AABox", align 16
  %715 = alloca %"class.JPH::Vec3", align 16
  %716 = alloca %"class.JPH::Vec3", align 16
  %717 = alloca %"class.JPH::Color", align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store float %1, ptr %7, align 4, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  %718 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #12
  %719 = call noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272) %718)
  store ptr %719, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #12
  %720 = load ptr, ptr %11, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.CameraState, ptr %720, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %12, ptr align 16 %721, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #12
  %722 = load float, ptr %7, align 4, !tbaa !9
  %723 = load ptr, ptr %11, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.CameraState, ptr %723, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %14, ptr align 16 %724, i64 16, i1 false), !tbaa.struct !11
  %725 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %726 = load double, ptr %725, align 16
  %727 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %728 = load double, ptr %727, align 8
  %729 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %722, double %726, double %728)
  %730 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i32 0, i32 0
  %731 = getelementptr inbounds %union.anon, ptr %730, i32 0, i32 0
  %732 = getelementptr inbounds { double, double }, ptr %731, i32 0, i32 0
  %733 = extractvalue { double, double } %729, 0
  store double %733, ptr %732, align 16
  %734 = getelementptr inbounds { double, double }, ptr %731, i32 0, i32 1
  %735 = extractvalue { double, double } %729, 1
  store double %735, ptr %734, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %17, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %736 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %737 = load double, ptr %736, align 16
  %738 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %739 = load double, ptr %738, align 8
  %740 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 5.000000e-01, double %737, double %739)
  %741 = getelementptr inbounds %"class.JPH::Vec3", ptr %16, i32 0, i32 0
  %742 = getelementptr inbounds %union.anon, ptr %741, i32 0, i32 0
  %743 = getelementptr inbounds { double, double }, ptr %742, i32 0, i32 0
  %744 = extractvalue { double, double } %740, 0
  store double %744, ptr %743, align 16
  %745 = getelementptr inbounds { double, double }, ptr %742, i32 0, i32 1
  %746 = extractvalue { double, double } %740, 1
  store double %746, ptr %745, align 8
  %747 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 0
  %748 = load double, ptr %747, align 16
  %749 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 1
  %750 = load double, ptr %749, align 8
  %751 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %748, double %750)
  %752 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i32 0, i32 0
  %753 = getelementptr inbounds %union.anon, ptr %752, i32 0, i32 0
  %754 = getelementptr inbounds { double, double }, ptr %753, i32 0, i32 0
  %755 = extractvalue { double, double } %751, 0
  store double %755, ptr %754, align 16
  %756 = getelementptr inbounds { double, double }, ptr %753, i32 0, i32 1
  %757 = extractvalue { double, double } %751, 1
  store double %757, ptr %756, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %19, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %758 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %759 = load double, ptr %758, align 16
  %760 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %761 = load double, ptr %760, align 8
  %762 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %759, double %761)
  %763 = getelementptr inbounds %"class.JPH::Vec3", ptr %18, i32 0, i32 0
  %764 = getelementptr inbounds %union.anon, ptr %763, i32 0, i32 0
  %765 = getelementptr inbounds { double, double }, ptr %764, i32 0, i32 0
  %766 = extractvalue { double, double } %762, 0
  store double %766, ptr %765, align 16
  %767 = getelementptr inbounds { double, double }, ptr %764, i32 0, i32 1
  %768 = extractvalue { double, double } %762, 1
  store double %768, ptr %767, align 8
  %769 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %769, ptr align 16 %18, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #12
  %770 = load ptr, ptr %8, align 8, !tbaa !5
  store float 1.000000e+00, ptr %770, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #12
  call void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %20)
  %771 = load ptr, ptr %10, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %771, ptr align 4 %20, i64 4, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #12
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #12
  store i8 0, ptr %21, align 1, !tbaa !16
  %772 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 30
  %773 = load i32, ptr %772, align 8, !tbaa !18
  switch i32 %773, label %6190 [
    i32 0, label %774
    i32 1, label %866
    i32 2, label %1296
    i32 3, label %2028
    i32 4, label %2192
    i32 5, label %2192
    i32 6, label %2889
    i32 7, label %3721
    i32 8, label %4162
    i32 9, label %4344
    i32 10, label %4721
    i32 11, label %5038
    i32 12, label %5232
    i32 13, label %5397
    i32 14, label %5557
    i32 15, label %5783
  ]

774:                                              ; preds = %5
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %23, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %24, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %775 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %776 = load double, ptr %775, align 16
  %777 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %778 = load double, ptr %777, align 8
  %779 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 0
  %780 = load double, ptr %779, align 16
  %781 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 1
  %782 = load double, ptr %781, align 8
  call void @_ZN3JPH8RRayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %22, double %776, double %778, double %780, double %782)
  call void @llvm.lifetime.start.p0(i64 12, ptr %25) #12
  call void @_ZN3JPH13RayCastResultC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %25)
  %783 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %784 = load ptr, ptr %783, align 8, !tbaa !50
  %785 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %784)
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %27, ptr align 1 @_ZN16BroadPhaseLayersL6MOVINGE, i64 1, i1 false), !tbaa.struct !51
  %786 = getelementptr inbounds %"class.JPH::BroadPhaseLayer", ptr %27, i32 0, i32 0
  %787 = load i8, ptr %786, align 1
  call void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9) %26, i8 %787)
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #12
  invoke void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10) %28, i16 noundef zeroext 1)
          to label %788 unwind label %820

788:                                              ; preds = %774
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #12
  call void @llvm.memset.p0.i64(ptr align 8 %31, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #12
  %789 = invoke noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16) %785, ptr noundef nonnull align 16 dereferenceable(32) %22, ptr noundef nonnull align 4 dereferenceable(12) %25, ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %31)
          to label %790 unwind label %824

790:                                              ; preds = %788
  %791 = zext i1 %789 to i8
  store i8 %791, ptr %21, align 1, !tbaa !16
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %28) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %26) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #12
  %792 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %25, i32 0, i32 1
  %793 = load float, ptr %792, align 4, !tbaa !52
  %794 = call { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %22, float noundef %793)
  %795 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i32 0, i32 0
  %796 = getelementptr inbounds %union.anon, ptr %795, i32 0, i32 0
  %797 = getelementptr inbounds { double, double }, ptr %796, i32 0, i32 0
  %798 = extractvalue { double, double } %794, 0
  store double %798, ptr %797, align 16
  %799 = getelementptr inbounds { double, double }, ptr %796, i32 0, i32 1
  %800 = extractvalue { double, double } %794, 1
  store double %800, ptr %799, align 8
  %801 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %801, ptr align 16 %32, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #12
  %802 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %25, i32 0, i32 1
  %803 = load float, ptr %802, align 4, !tbaa !52
  %804 = load ptr, ptr %8, align 8, !tbaa !5
  store float %803, ptr %804, align 4, !tbaa !9
  %805 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %25, i32 0, i32 0
  %806 = load ptr, ptr %10, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %806, ptr align 4 %805, i64 4, i1 false), !tbaa.struct !13
  %807 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %808 = trunc i8 %807 to i1
  br i1 %808, label %809, label %829

809:                                              ; preds = %790
  %810 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %811 = load ptr, ptr %810, align 16, !tbaa !56
  %812 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %33, ptr align 16 %812, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 @_ZN3JPH5Color7sYellowE, i64 4, i1 false), !tbaa.struct !57
  %813 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 0
  %814 = load double, ptr %813, align 16
  %815 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 1
  %816 = load double, ptr %815, align 8
  %817 = getelementptr inbounds %"class.JPH::Color", ptr %34, i32 0, i32 0
  %818 = getelementptr inbounds %union.anon.62, ptr %817, i32 0, i32 0
  %819 = load i32, ptr %818, align 4
  call void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %811, double %814, double %816, i32 %819, float noundef 0x3FB99999A0000000)
  br label %865

820:                                              ; preds = %774
  %821 = landingpad { ptr, i32 }
          cleanup
  %822 = extractvalue { ptr, i32 } %821, 0
  store ptr %822, ptr %29, align 8
  %823 = extractvalue { ptr, i32 } %821, 1
  store i32 %823, ptr %30, align 4
  br label %828

824:                                              ; preds = %788
  %825 = landingpad { ptr, i32 }
          cleanup
  %826 = extractvalue { ptr, i32 } %825, 0
  store ptr %826, ptr %29, align 8
  %827 = extractvalue { ptr, i32 } %825, 1
  store i32 %827, ptr %30, align 4
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %28) #12
  br label %828

828:                                              ; preds = %824, %820
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %26) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #12
  br label %6193

829:                                              ; preds = %790
  %830 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %831 = load ptr, ptr %830, align 16, !tbaa !56
  %832 = load ptr, ptr %11, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.CameraState, ptr %832, i32 0, i32 0
  %834 = load ptr, ptr %11, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.CameraState, ptr %834, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %37, ptr align 16 %835, i64 16, i1 false), !tbaa.struct !11
  %836 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %837 = load double, ptr %836, align 16
  %838 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %839 = load double, ptr %838, align 8
  %840 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %837, double %839)
  %841 = getelementptr inbounds %"class.JPH::Vec3", ptr %36, i32 0, i32 0
  %842 = getelementptr inbounds %union.anon, ptr %841, i32 0, i32 0
  %843 = getelementptr inbounds { double, double }, ptr %842, i32 0, i32 0
  %844 = extractvalue { double, double } %840, 0
  store double %844, ptr %843, align 16
  %845 = getelementptr inbounds { double, double }, ptr %842, i32 0, i32 1
  %846 = extractvalue { double, double } %840, 1
  store double %846, ptr %845, align 8
  %847 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %848 = load double, ptr %847, align 16
  %849 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %850 = load double, ptr %849, align 8
  %851 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %833, double %848, double %850)
  %852 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %853 = getelementptr inbounds %union.anon, ptr %852, i32 0, i32 0
  %854 = getelementptr inbounds { double, double }, ptr %853, i32 0, i32 0
  %855 = extractvalue { double, double } %851, 0
  store double %855, ptr %854, align 16
  %856 = getelementptr inbounds { double, double }, ptr %853, i32 0, i32 1
  %857 = extractvalue { double, double } %851, 1
  store double %857, ptr %856, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %38, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %858 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %859 = load double, ptr %858, align 16
  %860 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %861 = load double, ptr %860, align 8
  %862 = getelementptr inbounds %"class.JPH::Color", ptr %38, i32 0, i32 0
  %863 = getelementptr inbounds %union.anon.62, ptr %862, i32 0, i32 0
  %864 = load i32, ptr %863, align 4
  call void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %831, double %859, double %861, i32 %864, float noundef 0x3F50624DE0000000)
  br label %865

865:                                              ; preds = %829, %809
  call void @llvm.lifetime.end.p0(i64 12, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #12
  br label %6190

866:                                              ; preds = %5
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %40, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %41, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %867 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %868 = load double, ptr %867, align 16
  %869 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %870 = load double, ptr %869, align 8
  %871 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %872 = load double, ptr %871, align 16
  %873 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %874 = load double, ptr %873, align 8
  call void @_ZN3JPH8RRayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %39, double %868, double %870, double %872, double %874)
  call void @llvm.lifetime.start.p0(i64 12, ptr %42) #12
  call void @_ZN3JPH13RayCastResultC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %42)
  %875 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %876 = load ptr, ptr %875, align 8, !tbaa !50
  %877 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %876)
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #12
  call void @llvm.memset.p0.i64(ptr align 8 %43, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %43) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #12
  call void @llvm.memset.p0.i64(ptr align 8 %44, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #12
  call void @llvm.memset.p0.i64(ptr align 8 %45, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %45) #12
  %878 = invoke noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16) %877, ptr noundef nonnull align 16 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(12) %42, ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(8) %45)
          to label %879 unwind label %1224

879:                                              ; preds = %866
  %880 = zext i1 %878 to i8
  store i8 %880, ptr %21, align 1, !tbaa !16
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %45) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %43) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #12
  %881 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %42, i32 0, i32 1
  %882 = load float, ptr %881, align 4, !tbaa !52
  %883 = call { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %39, float noundef %882)
  %884 = getelementptr inbounds %"class.JPH::Vec3", ptr %46, i32 0, i32 0
  %885 = getelementptr inbounds %union.anon, ptr %884, i32 0, i32 0
  %886 = getelementptr inbounds { double, double }, ptr %885, i32 0, i32 0
  %887 = extractvalue { double, double } %883, 0
  store double %887, ptr %886, align 16
  %888 = getelementptr inbounds { double, double }, ptr %885, i32 0, i32 1
  %889 = extractvalue { double, double } %883, 1
  store double %889, ptr %888, align 8
  %890 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %890, ptr align 16 %46, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #12
  %891 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %42, i32 0, i32 1
  %892 = load float, ptr %891, align 4, !tbaa !52
  %893 = load ptr, ptr %8, align 8, !tbaa !5
  store float %892, ptr %893, align 4, !tbaa !9
  %894 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %42, i32 0, i32 0
  %895 = load ptr, ptr %10, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %895, ptr align 4 %894, i64 4, i1 false), !tbaa.struct !13
  %896 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %897 = trunc i8 %896 to i1
  br i1 %897, label %898, label %1283

898:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #12
  %899 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %900 = load ptr, ptr %899, align 8, !tbaa !50
  %901 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %900)
  %902 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %42, i32 0, i32 0
  call void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(16) %901, ptr noundef nonnull align 4 dereferenceable(4) %902)
  %903 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %47)
          to label %904 unwind label %1228

904:                                              ; preds = %898
  br i1 %903, label %905, label %1281

905:                                              ; preds = %904
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #12
  %906 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %47)
          to label %907 unwind label %1232

907:                                              ; preds = %905
  store ptr %906, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #12
  %908 = load ptr, ptr %48, align 8, !tbaa !5
  %909 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %908)
          to label %910 unwind label %1236

910:                                              ; preds = %907
  br i1 %909, label %911, label %912

911:                                              ; preds = %910
  br label %913

912:                                              ; preds = %910
  br label %913

913:                                              ; preds = %912, %911
  %914 = phi ptr [ @_ZN3JPH5Color7sYellowE, %911 ], [ @_ZN3JPH5Color7sOrangeE, %912 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %49, ptr align 4 %914, i64 4, i1 false), !tbaa.struct !57
  %915 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %916 = load ptr, ptr %915, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %50, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  %917 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %51, ptr align 16 %917, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %52, ptr align 4 %49, i64 4, i1 false), !tbaa.struct !57
  %918 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 0
  %919 = load double, ptr %918, align 16
  %920 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 1
  %921 = load double, ptr %920, align 8
  %922 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 0
  %923 = load double, ptr %922, align 16
  %924 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 1
  %925 = load double, ptr %924, align 8
  %926 = getelementptr inbounds %"class.JPH::Color", ptr %52, i32 0, i32 0
  %927 = getelementptr inbounds %union.anon.62, ptr %926, i32 0, i32 0
  %928 = load i32, ptr %927, align 4
  %929 = load ptr, ptr %916, align 8, !tbaa !58
  %930 = getelementptr inbounds ptr, ptr %929, i64 2
  %931 = load ptr, ptr %930, align 8
  invoke void %931(ptr noundef nonnull align 8 dereferenceable(320) %916, double %919, double %921, double %923, double %925, i32 %928)
          to label %932 unwind label %1236

932:                                              ; preds = %913
  %933 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %934 = load ptr, ptr %933, align 16, !tbaa !56
  %935 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %53, ptr align 16 %935, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %55, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %936 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 0
  %937 = load double, ptr %936, align 16
  %938 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 1
  %939 = load double, ptr %938, align 8
  %940 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %937, double %939)
          to label %941 unwind label %1236

941:                                              ; preds = %932
  %942 = getelementptr inbounds %"class.JPH::Vec3", ptr %54, i32 0, i32 0
  %943 = getelementptr inbounds %union.anon, ptr %942, i32 0, i32 0
  %944 = getelementptr inbounds { double, double }, ptr %943, i32 0, i32 0
  %945 = extractvalue { double, double } %940, 0
  store double %945, ptr %944, align 16
  %946 = getelementptr inbounds { double, double }, ptr %943, i32 0, i32 1
  %947 = extractvalue { double, double } %940, 1
  store double %947, ptr %946, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %56, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %948 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 0
  %949 = load double, ptr %948, align 16
  %950 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 1
  %951 = load double, ptr %950, align 8
  %952 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 0
  %953 = load double, ptr %952, align 16
  %954 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 1
  %955 = load double, ptr %954, align 8
  %956 = getelementptr inbounds %"class.JPH::Color", ptr %56, i32 0, i32 0
  %957 = getelementptr inbounds %union.anon.62, ptr %956, i32 0, i32 0
  %958 = load i32, ptr %957, align 4
  %959 = load ptr, ptr %934, align 8, !tbaa !58
  %960 = getelementptr inbounds ptr, ptr %959, i64 2
  %961 = load ptr, ptr %960, align 8
  invoke void %961(ptr noundef nonnull align 8 dereferenceable(320) %934, double %949, double %951, double %953, double %955, i32 %958)
          to label %962 unwind label %1236

962:                                              ; preds = %941
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #12
  %963 = load ptr, ptr %48, align 8, !tbaa !5
  %964 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %963)
          to label %965 unwind label %1240

965:                                              ; preds = %962
  %966 = getelementptr inbounds %"class.JPH::RayCastResult", ptr %42, i32 0, i32 1
  %967 = load ptr, ptr %964, align 8, !tbaa !58
  %968 = getelementptr inbounds ptr, ptr %967, i64 10
  %969 = load ptr, ptr %968, align 8
  %970 = invoke noundef ptr %969(ptr noundef nonnull align 8 dereferenceable(26) %964, ptr noundef nonnull align 4 dereferenceable(4) %966)
          to label %971 unwind label %1240

971:                                              ; preds = %965
  store ptr %970, ptr %57, align 8, !tbaa !5
  %972 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %973 = load ptr, ptr %972, align 16, !tbaa !56
  %974 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %58, ptr align 16 %974, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #12
  %975 = load ptr, ptr %57, align 8, !tbaa !5
  %976 = load ptr, ptr %975, align 8, !tbaa !58
  %977 = getelementptr inbounds ptr, ptr %976, i64 4
  %978 = load ptr, ptr %977, align 8
  %979 = invoke noundef ptr %978(ptr noundef nonnull align 8 dereferenceable(12) %975)
          to label %980 unwind label %1244

980:                                              ; preds = %971
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %59, ptr noundef %979) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %60, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !57
  %981 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 0
  %982 = load double, ptr %981, align 16
  %983 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 1
  %984 = load double, ptr %983, align 8
  %985 = getelementptr inbounds %"class.JPH::Color", ptr %60, i32 0, i32 0
  %986 = getelementptr inbounds %union.anon.62, ptr %985, i32 0, i32 0
  %987 = load i32, ptr %986, align 4
  %988 = load ptr, ptr %973, align 8, !tbaa !58
  %989 = getelementptr inbounds ptr, ptr %988, i64 7
  %990 = load ptr, ptr %989, align 8
  invoke void %990(ptr noundef nonnull align 8 dereferenceable(320) %973, double %982, double %984, ptr noundef nonnull align 8 dereferenceable(16) %59, i32 %987, float noundef 5.000000e-01)
          to label %991 unwind label %1244

991:                                              ; preds = %980
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #12
  %992 = load ptr, ptr %48, align 8, !tbaa !5
  %993 = getelementptr inbounds %"class.JPH::RayCastResult", ptr %42, i32 0, i32 1
  %994 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %62, ptr align 16 %994, i64 16, i1 false), !tbaa.struct !11
  %995 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 0
  %996 = load double, ptr %995, align 16
  %997 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 1
  %998 = load double, ptr %997, align 8
  %999 = invoke { double, double } @_ZNK3JPH4Body26GetWorldSpaceSurfaceNormalERKNS_10SubShapeIDENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %992, ptr noundef nonnull align 4 dereferenceable(4) %993, double %996, double %998)
          to label %1000 unwind label %1248

1000:                                             ; preds = %991
  %1001 = getelementptr inbounds %"class.JPH::Vec3", ptr %61, i32 0, i32 0
  %1002 = getelementptr inbounds %union.anon, ptr %1001, i32 0, i32 0
  %1003 = getelementptr inbounds { double, double }, ptr %1002, i32 0, i32 0
  %1004 = extractvalue { double, double } %999, 0
  store double %1004, ptr %1003, align 16
  %1005 = getelementptr inbounds { double, double }, ptr %1002, i32 0, i32 1
  %1006 = extractvalue { double, double } %999, 1
  store double %1006, ptr %1005, align 8
  %1007 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1008 = load ptr, ptr %1007, align 16, !tbaa !56
  %1009 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %63, ptr align 16 %1009, i64 16, i1 false), !tbaa.struct !11
  %1010 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %65, ptr align 16 %61, i64 16, i1 false), !tbaa.struct !11
  %1011 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 0
  %1012 = load double, ptr %1011, align 16
  %1013 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 1
  %1014 = load double, ptr %1013, align 8
  %1015 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %1010, double %1012, double %1014)
          to label %1016 unwind label %1248

1016:                                             ; preds = %1000
  %1017 = getelementptr inbounds %"class.JPH::Vec3", ptr %64, i32 0, i32 0
  %1018 = getelementptr inbounds %union.anon, ptr %1017, i32 0, i32 0
  %1019 = getelementptr inbounds { double, double }, ptr %1018, i32 0, i32 0
  %1020 = extractvalue { double, double } %1015, 0
  store double %1020, ptr %1019, align 16
  %1021 = getelementptr inbounds { double, double }, ptr %1018, i32 0, i32 1
  %1022 = extractvalue { double, double } %1015, 1
  store double %1022, ptr %1021, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %66, ptr align 4 %49, i64 4, i1 false), !tbaa.struct !57
  %1023 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 0
  %1024 = load double, ptr %1023, align 16
  %1025 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 1
  %1026 = load double, ptr %1025, align 8
  %1027 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 0
  %1028 = load double, ptr %1027, align 16
  %1029 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 1
  %1030 = load double, ptr %1029, align 8
  %1031 = getelementptr inbounds %"class.JPH::Color", ptr %66, i32 0, i32 0
  %1032 = getelementptr inbounds %union.anon.62, ptr %1031, i32 0, i32 0
  %1033 = load i32, ptr %1032, align 4
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1008, double %1024, double %1026, double %1028, double %1030, i32 %1033, float noundef 0x3F847AE140000000)
          to label %1034 unwind label %1248

1034:                                             ; preds = %1016
  call void @llvm.lifetime.start.p0(i64 16, ptr %67) #12
  %1035 = invoke { double, double } @_ZNK3JPH4Vec326GetNormalizedPerpendicularEv(ptr noundef nonnull align 16 dereferenceable(16) %61)
          to label %1036 unwind label %1252

1036:                                             ; preds = %1034
  %1037 = getelementptr inbounds %"class.JPH::Vec3", ptr %67, i32 0, i32 0
  %1038 = getelementptr inbounds %union.anon, ptr %1037, i32 0, i32 0
  %1039 = getelementptr inbounds { double, double }, ptr %1038, i32 0, i32 0
  %1040 = extractvalue { double, double } %1035, 0
  store double %1040, ptr %1039, align 16
  %1041 = getelementptr inbounds { double, double }, ptr %1038, i32 0, i32 1
  %1042 = extractvalue { double, double } %1035, 1
  store double %1042, ptr %1041, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %68) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %69, ptr align 16 %67, i64 16, i1 false), !tbaa.struct !11
  %1043 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 0
  %1044 = load double, ptr %1043, align 16
  %1045 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 1
  %1046 = load double, ptr %1045, align 8
  %1047 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %61, double %1044, double %1046)
          to label %1048 unwind label %1256

1048:                                             ; preds = %1036
  %1049 = getelementptr inbounds %"class.JPH::Vec3", ptr %68, i32 0, i32 0
  %1050 = getelementptr inbounds %union.anon, ptr %1049, i32 0, i32 0
  %1051 = getelementptr inbounds { double, double }, ptr %1050, i32 0, i32 0
  %1052 = extractvalue { double, double } %1047, 0
  store double %1052, ptr %1051, align 16
  %1053 = getelementptr inbounds { double, double }, ptr %1050, i32 0, i32 1
  %1054 = extractvalue { double, double } %1047, 1
  store double %1054, ptr %1053, align 8
  %1055 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1056 = load ptr, ptr %1055, align 16, !tbaa !56
  %1057 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %72, ptr align 16 %67, i64 16, i1 false), !tbaa.struct !11
  %1058 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 0
  %1059 = load double, ptr %1058, align 16
  %1060 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 1
  %1061 = load double, ptr %1060, align 8
  %1062 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1059, double %1061)
          to label %1063 unwind label %1256

1063:                                             ; preds = %1048
  %1064 = getelementptr inbounds %"class.JPH::Vec3", ptr %71, i32 0, i32 0
  %1065 = getelementptr inbounds %union.anon, ptr %1064, i32 0, i32 0
  %1066 = getelementptr inbounds { double, double }, ptr %1065, i32 0, i32 0
  %1067 = extractvalue { double, double } %1062, 0
  store double %1067, ptr %1066, align 16
  %1068 = getelementptr inbounds { double, double }, ptr %1065, i32 0, i32 1
  %1069 = extractvalue { double, double } %1062, 1
  store double %1069, ptr %1068, align 8
  %1070 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 0
  %1071 = load double, ptr %1070, align 16
  %1072 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 1
  %1073 = load double, ptr %1072, align 8
  %1074 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %1057, double %1071, double %1073)
          to label %1075 unwind label %1256

1075:                                             ; preds = %1063
  %1076 = getelementptr inbounds %"class.JPH::Vec3", ptr %70, i32 0, i32 0
  %1077 = getelementptr inbounds %union.anon, ptr %1076, i32 0, i32 0
  %1078 = getelementptr inbounds { double, double }, ptr %1077, i32 0, i32 0
  %1079 = extractvalue { double, double } %1074, 0
  store double %1079, ptr %1078, align 16
  %1080 = getelementptr inbounds { double, double }, ptr %1077, i32 0, i32 1
  %1081 = extractvalue { double, double } %1074, 1
  store double %1081, ptr %1080, align 8
  %1082 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %75, ptr align 16 %67, i64 16, i1 false), !tbaa.struct !11
  %1083 = getelementptr inbounds { double, double }, ptr %75, i32 0, i32 0
  %1084 = load double, ptr %1083, align 16
  %1085 = getelementptr inbounds { double, double }, ptr %75, i32 0, i32 1
  %1086 = load double, ptr %1085, align 8
  %1087 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1084, double %1086)
          to label %1088 unwind label %1256

1088:                                             ; preds = %1075
  %1089 = getelementptr inbounds %"class.JPH::Vec3", ptr %74, i32 0, i32 0
  %1090 = getelementptr inbounds %union.anon, ptr %1089, i32 0, i32 0
  %1091 = getelementptr inbounds { double, double }, ptr %1090, i32 0, i32 0
  %1092 = extractvalue { double, double } %1087, 0
  store double %1092, ptr %1091, align 16
  %1093 = getelementptr inbounds { double, double }, ptr %1090, i32 0, i32 1
  %1094 = extractvalue { double, double } %1087, 1
  store double %1094, ptr %1093, align 8
  %1095 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 0
  %1096 = load double, ptr %1095, align 16
  %1097 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 1
  %1098 = load double, ptr %1097, align 8
  %1099 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %1082, double %1096, double %1098)
          to label %1100 unwind label %1256

1100:                                             ; preds = %1088
  %1101 = getelementptr inbounds %"class.JPH::Vec3", ptr %73, i32 0, i32 0
  %1102 = getelementptr inbounds %union.anon, ptr %1101, i32 0, i32 0
  %1103 = getelementptr inbounds { double, double }, ptr %1102, i32 0, i32 0
  %1104 = extractvalue { double, double } %1099, 0
  store double %1104, ptr %1103, align 16
  %1105 = getelementptr inbounds { double, double }, ptr %1102, i32 0, i32 1
  %1106 = extractvalue { double, double } %1099, 1
  store double %1106, ptr %1105, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %76, ptr align 4 %49, i64 4, i1 false), !tbaa.struct !57
  %1107 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 0
  %1108 = load double, ptr %1107, align 16
  %1109 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 1
  %1110 = load double, ptr %1109, align 8
  %1111 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 0
  %1112 = load double, ptr %1111, align 16
  %1113 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 1
  %1114 = load double, ptr %1113, align 8
  %1115 = getelementptr inbounds %"class.JPH::Color", ptr %76, i32 0, i32 0
  %1116 = getelementptr inbounds %union.anon.62, ptr %1115, i32 0, i32 0
  %1117 = load i32, ptr %1116, align 4
  %1118 = load ptr, ptr %1056, align 8, !tbaa !58
  %1119 = getelementptr inbounds ptr, ptr %1118, i64 2
  %1120 = load ptr, ptr %1119, align 8
  invoke void %1120(ptr noundef nonnull align 8 dereferenceable(320) %1056, double %1108, double %1110, double %1112, double %1114, i32 %1117)
          to label %1121 unwind label %1256

1121:                                             ; preds = %1100
  %1122 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1123 = load ptr, ptr %1122, align 16, !tbaa !56
  %1124 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %79, ptr align 16 %68, i64 16, i1 false), !tbaa.struct !11
  %1125 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 0
  %1126 = load double, ptr %1125, align 16
  %1127 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 1
  %1128 = load double, ptr %1127, align 8
  %1129 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1126, double %1128)
          to label %1130 unwind label %1256

1130:                                             ; preds = %1121
  %1131 = getelementptr inbounds %"class.JPH::Vec3", ptr %78, i32 0, i32 0
  %1132 = getelementptr inbounds %union.anon, ptr %1131, i32 0, i32 0
  %1133 = getelementptr inbounds { double, double }, ptr %1132, i32 0, i32 0
  %1134 = extractvalue { double, double } %1129, 0
  store double %1134, ptr %1133, align 16
  %1135 = getelementptr inbounds { double, double }, ptr %1132, i32 0, i32 1
  %1136 = extractvalue { double, double } %1129, 1
  store double %1136, ptr %1135, align 8
  %1137 = getelementptr inbounds { double, double }, ptr %78, i32 0, i32 0
  %1138 = load double, ptr %1137, align 16
  %1139 = getelementptr inbounds { double, double }, ptr %78, i32 0, i32 1
  %1140 = load double, ptr %1139, align 8
  %1141 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %1124, double %1138, double %1140)
          to label %1142 unwind label %1256

1142:                                             ; preds = %1130
  %1143 = getelementptr inbounds %"class.JPH::Vec3", ptr %77, i32 0, i32 0
  %1144 = getelementptr inbounds %union.anon, ptr %1143, i32 0, i32 0
  %1145 = getelementptr inbounds { double, double }, ptr %1144, i32 0, i32 0
  %1146 = extractvalue { double, double } %1141, 0
  store double %1146, ptr %1145, align 16
  %1147 = getelementptr inbounds { double, double }, ptr %1144, i32 0, i32 1
  %1148 = extractvalue { double, double } %1141, 1
  store double %1148, ptr %1147, align 8
  %1149 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %82, ptr align 16 %68, i64 16, i1 false), !tbaa.struct !11
  %1150 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 0
  %1151 = load double, ptr %1150, align 16
  %1152 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 1
  %1153 = load double, ptr %1152, align 8
  %1154 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1151, double %1153)
          to label %1155 unwind label %1256

1155:                                             ; preds = %1142
  %1156 = getelementptr inbounds %"class.JPH::Vec3", ptr %81, i32 0, i32 0
  %1157 = getelementptr inbounds %union.anon, ptr %1156, i32 0, i32 0
  %1158 = getelementptr inbounds { double, double }, ptr %1157, i32 0, i32 0
  %1159 = extractvalue { double, double } %1154, 0
  store double %1159, ptr %1158, align 16
  %1160 = getelementptr inbounds { double, double }, ptr %1157, i32 0, i32 1
  %1161 = extractvalue { double, double } %1154, 1
  store double %1161, ptr %1160, align 8
  %1162 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 0
  %1163 = load double, ptr %1162, align 16
  %1164 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 1
  %1165 = load double, ptr %1164, align 8
  %1166 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %1149, double %1163, double %1165)
          to label %1167 unwind label %1256

1167:                                             ; preds = %1155
  %1168 = getelementptr inbounds %"class.JPH::Vec3", ptr %80, i32 0, i32 0
  %1169 = getelementptr inbounds %union.anon, ptr %1168, i32 0, i32 0
  %1170 = getelementptr inbounds { double, double }, ptr %1169, i32 0, i32 0
  %1171 = extractvalue { double, double } %1166, 0
  store double %1171, ptr %1170, align 16
  %1172 = getelementptr inbounds { double, double }, ptr %1169, i32 0, i32 1
  %1173 = extractvalue { double, double } %1166, 1
  store double %1173, ptr %1172, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %83, ptr align 4 %49, i64 4, i1 false), !tbaa.struct !57
  %1174 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 0
  %1175 = load double, ptr %1174, align 16
  %1176 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 1
  %1177 = load double, ptr %1176, align 8
  %1178 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 0
  %1179 = load double, ptr %1178, align 16
  %1180 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 1
  %1181 = load double, ptr %1180, align 8
  %1182 = getelementptr inbounds %"class.JPH::Color", ptr %83, i32 0, i32 0
  %1183 = getelementptr inbounds %union.anon.62, ptr %1182, i32 0, i32 0
  %1184 = load i32, ptr %1183, align 4
  %1185 = load ptr, ptr %1123, align 8, !tbaa !58
  %1186 = getelementptr inbounds ptr, ptr %1185, i64 2
  %1187 = load ptr, ptr %1186, align 8
  invoke void %1187(ptr noundef nonnull align 8 dereferenceable(320) %1123, double %1175, double %1177, double %1179, double %1181, i32 %1184)
          to label %1188 unwind label %1256

1188:                                             ; preds = %1167
  %1189 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 43
  %1190 = load i8, ptr %1189, align 1, !tbaa !60, !range !54, !noundef !55
  %1191 = trunc i8 %1190 to i1
  br i1 %1191, label %1192, label %1274

1192:                                             ; preds = %1188
  call void @llvm.lifetime.start.p0(i64 528, ptr %84) #12
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EEC2Ev(ptr noundef nonnull align 16 dereferenceable(528) %84) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %85) #12
  %1193 = load ptr, ptr %48, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body19GetTransformedShapeEv(ptr dead_on_unwind writable sret(%"class.JPH::TransformedShape") align 16 %85, ptr noundef nonnull align 16 dereferenceable(122) %1193)
          to label %1194 unwind label %1260

1194:                                             ; preds = %1192
  %1195 = getelementptr inbounds %"class.JPH::RayCastResult", ptr %42, i32 0, i32 1
  %1196 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %61)
          to label %1197 unwind label %1264

1197:                                             ; preds = %1194
  %1198 = getelementptr inbounds %"class.JPH::Vec3", ptr %86, i32 0, i32 0
  %1199 = getelementptr inbounds %union.anon, ptr %1198, i32 0, i32 0
  %1200 = getelementptr inbounds { double, double }, ptr %1199, i32 0, i32 0
  %1201 = extractvalue { double, double } %1196, 0
  store double %1201, ptr %1200, align 16
  %1202 = getelementptr inbounds { double, double }, ptr %1199, i32 0, i32 1
  %1203 = extractvalue { double, double } %1196, 1
  store double %1203, ptr %1202, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %87, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  %1204 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 0
  %1205 = load double, ptr %1204, align 16
  %1206 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 1
  %1207 = load double, ptr %1206, align 8
  %1208 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %1209 = load double, ptr %1208, align 16
  %1210 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  %1211 = load double, ptr %1210, align 8
  invoke void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64) %85, ptr noundef nonnull align 4 dereferenceable(4) %1195, double %1205, double %1207, double %1209, double %1211, ptr noundef nonnull align 16 dereferenceable(528) %84)
          to label %1212 unwind label %1264

1212:                                             ; preds = %1197
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %85) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %85) #12
  %1213 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1214 = load ptr, ptr %1213, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %88) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %89, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  %1215 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 0
  %1216 = load double, ptr %1215, align 16
  %1217 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 1
  %1218 = load double, ptr %1217, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %88, double %1216, double %1218)
          to label %1219 unwind label %1269

1219:                                             ; preds = %1212
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %90, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !57
  %1220 = getelementptr inbounds %"class.JPH::Color", ptr %90, i32 0, i32 0
  %1221 = getelementptr inbounds %union.anon.62, ptr %1220, i32 0, i32 0
  %1222 = load i32, ptr %1221, align 4
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1214, ptr noundef nonnull align 16 dereferenceable(64) %88, ptr noundef nonnull align 16 dereferenceable(528) %84, i32 %1222, float noundef 0x3F847AE140000000)
          to label %1223 unwind label %1269

1223:                                             ; preds = %1219
  call void @llvm.lifetime.end.p0(i64 64, ptr %88) #12
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %84) #12
  call void @llvm.lifetime.end.p0(i64 528, ptr %84) #12
  br label %1274

1224:                                             ; preds = %866
  %1225 = landingpad { ptr, i32 }
          cleanup
  %1226 = extractvalue { ptr, i32 } %1225, 0
  store ptr %1226, ptr %29, align 8
  %1227 = extractvalue { ptr, i32 } %1225, 1
  store i32 %1227, ptr %30, align 4
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %45) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %43) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #12
  br label %1295

1228:                                             ; preds = %898
  %1229 = landingpad { ptr, i32 }
          cleanup
  %1230 = extractvalue { ptr, i32 } %1229, 0
  store ptr %1230, ptr %29, align 8
  %1231 = extractvalue { ptr, i32 } %1229, 1
  store i32 %1231, ptr %30, align 4
  br label %1282

1232:                                             ; preds = %905
  %1233 = landingpad { ptr, i32 }
          cleanup
  %1234 = extractvalue { ptr, i32 } %1233, 0
  store ptr %1234, ptr %29, align 8
  %1235 = extractvalue { ptr, i32 } %1233, 1
  store i32 %1235, ptr %30, align 4
  br label %1280

1236:                                             ; preds = %941, %932, %913, %907
  %1237 = landingpad { ptr, i32 }
          cleanup
  %1238 = extractvalue { ptr, i32 } %1237, 0
  store ptr %1238, ptr %29, align 8
  %1239 = extractvalue { ptr, i32 } %1237, 1
  store i32 %1239, ptr %30, align 4
  br label %1279

1240:                                             ; preds = %965, %962
  %1241 = landingpad { ptr, i32 }
          cleanup
  %1242 = extractvalue { ptr, i32 } %1241, 0
  store ptr %1242, ptr %29, align 8
  %1243 = extractvalue { ptr, i32 } %1241, 1
  store i32 %1243, ptr %30, align 4
  br label %1278

1244:                                             ; preds = %980, %971
  %1245 = landingpad { ptr, i32 }
          cleanup
  %1246 = extractvalue { ptr, i32 } %1245, 0
  store ptr %1246, ptr %29, align 8
  %1247 = extractvalue { ptr, i32 } %1245, 1
  store i32 %1247, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #12
  br label %1278

1248:                                             ; preds = %1016, %1000, %991
  %1249 = landingpad { ptr, i32 }
          cleanup
  %1250 = extractvalue { ptr, i32 } %1249, 0
  store ptr %1250, ptr %29, align 8
  %1251 = extractvalue { ptr, i32 } %1249, 1
  store i32 %1251, ptr %30, align 4
  br label %1277

1252:                                             ; preds = %1034
  %1253 = landingpad { ptr, i32 }
          cleanup
  %1254 = extractvalue { ptr, i32 } %1253, 0
  store ptr %1254, ptr %29, align 8
  %1255 = extractvalue { ptr, i32 } %1253, 1
  store i32 %1255, ptr %30, align 4
  br label %1276

1256:                                             ; preds = %1167, %1155, %1142, %1130, %1121, %1100, %1088, %1075, %1063, %1048, %1036
  %1257 = landingpad { ptr, i32 }
          cleanup
  %1258 = extractvalue { ptr, i32 } %1257, 0
  store ptr %1258, ptr %29, align 8
  %1259 = extractvalue { ptr, i32 } %1257, 1
  store i32 %1259, ptr %30, align 4
  br label %1275

1260:                                             ; preds = %1192
  %1261 = landingpad { ptr, i32 }
          cleanup
  %1262 = extractvalue { ptr, i32 } %1261, 0
  store ptr %1262, ptr %29, align 8
  %1263 = extractvalue { ptr, i32 } %1261, 1
  store i32 %1263, ptr %30, align 4
  br label %1268

1264:                                             ; preds = %1197, %1194
  %1265 = landingpad { ptr, i32 }
          cleanup
  %1266 = extractvalue { ptr, i32 } %1265, 0
  store ptr %1266, ptr %29, align 8
  %1267 = extractvalue { ptr, i32 } %1265, 1
  store i32 %1267, ptr %30, align 4
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %85) #12
  br label %1268

1268:                                             ; preds = %1264, %1260
  call void @llvm.lifetime.end.p0(i64 64, ptr %85) #12
  br label %1273

1269:                                             ; preds = %1219, %1212
  %1270 = landingpad { ptr, i32 }
          cleanup
  %1271 = extractvalue { ptr, i32 } %1270, 0
  store ptr %1271, ptr %29, align 8
  %1272 = extractvalue { ptr, i32 } %1270, 1
  store i32 %1272, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %88) #12
  br label %1273

1273:                                             ; preds = %1269, %1268
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %84) #12
  call void @llvm.lifetime.end.p0(i64 528, ptr %84) #12
  br label %1275

1274:                                             ; preds = %1223, %1188
  call void @llvm.lifetime.end.p0(i64 16, ptr %68) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #12
  br label %1281

1275:                                             ; preds = %1273, %1256
  call void @llvm.lifetime.end.p0(i64 16, ptr %68) #12
  br label %1276

1276:                                             ; preds = %1275, %1252
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #12
  br label %1277

1277:                                             ; preds = %1276, %1248
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #12
  br label %1278

1278:                                             ; preds = %1277, %1244, %1240
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #12
  br label %1279

1279:                                             ; preds = %1278, %1236
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #12
  br label %1280

1280:                                             ; preds = %1279, %1232
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #12
  br label %1282

1281:                                             ; preds = %1274, %904
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #12
  br label %1294

1282:                                             ; preds = %1280, %1228
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #12
  br label %1295

1283:                                             ; preds = %879
  %1284 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1285 = load ptr, ptr %1284, align 16, !tbaa !56
  %1286 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %91, ptr align 16 %1286, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %92, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %1287 = getelementptr inbounds { double, double }, ptr %91, i32 0, i32 0
  %1288 = load double, ptr %1287, align 16
  %1289 = getelementptr inbounds { double, double }, ptr %91, i32 0, i32 1
  %1290 = load double, ptr %1289, align 8
  %1291 = getelementptr inbounds %"class.JPH::Color", ptr %92, i32 0, i32 0
  %1292 = getelementptr inbounds %union.anon.62, ptr %1291, i32 0, i32 0
  %1293 = load i32, ptr %1292, align 4
  call void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1285, double %1288, double %1290, i32 %1293, float noundef 0x3FB99999A0000000)
  br label %1294

1294:                                             ; preds = %1283, %1281
  call void @llvm.lifetime.end.p0(i64 12, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #12
  br label %6190

1295:                                             ; preds = %1282, %1224
  call void @llvm.lifetime.end.p0(i64 12, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #12
  br label %6193

1296:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 32, ptr %93) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %94, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %95, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %1297 = getelementptr inbounds { double, double }, ptr %94, i32 0, i32 0
  %1298 = load double, ptr %1297, align 16
  %1299 = getelementptr inbounds { double, double }, ptr %94, i32 0, i32 1
  %1300 = load double, ptr %1299, align 8
  %1301 = getelementptr inbounds { double, double }, ptr %95, i32 0, i32 0
  %1302 = load double, ptr %1301, align 16
  %1303 = getelementptr inbounds { double, double }, ptr %95, i32 0, i32 1
  %1304 = load double, ptr %1303, align 8
  call void @_ZN3JPH8RRayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %93, double %1298, double %1300, double %1302, double %1304)
  call void @llvm.lifetime.start.p0(i64 3, ptr %96) #12
  call void @_ZN3JPH15RayCastSettingsC2Ev(ptr noundef nonnull align 1 dereferenceable(3) %96) #12
  %1305 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 35
  %1306 = load i8, ptr %1305, align 16, !tbaa !61
  %1307 = getelementptr inbounds %"class.JPH::RayCastSettings", ptr %96, i32 0, i32 0
  store i8 %1306, ptr %1307, align 1, !tbaa !62
  %1308 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 36
  %1309 = load i8, ptr %1308, align 1, !tbaa !64
  %1310 = getelementptr inbounds %"class.JPH::RayCastSettings", ptr %96, i32 0, i32 1
  store i8 %1309, ptr %1310, align 1, !tbaa !65
  %1311 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 40
  %1312 = load i8, ptr %1311, align 8, !tbaa !66, !range !54, !noundef !55
  %1313 = trunc i8 %1312 to i1
  %1314 = getelementptr inbounds %"class.JPH::RayCastSettings", ptr %96, i32 0, i32 2
  %1315 = zext i1 %1313 to i8
  store i8 %1315, ptr %1314, align 1, !tbaa !67
  call void @llvm.lifetime.start.p0(i64 24, ptr %97) #12
  call void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %97) #12
  %1316 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %1317 = load i32, ptr %1316, align 4, !tbaa !68
  %1318 = icmp eq i32 %1317, 0
  br i1 %1318, label %1319, label %1352

1319:                                             ; preds = %1296
  call void @llvm.lifetime.start.p0(i64 40, ptr %98) #12
  invoke void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(37) %98)
          to label %1320 unwind label %1332

1320:                                             ; preds = %1319
  %1321 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %1322 = load ptr, ptr %1321, align 8, !tbaa !50
  %1323 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1322)
          to label %1324 unwind label %1336

1324:                                             ; preds = %1320
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #12
  call void @llvm.memset.p0.i64(ptr align 8 %99, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %99) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #12
  call void @llvm.memset.p0.i64(ptr align 8 %100, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %100) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #12
  call void @llvm.memset.p0.i64(ptr align 8 %101, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %101) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %102) #12
  call void @llvm.memset.p0.i64(ptr align 8 %102, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %102)
          to label %1325 unwind label %1340

1325:                                             ; preds = %1324
  invoke void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1323, ptr noundef nonnull align 16 dereferenceable(32) %93, ptr noundef nonnull align 1 dereferenceable(3) %96, ptr noundef nonnull align 8 dereferenceable(24) %98, ptr noundef nonnull align 8 dereferenceable(8) %99, ptr noundef nonnull align 8 dereferenceable(8) %100, ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef nonnull align 8 dereferenceable(12) %102)
          to label %1326 unwind label %1344

1326:                                             ; preds = %1325
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %102) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %102) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %101) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %100) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %99) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #12
  %1327 = invoke noundef zeroext i1 @_ZNK3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE6HadHitEv(ptr noundef nonnull align 8 dereferenceable(37) %98)
          to label %1328 unwind label %1336

1328:                                             ; preds = %1326
  br i1 %1327, label %1329, label %1349

1329:                                             ; preds = %1328
  %1330 = getelementptr inbounds %"class.JPH::AnyHitCollisionCollector", ptr %98, i32 0, i32 1
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %97, ptr noundef nonnull align 4 dereferenceable(12) %1330)
          to label %1331 unwind label %1336

1331:                                             ; preds = %1329
  br label %1349

1332:                                             ; preds = %1319
  %1333 = landingpad { ptr, i32 }
          cleanup
  %1334 = extractvalue { ptr, i32 } %1333, 0
  store ptr %1334, ptr %29, align 8
  %1335 = extractvalue { ptr, i32 } %1333, 1
  store i32 %1335, ptr %30, align 4
  br label %1351

1336:                                             ; preds = %1329, %1326, %1320
  %1337 = landingpad { ptr, i32 }
          cleanup
  %1338 = extractvalue { ptr, i32 } %1337, 0
  store ptr %1338, ptr %29, align 8
  %1339 = extractvalue { ptr, i32 } %1337, 1
  store i32 %1339, ptr %30, align 4
  br label %1350

1340:                                             ; preds = %1324
  %1341 = landingpad { ptr, i32 }
          cleanup
  %1342 = extractvalue { ptr, i32 } %1341, 0
  store ptr %1342, ptr %29, align 8
  %1343 = extractvalue { ptr, i32 } %1341, 1
  store i32 %1343, ptr %30, align 4
  br label %1348

1344:                                             ; preds = %1325
  %1345 = landingpad { ptr, i32 }
          cleanup
  %1346 = extractvalue { ptr, i32 } %1345, 0
  store ptr %1346, ptr %29, align 8
  %1347 = extractvalue { ptr, i32 } %1345, 1
  store i32 %1347, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %102) #12
  br label %1348

1348:                                             ; preds = %1344, %1340
  call void @llvm.lifetime.end.p0(i64 16, ptr %102) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %101) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %100) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %99) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #12
  br label %1350

1349:                                             ; preds = %1331, %1328
  call void @_ZN3JPH18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEED2Ev(ptr noundef nonnull align 8 dereferenceable(37) %98) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %98) #12
  br label %1481

1350:                                             ; preds = %1348, %1336
  call void @_ZN3JPH18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEED2Ev(ptr noundef nonnull align 8 dereferenceable(37) %98) #12
  br label %1351

1351:                                             ; preds = %1350, %1332
  call void @llvm.lifetime.end.p0(i64 40, ptr %98) #12
  br label %2027

1352:                                             ; preds = %1296
  %1353 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %1354 = load i32, ptr %1353, align 4, !tbaa !68
  %1355 = icmp eq i32 %1354, 1
  br i1 %1355, label %1356, label %1389

1356:                                             ; preds = %1352
  call void @llvm.lifetime.start.p0(i64 40, ptr %103) #12
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(37) %103)
          to label %1357 unwind label %1369

1357:                                             ; preds = %1356
  %1358 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %1359 = load ptr, ptr %1358, align 8, !tbaa !50
  %1360 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1359)
          to label %1361 unwind label %1373

1361:                                             ; preds = %1357
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #12
  call void @llvm.memset.p0.i64(ptr align 8 %104, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %104) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #12
  call void @llvm.memset.p0.i64(ptr align 8 %105, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #12
  call void @llvm.memset.p0.i64(ptr align 8 %106, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %106) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %107) #12
  call void @llvm.memset.p0.i64(ptr align 8 %107, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %107)
          to label %1362 unwind label %1377

1362:                                             ; preds = %1361
  invoke void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1360, ptr noundef nonnull align 16 dereferenceable(32) %93, ptr noundef nonnull align 1 dereferenceable(3) %96, ptr noundef nonnull align 8 dereferenceable(24) %103, ptr noundef nonnull align 8 dereferenceable(8) %104, ptr noundef nonnull align 8 dereferenceable(8) %105, ptr noundef nonnull align 8 dereferenceable(8) %106, ptr noundef nonnull align 8 dereferenceable(12) %107)
          to label %1363 unwind label %1381

1363:                                             ; preds = %1362
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %107) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %107) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %106) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %104) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #12
  %1364 = invoke noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE6HadHitEv(ptr noundef nonnull align 8 dereferenceable(37) %103)
          to label %1365 unwind label %1373

1365:                                             ; preds = %1363
  br i1 %1364, label %1366, label %1386

1366:                                             ; preds = %1365
  %1367 = getelementptr inbounds %"class.JPH::ClosestHitCollisionCollector", ptr %103, i32 0, i32 1
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %97, ptr noundef nonnull align 4 dereferenceable(12) %1367)
          to label %1368 unwind label %1373

1368:                                             ; preds = %1366
  br label %1386

1369:                                             ; preds = %1356
  %1370 = landingpad { ptr, i32 }
          cleanup
  %1371 = extractvalue { ptr, i32 } %1370, 0
  store ptr %1371, ptr %29, align 8
  %1372 = extractvalue { ptr, i32 } %1370, 1
  store i32 %1372, ptr %30, align 4
  br label %1388

1373:                                             ; preds = %1366, %1363, %1357
  %1374 = landingpad { ptr, i32 }
          cleanup
  %1375 = extractvalue { ptr, i32 } %1374, 0
  store ptr %1375, ptr %29, align 8
  %1376 = extractvalue { ptr, i32 } %1374, 1
  store i32 %1376, ptr %30, align 4
  br label %1387

1377:                                             ; preds = %1361
  %1378 = landingpad { ptr, i32 }
          cleanup
  %1379 = extractvalue { ptr, i32 } %1378, 0
  store ptr %1379, ptr %29, align 8
  %1380 = extractvalue { ptr, i32 } %1378, 1
  store i32 %1380, ptr %30, align 4
  br label %1385

1381:                                             ; preds = %1362
  %1382 = landingpad { ptr, i32 }
          cleanup
  %1383 = extractvalue { ptr, i32 } %1382, 0
  store ptr %1383, ptr %29, align 8
  %1384 = extractvalue { ptr, i32 } %1382, 1
  store i32 %1384, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %107) #12
  br label %1385

1385:                                             ; preds = %1381, %1377
  call void @llvm.lifetime.end.p0(i64 16, ptr %107) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %106) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %104) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #12
  br label %1387

1386:                                             ; preds = %1368, %1365
  call void @_ZN3JPH18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEED2Ev(ptr noundef nonnull align 8 dereferenceable(37) %103) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %103) #12
  br label %1480

1387:                                             ; preds = %1385, %1373
  call void @_ZN3JPH18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEED2Ev(ptr noundef nonnull align 8 dereferenceable(37) %103) #12
  br label %1388

1388:                                             ; preds = %1387, %1369
  call void @llvm.lifetime.end.p0(i64 40, ptr %103) #12
  br label %2027

1389:                                             ; preds = %1352
  %1390 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 45
  %1391 = load i8, ptr %1390, align 16, !tbaa !69, !range !54, !noundef !55
  %1392 = trunc i8 %1391 to i1
  br i1 %1392, label %1393, label %1436

1393:                                             ; preds = %1389
  call void @llvm.lifetime.start.p0(i64 56, ptr %108) #12
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(53) %108) #12
  %1394 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %1395 = load ptr, ptr %1394, align 8, !tbaa !50
  %1396 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1395)
          to label %1397 unwind label %1421

1397:                                             ; preds = %1393
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #12
  call void @llvm.memset.p0.i64(ptr align 8 %109, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %109) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #12
  call void @llvm.memset.p0.i64(ptr align 8 %110, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %110) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #12
  call void @llvm.memset.p0.i64(ptr align 8 %111, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %111) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %112) #12
  call void @llvm.memset.p0.i64(ptr align 8 %112, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %112)
          to label %1398 unwind label %1425

1398:                                             ; preds = %1397
  invoke void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1396, ptr noundef nonnull align 16 dereferenceable(32) %93, ptr noundef nonnull align 1 dereferenceable(3) %96, ptr noundef nonnull align 8 dereferenceable(24) %108, ptr noundef nonnull align 8 dereferenceable(8) %109, ptr noundef nonnull align 8 dereferenceable(8) %110, ptr noundef nonnull align 8 dereferenceable(8) %111, ptr noundef nonnull align 8 dereferenceable(12) %112)
          to label %1399 unwind label %1429

1399:                                             ; preds = %1398
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %112) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %112) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %111) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %110) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %109) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #12
  invoke void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53) %108)
          to label %1400 unwind label %1421

1400:                                             ; preds = %1399
  %1401 = invoke noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %1402 unwind label %1421

1402:                                             ; preds = %1400
  %1403 = getelementptr inbounds %"class.JPH::ClosestHitPerBodyCollisionCollector", ptr %108, i32 0, i32 1
  %1404 = invoke noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1403)
          to label %1405 unwind label %1421

1405:                                             ; preds = %1402
  %1406 = getelementptr inbounds %"class.JPH::ClosestHitPerBodyCollisionCollector", ptr %108, i32 0, i32 1
  %1407 = invoke noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1406)
          to label %1408 unwind label %1421

1408:                                             ; preds = %1405
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %97, ptr noundef %1401, ptr noundef %1404, ptr noundef %1407)
          to label %1409 unwind label %1421

1409:                                             ; preds = %1408
  %1410 = invoke noundef i64 @_ZNK3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %1411 unwind label %1421

1411:                                             ; preds = %1409
  %1412 = trunc i64 %1410 to i32
  %1413 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %1414 = load i32, ptr %1413, align 4, !tbaa !68
  %1415 = icmp sgt i32 %1412, %1414
  br i1 %1415, label %1416, label %1434

1416:                                             ; preds = %1411
  %1417 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %1418 = load i32, ptr %1417, align 4, !tbaa !68
  %1419 = sext i32 %1418 to i64
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %97, i64 noundef %1419)
          to label %1420 unwind label %1421

1420:                                             ; preds = %1416
  br label %1434

1421:                                             ; preds = %1416, %1409, %1408, %1405, %1402, %1400, %1399, %1393
  %1422 = landingpad { ptr, i32 }
          cleanup
  %1423 = extractvalue { ptr, i32 } %1422, 0
  store ptr %1423, ptr %29, align 8
  %1424 = extractvalue { ptr, i32 } %1422, 1
  store i32 %1424, ptr %30, align 4
  br label %1435

1425:                                             ; preds = %1397
  %1426 = landingpad { ptr, i32 }
          cleanup
  %1427 = extractvalue { ptr, i32 } %1426, 0
  store ptr %1427, ptr %29, align 8
  %1428 = extractvalue { ptr, i32 } %1426, 1
  store i32 %1428, ptr %30, align 4
  br label %1433

1429:                                             ; preds = %1398
  %1430 = landingpad { ptr, i32 }
          cleanup
  %1431 = extractvalue { ptr, i32 } %1430, 0
  store ptr %1431, ptr %29, align 8
  %1432 = extractvalue { ptr, i32 } %1430, 1
  store i32 %1432, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %112) #12
  br label %1433

1433:                                             ; preds = %1429, %1425
  call void @llvm.lifetime.end.p0(i64 16, ptr %112) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %111) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %110) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %109) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #12
  br label %1435

1434:                                             ; preds = %1420, %1411
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %108) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr %108) #12
  br label %1479

1435:                                             ; preds = %1433, %1421
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %108) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr %108) #12
  br label %2027

1436:                                             ; preds = %1389
  call void @llvm.lifetime.start.p0(i64 48, ptr %113) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %113) #12
  %1437 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %1438 = load ptr, ptr %1437, align 8, !tbaa !50
  %1439 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1438)
          to label %1440 unwind label %1464

1440:                                             ; preds = %1436
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #12
  call void @llvm.memset.p0.i64(ptr align 8 %114, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #12
  call void @llvm.memset.p0.i64(ptr align 8 %115, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %115) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #12
  call void @llvm.memset.p0.i64(ptr align 8 %116, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %117) #12
  call void @llvm.memset.p0.i64(ptr align 8 %117, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %117)
          to label %1441 unwind label %1468

1441:                                             ; preds = %1440
  invoke void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1439, ptr noundef nonnull align 16 dereferenceable(32) %93, ptr noundef nonnull align 1 dereferenceable(3) %96, ptr noundef nonnull align 8 dereferenceable(24) %113, ptr noundef nonnull align 8 dereferenceable(8) %114, ptr noundef nonnull align 8 dereferenceable(8) %115, ptr noundef nonnull align 8 dereferenceable(8) %116, ptr noundef nonnull align 8 dereferenceable(12) %117)
          to label %1442 unwind label %1472

1442:                                             ; preds = %1441
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %117) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %117) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %115) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %113)
          to label %1443 unwind label %1464

1443:                                             ; preds = %1442
  %1444 = invoke noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %1445 unwind label %1464

1445:                                             ; preds = %1443
  %1446 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector", ptr %113, i32 0, i32 1
  %1447 = invoke noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1446)
          to label %1448 unwind label %1464

1448:                                             ; preds = %1445
  %1449 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector", ptr %113, i32 0, i32 1
  %1450 = invoke noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1449)
          to label %1451 unwind label %1464

1451:                                             ; preds = %1448
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %97, ptr noundef %1444, ptr noundef %1447, ptr noundef %1450)
          to label %1452 unwind label %1464

1452:                                             ; preds = %1451
  %1453 = invoke noundef i64 @_ZNK3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %1454 unwind label %1464

1454:                                             ; preds = %1452
  %1455 = trunc i64 %1453 to i32
  %1456 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %1457 = load i32, ptr %1456, align 4, !tbaa !68
  %1458 = icmp sgt i32 %1455, %1457
  br i1 %1458, label %1459, label %1477

1459:                                             ; preds = %1454
  %1460 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %1461 = load i32, ptr %1460, align 4, !tbaa !68
  %1462 = sext i32 %1461 to i64
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %97, i64 noundef %1462)
          to label %1463 unwind label %1464

1463:                                             ; preds = %1459
  br label %1477

1464:                                             ; preds = %1459, %1452, %1451, %1448, %1445, %1443, %1442, %1436
  %1465 = landingpad { ptr, i32 }
          cleanup
  %1466 = extractvalue { ptr, i32 } %1465, 0
  store ptr %1466, ptr %29, align 8
  %1467 = extractvalue { ptr, i32 } %1465, 1
  store i32 %1467, ptr %30, align 4
  br label %1478

1468:                                             ; preds = %1440
  %1469 = landingpad { ptr, i32 }
          cleanup
  %1470 = extractvalue { ptr, i32 } %1469, 0
  store ptr %1470, ptr %29, align 8
  %1471 = extractvalue { ptr, i32 } %1469, 1
  store i32 %1471, ptr %30, align 4
  br label %1476

1472:                                             ; preds = %1441
  %1473 = landingpad { ptr, i32 }
          cleanup
  %1474 = extractvalue { ptr, i32 } %1473, 0
  store ptr %1474, ptr %29, align 8
  %1475 = extractvalue { ptr, i32 } %1473, 1
  store i32 %1475, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %117) #12
  br label %1476

1476:                                             ; preds = %1472, %1468
  call void @llvm.lifetime.end.p0(i64 16, ptr %117) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %115) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #12
  br label %1478

1477:                                             ; preds = %1463, %1454
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %113) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %113) #12
  br label %1479

1478:                                             ; preds = %1476, %1464
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %113) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %113) #12
  br label %2027

1479:                                             ; preds = %1477, %1434
  br label %1480

1480:                                             ; preds = %1479, %1386
  br label %1481

1481:                                             ; preds = %1480, %1349
  %1482 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %1483 unwind label %1521

1483:                                             ; preds = %1481
  %1484 = xor i1 %1482, true
  %1485 = zext i1 %1484 to i8
  store i8 %1485, ptr %21, align 1, !tbaa !16
  %1486 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %1487 = trunc i8 %1486 to i1
  br i1 %1487, label %1488, label %1974

1488:                                             ; preds = %1483
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #12
  %1489 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %1490 unwind label %1525

1490:                                             ; preds = %1488
  store ptr %1489, ptr %118, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %119) #12
  %1491 = load ptr, ptr %118, align 8, !tbaa !5
  %1492 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %1491, i32 0, i32 1
  %1493 = load float, ptr %1492, align 4, !tbaa !52
  %1494 = invoke { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %93, float noundef %1493)
          to label %1495 unwind label %1529

1495:                                             ; preds = %1490
  %1496 = getelementptr inbounds %"class.JPH::Vec3", ptr %119, i32 0, i32 0
  %1497 = getelementptr inbounds %union.anon, ptr %1496, i32 0, i32 0
  %1498 = getelementptr inbounds { double, double }, ptr %1497, i32 0, i32 0
  %1499 = extractvalue { double, double } %1494, 0
  store double %1499, ptr %1498, align 16
  %1500 = getelementptr inbounds { double, double }, ptr %1497, i32 0, i32 1
  %1501 = extractvalue { double, double } %1494, 1
  store double %1501, ptr %1500, align 8
  %1502 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %1502, ptr align 16 %119, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %119) #12
  %1503 = load ptr, ptr %118, align 8, !tbaa !5
  %1504 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %1503, i32 0, i32 1
  %1505 = load float, ptr %1504, align 4, !tbaa !52
  %1506 = load ptr, ptr %8, align 8, !tbaa !5
  store float %1505, ptr %1506, align 4, !tbaa !9
  %1507 = load ptr, ptr %118, align 8, !tbaa !5
  %1508 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %1507, i32 0, i32 0
  %1509 = load ptr, ptr %10, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1509, ptr align 4 %1508, i64 4, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %120) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %120, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %121) #12
  store i8 0, ptr %121, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #12
  store ptr %97, ptr %122, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #12
  %1510 = load ptr, ptr %122, align 8, !tbaa !5
  %1511 = invoke noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1510)
          to label %1512 unwind label %1533

1512:                                             ; preds = %1495
  store ptr %1511, ptr %123, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #12
  %1513 = load ptr, ptr %122, align 8, !tbaa !5
  %1514 = invoke noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1513)
          to label %1515 unwind label %1537

1515:                                             ; preds = %1512
  store ptr %1514, ptr %124, align 8, !tbaa !5
  br label %1516

1516:                                             ; preds = %1918, %1515
  %1517 = load ptr, ptr %123, align 8, !tbaa !5
  %1518 = load ptr, ptr %124, align 8, !tbaa !5
  %1519 = icmp ne ptr %1517, %1518
  br i1 %1519, label %1541, label %1520

1520:                                             ; preds = %1516
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #12
  br label %1926

1521:                                             ; preds = %2011, %2003, %1982, %1974, %1481
  %1522 = landingpad { ptr, i32 }
          cleanup
  %1523 = extractvalue { ptr, i32 } %1522, 0
  store ptr %1523, ptr %29, align 8
  %1524 = extractvalue { ptr, i32 } %1522, 1
  store i32 %1524, ptr %30, align 4
  br label %2027

1525:                                             ; preds = %1488
  %1526 = landingpad { ptr, i32 }
          cleanup
  %1527 = extractvalue { ptr, i32 } %1526, 0
  store ptr %1527, ptr %29, align 8
  %1528 = extractvalue { ptr, i32 } %1526, 1
  store i32 %1528, ptr %30, align 4
  br label %1973

1529:                                             ; preds = %1490
  %1530 = landingpad { ptr, i32 }
          cleanup
  %1531 = extractvalue { ptr, i32 } %1530, 0
  store ptr %1531, ptr %29, align 8
  %1532 = extractvalue { ptr, i32 } %1530, 1
  store i32 %1532, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %119) #12
  br label %1973

1533:                                             ; preds = %1495
  %1534 = landingpad { ptr, i32 }
          cleanup
  %1535 = extractvalue { ptr, i32 } %1534, 0
  store ptr %1535, ptr %29, align 8
  %1536 = extractvalue { ptr, i32 } %1534, 1
  store i32 %1536, ptr %30, align 4
  br label %1925

1537:                                             ; preds = %1512
  %1538 = landingpad { ptr, i32 }
          cleanup
  %1539 = extractvalue { ptr, i32 } %1538, 0
  store ptr %1539, ptr %29, align 8
  %1540 = extractvalue { ptr, i32 } %1538, 1
  store i32 %1540, ptr %30, align 4
  br label %1924

1541:                                             ; preds = %1516
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #12
  %1542 = load ptr, ptr %123, align 8, !tbaa !5
  store ptr %1542, ptr %125, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %126) #12
  %1543 = load ptr, ptr %125, align 8, !tbaa !5
  %1544 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %1543, i32 0, i32 1
  %1545 = load float, ptr %1544, align 4, !tbaa !52
  %1546 = invoke { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %93, float noundef %1545)
          to label %1547 unwind label %1856

1547:                                             ; preds = %1541
  %1548 = getelementptr inbounds %"class.JPH::Vec3", ptr %126, i32 0, i32 0
  %1549 = getelementptr inbounds %union.anon, ptr %1548, i32 0, i32 0
  %1550 = getelementptr inbounds { double, double }, ptr %1549, i32 0, i32 0
  %1551 = extractvalue { double, double } %1546, 0
  store double %1551, ptr %1550, align 16
  %1552 = getelementptr inbounds { double, double }, ptr %1549, i32 0, i32 1
  %1553 = extractvalue { double, double } %1546, 1
  store double %1553, ptr %1552, align 8
  %1554 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1555 = load ptr, ptr %1554, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %127, ptr align 16 %120, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %128, ptr align 16 %126, i64 16, i1 false), !tbaa.struct !11
  %1556 = load i8, ptr %121, align 1, !tbaa !16, !range !54, !noundef !55
  %1557 = trunc i8 %1556 to i1
  br i1 %1557, label %1558, label %1559

1558:                                             ; preds = %1547
  br label %1560

1559:                                             ; preds = %1547
  br label %1560

1560:                                             ; preds = %1559, %1558
  %1561 = phi ptr [ @_ZN3JPH5Color5sGreyE, %1558 ], [ @_ZN3JPH5Color6sWhiteE, %1559 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %129, ptr align 4 %1561, i64 4, i1 false), !tbaa.struct !57
  %1562 = getelementptr inbounds { double, double }, ptr %127, i32 0, i32 0
  %1563 = load double, ptr %1562, align 16
  %1564 = getelementptr inbounds { double, double }, ptr %127, i32 0, i32 1
  %1565 = load double, ptr %1564, align 8
  %1566 = getelementptr inbounds { double, double }, ptr %128, i32 0, i32 0
  %1567 = load double, ptr %1566, align 16
  %1568 = getelementptr inbounds { double, double }, ptr %128, i32 0, i32 1
  %1569 = load double, ptr %1568, align 8
  %1570 = getelementptr inbounds %"class.JPH::Color", ptr %129, i32 0, i32 0
  %1571 = getelementptr inbounds %union.anon.62, ptr %1570, i32 0, i32 0
  %1572 = load i32, ptr %1571, align 4
  %1573 = load ptr, ptr %1555, align 8, !tbaa !58
  %1574 = getelementptr inbounds ptr, ptr %1573, i64 2
  %1575 = load ptr, ptr %1574, align 8
  invoke void %1575(ptr noundef nonnull align 8 dereferenceable(320) %1555, double %1563, double %1565, double %1567, double %1569, i32 %1572)
          to label %1576 unwind label %1856

1576:                                             ; preds = %1560
  %1577 = load i8, ptr %121, align 1, !tbaa !16, !range !54, !noundef !55
  %1578 = trunc i8 %1577 to i1
  %1579 = xor i1 %1578, true
  %1580 = zext i1 %1579 to i8
  store i8 %1580, ptr %121, align 1, !tbaa !16
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %120, ptr align 16 %126, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %130) #12
  %1581 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %1582 = load ptr, ptr %1581, align 8, !tbaa !50
  %1583 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %1582)
          to label %1584 unwind label %1860

1584:                                             ; preds = %1576
  %1585 = load ptr, ptr %125, align 8, !tbaa !5
  %1586 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %1585, i32 0, i32 0
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %130, ptr noundef nonnull align 8 dereferenceable(16) %1583, ptr noundef nonnull align 4 dereferenceable(4) %1586)
          to label %1587 unwind label %1860

1587:                                             ; preds = %1584
  %1588 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %130)
          to label %1589 unwind label %1864

1589:                                             ; preds = %1587
  br i1 %1588, label %1590, label %1917

1590:                                             ; preds = %1589
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #12
  %1591 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %130)
          to label %1592 unwind label %1868

1592:                                             ; preds = %1590
  store ptr %1591, ptr %131, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #12
  %1593 = load ptr, ptr %131, align 8, !tbaa !5
  %1594 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %1593)
          to label %1595 unwind label %1872

1595:                                             ; preds = %1592
  %1596 = load ptr, ptr %125, align 8, !tbaa !5
  %1597 = getelementptr inbounds %"class.JPH::RayCastResult", ptr %1596, i32 0, i32 1
  %1598 = load ptr, ptr %1594, align 8, !tbaa !58
  %1599 = getelementptr inbounds ptr, ptr %1598, i64 10
  %1600 = load ptr, ptr %1599, align 8
  %1601 = invoke noundef ptr %1600(ptr noundef nonnull align 8 dereferenceable(26) %1594, ptr noundef nonnull align 4 dereferenceable(4) %1597)
          to label %1602 unwind label %1872

1602:                                             ; preds = %1595
  store ptr %1601, ptr %132, align 8, !tbaa !5
  %1603 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1604 = load ptr, ptr %1603, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %133, ptr align 16 %126, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %134) #12
  %1605 = load ptr, ptr %132, align 8, !tbaa !5
  %1606 = load ptr, ptr %1605, align 8, !tbaa !58
  %1607 = getelementptr inbounds ptr, ptr %1606, i64 4
  %1608 = load ptr, ptr %1607, align 8
  %1609 = invoke noundef ptr %1608(ptr noundef nonnull align 8 dereferenceable(12) %1605)
          to label %1610 unwind label %1876

1610:                                             ; preds = %1602
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %134, ptr noundef %1609) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %135, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !57
  %1611 = getelementptr inbounds { double, double }, ptr %133, i32 0, i32 0
  %1612 = load double, ptr %1611, align 16
  %1613 = getelementptr inbounds { double, double }, ptr %133, i32 0, i32 1
  %1614 = load double, ptr %1613, align 8
  %1615 = getelementptr inbounds %"class.JPH::Color", ptr %135, i32 0, i32 0
  %1616 = getelementptr inbounds %union.anon.62, ptr %1615, i32 0, i32 0
  %1617 = load i32, ptr %1616, align 4
  %1618 = load ptr, ptr %1604, align 8, !tbaa !58
  %1619 = getelementptr inbounds ptr, ptr %1618, i64 7
  %1620 = load ptr, ptr %1619, align 8
  invoke void %1620(ptr noundef nonnull align 8 dereferenceable(320) %1604, double %1612, double %1614, ptr noundef nonnull align 8 dereferenceable(16) %134, i32 %1617, float noundef 5.000000e-01)
          to label %1621 unwind label %1876

1621:                                             ; preds = %1610
  call void @llvm.lifetime.end.p0(i64 16, ptr %134) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %136) #12
  %1622 = load ptr, ptr %131, align 8, !tbaa !5
  %1623 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %1622)
          to label %1624 unwind label %1880

1624:                                             ; preds = %1621
  br i1 %1623, label %1625, label %1626

1625:                                             ; preds = %1624
  br label %1627

1626:                                             ; preds = %1624
  br label %1627

1627:                                             ; preds = %1626, %1625
  %1628 = phi ptr [ @_ZN3JPH5Color7sYellowE, %1625 ], [ @_ZN3JPH5Color7sOrangeE, %1626 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %136, ptr align 4 %1628, i64 4, i1 false), !tbaa.struct !57
  call void @llvm.lifetime.start.p0(i64 16, ptr %137) #12
  %1629 = load ptr, ptr %131, align 8, !tbaa !5
  %1630 = load ptr, ptr %125, align 8, !tbaa !5
  %1631 = getelementptr inbounds %"class.JPH::RayCastResult", ptr %1630, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %138, ptr align 16 %126, i64 16, i1 false), !tbaa.struct !11
  %1632 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 0
  %1633 = load double, ptr %1632, align 16
  %1634 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 1
  %1635 = load double, ptr %1634, align 8
  %1636 = invoke { double, double } @_ZNK3JPH4Body26GetWorldSpaceSurfaceNormalERKNS_10SubShapeIDENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %1629, ptr noundef nonnull align 4 dereferenceable(4) %1631, double %1633, double %1635)
          to label %1637 unwind label %1884

1637:                                             ; preds = %1627
  %1638 = getelementptr inbounds %"class.JPH::Vec3", ptr %137, i32 0, i32 0
  %1639 = getelementptr inbounds %union.anon, ptr %1638, i32 0, i32 0
  %1640 = getelementptr inbounds { double, double }, ptr %1639, i32 0, i32 0
  %1641 = extractvalue { double, double } %1636, 0
  store double %1641, ptr %1640, align 16
  %1642 = getelementptr inbounds { double, double }, ptr %1639, i32 0, i32 1
  %1643 = extractvalue { double, double } %1636, 1
  store double %1643, ptr %1642, align 8
  %1644 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1645 = load ptr, ptr %1644, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %139, ptr align 16 %126, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %141, ptr align 16 %137, i64 16, i1 false), !tbaa.struct !11
  %1646 = getelementptr inbounds { double, double }, ptr %141, i32 0, i32 0
  %1647 = load double, ptr %1646, align 16
  %1648 = getelementptr inbounds { double, double }, ptr %141, i32 0, i32 1
  %1649 = load double, ptr %1648, align 8
  %1650 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %126, double %1647, double %1649)
          to label %1651 unwind label %1884

1651:                                             ; preds = %1637
  %1652 = getelementptr inbounds %"class.JPH::Vec3", ptr %140, i32 0, i32 0
  %1653 = getelementptr inbounds %union.anon, ptr %1652, i32 0, i32 0
  %1654 = getelementptr inbounds { double, double }, ptr %1653, i32 0, i32 0
  %1655 = extractvalue { double, double } %1650, 0
  store double %1655, ptr %1654, align 16
  %1656 = getelementptr inbounds { double, double }, ptr %1653, i32 0, i32 1
  %1657 = extractvalue { double, double } %1650, 1
  store double %1657, ptr %1656, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %142, ptr align 4 %136, i64 4, i1 false), !tbaa.struct !57
  %1658 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 0
  %1659 = load double, ptr %1658, align 16
  %1660 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 1
  %1661 = load double, ptr %1660, align 8
  %1662 = getelementptr inbounds { double, double }, ptr %140, i32 0, i32 0
  %1663 = load double, ptr %1662, align 16
  %1664 = getelementptr inbounds { double, double }, ptr %140, i32 0, i32 1
  %1665 = load double, ptr %1664, align 8
  %1666 = getelementptr inbounds %"class.JPH::Color", ptr %142, i32 0, i32 0
  %1667 = getelementptr inbounds %union.anon.62, ptr %1666, i32 0, i32 0
  %1668 = load i32, ptr %1667, align 4
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1645, double %1659, double %1661, double %1663, double %1665, i32 %1668, float noundef 0x3F847AE140000000)
          to label %1669 unwind label %1884

1669:                                             ; preds = %1651
  call void @llvm.lifetime.start.p0(i64 16, ptr %143) #12
  %1670 = invoke { double, double } @_ZNK3JPH4Vec326GetNormalizedPerpendicularEv(ptr noundef nonnull align 16 dereferenceable(16) %137)
          to label %1671 unwind label %1888

1671:                                             ; preds = %1669
  %1672 = getelementptr inbounds %"class.JPH::Vec3", ptr %143, i32 0, i32 0
  %1673 = getelementptr inbounds %union.anon, ptr %1672, i32 0, i32 0
  %1674 = getelementptr inbounds { double, double }, ptr %1673, i32 0, i32 0
  %1675 = extractvalue { double, double } %1670, 0
  store double %1675, ptr %1674, align 16
  %1676 = getelementptr inbounds { double, double }, ptr %1673, i32 0, i32 1
  %1677 = extractvalue { double, double } %1670, 1
  store double %1677, ptr %1676, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %144) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %145, ptr align 16 %143, i64 16, i1 false), !tbaa.struct !11
  %1678 = getelementptr inbounds { double, double }, ptr %145, i32 0, i32 0
  %1679 = load double, ptr %1678, align 16
  %1680 = getelementptr inbounds { double, double }, ptr %145, i32 0, i32 1
  %1681 = load double, ptr %1680, align 8
  %1682 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %137, double %1679, double %1681)
          to label %1683 unwind label %1892

1683:                                             ; preds = %1671
  %1684 = getelementptr inbounds %"class.JPH::Vec3", ptr %144, i32 0, i32 0
  %1685 = getelementptr inbounds %union.anon, ptr %1684, i32 0, i32 0
  %1686 = getelementptr inbounds { double, double }, ptr %1685, i32 0, i32 0
  %1687 = extractvalue { double, double } %1682, 0
  store double %1687, ptr %1686, align 16
  %1688 = getelementptr inbounds { double, double }, ptr %1685, i32 0, i32 1
  %1689 = extractvalue { double, double } %1682, 1
  store double %1689, ptr %1688, align 8
  %1690 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1691 = load ptr, ptr %1690, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %148, ptr align 16 %143, i64 16, i1 false), !tbaa.struct !11
  %1692 = getelementptr inbounds { double, double }, ptr %148, i32 0, i32 0
  %1693 = load double, ptr %1692, align 16
  %1694 = getelementptr inbounds { double, double }, ptr %148, i32 0, i32 1
  %1695 = load double, ptr %1694, align 8
  %1696 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1693, double %1695)
          to label %1697 unwind label %1892

1697:                                             ; preds = %1683
  %1698 = getelementptr inbounds %"class.JPH::Vec3", ptr %147, i32 0, i32 0
  %1699 = getelementptr inbounds %union.anon, ptr %1698, i32 0, i32 0
  %1700 = getelementptr inbounds { double, double }, ptr %1699, i32 0, i32 0
  %1701 = extractvalue { double, double } %1696, 0
  store double %1701, ptr %1700, align 16
  %1702 = getelementptr inbounds { double, double }, ptr %1699, i32 0, i32 1
  %1703 = extractvalue { double, double } %1696, 1
  store double %1703, ptr %1702, align 8
  %1704 = getelementptr inbounds { double, double }, ptr %147, i32 0, i32 0
  %1705 = load double, ptr %1704, align 16
  %1706 = getelementptr inbounds { double, double }, ptr %147, i32 0, i32 1
  %1707 = load double, ptr %1706, align 8
  %1708 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %126, double %1705, double %1707)
          to label %1709 unwind label %1892

1709:                                             ; preds = %1697
  %1710 = getelementptr inbounds %"class.JPH::Vec3", ptr %146, i32 0, i32 0
  %1711 = getelementptr inbounds %union.anon, ptr %1710, i32 0, i32 0
  %1712 = getelementptr inbounds { double, double }, ptr %1711, i32 0, i32 0
  %1713 = extractvalue { double, double } %1708, 0
  store double %1713, ptr %1712, align 16
  %1714 = getelementptr inbounds { double, double }, ptr %1711, i32 0, i32 1
  %1715 = extractvalue { double, double } %1708, 1
  store double %1715, ptr %1714, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %151, ptr align 16 %143, i64 16, i1 false), !tbaa.struct !11
  %1716 = getelementptr inbounds { double, double }, ptr %151, i32 0, i32 0
  %1717 = load double, ptr %1716, align 16
  %1718 = getelementptr inbounds { double, double }, ptr %151, i32 0, i32 1
  %1719 = load double, ptr %1718, align 8
  %1720 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1717, double %1719)
          to label %1721 unwind label %1892

1721:                                             ; preds = %1709
  %1722 = getelementptr inbounds %"class.JPH::Vec3", ptr %150, i32 0, i32 0
  %1723 = getelementptr inbounds %union.anon, ptr %1722, i32 0, i32 0
  %1724 = getelementptr inbounds { double, double }, ptr %1723, i32 0, i32 0
  %1725 = extractvalue { double, double } %1720, 0
  store double %1725, ptr %1724, align 16
  %1726 = getelementptr inbounds { double, double }, ptr %1723, i32 0, i32 1
  %1727 = extractvalue { double, double } %1720, 1
  store double %1727, ptr %1726, align 8
  %1728 = getelementptr inbounds { double, double }, ptr %150, i32 0, i32 0
  %1729 = load double, ptr %1728, align 16
  %1730 = getelementptr inbounds { double, double }, ptr %150, i32 0, i32 1
  %1731 = load double, ptr %1730, align 8
  %1732 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %126, double %1729, double %1731)
          to label %1733 unwind label %1892

1733:                                             ; preds = %1721
  %1734 = getelementptr inbounds %"class.JPH::Vec3", ptr %149, i32 0, i32 0
  %1735 = getelementptr inbounds %union.anon, ptr %1734, i32 0, i32 0
  %1736 = getelementptr inbounds { double, double }, ptr %1735, i32 0, i32 0
  %1737 = extractvalue { double, double } %1732, 0
  store double %1737, ptr %1736, align 16
  %1738 = getelementptr inbounds { double, double }, ptr %1735, i32 0, i32 1
  %1739 = extractvalue { double, double } %1732, 1
  store double %1739, ptr %1738, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %152, ptr align 4 %136, i64 4, i1 false), !tbaa.struct !57
  %1740 = getelementptr inbounds { double, double }, ptr %146, i32 0, i32 0
  %1741 = load double, ptr %1740, align 16
  %1742 = getelementptr inbounds { double, double }, ptr %146, i32 0, i32 1
  %1743 = load double, ptr %1742, align 8
  %1744 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 0
  %1745 = load double, ptr %1744, align 16
  %1746 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 1
  %1747 = load double, ptr %1746, align 8
  %1748 = getelementptr inbounds %"class.JPH::Color", ptr %152, i32 0, i32 0
  %1749 = getelementptr inbounds %union.anon.62, ptr %1748, i32 0, i32 0
  %1750 = load i32, ptr %1749, align 4
  %1751 = load ptr, ptr %1691, align 8, !tbaa !58
  %1752 = getelementptr inbounds ptr, ptr %1751, i64 2
  %1753 = load ptr, ptr %1752, align 8
  invoke void %1753(ptr noundef nonnull align 8 dereferenceable(320) %1691, double %1741, double %1743, double %1745, double %1747, i32 %1750)
          to label %1754 unwind label %1892

1754:                                             ; preds = %1733
  %1755 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1756 = load ptr, ptr %1755, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %155, ptr align 16 %144, i64 16, i1 false), !tbaa.struct !11
  %1757 = getelementptr inbounds { double, double }, ptr %155, i32 0, i32 0
  %1758 = load double, ptr %1757, align 16
  %1759 = getelementptr inbounds { double, double }, ptr %155, i32 0, i32 1
  %1760 = load double, ptr %1759, align 8
  %1761 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1758, double %1760)
          to label %1762 unwind label %1892

1762:                                             ; preds = %1754
  %1763 = getelementptr inbounds %"class.JPH::Vec3", ptr %154, i32 0, i32 0
  %1764 = getelementptr inbounds %union.anon, ptr %1763, i32 0, i32 0
  %1765 = getelementptr inbounds { double, double }, ptr %1764, i32 0, i32 0
  %1766 = extractvalue { double, double } %1761, 0
  store double %1766, ptr %1765, align 16
  %1767 = getelementptr inbounds { double, double }, ptr %1764, i32 0, i32 1
  %1768 = extractvalue { double, double } %1761, 1
  store double %1768, ptr %1767, align 8
  %1769 = getelementptr inbounds { double, double }, ptr %154, i32 0, i32 0
  %1770 = load double, ptr %1769, align 16
  %1771 = getelementptr inbounds { double, double }, ptr %154, i32 0, i32 1
  %1772 = load double, ptr %1771, align 8
  %1773 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %126, double %1770, double %1772)
          to label %1774 unwind label %1892

1774:                                             ; preds = %1762
  %1775 = getelementptr inbounds %"class.JPH::Vec3", ptr %153, i32 0, i32 0
  %1776 = getelementptr inbounds %union.anon, ptr %1775, i32 0, i32 0
  %1777 = getelementptr inbounds { double, double }, ptr %1776, i32 0, i32 0
  %1778 = extractvalue { double, double } %1773, 0
  store double %1778, ptr %1777, align 16
  %1779 = getelementptr inbounds { double, double }, ptr %1776, i32 0, i32 1
  %1780 = extractvalue { double, double } %1773, 1
  store double %1780, ptr %1779, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %158, ptr align 16 %144, i64 16, i1 false), !tbaa.struct !11
  %1781 = getelementptr inbounds { double, double }, ptr %158, i32 0, i32 0
  %1782 = load double, ptr %1781, align 16
  %1783 = getelementptr inbounds { double, double }, ptr %158, i32 0, i32 1
  %1784 = load double, ptr %1783, align 8
  %1785 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1782, double %1784)
          to label %1786 unwind label %1892

1786:                                             ; preds = %1774
  %1787 = getelementptr inbounds %"class.JPH::Vec3", ptr %157, i32 0, i32 0
  %1788 = getelementptr inbounds %union.anon, ptr %1787, i32 0, i32 0
  %1789 = getelementptr inbounds { double, double }, ptr %1788, i32 0, i32 0
  %1790 = extractvalue { double, double } %1785, 0
  store double %1790, ptr %1789, align 16
  %1791 = getelementptr inbounds { double, double }, ptr %1788, i32 0, i32 1
  %1792 = extractvalue { double, double } %1785, 1
  store double %1792, ptr %1791, align 8
  %1793 = getelementptr inbounds { double, double }, ptr %157, i32 0, i32 0
  %1794 = load double, ptr %1793, align 16
  %1795 = getelementptr inbounds { double, double }, ptr %157, i32 0, i32 1
  %1796 = load double, ptr %1795, align 8
  %1797 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %126, double %1794, double %1796)
          to label %1798 unwind label %1892

1798:                                             ; preds = %1786
  %1799 = getelementptr inbounds %"class.JPH::Vec3", ptr %156, i32 0, i32 0
  %1800 = getelementptr inbounds %union.anon, ptr %1799, i32 0, i32 0
  %1801 = getelementptr inbounds { double, double }, ptr %1800, i32 0, i32 0
  %1802 = extractvalue { double, double } %1797, 0
  store double %1802, ptr %1801, align 16
  %1803 = getelementptr inbounds { double, double }, ptr %1800, i32 0, i32 1
  %1804 = extractvalue { double, double } %1797, 1
  store double %1804, ptr %1803, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %159, ptr align 4 %136, i64 4, i1 false), !tbaa.struct !57
  %1805 = getelementptr inbounds { double, double }, ptr %153, i32 0, i32 0
  %1806 = load double, ptr %1805, align 16
  %1807 = getelementptr inbounds { double, double }, ptr %153, i32 0, i32 1
  %1808 = load double, ptr %1807, align 8
  %1809 = getelementptr inbounds { double, double }, ptr %156, i32 0, i32 0
  %1810 = load double, ptr %1809, align 16
  %1811 = getelementptr inbounds { double, double }, ptr %156, i32 0, i32 1
  %1812 = load double, ptr %1811, align 8
  %1813 = getelementptr inbounds %"class.JPH::Color", ptr %159, i32 0, i32 0
  %1814 = getelementptr inbounds %union.anon.62, ptr %1813, i32 0, i32 0
  %1815 = load i32, ptr %1814, align 4
  %1816 = load ptr, ptr %1756, align 8, !tbaa !58
  %1817 = getelementptr inbounds ptr, ptr %1816, i64 2
  %1818 = load ptr, ptr %1817, align 8
  invoke void %1818(ptr noundef nonnull align 8 dereferenceable(320) %1756, double %1806, double %1808, double %1810, double %1812, i32 %1815)
          to label %1819 unwind label %1892

1819:                                             ; preds = %1798
  %1820 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 43
  %1821 = load i8, ptr %1820, align 1, !tbaa !60, !range !54, !noundef !55
  %1822 = trunc i8 %1821 to i1
  br i1 %1822, label %1823, label %1910

1823:                                             ; preds = %1819
  call void @llvm.lifetime.start.p0(i64 528, ptr %160) #12
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EEC2Ev(ptr noundef nonnull align 16 dereferenceable(528) %160) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %161) #12
  %1824 = load ptr, ptr %131, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body19GetTransformedShapeEv(ptr dead_on_unwind writable sret(%"class.JPH::TransformedShape") align 16 %161, ptr noundef nonnull align 16 dereferenceable(122) %1824)
          to label %1825 unwind label %1896

1825:                                             ; preds = %1823
  %1826 = load ptr, ptr %125, align 8, !tbaa !5
  %1827 = getelementptr inbounds %"class.JPH::RayCastResult", ptr %1826, i32 0, i32 1
  %1828 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %137)
          to label %1829 unwind label %1900

1829:                                             ; preds = %1825
  %1830 = getelementptr inbounds %"class.JPH::Vec3", ptr %162, i32 0, i32 0
  %1831 = getelementptr inbounds %union.anon, ptr %1830, i32 0, i32 0
  %1832 = getelementptr inbounds { double, double }, ptr %1831, i32 0, i32 0
  %1833 = extractvalue { double, double } %1828, 0
  store double %1833, ptr %1832, align 16
  %1834 = getelementptr inbounds { double, double }, ptr %1831, i32 0, i32 1
  %1835 = extractvalue { double, double } %1828, 1
  store double %1835, ptr %1834, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %163, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  %1836 = getelementptr inbounds { double, double }, ptr %162, i32 0, i32 0
  %1837 = load double, ptr %1836, align 16
  %1838 = getelementptr inbounds { double, double }, ptr %162, i32 0, i32 1
  %1839 = load double, ptr %1838, align 8
  %1840 = getelementptr inbounds { double, double }, ptr %163, i32 0, i32 0
  %1841 = load double, ptr %1840, align 16
  %1842 = getelementptr inbounds { double, double }, ptr %163, i32 0, i32 1
  %1843 = load double, ptr %1842, align 8
  invoke void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64) %161, ptr noundef nonnull align 4 dereferenceable(4) %1827, double %1837, double %1839, double %1841, double %1843, ptr noundef nonnull align 16 dereferenceable(528) %160)
          to label %1844 unwind label %1900

1844:                                             ; preds = %1829
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %161) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %161) #12
  %1845 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1846 = load ptr, ptr %1845, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %164) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %165, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  %1847 = getelementptr inbounds { double, double }, ptr %165, i32 0, i32 0
  %1848 = load double, ptr %1847, align 16
  %1849 = getelementptr inbounds { double, double }, ptr %165, i32 0, i32 1
  %1850 = load double, ptr %1849, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %164, double %1848, double %1850)
          to label %1851 unwind label %1905

1851:                                             ; preds = %1844
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %166, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !57
  %1852 = getelementptr inbounds %"class.JPH::Color", ptr %166, i32 0, i32 0
  %1853 = getelementptr inbounds %union.anon.62, ptr %1852, i32 0, i32 0
  %1854 = load i32, ptr %1853, align 4
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1846, ptr noundef nonnull align 16 dereferenceable(64) %164, ptr noundef nonnull align 16 dereferenceable(528) %160, i32 %1854, float noundef 0x3F847AE140000000)
          to label %1855 unwind label %1905

1855:                                             ; preds = %1851
  call void @llvm.lifetime.end.p0(i64 64, ptr %164) #12
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %160) #12
  call void @llvm.lifetime.end.p0(i64 528, ptr %160) #12
  br label %1910

1856:                                             ; preds = %1560, %1541
  %1857 = landingpad { ptr, i32 }
          cleanup
  %1858 = extractvalue { ptr, i32 } %1857, 0
  store ptr %1858, ptr %29, align 8
  %1859 = extractvalue { ptr, i32 } %1857, 1
  store i32 %1859, ptr %30, align 4
  br label %1923

1860:                                             ; preds = %1584, %1576
  %1861 = landingpad { ptr, i32 }
          cleanup
  %1862 = extractvalue { ptr, i32 } %1861, 0
  store ptr %1862, ptr %29, align 8
  %1863 = extractvalue { ptr, i32 } %1861, 1
  store i32 %1863, ptr %30, align 4
  br label %1922

1864:                                             ; preds = %1587
  %1865 = landingpad { ptr, i32 }
          cleanup
  %1866 = extractvalue { ptr, i32 } %1865, 0
  store ptr %1866, ptr %29, align 8
  %1867 = extractvalue { ptr, i32 } %1865, 1
  store i32 %1867, ptr %30, align 4
  br label %1921

1868:                                             ; preds = %1590
  %1869 = landingpad { ptr, i32 }
          cleanup
  %1870 = extractvalue { ptr, i32 } %1869, 0
  store ptr %1870, ptr %29, align 8
  %1871 = extractvalue { ptr, i32 } %1869, 1
  store i32 %1871, ptr %30, align 4
  br label %1916

1872:                                             ; preds = %1595, %1592
  %1873 = landingpad { ptr, i32 }
          cleanup
  %1874 = extractvalue { ptr, i32 } %1873, 0
  store ptr %1874, ptr %29, align 8
  %1875 = extractvalue { ptr, i32 } %1873, 1
  store i32 %1875, ptr %30, align 4
  br label %1915

1876:                                             ; preds = %1610, %1602
  %1877 = landingpad { ptr, i32 }
          cleanup
  %1878 = extractvalue { ptr, i32 } %1877, 0
  store ptr %1878, ptr %29, align 8
  %1879 = extractvalue { ptr, i32 } %1877, 1
  store i32 %1879, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %134) #12
  br label %1915

1880:                                             ; preds = %1621
  %1881 = landingpad { ptr, i32 }
          cleanup
  %1882 = extractvalue { ptr, i32 } %1881, 0
  store ptr %1882, ptr %29, align 8
  %1883 = extractvalue { ptr, i32 } %1881, 1
  store i32 %1883, ptr %30, align 4
  br label %1914

1884:                                             ; preds = %1651, %1637, %1627
  %1885 = landingpad { ptr, i32 }
          cleanup
  %1886 = extractvalue { ptr, i32 } %1885, 0
  store ptr %1886, ptr %29, align 8
  %1887 = extractvalue { ptr, i32 } %1885, 1
  store i32 %1887, ptr %30, align 4
  br label %1913

1888:                                             ; preds = %1669
  %1889 = landingpad { ptr, i32 }
          cleanup
  %1890 = extractvalue { ptr, i32 } %1889, 0
  store ptr %1890, ptr %29, align 8
  %1891 = extractvalue { ptr, i32 } %1889, 1
  store i32 %1891, ptr %30, align 4
  br label %1912

1892:                                             ; preds = %1798, %1786, %1774, %1762, %1754, %1733, %1721, %1709, %1697, %1683, %1671
  %1893 = landingpad { ptr, i32 }
          cleanup
  %1894 = extractvalue { ptr, i32 } %1893, 0
  store ptr %1894, ptr %29, align 8
  %1895 = extractvalue { ptr, i32 } %1893, 1
  store i32 %1895, ptr %30, align 4
  br label %1911

1896:                                             ; preds = %1823
  %1897 = landingpad { ptr, i32 }
          cleanup
  %1898 = extractvalue { ptr, i32 } %1897, 0
  store ptr %1898, ptr %29, align 8
  %1899 = extractvalue { ptr, i32 } %1897, 1
  store i32 %1899, ptr %30, align 4
  br label %1904

1900:                                             ; preds = %1829, %1825
  %1901 = landingpad { ptr, i32 }
          cleanup
  %1902 = extractvalue { ptr, i32 } %1901, 0
  store ptr %1902, ptr %29, align 8
  %1903 = extractvalue { ptr, i32 } %1901, 1
  store i32 %1903, ptr %30, align 4
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %161) #12
  br label %1904

1904:                                             ; preds = %1900, %1896
  call void @llvm.lifetime.end.p0(i64 64, ptr %161) #12
  br label %1909

1905:                                             ; preds = %1851, %1844
  %1906 = landingpad { ptr, i32 }
          cleanup
  %1907 = extractvalue { ptr, i32 } %1906, 0
  store ptr %1907, ptr %29, align 8
  %1908 = extractvalue { ptr, i32 } %1906, 1
  store i32 %1908, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %164) #12
  br label %1909

1909:                                             ; preds = %1905, %1904
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %160) #12
  call void @llvm.lifetime.end.p0(i64 528, ptr %160) #12
  br label %1911

1910:                                             ; preds = %1855, %1819
  call void @llvm.lifetime.end.p0(i64 16, ptr %144) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %143) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %137) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #12
  br label %1917

1911:                                             ; preds = %1909, %1892
  call void @llvm.lifetime.end.p0(i64 16, ptr %144) #12
  br label %1912

1912:                                             ; preds = %1911, %1888
  call void @llvm.lifetime.end.p0(i64 16, ptr %143) #12
  br label %1913

1913:                                             ; preds = %1912, %1884
  call void @llvm.lifetime.end.p0(i64 16, ptr %137) #12
  br label %1914

1914:                                             ; preds = %1913, %1880
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #12
  br label %1915

1915:                                             ; preds = %1914, %1876, %1872
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #12
  br label %1916

1916:                                             ; preds = %1915, %1868
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #12
  br label %1921

1917:                                             ; preds = %1910, %1589
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %130) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %130) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %126) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #12
  br label %1918

1918:                                             ; preds = %1917
  %1919 = load ptr, ptr %123, align 8, !tbaa !5
  %1920 = getelementptr inbounds %"class.JPH::RayCastResult", ptr %1919, i32 1
  store ptr %1920, ptr %123, align 8, !tbaa !5
  br label %1516

1921:                                             ; preds = %1916, %1864
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %130) #12
  br label %1922

1922:                                             ; preds = %1921, %1860
  call void @llvm.lifetime.end.p0(i64 24, ptr %130) #12
  br label %1923

1923:                                             ; preds = %1922, %1856
  call void @llvm.lifetime.end.p0(i64 16, ptr %126) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #12
  br label %1924

1924:                                             ; preds = %1923, %1537
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #12
  br label %1925

1925:                                             ; preds = %1924, %1533
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #12
  br label %1972

1926:                                             ; preds = %1520
  %1927 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1928 = load ptr, ptr %1927, align 16, !tbaa !56
  %1929 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %1930 unwind label %1968

1930:                                             ; preds = %1926
  %1931 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %1929, i32 0, i32 1
  %1932 = load float, ptr %1931, align 4, !tbaa !52
  %1933 = invoke { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %93, float noundef %1932)
          to label %1934 unwind label %1968

1934:                                             ; preds = %1930
  %1935 = getelementptr inbounds %"class.JPH::Vec3", ptr %167, i32 0, i32 0
  %1936 = getelementptr inbounds %union.anon, ptr %1935, i32 0, i32 0
  %1937 = getelementptr inbounds { double, double }, ptr %1936, i32 0, i32 0
  %1938 = extractvalue { double, double } %1933, 0
  store double %1938, ptr %1937, align 16
  %1939 = getelementptr inbounds { double, double }, ptr %1936, i32 0, i32 1
  %1940 = extractvalue { double, double } %1933, 1
  store double %1940, ptr %1939, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %169, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %1941 = getelementptr inbounds { double, double }, ptr %169, i32 0, i32 0
  %1942 = load double, ptr %1941, align 16
  %1943 = getelementptr inbounds { double, double }, ptr %169, i32 0, i32 1
  %1944 = load double, ptr %1943, align 8
  %1945 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %1942, double %1944)
          to label %1946 unwind label %1968

1946:                                             ; preds = %1934
  %1947 = getelementptr inbounds %"class.JPH::Vec3", ptr %168, i32 0, i32 0
  %1948 = getelementptr inbounds %union.anon, ptr %1947, i32 0, i32 0
  %1949 = getelementptr inbounds { double, double }, ptr %1948, i32 0, i32 0
  %1950 = extractvalue { double, double } %1945, 0
  store double %1950, ptr %1949, align 16
  %1951 = getelementptr inbounds { double, double }, ptr %1948, i32 0, i32 1
  %1952 = extractvalue { double, double } %1945, 1
  store double %1952, ptr %1951, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %170, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %1953 = getelementptr inbounds { double, double }, ptr %167, i32 0, i32 0
  %1954 = load double, ptr %1953, align 16
  %1955 = getelementptr inbounds { double, double }, ptr %167, i32 0, i32 1
  %1956 = load double, ptr %1955, align 8
  %1957 = getelementptr inbounds { double, double }, ptr %168, i32 0, i32 0
  %1958 = load double, ptr %1957, align 16
  %1959 = getelementptr inbounds { double, double }, ptr %168, i32 0, i32 1
  %1960 = load double, ptr %1959, align 8
  %1961 = getelementptr inbounds %"class.JPH::Color", ptr %170, i32 0, i32 0
  %1962 = getelementptr inbounds %union.anon.62, ptr %1961, i32 0, i32 0
  %1963 = load i32, ptr %1962, align 4
  %1964 = load ptr, ptr %1928, align 8, !tbaa !58
  %1965 = getelementptr inbounds ptr, ptr %1964, i64 2
  %1966 = load ptr, ptr %1965, align 8
  invoke void %1966(ptr noundef nonnull align 8 dereferenceable(320) %1928, double %1954, double %1956, double %1958, double %1960, i32 %1963)
          to label %1967 unwind label %1968

1967:                                             ; preds = %1946
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %120) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #12
  br label %2026

1968:                                             ; preds = %1946, %1934, %1930, %1926
  %1969 = landingpad { ptr, i32 }
          cleanup
  %1970 = extractvalue { ptr, i32 } %1969, 0
  store ptr %1970, ptr %29, align 8
  %1971 = extractvalue { ptr, i32 } %1969, 1
  store i32 %1971, ptr %30, align 4
  br label %1972

1972:                                             ; preds = %1968, %1925
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %120) #12
  br label %1973

1973:                                             ; preds = %1972, %1529, %1525
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #12
  br label %2027

1974:                                             ; preds = %1483
  %1975 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %1976 = load ptr, ptr %1975, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %171, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %173, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %1977 = getelementptr inbounds { double, double }, ptr %173, i32 0, i32 0
  %1978 = load double, ptr %1977, align 16
  %1979 = getelementptr inbounds { double, double }, ptr %173, i32 0, i32 1
  %1980 = load double, ptr %1979, align 8
  %1981 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %1978, double %1980)
          to label %1982 unwind label %1521

1982:                                             ; preds = %1974
  %1983 = getelementptr inbounds %"class.JPH::Vec3", ptr %172, i32 0, i32 0
  %1984 = getelementptr inbounds %union.anon, ptr %1983, i32 0, i32 0
  %1985 = getelementptr inbounds { double, double }, ptr %1984, i32 0, i32 0
  %1986 = extractvalue { double, double } %1981, 0
  store double %1986, ptr %1985, align 16
  %1987 = getelementptr inbounds { double, double }, ptr %1984, i32 0, i32 1
  %1988 = extractvalue { double, double } %1981, 1
  store double %1988, ptr %1987, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %174, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %1989 = getelementptr inbounds { double, double }, ptr %171, i32 0, i32 0
  %1990 = load double, ptr %1989, align 16
  %1991 = getelementptr inbounds { double, double }, ptr %171, i32 0, i32 1
  %1992 = load double, ptr %1991, align 8
  %1993 = getelementptr inbounds { double, double }, ptr %172, i32 0, i32 0
  %1994 = load double, ptr %1993, align 16
  %1995 = getelementptr inbounds { double, double }, ptr %172, i32 0, i32 1
  %1996 = load double, ptr %1995, align 8
  %1997 = getelementptr inbounds %"class.JPH::Color", ptr %174, i32 0, i32 0
  %1998 = getelementptr inbounds %union.anon.62, ptr %1997, i32 0, i32 0
  %1999 = load i32, ptr %1998, align 4
  %2000 = load ptr, ptr %1976, align 8, !tbaa !58
  %2001 = getelementptr inbounds ptr, ptr %2000, i64 2
  %2002 = load ptr, ptr %2001, align 8
  invoke void %2002(ptr noundef nonnull align 8 dereferenceable(320) %1976, double %1990, double %1992, double %1994, double %1996, i32 %1999)
          to label %2003 unwind label %1521

2003:                                             ; preds = %1982
  %2004 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2005 = load ptr, ptr %2004, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %176, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %2006 = getelementptr inbounds { double, double }, ptr %176, i32 0, i32 0
  %2007 = load double, ptr %2006, align 16
  %2008 = getelementptr inbounds { double, double }, ptr %176, i32 0, i32 1
  %2009 = load double, ptr %2008, align 8
  %2010 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %2007, double %2009)
          to label %2011 unwind label %1521

2011:                                             ; preds = %2003
  %2012 = getelementptr inbounds %"class.JPH::Vec3", ptr %175, i32 0, i32 0
  %2013 = getelementptr inbounds %union.anon, ptr %2012, i32 0, i32 0
  %2014 = getelementptr inbounds { double, double }, ptr %2013, i32 0, i32 0
  %2015 = extractvalue { double, double } %2010, 0
  store double %2015, ptr %2014, align 16
  %2016 = getelementptr inbounds { double, double }, ptr %2013, i32 0, i32 1
  %2017 = extractvalue { double, double } %2010, 1
  store double %2017, ptr %2016, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %177, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %2018 = getelementptr inbounds { double, double }, ptr %175, i32 0, i32 0
  %2019 = load double, ptr %2018, align 16
  %2020 = getelementptr inbounds { double, double }, ptr %175, i32 0, i32 1
  %2021 = load double, ptr %2020, align 8
  %2022 = getelementptr inbounds %"class.JPH::Color", ptr %177, i32 0, i32 0
  %2023 = getelementptr inbounds %union.anon.62, ptr %2022, i32 0, i32 0
  %2024 = load i32, ptr %2023, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2005, double %2019, double %2021, i32 %2024, float noundef 0x3FB99999A0000000)
          to label %2025 unwind label %1521

2025:                                             ; preds = %2011
  br label %2026

2026:                                             ; preds = %2025, %1967
  call void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %97) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %97) #12
  call void @llvm.lifetime.end.p0(i64 3, ptr %96) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #12
  br label %6190

2027:                                             ; preds = %1973, %1521, %1478, %1435, %1388, %1351
  call void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %97) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %97) #12
  call void @llvm.lifetime.end.p0(i64 3, ptr %96) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #12
  br label %6193

2028:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %178) #12
  store float 0x3FB99999A0000000, ptr %178, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %179) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %181, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %2029 = getelementptr inbounds { double, double }, ptr %181, i32 0, i32 0
  %2030 = load double, ptr %2029, align 16
  %2031 = getelementptr inbounds { double, double }, ptr %181, i32 0, i32 1
  %2032 = load double, ptr %2031, align 8
  %2033 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %2030, double %2032)
  %2034 = getelementptr inbounds %"class.JPH::Vec3", ptr %180, i32 0, i32 0
  %2035 = getelementptr inbounds %union.anon, ptr %2034, i32 0, i32 0
  %2036 = getelementptr inbounds { double, double }, ptr %2035, i32 0, i32 0
  %2037 = extractvalue { double, double } %2033, 0
  store double %2037, ptr %2036, align 16
  %2038 = getelementptr inbounds { double, double }, ptr %2035, i32 0, i32 1
  %2039 = extractvalue { double, double } %2033, 1
  store double %2039, ptr %2038, align 8
  %2040 = getelementptr inbounds { double, double }, ptr %180, i32 0, i32 0
  %2041 = load double, ptr %2040, align 16
  %2042 = getelementptr inbounds { double, double }, ptr %180, i32 0, i32 1
  %2043 = load double, ptr %2042, align 8
  %2044 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %2041, double %2043)
  %2045 = getelementptr inbounds %"class.JPH::Vec3", ptr %179, i32 0, i32 0
  %2046 = getelementptr inbounds %union.anon, ptr %2045, i32 0, i32 0
  %2047 = getelementptr inbounds { double, double }, ptr %2046, i32 0, i32 0
  %2048 = extractvalue { double, double } %2044, 0
  store double %2048, ptr %2047, align 16
  %2049 = getelementptr inbounds { double, double }, ptr %2046, i32 0, i32 1
  %2050 = extractvalue { double, double } %2044, 1
  store double %2050, ptr %2049, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr %182) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %182) #12
  %2051 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %2052 = load ptr, ptr %2051, align 8, !tbaa !50
  %2053 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2052)
          to label %2054 unwind label %2081

2054:                                             ; preds = %2028
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %183, ptr align 16 %179, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %184) #12
  call void @llvm.memset.p0.i64(ptr align 8 %184, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %184) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %185) #12
  call void @llvm.memset.p0.i64(ptr align 8 %185, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %185) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %186) #12
  call void @llvm.memset.p0.i64(ptr align 8 %186, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %186) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %187) #12
  call void @llvm.memset.p0.i64(ptr align 8 %187, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %187)
          to label %2055 unwind label %2085

2055:                                             ; preds = %2054
  %2056 = getelementptr inbounds { double, double }, ptr %183, i32 0, i32 0
  %2057 = load double, ptr %2056, align 16
  %2058 = getelementptr inbounds { double, double }, ptr %183, i32 0, i32 1
  %2059 = load double, ptr %2058, align 8
  invoke void @_ZNK3JPH16NarrowPhaseQuery12CollidePointENS_4Vec3ERNS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %2053, double %2057, double %2059, ptr noundef nonnull align 8 dereferenceable(24) %182, ptr noundef nonnull align 8 dereferenceable(8) %184, ptr noundef nonnull align 8 dereferenceable(8) %185, ptr noundef nonnull align 8 dereferenceable(8) %186, ptr noundef nonnull align 8 dereferenceable(12) %187)
          to label %2060 unwind label %2089

2060:                                             ; preds = %2055
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %187) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %187) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %186) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %186) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %185) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %185) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %184) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %184) #12
  %2061 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.153", ptr %182, i32 0, i32 1
  %2062 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_18CollidePointResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2061)
          to label %2063 unwind label %2081

2063:                                             ; preds = %2060
  %2064 = xor i1 %2062, true
  %2065 = zext i1 %2064 to i8
  store i8 %2065, ptr %21, align 1, !tbaa !16
  %2066 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %2067 = trunc i8 %2066 to i1
  br i1 %2067, label %2068, label %2174

2068:                                             ; preds = %2063
  call void @llvm.lifetime.start.p0(i64 8, ptr %188) #12
  %2069 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.153", ptr %182, i32 0, i32 1
  store ptr %2069, ptr %188, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %189) #12
  %2070 = load ptr, ptr %188, align 8, !tbaa !5
  %2071 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollidePointResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2070)
          to label %2072 unwind label %2094

2072:                                             ; preds = %2068
  store ptr %2071, ptr %189, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %190) #12
  %2073 = load ptr, ptr %188, align 8, !tbaa !5
  %2074 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollidePointResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2073)
          to label %2075 unwind label %2098

2075:                                             ; preds = %2072
  store ptr %2074, ptr %190, align 8, !tbaa !5
  br label %2076

2076:                                             ; preds = %2166, %2075
  %2077 = load ptr, ptr %189, align 8, !tbaa !5
  %2078 = load ptr, ptr %190, align 8, !tbaa !5
  %2079 = icmp ne ptr %2077, %2078
  br i1 %2079, label %2102, label %2080

2080:                                             ; preds = %2076
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %189) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #12
  br label %2173

2081:                                             ; preds = %2181, %2060, %2028
  %2082 = landingpad { ptr, i32 }
          cleanup
  %2083 = extractvalue { ptr, i32 } %2082, 0
  store ptr %2083, ptr %29, align 8
  %2084 = extractvalue { ptr, i32 } %2082, 1
  store i32 %2084, ptr %30, align 4
  br label %2191

2085:                                             ; preds = %2054
  %2086 = landingpad { ptr, i32 }
          cleanup
  %2087 = extractvalue { ptr, i32 } %2086, 0
  store ptr %2087, ptr %29, align 8
  %2088 = extractvalue { ptr, i32 } %2086, 1
  store i32 %2088, ptr %30, align 4
  br label %2093

2089:                                             ; preds = %2055
  %2090 = landingpad { ptr, i32 }
          cleanup
  %2091 = extractvalue { ptr, i32 } %2090, 0
  store ptr %2091, ptr %29, align 8
  %2092 = extractvalue { ptr, i32 } %2090, 1
  store i32 %2092, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %187) #12
  br label %2093

2093:                                             ; preds = %2089, %2085
  call void @llvm.lifetime.end.p0(i64 16, ptr %187) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %186) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %186) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %185) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %185) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %184) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %184) #12
  br label %2191

2094:                                             ; preds = %2068
  %2095 = landingpad { ptr, i32 }
          cleanup
  %2096 = extractvalue { ptr, i32 } %2095, 0
  store ptr %2096, ptr %29, align 8
  %2097 = extractvalue { ptr, i32 } %2095, 1
  store i32 %2097, ptr %30, align 4
  br label %2172

2098:                                             ; preds = %2072
  %2099 = landingpad { ptr, i32 }
          cleanup
  %2100 = extractvalue { ptr, i32 } %2099, 0
  store ptr %2100, ptr %29, align 8
  %2101 = extractvalue { ptr, i32 } %2099, 1
  store i32 %2101, ptr %30, align 4
  br label %2171

2102:                                             ; preds = %2076
  call void @llvm.lifetime.start.p0(i64 8, ptr %191) #12
  %2103 = load ptr, ptr %189, align 8, !tbaa !5
  store ptr %2103, ptr %191, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %192) #12
  %2104 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %2105 = load ptr, ptr %2104, align 8, !tbaa !50
  %2106 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %2105)
          to label %2107 unwind label %2138

2107:                                             ; preds = %2102
  %2108 = load ptr, ptr %191, align 8, !tbaa !5
  %2109 = getelementptr inbounds %"class.JPH::CollidePointResult", ptr %2108, i32 0, i32 0
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %192, ptr noundef nonnull align 8 dereferenceable(16) %2106, ptr noundef nonnull align 4 dereferenceable(4) %2109)
          to label %2110 unwind label %2138

2110:                                             ; preds = %2107
  %2111 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %192)
          to label %2112 unwind label %2142

2112:                                             ; preds = %2110
  br i1 %2111, label %2113, label %2165

2113:                                             ; preds = %2112
  call void @llvm.lifetime.start.p0(i64 8, ptr %193) #12
  %2114 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %192)
          to label %2115 unwind label %2146

2115:                                             ; preds = %2113
  store ptr %2114, ptr %193, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %194) #12
  %2116 = load ptr, ptr %193, align 8, !tbaa !5
  %2117 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %2116)
          to label %2118 unwind label %2150

2118:                                             ; preds = %2115
  br i1 %2117, label %2119, label %2120

2119:                                             ; preds = %2118
  br label %2121

2120:                                             ; preds = %2118
  br label %2121

2121:                                             ; preds = %2120, %2119
  %2122 = phi ptr [ @_ZN3JPH5Color7sYellowE, %2119 ], [ @_ZN3JPH5Color7sOrangeE, %2120 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %194, ptr align 4 %2122, i64 4, i1 false), !tbaa.struct !57
  %2123 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2124 = load ptr, ptr %2123, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %195) #12
  %2125 = load ptr, ptr %193, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %195, ptr noundef nonnull align 16 dereferenceable(122) %2125)
          to label %2126 unwind label %2154

2126:                                             ; preds = %2121
  call void @llvm.lifetime.start.p0(i64 32, ptr %196) #12
  %2127 = load ptr, ptr %193, align 8, !tbaa !5
  %2128 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %2127)
          to label %2129 unwind label %2158

2129:                                             ; preds = %2126
  %2130 = load ptr, ptr %2128, align 8, !tbaa !58
  %2131 = getelementptr inbounds ptr, ptr %2130, i64 4
  %2132 = load ptr, ptr %2131, align 8
  invoke void %2132(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %196, ptr noundef nonnull align 8 dereferenceable(26) %2128)
          to label %2133 unwind label %2158

2133:                                             ; preds = %2129
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %197, ptr align 4 %194, i64 4, i1 false), !tbaa.struct !57
  %2134 = getelementptr inbounds %"class.JPH::Color", ptr %197, i32 0, i32 0
  %2135 = getelementptr inbounds %union.anon.62, ptr %2134, i32 0, i32 0
  %2136 = load i32, ptr %2135, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2124, ptr noundef nonnull align 16 dereferenceable(64) %195, ptr noundef nonnull align 16 dereferenceable(32) %196, i32 %2136)
          to label %2137 unwind label %2158

2137:                                             ; preds = %2133
  call void @llvm.lifetime.end.p0(i64 32, ptr %196) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %195) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %194) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %193) #12
  br label %2165

2138:                                             ; preds = %2107, %2102
  %2139 = landingpad { ptr, i32 }
          cleanup
  %2140 = extractvalue { ptr, i32 } %2139, 0
  store ptr %2140, ptr %29, align 8
  %2141 = extractvalue { ptr, i32 } %2139, 1
  store i32 %2141, ptr %30, align 4
  br label %2170

2142:                                             ; preds = %2110
  %2143 = landingpad { ptr, i32 }
          cleanup
  %2144 = extractvalue { ptr, i32 } %2143, 0
  store ptr %2144, ptr %29, align 8
  %2145 = extractvalue { ptr, i32 } %2143, 1
  store i32 %2145, ptr %30, align 4
  br label %2169

2146:                                             ; preds = %2113
  %2147 = landingpad { ptr, i32 }
          cleanup
  %2148 = extractvalue { ptr, i32 } %2147, 0
  store ptr %2148, ptr %29, align 8
  %2149 = extractvalue { ptr, i32 } %2147, 1
  store i32 %2149, ptr %30, align 4
  br label %2164

2150:                                             ; preds = %2115
  %2151 = landingpad { ptr, i32 }
          cleanup
  %2152 = extractvalue { ptr, i32 } %2151, 0
  store ptr %2152, ptr %29, align 8
  %2153 = extractvalue { ptr, i32 } %2151, 1
  store i32 %2153, ptr %30, align 4
  br label %2163

2154:                                             ; preds = %2121
  %2155 = landingpad { ptr, i32 }
          cleanup
  %2156 = extractvalue { ptr, i32 } %2155, 0
  store ptr %2156, ptr %29, align 8
  %2157 = extractvalue { ptr, i32 } %2155, 1
  store i32 %2157, ptr %30, align 4
  br label %2162

2158:                                             ; preds = %2133, %2129, %2126
  %2159 = landingpad { ptr, i32 }
          cleanup
  %2160 = extractvalue { ptr, i32 } %2159, 0
  store ptr %2160, ptr %29, align 8
  %2161 = extractvalue { ptr, i32 } %2159, 1
  store i32 %2161, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %196) #12
  br label %2162

2162:                                             ; preds = %2158, %2154
  call void @llvm.lifetime.end.p0(i64 64, ptr %195) #12
  br label %2163

2163:                                             ; preds = %2162, %2150
  call void @llvm.lifetime.end.p0(i64 4, ptr %194) #12
  br label %2164

2164:                                             ; preds = %2163, %2146
  call void @llvm.lifetime.end.p0(i64 8, ptr %193) #12
  br label %2169

2165:                                             ; preds = %2137, %2112
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %192) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %192) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %191) #12
  br label %2166

2166:                                             ; preds = %2165
  %2167 = load ptr, ptr %189, align 8, !tbaa !5
  %2168 = getelementptr inbounds %"class.JPH::CollidePointResult", ptr %2167, i32 1
  store ptr %2168, ptr %189, align 8, !tbaa !5
  br label %2076

2169:                                             ; preds = %2164, %2142
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %192) #12
  br label %2170

2170:                                             ; preds = %2169, %2138
  call void @llvm.lifetime.end.p0(i64 24, ptr %192) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %191) #12
  br label %2171

2171:                                             ; preds = %2170, %2098
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #12
  br label %2172

2172:                                             ; preds = %2171, %2094
  call void @llvm.lifetime.end.p0(i64 8, ptr %189) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #12
  br label %2191

2173:                                             ; preds = %2080
  br label %2174

2174:                                             ; preds = %2173, %2063
  %2175 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2176 = load ptr, ptr %2175, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %198, ptr align 16 %179, i64 16, i1 false), !tbaa.struct !11
  %2177 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %2178 = trunc i8 %2177 to i1
  br i1 %2178, label %2179, label %2180

2179:                                             ; preds = %2174
  br label %2181

2180:                                             ; preds = %2174
  br label %2181

2181:                                             ; preds = %2180, %2179
  %2182 = phi ptr [ @_ZN3JPH5Color6sGreenE, %2179 ], [ @_ZN3JPH5Color4sRedE, %2180 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %199, ptr align 4 %2182, i64 4, i1 false), !tbaa.struct !57
  %2183 = getelementptr inbounds { double, double }, ptr %198, i32 0, i32 0
  %2184 = load double, ptr %2183, align 16
  %2185 = getelementptr inbounds { double, double }, ptr %198, i32 0, i32 1
  %2186 = load double, ptr %2185, align 8
  %2187 = getelementptr inbounds %"class.JPH::Color", ptr %199, i32 0, i32 0
  %2188 = getelementptr inbounds %union.anon.62, ptr %2187, i32 0, i32 0
  %2189 = load i32, ptr %2188, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2176, double %2184, double %2186, i32 %2189, float noundef 0x3FB99999A0000000)
          to label %2190 unwind label %2081

2190:                                             ; preds = %2181
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %182) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %182) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %179) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %178) #12
  br label %6190

2191:                                             ; preds = %2172, %2093, %2081
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %182) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %182) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %179) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %178) #12
  br label %6193

2192:                                             ; preds = %5, %5
  call void @llvm.lifetime.start.p0(i64 8, ptr %200) #12
  call void @_ZN10SamplesApp16CreateProbeShapeEv(ptr dead_on_unwind writable sret(%"class.JPH::RefConst.74") align 8 %200, ptr noundef nonnull align 16 dereferenceable(712) %718)
  call void @llvm.lifetime.start.p0(i64 64, ptr %201) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %202) #12
  %2193 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %2194 unwind label %2309

2194:                                             ; preds = %2192
  %2195 = getelementptr inbounds %"class.JPH::Vec3", ptr %203, i32 0, i32 0
  %2196 = getelementptr inbounds %union.anon, ptr %2195, i32 0, i32 0
  %2197 = getelementptr inbounds { double, double }, ptr %2196, i32 0, i32 0
  %2198 = extractvalue { double, double } %2193, 0
  store double %2198, ptr %2197, align 16
  %2199 = getelementptr inbounds { double, double }, ptr %2196, i32 0, i32 1
  %2200 = extractvalue { double, double } %2193, 1
  store double %2200, ptr %2199, align 8
  %2201 = getelementptr inbounds { double, double }, ptr %203, i32 0, i32 0
  %2202 = load double, ptr %2201, align 16
  %2203 = getelementptr inbounds { double, double }, ptr %203, i32 0, i32 1
  %2204 = load double, ptr %2203, align 8
  invoke void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %202, double %2202, double %2204, float noundef 0x3FD41B2F80000000)
          to label %2205 unwind label %2309

2205:                                             ; preds = %2194
  call void @llvm.lifetime.start.p0(i64 64, ptr %204) #12
  %2206 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %2207 unwind label %2313

2207:                                             ; preds = %2205
  %2208 = getelementptr inbounds %"class.JPH::Vec3", ptr %205, i32 0, i32 0
  %2209 = getelementptr inbounds %union.anon, ptr %2208, i32 0, i32 0
  %2210 = getelementptr inbounds { double, double }, ptr %2209, i32 0, i32 0
  %2211 = extractvalue { double, double } %2206, 0
  store double %2211, ptr %2210, align 16
  %2212 = getelementptr inbounds { double, double }, ptr %2209, i32 0, i32 1
  %2213 = extractvalue { double, double } %2206, 1
  store double %2213, ptr %2212, align 8
  %2214 = getelementptr inbounds { double, double }, ptr %205, i32 0, i32 0
  %2215 = load double, ptr %2214, align 16
  %2216 = getelementptr inbounds { double, double }, ptr %205, i32 0, i32 1
  %2217 = load double, ptr %2216, align 8
  invoke void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %204, double %2215, double %2217, float noundef 0x3FE41B2F80000000)
          to label %2218 unwind label %2313

2218:                                             ; preds = %2207
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %201, ptr noundef nonnull align 16 dereferenceable(64) %202, ptr noundef nonnull align 16 dereferenceable(64) %204)
          to label %2219 unwind label %2313

2219:                                             ; preds = %2218
  call void @llvm.lifetime.end.p0(i64 64, ptr %204) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %202) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %206) #12
  %2220 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %200)
          to label %2221 unwind label %2318

2221:                                             ; preds = %2219
  %2222 = load ptr, ptr %2220, align 8, !tbaa !58
  %2223 = getelementptr inbounds ptr, ptr %2222, i64 3
  %2224 = load ptr, ptr %2223, align 8
  %2225 = invoke { double, double } %2224(ptr noundef nonnull align 8 dereferenceable(26) %2220)
          to label %2226 unwind label %2318

2226:                                             ; preds = %2221
  %2227 = getelementptr inbounds %"class.JPH::Vec3", ptr %207, i32 0, i32 0
  %2228 = getelementptr inbounds %union.anon, ptr %2227, i32 0, i32 0
  %2229 = getelementptr inbounds { double, double }, ptr %2228, i32 0, i32 0
  %2230 = extractvalue { double, double } %2225, 0
  store double %2230, ptr %2229, align 16
  %2231 = getelementptr inbounds { double, double }, ptr %2228, i32 0, i32 1
  %2232 = extractvalue { double, double } %2225, 1
  store double %2232, ptr %2231, align 8
  %2233 = getelementptr inbounds { double, double }, ptr %207, i32 0, i32 0
  %2234 = load double, ptr %2233, align 16
  %2235 = getelementptr inbounds { double, double }, ptr %207, i32 0, i32 1
  %2236 = load double, ptr %2235, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %206, double %2234, double %2236)
          to label %2237 unwind label %2318

2237:                                             ; preds = %2226
  call void @llvm.lifetime.start.p0(i64 64, ptr %208) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %209) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %210) #12
  %2238 = load ptr, ptr %11, align 8, !tbaa !5
  %2239 = getelementptr inbounds %struct.CameraState, ptr %2238, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %213, ptr align 16 %2239, i64 16, i1 false), !tbaa.struct !11
  %2240 = getelementptr inbounds { double, double }, ptr %213, i32 0, i32 0
  %2241 = load double, ptr %2240, align 16
  %2242 = getelementptr inbounds { double, double }, ptr %213, i32 0, i32 1
  %2243 = load double, ptr %2242, align 8
  %2244 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 5.000000e+00, double %2241, double %2243)
          to label %2245 unwind label %2322

2245:                                             ; preds = %2237
  %2246 = getelementptr inbounds %"class.JPH::Vec3", ptr %212, i32 0, i32 0
  %2247 = getelementptr inbounds %union.anon, ptr %2246, i32 0, i32 0
  %2248 = getelementptr inbounds { double, double }, ptr %2247, i32 0, i32 0
  %2249 = extractvalue { double, double } %2244, 0
  store double %2249, ptr %2248, align 16
  %2250 = getelementptr inbounds { double, double }, ptr %2247, i32 0, i32 1
  %2251 = extractvalue { double, double } %2244, 1
  store double %2251, ptr %2250, align 8
  %2252 = getelementptr inbounds { double, double }, ptr %212, i32 0, i32 0
  %2253 = load double, ptr %2252, align 16
  %2254 = getelementptr inbounds { double, double }, ptr %212, i32 0, i32 1
  %2255 = load double, ptr %2254, align 8
  %2256 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %2253, double %2255)
          to label %2257 unwind label %2322

2257:                                             ; preds = %2245
  %2258 = getelementptr inbounds %"class.JPH::Vec3", ptr %211, i32 0, i32 0
  %2259 = getelementptr inbounds %union.anon, ptr %2258, i32 0, i32 0
  %2260 = getelementptr inbounds { double, double }, ptr %2259, i32 0, i32 0
  %2261 = extractvalue { double, double } %2256, 0
  store double %2261, ptr %2260, align 16
  %2262 = getelementptr inbounds { double, double }, ptr %2259, i32 0, i32 1
  %2263 = extractvalue { double, double } %2256, 1
  store double %2263, ptr %2262, align 8
  %2264 = getelementptr inbounds { double, double }, ptr %211, i32 0, i32 0
  %2265 = load double, ptr %2264, align 16
  %2266 = getelementptr inbounds { double, double }, ptr %211, i32 0, i32 1
  %2267 = load double, ptr %2266, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %210, double %2265, double %2267)
          to label %2268 unwind label %2322

2268:                                             ; preds = %2257
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %209, ptr noundef nonnull align 16 dereferenceable(64) %210, ptr noundef nonnull align 16 dereferenceable(64) %201)
          to label %2269 unwind label %2322

2269:                                             ; preds = %2268
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %208, ptr noundef nonnull align 16 dereferenceable(64) %209, ptr noundef nonnull align 16 dereferenceable(64) %206)
          to label %2270 unwind label %2322

2270:                                             ; preds = %2269
  call void @llvm.lifetime.end.p0(i64 64, ptr %210) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %209) #12
  call void @llvm.lifetime.start.p0(i64 48, ptr %214) #12
  invoke void @_ZN3JPH20CollideShapeSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(37) %214)
          to label %2271 unwind label %2326

2271:                                             ; preds = %2270
  %2272 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 37
  %2273 = load i8, ptr %2272, align 2, !tbaa !70
  %2274 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %214, i32 0, i32 0
  store i8 %2273, ptr %2274, align 16, !tbaa !71
  %2275 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 35
  %2276 = load i8, ptr %2275, align 16, !tbaa !61
  %2277 = getelementptr inbounds %"class.JPH::CollideShapeSettings", ptr %214, i32 0, i32 2
  store i8 %2276, ptr %2277, align 4, !tbaa !73
  %2278 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 38
  %2279 = load i8, ptr %2278, align 1, !tbaa !75
  %2280 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %214, i32 0, i32 1
  store i8 %2279, ptr %2280, align 1, !tbaa !76
  %2281 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 39
  %2282 = load float, ptr %2281, align 4, !tbaa !77
  %2283 = getelementptr inbounds %"class.JPH::CollideShapeSettings", ptr %214, i32 0, i32 1
  store float %2282, ptr %2283, align 16, !tbaa !78
  call void @llvm.lifetime.start.p0(i64 16, ptr %215) #12
  %2284 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 30
  %2285 = load i32, ptr %2284, align 8, !tbaa !18
  %2286 = icmp eq i32 %2285, 4
  %2287 = zext i1 %2286 to i64
  %2288 = select i1 %2286, { i64, i64 } { i64 ptrtoint (ptr @_ZNK3JPH16NarrowPhaseQuery12CollideShapeEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE to i64), i64 0 }, { i64, i64 } { i64 ptrtoint (ptr @_ZNK3JPH16NarrowPhaseQuery35CollideShapeWithInternalEdgeRemovalEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE to i64), i64 0 }
  store { i64, i64 } %2288, ptr %215, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr %216) #12
  call void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %216) #12
  %2289 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %2290 = load i32, ptr %2289, align 4, !tbaa !68
  %2291 = icmp eq i32 %2290, 0
  br i1 %2291, label %2292, label %2379

2292:                                             ; preds = %2271
  call void @llvm.lifetime.start.p0(i64 1168, ptr %217) #12
  invoke void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %217)
          to label %2293 unwind label %2330

2293:                                             ; preds = %2292
  %2294 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %2295 = load ptr, ptr %2294, align 8, !tbaa !50
  %2296 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2295)
          to label %2297 unwind label %2334

2297:                                             ; preds = %2293
  %2298 = load { i64, i64 }, ptr %215, align 8, !tbaa !12
  %2299 = extractvalue { i64, i64 } %2298, 1
  %2300 = getelementptr inbounds i8, ptr %2296, i64 %2299
  %2301 = extractvalue { i64, i64 } %2298, 0
  %2302 = and i64 %2301, 1
  %2303 = icmp ne i64 %2302, 0
  br i1 %2303, label %2304, label %2338

2304:                                             ; preds = %2297
  %2305 = load ptr, ptr %2300, align 8, !tbaa !58
  %2306 = sub i64 %2301, 1
  %2307 = getelementptr i8, ptr %2305, i64 %2306, !nosanitize !55
  %2308 = load ptr, ptr %2307, align 8, !nosanitize !55
  br label %2340

2309:                                             ; preds = %2194, %2192
  %2310 = landingpad { ptr, i32 }
          cleanup
  %2311 = extractvalue { ptr, i32 } %2310, 0
  store ptr %2311, ptr %29, align 8
  %2312 = extractvalue { ptr, i32 } %2310, 1
  store i32 %2312, ptr %30, align 4
  br label %2317

2313:                                             ; preds = %2218, %2207, %2205
  %2314 = landingpad { ptr, i32 }
          cleanup
  %2315 = extractvalue { ptr, i32 } %2314, 0
  store ptr %2315, ptr %29, align 8
  %2316 = extractvalue { ptr, i32 } %2314, 1
  store i32 %2316, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %204) #12
  br label %2317

2317:                                             ; preds = %2313, %2309
  call void @llvm.lifetime.end.p0(i64 64, ptr %202) #12
  br label %2888

2318:                                             ; preds = %2226, %2221, %2219
  %2319 = landingpad { ptr, i32 }
          cleanup
  %2320 = extractvalue { ptr, i32 } %2319, 0
  store ptr %2320, ptr %29, align 8
  %2321 = extractvalue { ptr, i32 } %2319, 1
  store i32 %2321, ptr %30, align 4
  br label %2887

2322:                                             ; preds = %2269, %2268, %2257, %2245, %2237
  %2323 = landingpad { ptr, i32 }
          cleanup
  %2324 = extractvalue { ptr, i32 } %2323, 0
  store ptr %2324, ptr %29, align 8
  %2325 = extractvalue { ptr, i32 } %2323, 1
  store i32 %2325, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %210) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %209) #12
  br label %2886

2326:                                             ; preds = %2270
  %2327 = landingpad { ptr, i32 }
          cleanup
  %2328 = extractvalue { ptr, i32 } %2327, 0
  store ptr %2328, ptr %29, align 8
  %2329 = extractvalue { ptr, i32 } %2327, 1
  store i32 %2329, ptr %30, align 4
  br label %2885

2330:                                             ; preds = %2292
  %2331 = landingpad { ptr, i32 }
          cleanup
  %2332 = extractvalue { ptr, i32 } %2331, 0
  store ptr %2332, ptr %29, align 8
  %2333 = extractvalue { ptr, i32 } %2331, 1
  store i32 %2333, ptr %30, align 4
  br label %2378

2334:                                             ; preds = %2364, %2361, %2343, %2340, %2293
  %2335 = landingpad { ptr, i32 }
          cleanup
  %2336 = extractvalue { ptr, i32 } %2335, 0
  store ptr %2336, ptr %29, align 8
  %2337 = extractvalue { ptr, i32 } %2335, 1
  store i32 %2337, ptr %30, align 4
  br label %2377

2338:                                             ; preds = %2297
  %2339 = inttoptr i64 %2301 to ptr
  br label %2340

2340:                                             ; preds = %2338, %2304
  %2341 = phi ptr [ %2308, %2304 ], [ %2339, %2338 ]
  %2342 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %200)
          to label %2343 unwind label %2334

2343:                                             ; preds = %2340
  %2344 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %2345 unwind label %2334

2345:                                             ; preds = %2343
  %2346 = getelementptr inbounds %"class.JPH::Vec3", ptr %218, i32 0, i32 0
  %2347 = getelementptr inbounds %union.anon, ptr %2346, i32 0, i32 0
  %2348 = getelementptr inbounds { double, double }, ptr %2347, i32 0, i32 0
  %2349 = extractvalue { double, double } %2344, 0
  store double %2349, ptr %2348, align 16
  %2350 = getelementptr inbounds { double, double }, ptr %2347, i32 0, i32 1
  %2351 = extractvalue { double, double } %2344, 1
  store double %2351, ptr %2350, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %219, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %220) #12
  call void @llvm.memset.p0.i64(ptr align 8 %220, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %220) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %221) #12
  call void @llvm.memset.p0.i64(ptr align 8 %221, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %221) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %222) #12
  call void @llvm.memset.p0.i64(ptr align 8 %222, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %222) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %223) #12
  call void @llvm.memset.p0.i64(ptr align 8 %223, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %223)
          to label %2352 unwind label %2367

2352:                                             ; preds = %2345
  %2353 = getelementptr inbounds { double, double }, ptr %218, i32 0, i32 0
  %2354 = load double, ptr %2353, align 16
  %2355 = getelementptr inbounds { double, double }, ptr %218, i32 0, i32 1
  %2356 = load double, ptr %2355, align 8
  %2357 = getelementptr inbounds { double, double }, ptr %219, i32 0, i32 0
  %2358 = load double, ptr %2357, align 16
  %2359 = getelementptr inbounds { double, double }, ptr %219, i32 0, i32 1
  %2360 = load double, ptr %2359, align 8
  invoke void %2341(ptr noundef nonnull align 8 dereferenceable(16) %2300, ptr noundef %2342, double %2354, double %2356, ptr noundef nonnull align 16 dereferenceable(64) %208, ptr noundef nonnull align 16 dereferenceable(37) %214, double %2358, double %2360, ptr noundef nonnull align 8 dereferenceable(24) %217, ptr noundef nonnull align 8 dereferenceable(8) %220, ptr noundef nonnull align 8 dereferenceable(8) %221, ptr noundef nonnull align 8 dereferenceable(8) %222, ptr noundef nonnull align 8 dereferenceable(12) %223)
          to label %2361 unwind label %2371

2361:                                             ; preds = %2352
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %223) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %223) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %222) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %222) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %221) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %221) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %220) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %220) #12
  %2362 = invoke noundef zeroext i1 @_ZNK3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1153) %217)
          to label %2363 unwind label %2334

2363:                                             ; preds = %2361
  br i1 %2362, label %2364, label %2376

2364:                                             ; preds = %2363
  %2365 = getelementptr inbounds %"class.JPH::AnyHitCollisionCollector.161", ptr %217, i32 0, i32 2
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %216, ptr noundef nonnull align 16 dereferenceable(1120) %2365)
          to label %2366 unwind label %2334

2366:                                             ; preds = %2364
  br label %2376

2367:                                             ; preds = %2345
  %2368 = landingpad { ptr, i32 }
          cleanup
  %2369 = extractvalue { ptr, i32 } %2368, 0
  store ptr %2369, ptr %29, align 8
  %2370 = extractvalue { ptr, i32 } %2368, 1
  store i32 %2370, ptr %30, align 4
  br label %2375

2371:                                             ; preds = %2352
  %2372 = landingpad { ptr, i32 }
          cleanup
  %2373 = extractvalue { ptr, i32 } %2372, 0
  store ptr %2373, ptr %29, align 8
  %2374 = extractvalue { ptr, i32 } %2372, 1
  store i32 %2374, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %223) #12
  br label %2375

2375:                                             ; preds = %2371, %2367
  call void @llvm.lifetime.end.p0(i64 16, ptr %223) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %222) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %222) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %221) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %221) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %220) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %220) #12
  br label %2377

2376:                                             ; preds = %2366, %2363
  call void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %217) #12
  call void @llvm.lifetime.end.p0(i64 1168, ptr %217) #12
  br label %2607

2377:                                             ; preds = %2375, %2334
  call void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %217) #12
  br label %2378

2378:                                             ; preds = %2377, %2330
  call void @llvm.lifetime.end.p0(i64 1168, ptr %217) #12
  br label %2884

2379:                                             ; preds = %2271
  %2380 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %2381 = load i32, ptr %2380, align 4, !tbaa !68
  %2382 = icmp eq i32 %2381, 1
  br i1 %2382, label %2383, label %2449

2383:                                             ; preds = %2379
  call void @llvm.lifetime.start.p0(i64 1168, ptr %224) #12
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %224)
          to label %2384 unwind label %2400

2384:                                             ; preds = %2383
  %2385 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %2386 = load ptr, ptr %2385, align 8, !tbaa !50
  %2387 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2386)
          to label %2388 unwind label %2404

2388:                                             ; preds = %2384
  %2389 = load { i64, i64 }, ptr %215, align 8, !tbaa !12
  %2390 = extractvalue { i64, i64 } %2389, 1
  %2391 = getelementptr inbounds i8, ptr %2387, i64 %2390
  %2392 = extractvalue { i64, i64 } %2389, 0
  %2393 = and i64 %2392, 1
  %2394 = icmp ne i64 %2393, 0
  br i1 %2394, label %2395, label %2408

2395:                                             ; preds = %2388
  %2396 = load ptr, ptr %2391, align 8, !tbaa !58
  %2397 = sub i64 %2392, 1
  %2398 = getelementptr i8, ptr %2396, i64 %2397, !nosanitize !55
  %2399 = load ptr, ptr %2398, align 8, !nosanitize !55
  br label %2410

2400:                                             ; preds = %2383
  %2401 = landingpad { ptr, i32 }
          cleanup
  %2402 = extractvalue { ptr, i32 } %2401, 0
  store ptr %2402, ptr %29, align 8
  %2403 = extractvalue { ptr, i32 } %2401, 1
  store i32 %2403, ptr %30, align 4
  br label %2448

2404:                                             ; preds = %2434, %2431, %2413, %2410, %2384
  %2405 = landingpad { ptr, i32 }
          cleanup
  %2406 = extractvalue { ptr, i32 } %2405, 0
  store ptr %2406, ptr %29, align 8
  %2407 = extractvalue { ptr, i32 } %2405, 1
  store i32 %2407, ptr %30, align 4
  br label %2447

2408:                                             ; preds = %2388
  %2409 = inttoptr i64 %2392 to ptr
  br label %2410

2410:                                             ; preds = %2408, %2395
  %2411 = phi ptr [ %2399, %2395 ], [ %2409, %2408 ]
  %2412 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %200)
          to label %2413 unwind label %2404

2413:                                             ; preds = %2410
  %2414 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %2415 unwind label %2404

2415:                                             ; preds = %2413
  %2416 = getelementptr inbounds %"class.JPH::Vec3", ptr %225, i32 0, i32 0
  %2417 = getelementptr inbounds %union.anon, ptr %2416, i32 0, i32 0
  %2418 = getelementptr inbounds { double, double }, ptr %2417, i32 0, i32 0
  %2419 = extractvalue { double, double } %2414, 0
  store double %2419, ptr %2418, align 16
  %2420 = getelementptr inbounds { double, double }, ptr %2417, i32 0, i32 1
  %2421 = extractvalue { double, double } %2414, 1
  store double %2421, ptr %2420, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %226, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %227) #12
  call void @llvm.memset.p0.i64(ptr align 8 %227, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %227) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %228) #12
  call void @llvm.memset.p0.i64(ptr align 8 %228, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %228) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %229) #12
  call void @llvm.memset.p0.i64(ptr align 8 %229, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %229) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %230) #12
  call void @llvm.memset.p0.i64(ptr align 8 %230, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %230)
          to label %2422 unwind label %2437

2422:                                             ; preds = %2415
  %2423 = getelementptr inbounds { double, double }, ptr %225, i32 0, i32 0
  %2424 = load double, ptr %2423, align 16
  %2425 = getelementptr inbounds { double, double }, ptr %225, i32 0, i32 1
  %2426 = load double, ptr %2425, align 8
  %2427 = getelementptr inbounds { double, double }, ptr %226, i32 0, i32 0
  %2428 = load double, ptr %2427, align 16
  %2429 = getelementptr inbounds { double, double }, ptr %226, i32 0, i32 1
  %2430 = load double, ptr %2429, align 8
  invoke void %2411(ptr noundef nonnull align 8 dereferenceable(16) %2391, ptr noundef %2412, double %2424, double %2426, ptr noundef nonnull align 16 dereferenceable(64) %208, ptr noundef nonnull align 16 dereferenceable(37) %214, double %2428, double %2430, ptr noundef nonnull align 8 dereferenceable(24) %224, ptr noundef nonnull align 8 dereferenceable(8) %227, ptr noundef nonnull align 8 dereferenceable(8) %228, ptr noundef nonnull align 8 dereferenceable(8) %229, ptr noundef nonnull align 8 dereferenceable(12) %230)
          to label %2431 unwind label %2441

2431:                                             ; preds = %2422
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %230) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %230) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %229) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %229) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %228) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %228) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %227) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %227) #12
  %2432 = invoke noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1153) %224)
          to label %2433 unwind label %2404

2433:                                             ; preds = %2431
  br i1 %2432, label %2434, label %2446

2434:                                             ; preds = %2433
  %2435 = getelementptr inbounds %"class.JPH::ClosestHitCollisionCollector.164", ptr %224, i32 0, i32 2
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %216, ptr noundef nonnull align 16 dereferenceable(1120) %2435)
          to label %2436 unwind label %2404

2436:                                             ; preds = %2434
  br label %2446

2437:                                             ; preds = %2415
  %2438 = landingpad { ptr, i32 }
          cleanup
  %2439 = extractvalue { ptr, i32 } %2438, 0
  store ptr %2439, ptr %29, align 8
  %2440 = extractvalue { ptr, i32 } %2438, 1
  store i32 %2440, ptr %30, align 4
  br label %2445

2441:                                             ; preds = %2422
  %2442 = landingpad { ptr, i32 }
          cleanup
  %2443 = extractvalue { ptr, i32 } %2442, 0
  store ptr %2443, ptr %29, align 8
  %2444 = extractvalue { ptr, i32 } %2442, 1
  store i32 %2444, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %230) #12
  br label %2445

2445:                                             ; preds = %2441, %2437
  call void @llvm.lifetime.end.p0(i64 16, ptr %230) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %229) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %229) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %228) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %228) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %227) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %227) #12
  br label %2447

2446:                                             ; preds = %2436, %2433
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %224) #12
  call void @llvm.lifetime.end.p0(i64 1168, ptr %224) #12
  br label %2606

2447:                                             ; preds = %2445, %2404
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %224) #12
  br label %2448

2448:                                             ; preds = %2447, %2400
  call void @llvm.lifetime.end.p0(i64 1168, ptr %224) #12
  br label %2884

2449:                                             ; preds = %2379
  %2450 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 45
  %2451 = load i8, ptr %2450, align 16, !tbaa !69, !range !54, !noundef !55
  %2452 = trunc i8 %2451 to i1
  br i1 %2452, label %2453, label %2529

2453:                                             ; preds = %2449
  call void @llvm.lifetime.start.p0(i64 56, ptr %231) #12
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(53) %231) #12
  %2454 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %2455 = load ptr, ptr %2454, align 8, !tbaa !50
  %2456 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2455)
          to label %2457 unwind label %2469

2457:                                             ; preds = %2453
  %2458 = load { i64, i64 }, ptr %215, align 8, !tbaa !12
  %2459 = extractvalue { i64, i64 } %2458, 1
  %2460 = getelementptr inbounds i8, ptr %2456, i64 %2459
  %2461 = extractvalue { i64, i64 } %2458, 0
  %2462 = and i64 %2461, 1
  %2463 = icmp ne i64 %2462, 0
  br i1 %2463, label %2464, label %2473

2464:                                             ; preds = %2457
  %2465 = load ptr, ptr %2460, align 8, !tbaa !58
  %2466 = sub i64 %2461, 1
  %2467 = getelementptr i8, ptr %2465, i64 %2466, !nosanitize !55
  %2468 = load ptr, ptr %2467, align 8, !nosanitize !55
  br label %2475

2469:                                             ; preds = %2513, %2506, %2505, %2502, %2499, %2497, %2496, %2478, %2475, %2453
  %2470 = landingpad { ptr, i32 }
          cleanup
  %2471 = extractvalue { ptr, i32 } %2470, 0
  store ptr %2471, ptr %29, align 8
  %2472 = extractvalue { ptr, i32 } %2470, 1
  store i32 %2472, ptr %30, align 4
  br label %2528

2473:                                             ; preds = %2457
  %2474 = inttoptr i64 %2461 to ptr
  br label %2475

2475:                                             ; preds = %2473, %2464
  %2476 = phi ptr [ %2468, %2464 ], [ %2474, %2473 ]
  %2477 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %200)
          to label %2478 unwind label %2469

2478:                                             ; preds = %2475
  %2479 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %2480 unwind label %2469

2480:                                             ; preds = %2478
  %2481 = getelementptr inbounds %"class.JPH::Vec3", ptr %232, i32 0, i32 0
  %2482 = getelementptr inbounds %union.anon, ptr %2481, i32 0, i32 0
  %2483 = getelementptr inbounds { double, double }, ptr %2482, i32 0, i32 0
  %2484 = extractvalue { double, double } %2479, 0
  store double %2484, ptr %2483, align 16
  %2485 = getelementptr inbounds { double, double }, ptr %2482, i32 0, i32 1
  %2486 = extractvalue { double, double } %2479, 1
  store double %2486, ptr %2485, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %233, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %234) #12
  call void @llvm.memset.p0.i64(ptr align 8 %234, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %234) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %235) #12
  call void @llvm.memset.p0.i64(ptr align 8 %235, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %235) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %236) #12
  call void @llvm.memset.p0.i64(ptr align 8 %236, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %236) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %237) #12
  call void @llvm.memset.p0.i64(ptr align 8 %237, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %237)
          to label %2487 unwind label %2518

2487:                                             ; preds = %2480
  %2488 = getelementptr inbounds { double, double }, ptr %232, i32 0, i32 0
  %2489 = load double, ptr %2488, align 16
  %2490 = getelementptr inbounds { double, double }, ptr %232, i32 0, i32 1
  %2491 = load double, ptr %2490, align 8
  %2492 = getelementptr inbounds { double, double }, ptr %233, i32 0, i32 0
  %2493 = load double, ptr %2492, align 16
  %2494 = getelementptr inbounds { double, double }, ptr %233, i32 0, i32 1
  %2495 = load double, ptr %2494, align 8
  invoke void %2476(ptr noundef nonnull align 8 dereferenceable(16) %2460, ptr noundef %2477, double %2489, double %2491, ptr noundef nonnull align 16 dereferenceable(64) %208, ptr noundef nonnull align 16 dereferenceable(37) %214, double %2493, double %2495, ptr noundef nonnull align 8 dereferenceable(24) %231, ptr noundef nonnull align 8 dereferenceable(8) %234, ptr noundef nonnull align 8 dereferenceable(8) %235, ptr noundef nonnull align 8 dereferenceable(8) %236, ptr noundef nonnull align 8 dereferenceable(12) %237)
          to label %2496 unwind label %2522

2496:                                             ; preds = %2487
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %237) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %237) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %236) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %236) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %235) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %235) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %234) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %234) #12
  invoke void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53) %231)
          to label %2497 unwind label %2469

2497:                                             ; preds = %2496
  %2498 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %216)
          to label %2499 unwind label %2469

2499:                                             ; preds = %2497
  %2500 = getelementptr inbounds %"class.JPH::ClosestHitPerBodyCollisionCollector.166", ptr %231, i32 0, i32 1
  %2501 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2500)
          to label %2502 unwind label %2469

2502:                                             ; preds = %2499
  %2503 = getelementptr inbounds %"class.JPH::ClosestHitPerBodyCollisionCollector.166", ptr %231, i32 0, i32 1
  %2504 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2503)
          to label %2505 unwind label %2469

2505:                                             ; preds = %2502
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %216, ptr noundef %2498, ptr noundef %2501, ptr noundef %2504)
          to label %2506 unwind label %2469

2506:                                             ; preds = %2505
  %2507 = invoke noundef i64 @_ZNK3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %216)
          to label %2508 unwind label %2469

2508:                                             ; preds = %2506
  %2509 = trunc i64 %2507 to i32
  %2510 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %2511 = load i32, ptr %2510, align 4, !tbaa !68
  %2512 = icmp sgt i32 %2509, %2511
  br i1 %2512, label %2513, label %2527

2513:                                             ; preds = %2508
  %2514 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %2515 = load i32, ptr %2514, align 4, !tbaa !68
  %2516 = sext i32 %2515 to i64
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %216, i64 noundef %2516)
          to label %2517 unwind label %2469

2517:                                             ; preds = %2513
  br label %2527

2518:                                             ; preds = %2480
  %2519 = landingpad { ptr, i32 }
          cleanup
  %2520 = extractvalue { ptr, i32 } %2519, 0
  store ptr %2520, ptr %29, align 8
  %2521 = extractvalue { ptr, i32 } %2519, 1
  store i32 %2521, ptr %30, align 4
  br label %2526

2522:                                             ; preds = %2487
  %2523 = landingpad { ptr, i32 }
          cleanup
  %2524 = extractvalue { ptr, i32 } %2523, 0
  store ptr %2524, ptr %29, align 8
  %2525 = extractvalue { ptr, i32 } %2523, 1
  store i32 %2525, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %237) #12
  br label %2526

2526:                                             ; preds = %2522, %2518
  call void @llvm.lifetime.end.p0(i64 16, ptr %237) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %236) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %236) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %235) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %235) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %234) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %234) #12
  br label %2528

2527:                                             ; preds = %2517, %2508
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %231) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr %231) #12
  br label %2605

2528:                                             ; preds = %2526, %2469
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %231) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr %231) #12
  br label %2884

2529:                                             ; preds = %2449
  call void @llvm.lifetime.start.p0(i64 48, ptr %238) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %238) #12
  %2530 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %2531 = load ptr, ptr %2530, align 8, !tbaa !50
  %2532 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2531)
          to label %2533 unwind label %2545

2533:                                             ; preds = %2529
  %2534 = load { i64, i64 }, ptr %215, align 8, !tbaa !12
  %2535 = extractvalue { i64, i64 } %2534, 1
  %2536 = getelementptr inbounds i8, ptr %2532, i64 %2535
  %2537 = extractvalue { i64, i64 } %2534, 0
  %2538 = and i64 %2537, 1
  %2539 = icmp ne i64 %2538, 0
  br i1 %2539, label %2540, label %2549

2540:                                             ; preds = %2533
  %2541 = load ptr, ptr %2536, align 8, !tbaa !58
  %2542 = sub i64 %2537, 1
  %2543 = getelementptr i8, ptr %2541, i64 %2542, !nosanitize !55
  %2544 = load ptr, ptr %2543, align 8, !nosanitize !55
  br label %2551

2545:                                             ; preds = %2589, %2582, %2581, %2578, %2575, %2573, %2572, %2554, %2551, %2529
  %2546 = landingpad { ptr, i32 }
          cleanup
  %2547 = extractvalue { ptr, i32 } %2546, 0
  store ptr %2547, ptr %29, align 8
  %2548 = extractvalue { ptr, i32 } %2546, 1
  store i32 %2548, ptr %30, align 4
  br label %2604

2549:                                             ; preds = %2533
  %2550 = inttoptr i64 %2537 to ptr
  br label %2551

2551:                                             ; preds = %2549, %2540
  %2552 = phi ptr [ %2544, %2540 ], [ %2550, %2549 ]
  %2553 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %200)
          to label %2554 unwind label %2545

2554:                                             ; preds = %2551
  %2555 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %2556 unwind label %2545

2556:                                             ; preds = %2554
  %2557 = getelementptr inbounds %"class.JPH::Vec3", ptr %239, i32 0, i32 0
  %2558 = getelementptr inbounds %union.anon, ptr %2557, i32 0, i32 0
  %2559 = getelementptr inbounds { double, double }, ptr %2558, i32 0, i32 0
  %2560 = extractvalue { double, double } %2555, 0
  store double %2560, ptr %2559, align 16
  %2561 = getelementptr inbounds { double, double }, ptr %2558, i32 0, i32 1
  %2562 = extractvalue { double, double } %2555, 1
  store double %2562, ptr %2561, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %240, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %241) #12
  call void @llvm.memset.p0.i64(ptr align 8 %241, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %241) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %242) #12
  call void @llvm.memset.p0.i64(ptr align 8 %242, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %242) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %243) #12
  call void @llvm.memset.p0.i64(ptr align 8 %243, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %243) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %244) #12
  call void @llvm.memset.p0.i64(ptr align 8 %244, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %244)
          to label %2563 unwind label %2594

2563:                                             ; preds = %2556
  %2564 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 0
  %2565 = load double, ptr %2564, align 16
  %2566 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 1
  %2567 = load double, ptr %2566, align 8
  %2568 = getelementptr inbounds { double, double }, ptr %240, i32 0, i32 0
  %2569 = load double, ptr %2568, align 16
  %2570 = getelementptr inbounds { double, double }, ptr %240, i32 0, i32 1
  %2571 = load double, ptr %2570, align 8
  invoke void %2552(ptr noundef nonnull align 8 dereferenceable(16) %2536, ptr noundef %2553, double %2565, double %2567, ptr noundef nonnull align 16 dereferenceable(64) %208, ptr noundef nonnull align 16 dereferenceable(37) %214, double %2569, double %2571, ptr noundef nonnull align 8 dereferenceable(24) %238, ptr noundef nonnull align 8 dereferenceable(8) %241, ptr noundef nonnull align 8 dereferenceable(8) %242, ptr noundef nonnull align 8 dereferenceable(8) %243, ptr noundef nonnull align 8 dereferenceable(12) %244)
          to label %2572 unwind label %2598

2572:                                             ; preds = %2563
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %244) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %244) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %243) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %243) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %242) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %242) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %241) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %241) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %238)
          to label %2573 unwind label %2545

2573:                                             ; preds = %2572
  %2574 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %216)
          to label %2575 unwind label %2545

2575:                                             ; preds = %2573
  %2576 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.168", ptr %238, i32 0, i32 1
  %2577 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2576)
          to label %2578 unwind label %2545

2578:                                             ; preds = %2575
  %2579 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.168", ptr %238, i32 0, i32 1
  %2580 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2579)
          to label %2581 unwind label %2545

2581:                                             ; preds = %2578
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %216, ptr noundef %2574, ptr noundef %2577, ptr noundef %2580)
          to label %2582 unwind label %2545

2582:                                             ; preds = %2581
  %2583 = invoke noundef i64 @_ZNK3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %216)
          to label %2584 unwind label %2545

2584:                                             ; preds = %2582
  %2585 = trunc i64 %2583 to i32
  %2586 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %2587 = load i32, ptr %2586, align 4, !tbaa !68
  %2588 = icmp sgt i32 %2585, %2587
  br i1 %2588, label %2589, label %2603

2589:                                             ; preds = %2584
  %2590 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %2591 = load i32, ptr %2590, align 4, !tbaa !68
  %2592 = sext i32 %2591 to i64
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %216, i64 noundef %2592)
          to label %2593 unwind label %2545

2593:                                             ; preds = %2589
  br label %2603

2594:                                             ; preds = %2556
  %2595 = landingpad { ptr, i32 }
          cleanup
  %2596 = extractvalue { ptr, i32 } %2595, 0
  store ptr %2596, ptr %29, align 8
  %2597 = extractvalue { ptr, i32 } %2595, 1
  store i32 %2597, ptr %30, align 4
  br label %2602

2598:                                             ; preds = %2563
  %2599 = landingpad { ptr, i32 }
          cleanup
  %2600 = extractvalue { ptr, i32 } %2599, 0
  store ptr %2600, ptr %29, align 8
  %2601 = extractvalue { ptr, i32 } %2599, 1
  store i32 %2601, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %244) #12
  br label %2602

2602:                                             ; preds = %2598, %2594
  call void @llvm.lifetime.end.p0(i64 16, ptr %244) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %243) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %243) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %242) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %242) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %241) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %241) #12
  br label %2604

2603:                                             ; preds = %2593, %2584
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %238) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %238) #12
  br label %2605

2604:                                             ; preds = %2602, %2545
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %238) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %238) #12
  br label %2884

2605:                                             ; preds = %2603, %2527
  br label %2606

2606:                                             ; preds = %2605, %2446
  br label %2607

2607:                                             ; preds = %2606, %2376
  %2608 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %216)
          to label %2609 unwind label %2626

2609:                                             ; preds = %2607
  %2610 = xor i1 %2608, true
  %2611 = zext i1 %2610 to i8
  store i8 %2611, ptr %21, align 1, !tbaa !16
  %2612 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %2613 = trunc i8 %2612 to i1
  br i1 %2613, label %2614, label %2883

2614:                                             ; preds = %2609
  call void @llvm.lifetime.start.p0(i64 8, ptr %245) #12
  store ptr %216, ptr %245, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %246) #12
  %2615 = load ptr, ptr %245, align 8, !tbaa !5
  %2616 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2615)
          to label %2617 unwind label %2630

2617:                                             ; preds = %2614
  store ptr %2616, ptr %246, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %247) #12
  %2618 = load ptr, ptr %245, align 8, !tbaa !5
  %2619 = invoke noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2618)
          to label %2620 unwind label %2634

2620:                                             ; preds = %2617
  store ptr %2619, ptr %247, align 8, !tbaa !5
  br label %2621

2621:                                             ; preds = %2875, %2620
  %2622 = load ptr, ptr %246, align 8, !tbaa !5
  %2623 = load ptr, ptr %247, align 8, !tbaa !5
  %2624 = icmp ne ptr %2622, %2623
  br i1 %2624, label %2638, label %2625

2625:                                             ; preds = %2621
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %246) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %245) #12
  br label %2882

2626:                                             ; preds = %2607
  %2627 = landingpad { ptr, i32 }
          cleanup
  %2628 = extractvalue { ptr, i32 } %2627, 0
  store ptr %2628, ptr %29, align 8
  %2629 = extractvalue { ptr, i32 } %2627, 1
  store i32 %2629, ptr %30, align 4
  br label %2884

2630:                                             ; preds = %2614
  %2631 = landingpad { ptr, i32 }
          cleanup
  %2632 = extractvalue { ptr, i32 } %2631, 0
  store ptr %2632, ptr %29, align 8
  %2633 = extractvalue { ptr, i32 } %2631, 1
  store i32 %2633, ptr %30, align 4
  br label %2881

2634:                                             ; preds = %2617
  %2635 = landingpad { ptr, i32 }
          cleanup
  %2636 = extractvalue { ptr, i32 } %2635, 0
  store ptr %2636, ptr %29, align 8
  %2637 = extractvalue { ptr, i32 } %2635, 1
  store i32 %2637, ptr %30, align 4
  br label %2880

2638:                                             ; preds = %2621
  call void @llvm.lifetime.start.p0(i64 8, ptr %248) #12
  %2639 = load ptr, ptr %246, align 8, !tbaa !5
  store ptr %2639, ptr %248, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %249) #12
  %2640 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %2641 = load ptr, ptr %2640, align 8, !tbaa !50
  %2642 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %2641)
          to label %2643 unwind label %2773

2643:                                             ; preds = %2638
  %2644 = load ptr, ptr %248, align 8, !tbaa !5
  %2645 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %2644, i32 0, i32 6
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %249, ptr noundef nonnull align 8 dereferenceable(16) %2642, ptr noundef nonnull align 4 dereferenceable(4) %2645)
          to label %2646 unwind label %2773

2646:                                             ; preds = %2643
  %2647 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %249)
          to label %2648 unwind label %2777

2648:                                             ; preds = %2646
  br i1 %2647, label %2649, label %2874

2649:                                             ; preds = %2648
  call void @llvm.lifetime.start.p0(i64 8, ptr %250) #12
  %2650 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %249)
          to label %2651 unwind label %2781

2651:                                             ; preds = %2649
  store ptr %2650, ptr %250, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %251) #12
  %2652 = load ptr, ptr %248, align 8, !tbaa !5
  %2653 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %2652, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %252, ptr align 16 %2653, i64 16, i1 false), !tbaa.struct !11
  %2654 = getelementptr inbounds { double, double }, ptr %252, i32 0, i32 0
  %2655 = load double, ptr %2654, align 16
  %2656 = getelementptr inbounds { double, double }, ptr %252, i32 0, i32 1
  %2657 = load double, ptr %2656, align 8
  %2658 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %2655, double %2657)
          to label %2659 unwind label %2785

2659:                                             ; preds = %2651
  %2660 = getelementptr inbounds %"class.JPH::Vec3", ptr %251, i32 0, i32 0
  %2661 = getelementptr inbounds %union.anon, ptr %2660, i32 0, i32 0
  %2662 = getelementptr inbounds { double, double }, ptr %2661, i32 0, i32 0
  %2663 = extractvalue { double, double } %2658, 0
  store double %2663, ptr %2662, align 16
  %2664 = getelementptr inbounds { double, double }, ptr %2661, i32 0, i32 1
  %2665 = extractvalue { double, double } %2658, 1
  store double %2665, ptr %2664, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %253) #12
  %2666 = load ptr, ptr %248, align 8, !tbaa !5
  %2667 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %2666, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %254, ptr align 16 %2667, i64 16, i1 false), !tbaa.struct !11
  %2668 = getelementptr inbounds { double, double }, ptr %254, i32 0, i32 0
  %2669 = load double, ptr %2668, align 16
  %2670 = getelementptr inbounds { double, double }, ptr %254, i32 0, i32 1
  %2671 = load double, ptr %2670, align 8
  %2672 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %2669, double %2671)
          to label %2673 unwind label %2789

2673:                                             ; preds = %2659
  %2674 = getelementptr inbounds %"class.JPH::Vec3", ptr %253, i32 0, i32 0
  %2675 = getelementptr inbounds %union.anon, ptr %2674, i32 0, i32 0
  %2676 = getelementptr inbounds { double, double }, ptr %2675, i32 0, i32 0
  %2677 = extractvalue { double, double } %2672, 0
  store double %2677, ptr %2676, align 16
  %2678 = getelementptr inbounds { double, double }, ptr %2675, i32 0, i32 1
  %2679 = extractvalue { double, double } %2672, 1
  store double %2679, ptr %2678, align 8
  %2680 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2681 = load ptr, ptr %2680, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %255, ptr align 16 %251, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %256, ptr align 4 @_ZN3JPH5Color6sGreenE, i64 4, i1 false), !tbaa.struct !57
  %2682 = getelementptr inbounds { double, double }, ptr %255, i32 0, i32 0
  %2683 = load double, ptr %2682, align 16
  %2684 = getelementptr inbounds { double, double }, ptr %255, i32 0, i32 1
  %2685 = load double, ptr %2684, align 8
  %2686 = getelementptr inbounds %"class.JPH::Color", ptr %256, i32 0, i32 0
  %2687 = getelementptr inbounds %union.anon.62, ptr %2686, i32 0, i32 0
  %2688 = load i32, ptr %2687, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2681, double %2683, double %2685, i32 %2688, float noundef 0x3FB99999A0000000)
          to label %2689 unwind label %2789

2689:                                             ; preds = %2673
  %2690 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2691 = load ptr, ptr %2690, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %257, ptr align 16 %253, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %258, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %2692 = getelementptr inbounds { double, double }, ptr %257, i32 0, i32 0
  %2693 = load double, ptr %2692, align 16
  %2694 = getelementptr inbounds { double, double }, ptr %257, i32 0, i32 1
  %2695 = load double, ptr %2694, align 8
  %2696 = getelementptr inbounds %"class.JPH::Color", ptr %258, i32 0, i32 0
  %2697 = getelementptr inbounds %union.anon.62, ptr %2696, i32 0, i32 0
  %2698 = load i32, ptr %2697, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2691, double %2693, double %2695, i32 %2698, float noundef 0x3FB99999A0000000)
          to label %2699 unwind label %2789

2699:                                             ; preds = %2689
  call void @llvm.lifetime.start.p0(i64 16, ptr %259) #12
  %2700 = load ptr, ptr %248, align 8, !tbaa !5
  %2701 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %2700, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %259, ptr align 16 %2701, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %260) #12
  %2702 = invoke noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %259)
          to label %2703 unwind label %2793

2703:                                             ; preds = %2699
  store float %2702, ptr %260, align 4, !tbaa !9
  %2704 = load float, ptr %260, align 4, !tbaa !9
  %2705 = fcmp ogt float %2704, 0.000000e+00
  br i1 %2705, label %2706, label %2797

2706:                                             ; preds = %2703
  %2707 = load float, ptr %260, align 4, !tbaa !9
  %2708 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3dVEf(ptr noundef nonnull align 16 dereferenceable(16) %259, float noundef %2707)
          to label %2709 unwind label %2793

2709:                                             ; preds = %2706
  %2710 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2711 = load ptr, ptr %2710, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %261, ptr align 16 %253, i64 16, i1 false), !tbaa.struct !11
  %2712 = load ptr, ptr %248, align 8, !tbaa !5
  %2713 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %2712, i32 0, i32 3
  %2714 = load float, ptr %2713, align 16, !tbaa !79
  %2715 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %259, float noundef %2714)
          to label %2716 unwind label %2793

2716:                                             ; preds = %2709
  %2717 = getelementptr inbounds %"class.JPH::Vec3", ptr %263, i32 0, i32 0
  %2718 = getelementptr inbounds %union.anon, ptr %2717, i32 0, i32 0
  %2719 = getelementptr inbounds { double, double }, ptr %2718, i32 0, i32 0
  %2720 = extractvalue { double, double } %2715, 0
  store double %2720, ptr %2719, align 16
  %2721 = getelementptr inbounds { double, double }, ptr %2718, i32 0, i32 1
  %2722 = extractvalue { double, double } %2715, 1
  store double %2722, ptr %2721, align 8
  %2723 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 0
  %2724 = load double, ptr %2723, align 16
  %2725 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 1
  %2726 = load double, ptr %2725, align 8
  %2727 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %253, double %2724, double %2726)
          to label %2728 unwind label %2793

2728:                                             ; preds = %2716
  %2729 = getelementptr inbounds %"class.JPH::Vec3", ptr %262, i32 0, i32 0
  %2730 = getelementptr inbounds %union.anon, ptr %2729, i32 0, i32 0
  %2731 = getelementptr inbounds { double, double }, ptr %2730, i32 0, i32 0
  %2732 = extractvalue { double, double } %2727, 0
  store double %2732, ptr %2731, align 16
  %2733 = getelementptr inbounds { double, double }, ptr %2730, i32 0, i32 1
  %2734 = extractvalue { double, double } %2727, 1
  store double %2734, ptr %2733, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %264, ptr align 4 @_ZN3JPH5Color7sYellowE, i64 4, i1 false), !tbaa.struct !57
  %2735 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 0
  %2736 = load double, ptr %2735, align 16
  %2737 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 1
  %2738 = load double, ptr %2737, align 8
  %2739 = getelementptr inbounds { double, double }, ptr %262, i32 0, i32 0
  %2740 = load double, ptr %2739, align 16
  %2741 = getelementptr inbounds { double, double }, ptr %262, i32 0, i32 1
  %2742 = load double, ptr %2741, align 8
  %2743 = getelementptr inbounds %"class.JPH::Color", ptr %264, i32 0, i32 0
  %2744 = getelementptr inbounds %union.anon.62, ptr %2743, i32 0, i32 0
  %2745 = load i32, ptr %2744, align 4
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2711, double %2736, double %2738, double %2740, double %2742, i32 %2745, float noundef 0x3F847AE140000000)
          to label %2746 unwind label %2793

2746:                                             ; preds = %2728
  %2747 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2748 = load ptr, ptr %2747, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %265, ptr align 16 %253, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %267, ptr align 16 %259, i64 16, i1 false), !tbaa.struct !11
  %2749 = getelementptr inbounds { double, double }, ptr %267, i32 0, i32 0
  %2750 = load double, ptr %2749, align 16
  %2751 = getelementptr inbounds { double, double }, ptr %267, i32 0, i32 1
  %2752 = load double, ptr %2751, align 8
  %2753 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %253, double %2750, double %2752)
          to label %2754 unwind label %2793

2754:                                             ; preds = %2746
  %2755 = getelementptr inbounds %"class.JPH::Vec3", ptr %266, i32 0, i32 0
  %2756 = getelementptr inbounds %union.anon, ptr %2755, i32 0, i32 0
  %2757 = getelementptr inbounds { double, double }, ptr %2756, i32 0, i32 0
  %2758 = extractvalue { double, double } %2753, 0
  store double %2758, ptr %2757, align 16
  %2759 = getelementptr inbounds { double, double }, ptr %2756, i32 0, i32 1
  %2760 = extractvalue { double, double } %2753, 1
  store double %2760, ptr %2759, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %268, ptr align 4 @_ZN3JPH5Color7sOrangeE, i64 4, i1 false), !tbaa.struct !57
  %2761 = getelementptr inbounds { double, double }, ptr %265, i32 0, i32 0
  %2762 = load double, ptr %2761, align 16
  %2763 = getelementptr inbounds { double, double }, ptr %265, i32 0, i32 1
  %2764 = load double, ptr %2763, align 8
  %2765 = getelementptr inbounds { double, double }, ptr %266, i32 0, i32 0
  %2766 = load double, ptr %2765, align 16
  %2767 = getelementptr inbounds { double, double }, ptr %266, i32 0, i32 1
  %2768 = load double, ptr %2767, align 8
  %2769 = getelementptr inbounds %"class.JPH::Color", ptr %268, i32 0, i32 0
  %2770 = getelementptr inbounds %union.anon.62, ptr %2769, i32 0, i32 0
  %2771 = load i32, ptr %2770, align 4
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2748, double %2762, double %2764, double %2766, double %2768, i32 %2771, float noundef 0x3F847AE140000000)
          to label %2772 unwind label %2793

2772:                                             ; preds = %2754
  br label %2797

2773:                                             ; preds = %2643, %2638
  %2774 = landingpad { ptr, i32 }
          cleanup
  %2775 = extractvalue { ptr, i32 } %2774, 0
  store ptr %2775, ptr %29, align 8
  %2776 = extractvalue { ptr, i32 } %2774, 1
  store i32 %2776, ptr %30, align 4
  br label %2879

2777:                                             ; preds = %2646
  %2778 = landingpad { ptr, i32 }
          cleanup
  %2779 = extractvalue { ptr, i32 } %2778, 0
  store ptr %2779, ptr %29, align 8
  %2780 = extractvalue { ptr, i32 } %2778, 1
  store i32 %2780, ptr %30, align 4
  br label %2878

2781:                                             ; preds = %2649
  %2782 = landingpad { ptr, i32 }
          cleanup
  %2783 = extractvalue { ptr, i32 } %2782, 0
  store ptr %2783, ptr %29, align 8
  %2784 = extractvalue { ptr, i32 } %2782, 1
  store i32 %2784, ptr %30, align 4
  br label %2873

2785:                                             ; preds = %2651
  %2786 = landingpad { ptr, i32 }
          cleanup
  %2787 = extractvalue { ptr, i32 } %2786, 0
  store ptr %2787, ptr %29, align 8
  %2788 = extractvalue { ptr, i32 } %2786, 1
  store i32 %2788, ptr %30, align 4
  br label %2872

2789:                                             ; preds = %2689, %2673, %2659
  %2790 = landingpad { ptr, i32 }
          cleanup
  %2791 = extractvalue { ptr, i32 } %2790, 0
  store ptr %2791, ptr %29, align 8
  %2792 = extractvalue { ptr, i32 } %2790, 1
  store i32 %2792, ptr %30, align 4
  br label %2871

2793:                                             ; preds = %2754, %2746, %2728, %2716, %2709, %2706, %2699
  %2794 = landingpad { ptr, i32 }
          cleanup
  %2795 = extractvalue { ptr, i32 } %2794, 0
  store ptr %2795, ptr %29, align 8
  %2796 = extractvalue { ptr, i32 } %2794, 1
  store i32 %2796, ptr %30, align 4
  br label %2870

2797:                                             ; preds = %2772, %2703
  call void @llvm.lifetime.start.p0(i64 8, ptr %269) #12
  %2798 = load ptr, ptr %250, align 8, !tbaa !5
  %2799 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %2798)
          to label %2800 unwind label %2853

2800:                                             ; preds = %2797
  %2801 = load ptr, ptr %248, align 8, !tbaa !5
  %2802 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %2801, i32 0, i32 5
  %2803 = load ptr, ptr %2799, align 8, !tbaa !58
  %2804 = getelementptr inbounds ptr, ptr %2803, i64 10
  %2805 = load ptr, ptr %2804, align 8
  %2806 = invoke noundef ptr %2805(ptr noundef nonnull align 8 dereferenceable(26) %2799, ptr noundef nonnull align 4 dereferenceable(4) %2802)
          to label %2807 unwind label %2853

2807:                                             ; preds = %2800
  store ptr %2806, ptr %269, align 8, !tbaa !5
  %2808 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2809 = load ptr, ptr %2808, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %270, ptr align 16 %253, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %271) #12
  %2810 = load ptr, ptr %269, align 8, !tbaa !5
  %2811 = load ptr, ptr %2810, align 8, !tbaa !58
  %2812 = getelementptr inbounds ptr, ptr %2811, i64 4
  %2813 = load ptr, ptr %2812, align 8
  %2814 = invoke noundef ptr %2813(ptr noundef nonnull align 8 dereferenceable(12) %2810)
          to label %2815 unwind label %2857

2815:                                             ; preds = %2807
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %271, ptr noundef %2814) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %272, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !57
  %2816 = getelementptr inbounds { double, double }, ptr %270, i32 0, i32 0
  %2817 = load double, ptr %2816, align 16
  %2818 = getelementptr inbounds { double, double }, ptr %270, i32 0, i32 1
  %2819 = load double, ptr %2818, align 8
  %2820 = getelementptr inbounds %"class.JPH::Color", ptr %272, i32 0, i32 0
  %2821 = getelementptr inbounds %union.anon.62, ptr %2820, i32 0, i32 0
  %2822 = load i32, ptr %2821, align 4
  %2823 = load ptr, ptr %2809, align 8, !tbaa !58
  %2824 = getelementptr inbounds ptr, ptr %2823, i64 7
  %2825 = load ptr, ptr %2824, align 8
  invoke void %2825(ptr noundef nonnull align 8 dereferenceable(320) %2809, double %2817, double %2819, ptr noundef nonnull align 8 dereferenceable(16) %271, i32 %2822, float noundef 5.000000e-01)
          to label %2826 unwind label %2857

2826:                                             ; preds = %2815
  call void @llvm.lifetime.end.p0(i64 16, ptr %271) #12
  %2827 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2828 = load ptr, ptr %2827, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %273) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %274, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  %2829 = getelementptr inbounds { double, double }, ptr %274, i32 0, i32 0
  %2830 = load double, ptr %2829, align 16
  %2831 = getelementptr inbounds { double, double }, ptr %274, i32 0, i32 1
  %2832 = load double, ptr %2831, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %273, double %2830, double %2832)
          to label %2833 unwind label %2861

2833:                                             ; preds = %2826
  %2834 = load ptr, ptr %248, align 8, !tbaa !5
  %2835 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %2834, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %275, ptr align 4 @_ZN3JPH5Color7sYellowE, i64 4, i1 false), !tbaa.struct !57
  %2836 = getelementptr inbounds %"class.JPH::Color", ptr %275, i32 0, i32 0
  %2837 = getelementptr inbounds %union.anon.62, ptr %2836, i32 0, i32 0
  %2838 = load i32, ptr %2837, align 4
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2828, ptr noundef nonnull align 16 dereferenceable(64) %273, ptr noundef nonnull align 16 dereferenceable(528) %2835, i32 %2838, float noundef 0x3F847AE140000000)
          to label %2839 unwind label %2861

2839:                                             ; preds = %2833
  call void @llvm.lifetime.end.p0(i64 64, ptr %273) #12
  %2840 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %2841 = load ptr, ptr %2840, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %276) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %277, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  %2842 = getelementptr inbounds { double, double }, ptr %277, i32 0, i32 0
  %2843 = load double, ptr %2842, align 16
  %2844 = getelementptr inbounds { double, double }, ptr %277, i32 0, i32 1
  %2845 = load double, ptr %2844, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %276, double %2843, double %2845)
          to label %2846 unwind label %2865

2846:                                             ; preds = %2839
  %2847 = load ptr, ptr %248, align 8, !tbaa !5
  %2848 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %2847, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %278, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %2849 = getelementptr inbounds %"class.JPH::Color", ptr %278, i32 0, i32 0
  %2850 = getelementptr inbounds %union.anon.62, ptr %2849, i32 0, i32 0
  %2851 = load i32, ptr %2850, align 4
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2841, ptr noundef nonnull align 16 dereferenceable(64) %276, ptr noundef nonnull align 16 dereferenceable(528) %2848, i32 %2851, float noundef 0x3F847AE140000000)
          to label %2852 unwind label %2865

2852:                                             ; preds = %2846
  call void @llvm.lifetime.end.p0(i64 64, ptr %276) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %269) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %260) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %259) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %253) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %251) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %250) #12
  br label %2874

2853:                                             ; preds = %2800, %2797
  %2854 = landingpad { ptr, i32 }
          cleanup
  %2855 = extractvalue { ptr, i32 } %2854, 0
  store ptr %2855, ptr %29, align 8
  %2856 = extractvalue { ptr, i32 } %2854, 1
  store i32 %2856, ptr %30, align 4
  br label %2869

2857:                                             ; preds = %2815, %2807
  %2858 = landingpad { ptr, i32 }
          cleanup
  %2859 = extractvalue { ptr, i32 } %2858, 0
  store ptr %2859, ptr %29, align 8
  %2860 = extractvalue { ptr, i32 } %2858, 1
  store i32 %2860, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %271) #12
  br label %2869

2861:                                             ; preds = %2833, %2826
  %2862 = landingpad { ptr, i32 }
          cleanup
  %2863 = extractvalue { ptr, i32 } %2862, 0
  store ptr %2863, ptr %29, align 8
  %2864 = extractvalue { ptr, i32 } %2862, 1
  store i32 %2864, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %273) #12
  br label %2869

2865:                                             ; preds = %2846, %2839
  %2866 = landingpad { ptr, i32 }
          cleanup
  %2867 = extractvalue { ptr, i32 } %2866, 0
  store ptr %2867, ptr %29, align 8
  %2868 = extractvalue { ptr, i32 } %2866, 1
  store i32 %2868, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %276) #12
  br label %2869

2869:                                             ; preds = %2865, %2861, %2857, %2853
  call void @llvm.lifetime.end.p0(i64 8, ptr %269) #12
  br label %2870

2870:                                             ; preds = %2869, %2793
  call void @llvm.lifetime.end.p0(i64 4, ptr %260) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %259) #12
  br label %2871

2871:                                             ; preds = %2870, %2789
  call void @llvm.lifetime.end.p0(i64 16, ptr %253) #12
  br label %2872

2872:                                             ; preds = %2871, %2785
  call void @llvm.lifetime.end.p0(i64 16, ptr %251) #12
  br label %2873

2873:                                             ; preds = %2872, %2781
  call void @llvm.lifetime.end.p0(i64 8, ptr %250) #12
  br label %2878

2874:                                             ; preds = %2852, %2648
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %249) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %249) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %248) #12
  br label %2875

2875:                                             ; preds = %2874
  %2876 = load ptr, ptr %246, align 8, !tbaa !5
  %2877 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %2876, i32 1
  store ptr %2877, ptr %246, align 8, !tbaa !5
  br label %2621

2878:                                             ; preds = %2873, %2777
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %249) #12
  br label %2879

2879:                                             ; preds = %2878, %2773
  call void @llvm.lifetime.end.p0(i64 24, ptr %249) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %248) #12
  br label %2880

2880:                                             ; preds = %2879, %2634
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #12
  br label %2881

2881:                                             ; preds = %2880, %2630
  call void @llvm.lifetime.end.p0(i64 8, ptr %246) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %245) #12
  br label %2884

2882:                                             ; preds = %2625
  br label %2883

2883:                                             ; preds = %2882, %2609
  call void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %216) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %216) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %215) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %214) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %208) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %206) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %201) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %200) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %200) #12
  br label %6190

2884:                                             ; preds = %2881, %2626, %2604, %2528, %2448, %2378
  call void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %216) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %216) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %215) #12
  br label %2885

2885:                                             ; preds = %2884, %2326
  call void @llvm.lifetime.end.p0(i64 48, ptr %214) #12
  br label %2886

2886:                                             ; preds = %2885, %2322
  call void @llvm.lifetime.end.p0(i64 64, ptr %208) #12
  br label %2887

2887:                                             ; preds = %2886, %2318
  call void @llvm.lifetime.end.p0(i64 64, ptr %206) #12
  br label %2888

2888:                                             ; preds = %2887, %2317
  call void @llvm.lifetime.end.p0(i64 64, ptr %201) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %200) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %200) #12
  br label %6193

2889:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 8, ptr %279) #12
  call void @_ZN10SamplesApp16CreateProbeShapeEv(ptr dead_on_unwind writable sret(%"class.JPH::RefConst.74") align 8 %279, ptr noundef nonnull align 16 dereferenceable(712) %718)
  call void @llvm.lifetime.start.p0(i64 64, ptr %280) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %281) #12
  %2890 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %2891 unwind label %2985

2891:                                             ; preds = %2889
  %2892 = getelementptr inbounds %"class.JPH::Vec3", ptr %282, i32 0, i32 0
  %2893 = getelementptr inbounds %union.anon, ptr %2892, i32 0, i32 0
  %2894 = getelementptr inbounds { double, double }, ptr %2893, i32 0, i32 0
  %2895 = extractvalue { double, double } %2890, 0
  store double %2895, ptr %2894, align 16
  %2896 = getelementptr inbounds { double, double }, ptr %2893, i32 0, i32 1
  %2897 = extractvalue { double, double } %2890, 1
  store double %2897, ptr %2896, align 8
  %2898 = getelementptr inbounds { double, double }, ptr %282, i32 0, i32 0
  %2899 = load double, ptr %2898, align 16
  %2900 = getelementptr inbounds { double, double }, ptr %282, i32 0, i32 1
  %2901 = load double, ptr %2900, align 8
  invoke void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %281, double %2899, double %2901, float noundef 0x3FD41B2F80000000)
          to label %2902 unwind label %2985

2902:                                             ; preds = %2891
  call void @llvm.lifetime.start.p0(i64 64, ptr %283) #12
  %2903 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %2904 unwind label %2989

2904:                                             ; preds = %2902
  %2905 = getelementptr inbounds %"class.JPH::Vec3", ptr %284, i32 0, i32 0
  %2906 = getelementptr inbounds %union.anon, ptr %2905, i32 0, i32 0
  %2907 = getelementptr inbounds { double, double }, ptr %2906, i32 0, i32 0
  %2908 = extractvalue { double, double } %2903, 0
  store double %2908, ptr %2907, align 16
  %2909 = getelementptr inbounds { double, double }, ptr %2906, i32 0, i32 1
  %2910 = extractvalue { double, double } %2903, 1
  store double %2910, ptr %2909, align 8
  %2911 = getelementptr inbounds { double, double }, ptr %284, i32 0, i32 0
  %2912 = load double, ptr %2911, align 16
  %2913 = getelementptr inbounds { double, double }, ptr %284, i32 0, i32 1
  %2914 = load double, ptr %2913, align 8
  invoke void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %283, double %2912, double %2914, float noundef 0x3FE41B2F80000000)
          to label %2915 unwind label %2989

2915:                                             ; preds = %2904
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %280, ptr noundef nonnull align 16 dereferenceable(64) %281, ptr noundef nonnull align 16 dereferenceable(64) %283)
          to label %2916 unwind label %2989

2916:                                             ; preds = %2915
  call void @llvm.lifetime.end.p0(i64 64, ptr %283) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %281) #12
  call void @llvm.lifetime.start.p0(i64 144, ptr %285) #12
  %2917 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %279)
          to label %2918 unwind label %2994

2918:                                             ; preds = %2916
  %2919 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %2920 unwind label %2994

2920:                                             ; preds = %2918
  %2921 = getelementptr inbounds %"class.JPH::Vec3", ptr %286, i32 0, i32 0
  %2922 = getelementptr inbounds %union.anon, ptr %2921, i32 0, i32 0
  %2923 = getelementptr inbounds { double, double }, ptr %2922, i32 0, i32 0
  %2924 = extractvalue { double, double } %2919, 0
  store double %2924, ptr %2923, align 16
  %2925 = getelementptr inbounds { double, double }, ptr %2922, i32 0, i32 1
  %2926 = extractvalue { double, double } %2919, 1
  store double %2926, ptr %2925, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %287) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %288) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %289, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  %2927 = getelementptr inbounds { double, double }, ptr %289, i32 0, i32 0
  %2928 = load double, ptr %2927, align 16
  %2929 = getelementptr inbounds { double, double }, ptr %289, i32 0, i32 1
  %2930 = load double, ptr %2929, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %288, double %2928, double %2930)
          to label %2931 unwind label %2998

2931:                                             ; preds = %2920
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %287, ptr noundef nonnull align 16 dereferenceable(64) %288, ptr noundef nonnull align 16 dereferenceable(64) %280)
          to label %2932 unwind label %2998

2932:                                             ; preds = %2931
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %290, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %2933 = getelementptr inbounds { double, double }, ptr %286, i32 0, i32 0
  %2934 = load double, ptr %2933, align 16
  %2935 = getelementptr inbounds { double, double }, ptr %286, i32 0, i32 1
  %2936 = load double, ptr %2935, align 8
  %2937 = getelementptr inbounds { double, double }, ptr %290, i32 0, i32 0
  %2938 = load double, ptr %2937, align 16
  %2939 = getelementptr inbounds { double, double }, ptr %290, i32 0, i32 1
  %2940 = load double, ptr %2939, align 8
  invoke void @_ZN3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE19sFromWorldTransformEPKNS_5ShapeES1_RKS2_S1_(ptr dead_on_unwind writable sret(%"struct.JPH::RShapeCast") align 16 %285, ptr noundef %2917, double %2934, double %2936, ptr noundef nonnull align 16 dereferenceable(64) %287, double %2938, double %2940)
          to label %2941 unwind label %2998

2941:                                             ; preds = %2932
  call void @llvm.lifetime.end.p0(i64 64, ptr %288) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %287) #12
  call void @llvm.lifetime.start.p0(i64 48, ptr %291) #12
  invoke void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36) %291)
          to label %2942 unwind label %3002

2942:                                             ; preds = %2941
  %2943 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 42
  %2944 = load i8, ptr %2943, align 2, !tbaa !83, !range !54, !noundef !55
  %2945 = trunc i8 %2944 to i1
  %2946 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %291, i32 0, i32 3
  %2947 = zext i1 %2945 to i8
  store i8 %2947, ptr %2946, align 2, !tbaa !84
  %2948 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 37
  %2949 = load i8, ptr %2948, align 2, !tbaa !70
  %2950 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %291, i32 0, i32 0
  store i8 %2949, ptr %2950, align 16, !tbaa !71
  %2951 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 35
  %2952 = load i8, ptr %2951, align 16, !tbaa !61
  %2953 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %291, i32 0, i32 1
  store i8 %2952, ptr %2953, align 16, !tbaa !86
  %2954 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 36
  %2955 = load i8, ptr %2954, align 1, !tbaa !64
  %2956 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %291, i32 0, i32 2
  store i8 %2955, ptr %2956, align 1, !tbaa !87
  %2957 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 41
  %2958 = load i8, ptr %2957, align 1, !tbaa !88, !range !54, !noundef !55
  %2959 = trunc i8 %2958 to i1
  %2960 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %291, i32 0, i32 4
  %2961 = zext i1 %2959 to i8
  store i8 %2961, ptr %2960, align 1, !tbaa !89
  %2962 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 38
  %2963 = load i8, ptr %2962, align 1, !tbaa !75
  %2964 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %291, i32 0, i32 1
  store i8 %2963, ptr %2964, align 1, !tbaa !76
  call void @llvm.lifetime.start.p0(i64 24, ptr %292) #12
  call void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %292) #12
  %2965 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %2966 = load i32, ptr %2965, align 4, !tbaa !68
  %2967 = icmp eq i32 %2966, 0
  br i1 %2967, label %2968, label %3026

2968:                                             ; preds = %2942
  call void @llvm.lifetime.start.p0(i64 1184, ptr %293) #12
  invoke void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %293)
          to label %2969 unwind label %3006

2969:                                             ; preds = %2968
  %2970 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %2971 = load ptr, ptr %2970, align 8, !tbaa !50
  %2972 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2971)
          to label %2973 unwind label %3010

2973:                                             ; preds = %2969
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %294, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %295) #12
  call void @llvm.memset.p0.i64(ptr align 8 %295, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %295) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %296) #12
  call void @llvm.memset.p0.i64(ptr align 8 %296, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %296) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %297) #12
  call void @llvm.memset.p0.i64(ptr align 8 %297, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %297) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %298) #12
  call void @llvm.memset.p0.i64(ptr align 8 %298, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %298)
          to label %2974 unwind label %3014

2974:                                             ; preds = %2973
  %2975 = getelementptr inbounds { double, double }, ptr %294, i32 0, i32 0
  %2976 = load double, ptr %2975, align 16
  %2977 = getelementptr inbounds { double, double }, ptr %294, i32 0, i32 1
  %2978 = load double, ptr %2977, align 8
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %2972, ptr noundef nonnull align 16 dereferenceable(144) %285, ptr noundef nonnull align 16 dereferenceable(36) %291, double %2976, double %2978, ptr noundef nonnull align 8 dereferenceable(24) %293, ptr noundef nonnull align 8 dereferenceable(8) %295, ptr noundef nonnull align 8 dereferenceable(8) %296, ptr noundef nonnull align 8 dereferenceable(8) %297, ptr noundef nonnull align 8 dereferenceable(12) %298)
          to label %2979 unwind label %3018

2979:                                             ; preds = %2974
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %298) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %298) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %297) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %297) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %296) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %296) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %295) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %295) #12
  %2980 = invoke noundef zeroext i1 @_ZNK3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1169) %293)
          to label %2981 unwind label %3010

2981:                                             ; preds = %2979
  br i1 %2980, label %2982, label %3023

2982:                                             ; preds = %2981
  %2983 = getelementptr inbounds %"class.JPH::AnyHitCollisionCollector.172", ptr %293, i32 0, i32 2
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %292, ptr noundef nonnull align 16 dereferenceable(1125) %2983)
          to label %2984 unwind label %3010

2984:                                             ; preds = %2982
  br label %3023

2985:                                             ; preds = %2891, %2889
  %2986 = landingpad { ptr, i32 }
          cleanup
  %2987 = extractvalue { ptr, i32 } %2986, 0
  store ptr %2987, ptr %29, align 8
  %2988 = extractvalue { ptr, i32 } %2986, 1
  store i32 %2988, ptr %30, align 4
  br label %2993

2989:                                             ; preds = %2915, %2904, %2902
  %2990 = landingpad { ptr, i32 }
          cleanup
  %2991 = extractvalue { ptr, i32 } %2990, 0
  store ptr %2991, ptr %29, align 8
  %2992 = extractvalue { ptr, i32 } %2990, 1
  store i32 %2992, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %283) #12
  br label %2993

2993:                                             ; preds = %2989, %2985
  call void @llvm.lifetime.end.p0(i64 64, ptr %281) #12
  br label %3720

2994:                                             ; preds = %2918, %2916
  %2995 = landingpad { ptr, i32 }
          cleanup
  %2996 = extractvalue { ptr, i32 } %2995, 0
  store ptr %2996, ptr %29, align 8
  %2997 = extractvalue { ptr, i32 } %2995, 1
  store i32 %2997, ptr %30, align 4
  br label %3719

2998:                                             ; preds = %2932, %2931, %2920
  %2999 = landingpad { ptr, i32 }
          cleanup
  %3000 = extractvalue { ptr, i32 } %2999, 0
  store ptr %3000, ptr %29, align 8
  %3001 = extractvalue { ptr, i32 } %2999, 1
  store i32 %3001, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %288) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %287) #12
  br label %3719

3002:                                             ; preds = %2941
  %3003 = landingpad { ptr, i32 }
          cleanup
  %3004 = extractvalue { ptr, i32 } %3003, 0
  store ptr %3004, ptr %29, align 8
  %3005 = extractvalue { ptr, i32 } %3003, 1
  store i32 %3005, ptr %30, align 4
  br label %3718

3006:                                             ; preds = %2968
  %3007 = landingpad { ptr, i32 }
          cleanup
  %3008 = extractvalue { ptr, i32 } %3007, 0
  store ptr %3008, ptr %29, align 8
  %3009 = extractvalue { ptr, i32 } %3007, 1
  store i32 %3009, ptr %30, align 4
  br label %3025

3010:                                             ; preds = %2982, %2979, %2969
  %3011 = landingpad { ptr, i32 }
          cleanup
  %3012 = extractvalue { ptr, i32 } %3011, 0
  store ptr %3012, ptr %29, align 8
  %3013 = extractvalue { ptr, i32 } %3011, 1
  store i32 %3013, ptr %30, align 4
  br label %3024

3014:                                             ; preds = %2973
  %3015 = landingpad { ptr, i32 }
          cleanup
  %3016 = extractvalue { ptr, i32 } %3015, 0
  store ptr %3016, ptr %29, align 8
  %3017 = extractvalue { ptr, i32 } %3015, 1
  store i32 %3017, ptr %30, align 4
  br label %3022

3018:                                             ; preds = %2974
  %3019 = landingpad { ptr, i32 }
          cleanup
  %3020 = extractvalue { ptr, i32 } %3019, 0
  store ptr %3020, ptr %29, align 8
  %3021 = extractvalue { ptr, i32 } %3019, 1
  store i32 %3021, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %298) #12
  br label %3022

3022:                                             ; preds = %3018, %3014
  call void @llvm.lifetime.end.p0(i64 16, ptr %298) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %297) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %297) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %296) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %296) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %295) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %295) #12
  br label %3024

3023:                                             ; preds = %2984, %2981
  call void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %293) #12
  call void @llvm.lifetime.end.p0(i64 1184, ptr %293) #12
  br label %3167

3024:                                             ; preds = %3022, %3010
  call void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %293) #12
  br label %3025

3025:                                             ; preds = %3024, %3006
  call void @llvm.lifetime.end.p0(i64 1184, ptr %293) #12
  br label %3717

3026:                                             ; preds = %2942
  %3027 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %3028 = load i32, ptr %3027, align 4, !tbaa !68
  %3029 = icmp eq i32 %3028, 1
  br i1 %3029, label %3030, label %3067

3030:                                             ; preds = %3026
  call void @llvm.lifetime.start.p0(i64 1184, ptr %299) #12
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %299)
          to label %3031 unwind label %3047

3031:                                             ; preds = %3030
  %3032 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %3033 = load ptr, ptr %3032, align 8, !tbaa !50
  %3034 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %3033)
          to label %3035 unwind label %3051

3035:                                             ; preds = %3031
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %300, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %301) #12
  call void @llvm.memset.p0.i64(ptr align 8 %301, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %301) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %302) #12
  call void @llvm.memset.p0.i64(ptr align 8 %302, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %302) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %303) #12
  call void @llvm.memset.p0.i64(ptr align 8 %303, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %303) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %304) #12
  call void @llvm.memset.p0.i64(ptr align 8 %304, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %304)
          to label %3036 unwind label %3055

3036:                                             ; preds = %3035
  %3037 = getelementptr inbounds { double, double }, ptr %300, i32 0, i32 0
  %3038 = load double, ptr %3037, align 16
  %3039 = getelementptr inbounds { double, double }, ptr %300, i32 0, i32 1
  %3040 = load double, ptr %3039, align 8
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %3034, ptr noundef nonnull align 16 dereferenceable(144) %285, ptr noundef nonnull align 16 dereferenceable(36) %291, double %3038, double %3040, ptr noundef nonnull align 8 dereferenceable(24) %299, ptr noundef nonnull align 8 dereferenceable(8) %301, ptr noundef nonnull align 8 dereferenceable(8) %302, ptr noundef nonnull align 8 dereferenceable(8) %303, ptr noundef nonnull align 8 dereferenceable(12) %304)
          to label %3041 unwind label %3059

3041:                                             ; preds = %3036
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %304) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %304) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %303) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %303) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %302) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %302) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %301) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %301) #12
  %3042 = invoke noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1169) %299)
          to label %3043 unwind label %3051

3043:                                             ; preds = %3041
  br i1 %3042, label %3044, label %3064

3044:                                             ; preds = %3043
  %3045 = getelementptr inbounds %"class.JPH::ClosestHitCollisionCollector.175", ptr %299, i32 0, i32 2
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %292, ptr noundef nonnull align 16 dereferenceable(1125) %3045)
          to label %3046 unwind label %3051

3046:                                             ; preds = %3044
  br label %3064

3047:                                             ; preds = %3030
  %3048 = landingpad { ptr, i32 }
          cleanup
  %3049 = extractvalue { ptr, i32 } %3048, 0
  store ptr %3049, ptr %29, align 8
  %3050 = extractvalue { ptr, i32 } %3048, 1
  store i32 %3050, ptr %30, align 4
  br label %3066

3051:                                             ; preds = %3044, %3041, %3031
  %3052 = landingpad { ptr, i32 }
          cleanup
  %3053 = extractvalue { ptr, i32 } %3052, 0
  store ptr %3053, ptr %29, align 8
  %3054 = extractvalue { ptr, i32 } %3052, 1
  store i32 %3054, ptr %30, align 4
  br label %3065

3055:                                             ; preds = %3035
  %3056 = landingpad { ptr, i32 }
          cleanup
  %3057 = extractvalue { ptr, i32 } %3056, 0
  store ptr %3057, ptr %29, align 8
  %3058 = extractvalue { ptr, i32 } %3056, 1
  store i32 %3058, ptr %30, align 4
  br label %3063

3059:                                             ; preds = %3036
  %3060 = landingpad { ptr, i32 }
          cleanup
  %3061 = extractvalue { ptr, i32 } %3060, 0
  store ptr %3061, ptr %29, align 8
  %3062 = extractvalue { ptr, i32 } %3060, 1
  store i32 %3062, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %304) #12
  br label %3063

3063:                                             ; preds = %3059, %3055
  call void @llvm.lifetime.end.p0(i64 16, ptr %304) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %303) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %303) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %302) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %302) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %301) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %301) #12
  br label %3065

3064:                                             ; preds = %3046, %3043
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %299) #12
  call void @llvm.lifetime.end.p0(i64 1184, ptr %299) #12
  br label %3166

3065:                                             ; preds = %3063, %3051
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %299) #12
  br label %3066

3066:                                             ; preds = %3065, %3047
  call void @llvm.lifetime.end.p0(i64 1184, ptr %299) #12
  br label %3717

3067:                                             ; preds = %3026
  %3068 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 45
  %3069 = load i8, ptr %3068, align 16, !tbaa !69, !range !54, !noundef !55
  %3070 = trunc i8 %3069 to i1
  br i1 %3070, label %3071, label %3118

3071:                                             ; preds = %3067
  call void @llvm.lifetime.start.p0(i64 56, ptr %305) #12
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(53) %305) #12
  %3072 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %3073 = load ptr, ptr %3072, align 8, !tbaa !50
  %3074 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %3073)
          to label %3075 unwind label %3103

3075:                                             ; preds = %3071
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %306, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %307) #12
  call void @llvm.memset.p0.i64(ptr align 8 %307, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %307) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %308) #12
  call void @llvm.memset.p0.i64(ptr align 8 %308, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %308) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %309) #12
  call void @llvm.memset.p0.i64(ptr align 8 %309, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %309) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %310) #12
  call void @llvm.memset.p0.i64(ptr align 8 %310, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %310)
          to label %3076 unwind label %3107

3076:                                             ; preds = %3075
  %3077 = getelementptr inbounds { double, double }, ptr %306, i32 0, i32 0
  %3078 = load double, ptr %3077, align 16
  %3079 = getelementptr inbounds { double, double }, ptr %306, i32 0, i32 1
  %3080 = load double, ptr %3079, align 8
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %3074, ptr noundef nonnull align 16 dereferenceable(144) %285, ptr noundef nonnull align 16 dereferenceable(36) %291, double %3078, double %3080, ptr noundef nonnull align 8 dereferenceable(24) %305, ptr noundef nonnull align 8 dereferenceable(8) %307, ptr noundef nonnull align 8 dereferenceable(8) %308, ptr noundef nonnull align 8 dereferenceable(8) %309, ptr noundef nonnull align 8 dereferenceable(12) %310)
          to label %3081 unwind label %3111

3081:                                             ; preds = %3076
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %310) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %310) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %309) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %309) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %308) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %308) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %307) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %307) #12
  invoke void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53) %305)
          to label %3082 unwind label %3103

3082:                                             ; preds = %3081
  %3083 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %292)
          to label %3084 unwind label %3103

3084:                                             ; preds = %3082
  %3085 = getelementptr inbounds %"class.JPH::ClosestHitPerBodyCollisionCollector.177", ptr %305, i32 0, i32 1
  %3086 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %3085)
          to label %3087 unwind label %3103

3087:                                             ; preds = %3084
  %3088 = getelementptr inbounds %"class.JPH::ClosestHitPerBodyCollisionCollector.177", ptr %305, i32 0, i32 1
  %3089 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %3088)
          to label %3090 unwind label %3103

3090:                                             ; preds = %3087
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %292, ptr noundef %3083, ptr noundef %3086, ptr noundef %3089)
          to label %3091 unwind label %3103

3091:                                             ; preds = %3090
  %3092 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %292)
          to label %3093 unwind label %3103

3093:                                             ; preds = %3091
  %3094 = trunc i64 %3092 to i32
  %3095 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %3096 = load i32, ptr %3095, align 4, !tbaa !68
  %3097 = icmp sgt i32 %3094, %3096
  br i1 %3097, label %3098, label %3116

3098:                                             ; preds = %3093
  %3099 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %3100 = load i32, ptr %3099, align 4, !tbaa !68
  %3101 = sext i32 %3100 to i64
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %292, i64 noundef %3101)
          to label %3102 unwind label %3103

3102:                                             ; preds = %3098
  br label %3116

3103:                                             ; preds = %3098, %3091, %3090, %3087, %3084, %3082, %3081, %3071
  %3104 = landingpad { ptr, i32 }
          cleanup
  %3105 = extractvalue { ptr, i32 } %3104, 0
  store ptr %3105, ptr %29, align 8
  %3106 = extractvalue { ptr, i32 } %3104, 1
  store i32 %3106, ptr %30, align 4
  br label %3117

3107:                                             ; preds = %3075
  %3108 = landingpad { ptr, i32 }
          cleanup
  %3109 = extractvalue { ptr, i32 } %3108, 0
  store ptr %3109, ptr %29, align 8
  %3110 = extractvalue { ptr, i32 } %3108, 1
  store i32 %3110, ptr %30, align 4
  br label %3115

3111:                                             ; preds = %3076
  %3112 = landingpad { ptr, i32 }
          cleanup
  %3113 = extractvalue { ptr, i32 } %3112, 0
  store ptr %3113, ptr %29, align 8
  %3114 = extractvalue { ptr, i32 } %3112, 1
  store i32 %3114, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %310) #12
  br label %3115

3115:                                             ; preds = %3111, %3107
  call void @llvm.lifetime.end.p0(i64 16, ptr %310) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %309) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %309) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %308) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %308) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %307) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %307) #12
  br label %3117

3116:                                             ; preds = %3102, %3093
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %305) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr %305) #12
  br label %3165

3117:                                             ; preds = %3115, %3103
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %305) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr %305) #12
  br label %3717

3118:                                             ; preds = %3067
  call void @llvm.lifetime.start.p0(i64 48, ptr %311) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %311) #12
  %3119 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %3120 = load ptr, ptr %3119, align 8, !tbaa !50
  %3121 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %3120)
          to label %3122 unwind label %3150

3122:                                             ; preds = %3118
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %312, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %313) #12
  call void @llvm.memset.p0.i64(ptr align 8 %313, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %313) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %314) #12
  call void @llvm.memset.p0.i64(ptr align 8 %314, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %314) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %315) #12
  call void @llvm.memset.p0.i64(ptr align 8 %315, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %315) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %316) #12
  call void @llvm.memset.p0.i64(ptr align 8 %316, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %316)
          to label %3123 unwind label %3154

3123:                                             ; preds = %3122
  %3124 = getelementptr inbounds { double, double }, ptr %312, i32 0, i32 0
  %3125 = load double, ptr %3124, align 16
  %3126 = getelementptr inbounds { double, double }, ptr %312, i32 0, i32 1
  %3127 = load double, ptr %3126, align 8
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %3121, ptr noundef nonnull align 16 dereferenceable(144) %285, ptr noundef nonnull align 16 dereferenceable(36) %291, double %3125, double %3127, ptr noundef nonnull align 8 dereferenceable(24) %311, ptr noundef nonnull align 8 dereferenceable(8) %313, ptr noundef nonnull align 8 dereferenceable(8) %314, ptr noundef nonnull align 8 dereferenceable(8) %315, ptr noundef nonnull align 8 dereferenceable(12) %316)
          to label %3128 unwind label %3158

3128:                                             ; preds = %3123
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %316) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %316) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %315) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %315) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %314) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %314) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %313) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %313) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %311)
          to label %3129 unwind label %3150

3129:                                             ; preds = %3128
  %3130 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %292)
          to label %3131 unwind label %3150

3131:                                             ; preds = %3129
  %3132 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.179", ptr %311, i32 0, i32 1
  %3133 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %3132)
          to label %3134 unwind label %3150

3134:                                             ; preds = %3131
  %3135 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.179", ptr %311, i32 0, i32 1
  %3136 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %3135)
          to label %3137 unwind label %3150

3137:                                             ; preds = %3134
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %292, ptr noundef %3130, ptr noundef %3133, ptr noundef %3136)
          to label %3138 unwind label %3150

3138:                                             ; preds = %3137
  %3139 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %292)
          to label %3140 unwind label %3150

3140:                                             ; preds = %3138
  %3141 = trunc i64 %3139 to i32
  %3142 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %3143 = load i32, ptr %3142, align 4, !tbaa !68
  %3144 = icmp sgt i32 %3141, %3143
  br i1 %3144, label %3145, label %3163

3145:                                             ; preds = %3140
  %3146 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 44
  %3147 = load i32, ptr %3146, align 4, !tbaa !68
  %3148 = sext i32 %3147 to i64
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %292, i64 noundef %3148)
          to label %3149 unwind label %3150

3149:                                             ; preds = %3145
  br label %3163

3150:                                             ; preds = %3145, %3138, %3137, %3134, %3131, %3129, %3128, %3118
  %3151 = landingpad { ptr, i32 }
          cleanup
  %3152 = extractvalue { ptr, i32 } %3151, 0
  store ptr %3152, ptr %29, align 8
  %3153 = extractvalue { ptr, i32 } %3151, 1
  store i32 %3153, ptr %30, align 4
  br label %3164

3154:                                             ; preds = %3122
  %3155 = landingpad { ptr, i32 }
          cleanup
  %3156 = extractvalue { ptr, i32 } %3155, 0
  store ptr %3156, ptr %29, align 8
  %3157 = extractvalue { ptr, i32 } %3155, 1
  store i32 %3157, ptr %30, align 4
  br label %3162

3158:                                             ; preds = %3123
  %3159 = landingpad { ptr, i32 }
          cleanup
  %3160 = extractvalue { ptr, i32 } %3159, 0
  store ptr %3160, ptr %29, align 8
  %3161 = extractvalue { ptr, i32 } %3159, 1
  store i32 %3161, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %316) #12
  br label %3162

3162:                                             ; preds = %3158, %3154
  call void @llvm.lifetime.end.p0(i64 16, ptr %316) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %315) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %315) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %314) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %314) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %313) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %313) #12
  br label %3164

3163:                                             ; preds = %3149, %3140
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %311) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %311) #12
  br label %3165

3164:                                             ; preds = %3162, %3150
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %311) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %311) #12
  br label %3717

3165:                                             ; preds = %3163, %3116
  br label %3166

3166:                                             ; preds = %3165, %3064
  br label %3167

3167:                                             ; preds = %3166, %3023
  %3168 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %292)
          to label %3169 unwind label %3207

3169:                                             ; preds = %3167
  %3170 = xor i1 %3168, true
  %3171 = zext i1 %3170 to i8
  store i8 %3171, ptr %21, align 1, !tbaa !16
  %3172 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %3173 = trunc i8 %3172 to i1
  br i1 %3173, label %3174, label %3686

3174:                                             ; preds = %3169
  call void @llvm.lifetime.start.p0(i64 8, ptr %317) #12
  %3175 = invoke noundef nonnull align 16 dereferenceable(1125) ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %292)
          to label %3176 unwind label %3211

3176:                                             ; preds = %3174
  store ptr %3175, ptr %317, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %318) #12
  %3177 = load ptr, ptr %317, align 8, !tbaa !5
  %3178 = getelementptr inbounds %"class.JPH::ShapeCastResult", ptr %3177, i32 0, i32 1
  %3179 = load float, ptr %3178, align 16, !tbaa !90
  %3180 = invoke { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144) %285, float noundef %3179)
          to label %3181 unwind label %3215

3181:                                             ; preds = %3176
  %3182 = getelementptr inbounds %"class.JPH::Vec3", ptr %318, i32 0, i32 0
  %3183 = getelementptr inbounds %union.anon, ptr %3182, i32 0, i32 0
  %3184 = getelementptr inbounds { double, double }, ptr %3183, i32 0, i32 0
  %3185 = extractvalue { double, double } %3180, 0
  store double %3185, ptr %3184, align 16
  %3186 = getelementptr inbounds { double, double }, ptr %3183, i32 0, i32 1
  %3187 = extractvalue { double, double } %3180, 1
  store double %3187, ptr %3186, align 8
  %3188 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %3188, ptr align 16 %318, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %318) #12
  %3189 = load ptr, ptr %317, align 8, !tbaa !5
  %3190 = getelementptr inbounds %"class.JPH::ShapeCastResult", ptr %3189, i32 0, i32 1
  %3191 = load float, ptr %3190, align 16, !tbaa !90
  %3192 = load ptr, ptr %8, align 8, !tbaa !5
  store float %3191, ptr %3192, align 4, !tbaa !9
  %3193 = load ptr, ptr %317, align 8, !tbaa !5
  %3194 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3193, i32 0, i32 6
  %3195 = load ptr, ptr %10, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %3195, ptr align 4 %3194, i64 4, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %319) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %319, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %320) #12
  store i8 0, ptr %320, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %321) #12
  store ptr %292, ptr %321, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %322) #12
  %3196 = load ptr, ptr %321, align 8, !tbaa !5
  %3197 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %3196)
          to label %3198 unwind label %3219

3198:                                             ; preds = %3181
  store ptr %3197, ptr %322, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %323) #12
  %3199 = load ptr, ptr %321, align 8, !tbaa !5
  %3200 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %3199)
          to label %3201 unwind label %3223

3201:                                             ; preds = %3198
  store ptr %3200, ptr %323, align 8, !tbaa !5
  br label %3202

3202:                                             ; preds = %3630, %3201
  %3203 = load ptr, ptr %322, align 8, !tbaa !5
  %3204 = load ptr, ptr %323, align 8, !tbaa !5
  %3205 = icmp ne ptr %3203, %3204
  br i1 %3205, label %3227, label %3206

3206:                                             ; preds = %3202
  call void @llvm.lifetime.end.p0(i64 8, ptr %323) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %322) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %321) #12
  br label %3638

3207:                                             ; preds = %3694, %3686, %3167
  %3208 = landingpad { ptr, i32 }
          cleanup
  %3209 = extractvalue { ptr, i32 } %3208, 0
  store ptr %3209, ptr %29, align 8
  %3210 = extractvalue { ptr, i32 } %3208, 1
  store i32 %3210, ptr %30, align 4
  br label %3717

3211:                                             ; preds = %3174
  %3212 = landingpad { ptr, i32 }
          cleanup
  %3213 = extractvalue { ptr, i32 } %3212, 0
  store ptr %3213, ptr %29, align 8
  %3214 = extractvalue { ptr, i32 } %3212, 1
  store i32 %3214, ptr %30, align 4
  br label %3685

3215:                                             ; preds = %3176
  %3216 = landingpad { ptr, i32 }
          cleanup
  %3217 = extractvalue { ptr, i32 } %3216, 0
  store ptr %3217, ptr %29, align 8
  %3218 = extractvalue { ptr, i32 } %3216, 1
  store i32 %3218, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %318) #12
  br label %3685

3219:                                             ; preds = %3181
  %3220 = landingpad { ptr, i32 }
          cleanup
  %3221 = extractvalue { ptr, i32 } %3220, 0
  store ptr %3221, ptr %29, align 8
  %3222 = extractvalue { ptr, i32 } %3220, 1
  store i32 %3222, ptr %30, align 4
  br label %3637

3223:                                             ; preds = %3198
  %3224 = landingpad { ptr, i32 }
          cleanup
  %3225 = extractvalue { ptr, i32 } %3224, 0
  store ptr %3225, ptr %29, align 8
  %3226 = extractvalue { ptr, i32 } %3224, 1
  store i32 %3226, ptr %30, align 4
  br label %3636

3227:                                             ; preds = %3202
  call void @llvm.lifetime.start.p0(i64 8, ptr %324) #12
  %3228 = load ptr, ptr %322, align 8, !tbaa !5
  store ptr %3228, ptr %324, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %325) #12
  %3229 = load ptr, ptr %324, align 8, !tbaa !5
  %3230 = getelementptr inbounds %"class.JPH::ShapeCastResult", ptr %3229, i32 0, i32 1
  %3231 = load float, ptr %3230, align 16, !tbaa !90
  %3232 = invoke { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144) %285, float noundef %3231)
          to label %3233 unwind label %3565

3233:                                             ; preds = %3227
  %3234 = getelementptr inbounds %"class.JPH::Vec3", ptr %325, i32 0, i32 0
  %3235 = getelementptr inbounds %union.anon, ptr %3234, i32 0, i32 0
  %3236 = getelementptr inbounds { double, double }, ptr %3235, i32 0, i32 0
  %3237 = extractvalue { double, double } %3232, 0
  store double %3237, ptr %3236, align 16
  %3238 = getelementptr inbounds { double, double }, ptr %3235, i32 0, i32 1
  %3239 = extractvalue { double, double } %3232, 1
  store double %3239, ptr %3238, align 8
  %3240 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3241 = load ptr, ptr %3240, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %326, ptr align 16 %319, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %327, ptr align 16 %325, i64 16, i1 false), !tbaa.struct !11
  %3242 = load i8, ptr %320, align 1, !tbaa !16, !range !54, !noundef !55
  %3243 = trunc i8 %3242 to i1
  br i1 %3243, label %3244, label %3245

3244:                                             ; preds = %3233
  br label %3246

3245:                                             ; preds = %3233
  br label %3246

3246:                                             ; preds = %3245, %3244
  %3247 = phi ptr [ @_ZN3JPH5Color5sGreyE, %3244 ], [ @_ZN3JPH5Color6sWhiteE, %3245 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %328, ptr align 4 %3247, i64 4, i1 false), !tbaa.struct !57
  %3248 = getelementptr inbounds { double, double }, ptr %326, i32 0, i32 0
  %3249 = load double, ptr %3248, align 16
  %3250 = getelementptr inbounds { double, double }, ptr %326, i32 0, i32 1
  %3251 = load double, ptr %3250, align 8
  %3252 = getelementptr inbounds { double, double }, ptr %327, i32 0, i32 0
  %3253 = load double, ptr %3252, align 16
  %3254 = getelementptr inbounds { double, double }, ptr %327, i32 0, i32 1
  %3255 = load double, ptr %3254, align 8
  %3256 = getelementptr inbounds %"class.JPH::Color", ptr %328, i32 0, i32 0
  %3257 = getelementptr inbounds %union.anon.62, ptr %3256, i32 0, i32 0
  %3258 = load i32, ptr %3257, align 4
  %3259 = load ptr, ptr %3241, align 8, !tbaa !58
  %3260 = getelementptr inbounds ptr, ptr %3259, i64 2
  %3261 = load ptr, ptr %3260, align 8
  invoke void %3261(ptr noundef nonnull align 8 dereferenceable(320) %3241, double %3249, double %3251, double %3253, double %3255, i32 %3258)
          to label %3262 unwind label %3565

3262:                                             ; preds = %3246
  %3263 = load i8, ptr %320, align 1, !tbaa !16, !range !54, !noundef !55
  %3264 = trunc i8 %3263 to i1
  %3265 = xor i1 %3264, true
  %3266 = zext i1 %3265 to i8
  store i8 %3266, ptr %320, align 1, !tbaa !16
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %319, ptr align 16 %325, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %329) #12
  %3267 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %3268 = load ptr, ptr %3267, align 8, !tbaa !50
  %3269 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %3268)
          to label %3270 unwind label %3569

3270:                                             ; preds = %3262
  %3271 = load ptr, ptr %324, align 8, !tbaa !5
  %3272 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3271, i32 0, i32 6
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %329, ptr noundef nonnull align 8 dereferenceable(16) %3269, ptr noundef nonnull align 4 dereferenceable(4) %3272)
          to label %3273 unwind label %3569

3273:                                             ; preds = %3270
  %3274 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %329)
          to label %3275 unwind label %3573

3275:                                             ; preds = %3273
  br i1 %3274, label %3276, label %3629

3276:                                             ; preds = %3275
  call void @llvm.lifetime.start.p0(i64 8, ptr %330) #12
  %3277 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %329)
          to label %3278 unwind label %3577

3278:                                             ; preds = %3276
  store ptr %3277, ptr %330, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %331) #12
  %3279 = load ptr, ptr %330, align 8, !tbaa !5
  %3280 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %3279)
          to label %3281 unwind label %3581

3281:                                             ; preds = %3278
  br i1 %3280, label %3282, label %3283

3282:                                             ; preds = %3281
  br label %3284

3283:                                             ; preds = %3281
  br label %3284

3284:                                             ; preds = %3283, %3282
  %3285 = phi ptr [ @_ZN3JPH5Color7sYellowE, %3282 ], [ @_ZN3JPH5Color7sOrangeE, %3283 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %331, ptr align 4 %3285, i64 4, i1 false), !tbaa.struct !57
  call void @llvm.lifetime.start.p0(i64 16, ptr %332) #12
  %3286 = load ptr, ptr %324, align 8, !tbaa !5
  %3287 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3286, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %333, ptr align 16 %3287, i64 16, i1 false), !tbaa.struct !11
  %3288 = getelementptr inbounds { double, double }, ptr %333, i32 0, i32 0
  %3289 = load double, ptr %3288, align 16
  %3290 = getelementptr inbounds { double, double }, ptr %333, i32 0, i32 1
  %3291 = load double, ptr %3290, align 8
  %3292 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %3289, double %3291)
          to label %3293 unwind label %3585

3293:                                             ; preds = %3284
  %3294 = getelementptr inbounds %"class.JPH::Vec3", ptr %332, i32 0, i32 0
  %3295 = getelementptr inbounds %union.anon, ptr %3294, i32 0, i32 0
  %3296 = getelementptr inbounds { double, double }, ptr %3295, i32 0, i32 0
  %3297 = extractvalue { double, double } %3292, 0
  store double %3297, ptr %3296, align 16
  %3298 = getelementptr inbounds { double, double }, ptr %3295, i32 0, i32 1
  %3299 = extractvalue { double, double } %3292, 1
  store double %3299, ptr %3298, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %334) #12
  %3300 = load ptr, ptr %324, align 8, !tbaa !5
  %3301 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3300, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %335, ptr align 16 %3301, i64 16, i1 false), !tbaa.struct !11
  %3302 = getelementptr inbounds { double, double }, ptr %335, i32 0, i32 0
  %3303 = load double, ptr %3302, align 16
  %3304 = getelementptr inbounds { double, double }, ptr %335, i32 0, i32 1
  %3305 = load double, ptr %3304, align 8
  %3306 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %3303, double %3305)
          to label %3307 unwind label %3589

3307:                                             ; preds = %3293
  %3308 = getelementptr inbounds %"class.JPH::Vec3", ptr %334, i32 0, i32 0
  %3309 = getelementptr inbounds %union.anon, ptr %3308, i32 0, i32 0
  %3310 = getelementptr inbounds { double, double }, ptr %3309, i32 0, i32 0
  %3311 = extractvalue { double, double } %3306, 0
  store double %3311, ptr %3310, align 16
  %3312 = getelementptr inbounds { double, double }, ptr %3309, i32 0, i32 1
  %3313 = extractvalue { double, double } %3306, 1
  store double %3313, ptr %3312, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %336) #12
  %3314 = load ptr, ptr %324, align 8, !tbaa !5
  %3315 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3314, i32 0, i32 2
  %3316 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %3315)
          to label %3317 unwind label %3593

3317:                                             ; preds = %3307
  %3318 = getelementptr inbounds %"class.JPH::Vec3", ptr %336, i32 0, i32 0
  %3319 = getelementptr inbounds %union.anon, ptr %3318, i32 0, i32 0
  %3320 = getelementptr inbounds { double, double }, ptr %3319, i32 0, i32 0
  %3321 = extractvalue { double, double } %3316, 0
  store double %3321, ptr %3320, align 16
  %3322 = getelementptr inbounds { double, double }, ptr %3319, i32 0, i32 1
  %3323 = extractvalue { double, double } %3316, 1
  store double %3323, ptr %3322, align 8
  %3324 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3325 = load ptr, ptr %3324, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %337, ptr align 16 %334, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %339, ptr align 16 %336, i64 16, i1 false), !tbaa.struct !11
  %3326 = getelementptr inbounds { double, double }, ptr %339, i32 0, i32 0
  %3327 = load double, ptr %3326, align 16
  %3328 = getelementptr inbounds { double, double }, ptr %339, i32 0, i32 1
  %3329 = load double, ptr %3328, align 8
  %3330 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %334, double %3327, double %3329)
          to label %3331 unwind label %3593

3331:                                             ; preds = %3317
  %3332 = getelementptr inbounds %"class.JPH::Vec3", ptr %338, i32 0, i32 0
  %3333 = getelementptr inbounds %union.anon, ptr %3332, i32 0, i32 0
  %3334 = getelementptr inbounds { double, double }, ptr %3333, i32 0, i32 0
  %3335 = extractvalue { double, double } %3330, 0
  store double %3335, ptr %3334, align 16
  %3336 = getelementptr inbounds { double, double }, ptr %3333, i32 0, i32 1
  %3337 = extractvalue { double, double } %3330, 1
  store double %3337, ptr %3336, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %340, ptr align 4 %331, i64 4, i1 false), !tbaa.struct !57
  %3338 = getelementptr inbounds { double, double }, ptr %337, i32 0, i32 0
  %3339 = load double, ptr %3338, align 16
  %3340 = getelementptr inbounds { double, double }, ptr %337, i32 0, i32 1
  %3341 = load double, ptr %3340, align 8
  %3342 = getelementptr inbounds { double, double }, ptr %338, i32 0, i32 0
  %3343 = load double, ptr %3342, align 16
  %3344 = getelementptr inbounds { double, double }, ptr %338, i32 0, i32 1
  %3345 = load double, ptr %3344, align 8
  %3346 = getelementptr inbounds %"class.JPH::Color", ptr %340, i32 0, i32 0
  %3347 = getelementptr inbounds %union.anon.62, ptr %3346, i32 0, i32 0
  %3348 = load i32, ptr %3347, align 4
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %3325, double %3339, double %3341, double %3343, double %3345, i32 %3348, float noundef 0x3F847AE140000000)
          to label %3349 unwind label %3593

3349:                                             ; preds = %3331
  %3350 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3351 = load ptr, ptr %3350, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %341, ptr align 16 %332, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %342, ptr align 4 @_ZN3JPH5Color6sGreenE, i64 4, i1 false), !tbaa.struct !57
  %3352 = getelementptr inbounds { double, double }, ptr %341, i32 0, i32 0
  %3353 = load double, ptr %3352, align 16
  %3354 = getelementptr inbounds { double, double }, ptr %341, i32 0, i32 1
  %3355 = load double, ptr %3354, align 8
  %3356 = getelementptr inbounds %"class.JPH::Color", ptr %342, i32 0, i32 0
  %3357 = getelementptr inbounds %union.anon.62, ptr %3356, i32 0, i32 0
  %3358 = load i32, ptr %3357, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %3351, double %3353, double %3355, i32 %3358, float noundef 0x3FB99999A0000000)
          to label %3359 unwind label %3593

3359:                                             ; preds = %3349
  call void @llvm.lifetime.start.p0(i64 16, ptr %343) #12
  %3360 = invoke { double, double } @_ZNK3JPH4Vec326GetNormalizedPerpendicularEv(ptr noundef nonnull align 16 dereferenceable(16) %336)
          to label %3361 unwind label %3597

3361:                                             ; preds = %3359
  %3362 = getelementptr inbounds %"class.JPH::Vec3", ptr %343, i32 0, i32 0
  %3363 = getelementptr inbounds %union.anon, ptr %3362, i32 0, i32 0
  %3364 = getelementptr inbounds { double, double }, ptr %3363, i32 0, i32 0
  %3365 = extractvalue { double, double } %3360, 0
  store double %3365, ptr %3364, align 16
  %3366 = getelementptr inbounds { double, double }, ptr %3363, i32 0, i32 1
  %3367 = extractvalue { double, double } %3360, 1
  store double %3367, ptr %3366, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %344) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %345, ptr align 16 %343, i64 16, i1 false), !tbaa.struct !11
  %3368 = getelementptr inbounds { double, double }, ptr %345, i32 0, i32 0
  %3369 = load double, ptr %3368, align 16
  %3370 = getelementptr inbounds { double, double }, ptr %345, i32 0, i32 1
  %3371 = load double, ptr %3370, align 8
  %3372 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %336, double %3369, double %3371)
          to label %3373 unwind label %3601

3373:                                             ; preds = %3361
  %3374 = getelementptr inbounds %"class.JPH::Vec3", ptr %344, i32 0, i32 0
  %3375 = getelementptr inbounds %union.anon, ptr %3374, i32 0, i32 0
  %3376 = getelementptr inbounds { double, double }, ptr %3375, i32 0, i32 0
  %3377 = extractvalue { double, double } %3372, 0
  store double %3377, ptr %3376, align 16
  %3378 = getelementptr inbounds { double, double }, ptr %3375, i32 0, i32 1
  %3379 = extractvalue { double, double } %3372, 1
  store double %3379, ptr %3378, align 8
  %3380 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3381 = load ptr, ptr %3380, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %348, ptr align 16 %343, i64 16, i1 false), !tbaa.struct !11
  %3382 = getelementptr inbounds { double, double }, ptr %348, i32 0, i32 0
  %3383 = load double, ptr %3382, align 16
  %3384 = getelementptr inbounds { double, double }, ptr %348, i32 0, i32 1
  %3385 = load double, ptr %3384, align 8
  %3386 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %3383, double %3385)
          to label %3387 unwind label %3601

3387:                                             ; preds = %3373
  %3388 = getelementptr inbounds %"class.JPH::Vec3", ptr %347, i32 0, i32 0
  %3389 = getelementptr inbounds %union.anon, ptr %3388, i32 0, i32 0
  %3390 = getelementptr inbounds { double, double }, ptr %3389, i32 0, i32 0
  %3391 = extractvalue { double, double } %3386, 0
  store double %3391, ptr %3390, align 16
  %3392 = getelementptr inbounds { double, double }, ptr %3389, i32 0, i32 1
  %3393 = extractvalue { double, double } %3386, 1
  store double %3393, ptr %3392, align 8
  %3394 = getelementptr inbounds { double, double }, ptr %347, i32 0, i32 0
  %3395 = load double, ptr %3394, align 16
  %3396 = getelementptr inbounds { double, double }, ptr %347, i32 0, i32 1
  %3397 = load double, ptr %3396, align 8
  %3398 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %334, double %3395, double %3397)
          to label %3399 unwind label %3601

3399:                                             ; preds = %3387
  %3400 = getelementptr inbounds %"class.JPH::Vec3", ptr %346, i32 0, i32 0
  %3401 = getelementptr inbounds %union.anon, ptr %3400, i32 0, i32 0
  %3402 = getelementptr inbounds { double, double }, ptr %3401, i32 0, i32 0
  %3403 = extractvalue { double, double } %3398, 0
  store double %3403, ptr %3402, align 16
  %3404 = getelementptr inbounds { double, double }, ptr %3401, i32 0, i32 1
  %3405 = extractvalue { double, double } %3398, 1
  store double %3405, ptr %3404, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %351, ptr align 16 %343, i64 16, i1 false), !tbaa.struct !11
  %3406 = getelementptr inbounds { double, double }, ptr %351, i32 0, i32 0
  %3407 = load double, ptr %3406, align 16
  %3408 = getelementptr inbounds { double, double }, ptr %351, i32 0, i32 1
  %3409 = load double, ptr %3408, align 8
  %3410 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %3407, double %3409)
          to label %3411 unwind label %3601

3411:                                             ; preds = %3399
  %3412 = getelementptr inbounds %"class.JPH::Vec3", ptr %350, i32 0, i32 0
  %3413 = getelementptr inbounds %union.anon, ptr %3412, i32 0, i32 0
  %3414 = getelementptr inbounds { double, double }, ptr %3413, i32 0, i32 0
  %3415 = extractvalue { double, double } %3410, 0
  store double %3415, ptr %3414, align 16
  %3416 = getelementptr inbounds { double, double }, ptr %3413, i32 0, i32 1
  %3417 = extractvalue { double, double } %3410, 1
  store double %3417, ptr %3416, align 8
  %3418 = getelementptr inbounds { double, double }, ptr %350, i32 0, i32 0
  %3419 = load double, ptr %3418, align 16
  %3420 = getelementptr inbounds { double, double }, ptr %350, i32 0, i32 1
  %3421 = load double, ptr %3420, align 8
  %3422 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %334, double %3419, double %3421)
          to label %3423 unwind label %3601

3423:                                             ; preds = %3411
  %3424 = getelementptr inbounds %"class.JPH::Vec3", ptr %349, i32 0, i32 0
  %3425 = getelementptr inbounds %union.anon, ptr %3424, i32 0, i32 0
  %3426 = getelementptr inbounds { double, double }, ptr %3425, i32 0, i32 0
  %3427 = extractvalue { double, double } %3422, 0
  store double %3427, ptr %3426, align 16
  %3428 = getelementptr inbounds { double, double }, ptr %3425, i32 0, i32 1
  %3429 = extractvalue { double, double } %3422, 1
  store double %3429, ptr %3428, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %352, ptr align 4 %331, i64 4, i1 false), !tbaa.struct !57
  %3430 = getelementptr inbounds { double, double }, ptr %346, i32 0, i32 0
  %3431 = load double, ptr %3430, align 16
  %3432 = getelementptr inbounds { double, double }, ptr %346, i32 0, i32 1
  %3433 = load double, ptr %3432, align 8
  %3434 = getelementptr inbounds { double, double }, ptr %349, i32 0, i32 0
  %3435 = load double, ptr %3434, align 16
  %3436 = getelementptr inbounds { double, double }, ptr %349, i32 0, i32 1
  %3437 = load double, ptr %3436, align 8
  %3438 = getelementptr inbounds %"class.JPH::Color", ptr %352, i32 0, i32 0
  %3439 = getelementptr inbounds %union.anon.62, ptr %3438, i32 0, i32 0
  %3440 = load i32, ptr %3439, align 4
  %3441 = load ptr, ptr %3381, align 8, !tbaa !58
  %3442 = getelementptr inbounds ptr, ptr %3441, i64 2
  %3443 = load ptr, ptr %3442, align 8
  invoke void %3443(ptr noundef nonnull align 8 dereferenceable(320) %3381, double %3431, double %3433, double %3435, double %3437, i32 %3440)
          to label %3444 unwind label %3601

3444:                                             ; preds = %3423
  %3445 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3446 = load ptr, ptr %3445, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %355, ptr align 16 %344, i64 16, i1 false), !tbaa.struct !11
  %3447 = getelementptr inbounds { double, double }, ptr %355, i32 0, i32 0
  %3448 = load double, ptr %3447, align 16
  %3449 = getelementptr inbounds { double, double }, ptr %355, i32 0, i32 1
  %3450 = load double, ptr %3449, align 8
  %3451 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %3448, double %3450)
          to label %3452 unwind label %3601

3452:                                             ; preds = %3444
  %3453 = getelementptr inbounds %"class.JPH::Vec3", ptr %354, i32 0, i32 0
  %3454 = getelementptr inbounds %union.anon, ptr %3453, i32 0, i32 0
  %3455 = getelementptr inbounds { double, double }, ptr %3454, i32 0, i32 0
  %3456 = extractvalue { double, double } %3451, 0
  store double %3456, ptr %3455, align 16
  %3457 = getelementptr inbounds { double, double }, ptr %3454, i32 0, i32 1
  %3458 = extractvalue { double, double } %3451, 1
  store double %3458, ptr %3457, align 8
  %3459 = getelementptr inbounds { double, double }, ptr %354, i32 0, i32 0
  %3460 = load double, ptr %3459, align 16
  %3461 = getelementptr inbounds { double, double }, ptr %354, i32 0, i32 1
  %3462 = load double, ptr %3461, align 8
  %3463 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %334, double %3460, double %3462)
          to label %3464 unwind label %3601

3464:                                             ; preds = %3452
  %3465 = getelementptr inbounds %"class.JPH::Vec3", ptr %353, i32 0, i32 0
  %3466 = getelementptr inbounds %union.anon, ptr %3465, i32 0, i32 0
  %3467 = getelementptr inbounds { double, double }, ptr %3466, i32 0, i32 0
  %3468 = extractvalue { double, double } %3463, 0
  store double %3468, ptr %3467, align 16
  %3469 = getelementptr inbounds { double, double }, ptr %3466, i32 0, i32 1
  %3470 = extractvalue { double, double } %3463, 1
  store double %3470, ptr %3469, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %358, ptr align 16 %344, i64 16, i1 false), !tbaa.struct !11
  %3471 = getelementptr inbounds { double, double }, ptr %358, i32 0, i32 0
  %3472 = load double, ptr %3471, align 16
  %3473 = getelementptr inbounds { double, double }, ptr %358, i32 0, i32 1
  %3474 = load double, ptr %3473, align 8
  %3475 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %3472, double %3474)
          to label %3476 unwind label %3601

3476:                                             ; preds = %3464
  %3477 = getelementptr inbounds %"class.JPH::Vec3", ptr %357, i32 0, i32 0
  %3478 = getelementptr inbounds %union.anon, ptr %3477, i32 0, i32 0
  %3479 = getelementptr inbounds { double, double }, ptr %3478, i32 0, i32 0
  %3480 = extractvalue { double, double } %3475, 0
  store double %3480, ptr %3479, align 16
  %3481 = getelementptr inbounds { double, double }, ptr %3478, i32 0, i32 1
  %3482 = extractvalue { double, double } %3475, 1
  store double %3482, ptr %3481, align 8
  %3483 = getelementptr inbounds { double, double }, ptr %357, i32 0, i32 0
  %3484 = load double, ptr %3483, align 16
  %3485 = getelementptr inbounds { double, double }, ptr %357, i32 0, i32 1
  %3486 = load double, ptr %3485, align 8
  %3487 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %334, double %3484, double %3486)
          to label %3488 unwind label %3601

3488:                                             ; preds = %3476
  %3489 = getelementptr inbounds %"class.JPH::Vec3", ptr %356, i32 0, i32 0
  %3490 = getelementptr inbounds %union.anon, ptr %3489, i32 0, i32 0
  %3491 = getelementptr inbounds { double, double }, ptr %3490, i32 0, i32 0
  %3492 = extractvalue { double, double } %3487, 0
  store double %3492, ptr %3491, align 16
  %3493 = getelementptr inbounds { double, double }, ptr %3490, i32 0, i32 1
  %3494 = extractvalue { double, double } %3487, 1
  store double %3494, ptr %3493, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %359, ptr align 4 %331, i64 4, i1 false), !tbaa.struct !57
  %3495 = getelementptr inbounds { double, double }, ptr %353, i32 0, i32 0
  %3496 = load double, ptr %3495, align 16
  %3497 = getelementptr inbounds { double, double }, ptr %353, i32 0, i32 1
  %3498 = load double, ptr %3497, align 8
  %3499 = getelementptr inbounds { double, double }, ptr %356, i32 0, i32 0
  %3500 = load double, ptr %3499, align 16
  %3501 = getelementptr inbounds { double, double }, ptr %356, i32 0, i32 1
  %3502 = load double, ptr %3501, align 8
  %3503 = getelementptr inbounds %"class.JPH::Color", ptr %359, i32 0, i32 0
  %3504 = getelementptr inbounds %union.anon.62, ptr %3503, i32 0, i32 0
  %3505 = load i32, ptr %3504, align 4
  %3506 = load ptr, ptr %3446, align 8, !tbaa !58
  %3507 = getelementptr inbounds ptr, ptr %3506, i64 2
  %3508 = load ptr, ptr %3507, align 8
  invoke void %3508(ptr noundef nonnull align 8 dereferenceable(320) %3446, double %3496, double %3498, double %3500, double %3502, i32 %3505)
          to label %3509 unwind label %3601

3509:                                             ; preds = %3488
  call void @llvm.lifetime.start.p0(i64 8, ptr %360) #12
  %3510 = load ptr, ptr %330, align 8, !tbaa !5
  %3511 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %3510)
          to label %3512 unwind label %3605

3512:                                             ; preds = %3509
  %3513 = load ptr, ptr %324, align 8, !tbaa !5
  %3514 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3513, i32 0, i32 5
  %3515 = load ptr, ptr %3511, align 8, !tbaa !58
  %3516 = getelementptr inbounds ptr, ptr %3515, i64 10
  %3517 = load ptr, ptr %3516, align 8
  %3518 = invoke noundef ptr %3517(ptr noundef nonnull align 8 dereferenceable(26) %3511, ptr noundef nonnull align 4 dereferenceable(4) %3514)
          to label %3519 unwind label %3605

3519:                                             ; preds = %3512
  store ptr %3518, ptr %360, align 8, !tbaa !5
  %3520 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3521 = load ptr, ptr %3520, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %361, ptr align 16 %325, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %362) #12
  %3522 = load ptr, ptr %360, align 8, !tbaa !5
  %3523 = load ptr, ptr %3522, align 8, !tbaa !58
  %3524 = getelementptr inbounds ptr, ptr %3523, i64 4
  %3525 = load ptr, ptr %3524, align 8
  %3526 = invoke noundef ptr %3525(ptr noundef nonnull align 8 dereferenceable(12) %3522)
          to label %3527 unwind label %3609

3527:                                             ; preds = %3519
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %362, ptr noundef %3526) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %363, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !57
  %3528 = getelementptr inbounds { double, double }, ptr %361, i32 0, i32 0
  %3529 = load double, ptr %3528, align 16
  %3530 = getelementptr inbounds { double, double }, ptr %361, i32 0, i32 1
  %3531 = load double, ptr %3530, align 8
  %3532 = getelementptr inbounds %"class.JPH::Color", ptr %363, i32 0, i32 0
  %3533 = getelementptr inbounds %union.anon.62, ptr %3532, i32 0, i32 0
  %3534 = load i32, ptr %3533, align 4
  %3535 = load ptr, ptr %3521, align 8, !tbaa !58
  %3536 = getelementptr inbounds ptr, ptr %3535, i64 7
  %3537 = load ptr, ptr %3536, align 8
  invoke void %3537(ptr noundef nonnull align 8 dereferenceable(320) %3521, double %3529, double %3531, ptr noundef nonnull align 8 dereferenceable(16) %362, i32 %3534, float noundef 5.000000e-01)
          to label %3538 unwind label %3609

3538:                                             ; preds = %3527
  call void @llvm.lifetime.end.p0(i64 16, ptr %362) #12
  %3539 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3540 = load ptr, ptr %3539, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %364) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %365, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  %3541 = getelementptr inbounds { double, double }, ptr %365, i32 0, i32 0
  %3542 = load double, ptr %3541, align 16
  %3543 = getelementptr inbounds { double, double }, ptr %365, i32 0, i32 1
  %3544 = load double, ptr %3543, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %364, double %3542, double %3544)
          to label %3545 unwind label %3613

3545:                                             ; preds = %3538
  %3546 = load ptr, ptr %324, align 8, !tbaa !5
  %3547 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3546, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %366, ptr align 4 @_ZN3JPH5Color7sYellowE, i64 4, i1 false), !tbaa.struct !57
  %3548 = getelementptr inbounds %"class.JPH::Color", ptr %366, i32 0, i32 0
  %3549 = getelementptr inbounds %union.anon.62, ptr %3548, i32 0, i32 0
  %3550 = load i32, ptr %3549, align 4
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %3540, ptr noundef nonnull align 16 dereferenceable(64) %364, ptr noundef nonnull align 16 dereferenceable(528) %3547, i32 %3550, float noundef 0x3F847AE140000000)
          to label %3551 unwind label %3613

3551:                                             ; preds = %3545
  call void @llvm.lifetime.end.p0(i64 64, ptr %364) #12
  %3552 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3553 = load ptr, ptr %3552, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %367) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %368, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  %3554 = getelementptr inbounds { double, double }, ptr %368, i32 0, i32 0
  %3555 = load double, ptr %3554, align 16
  %3556 = getelementptr inbounds { double, double }, ptr %368, i32 0, i32 1
  %3557 = load double, ptr %3556, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %367, double %3555, double %3557)
          to label %3558 unwind label %3617

3558:                                             ; preds = %3551
  %3559 = load ptr, ptr %324, align 8, !tbaa !5
  %3560 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3559, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %369, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %3561 = getelementptr inbounds %"class.JPH::Color", ptr %369, i32 0, i32 0
  %3562 = getelementptr inbounds %union.anon.62, ptr %3561, i32 0, i32 0
  %3563 = load i32, ptr %3562, align 4
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %3553, ptr noundef nonnull align 16 dereferenceable(64) %367, ptr noundef nonnull align 16 dereferenceable(528) %3560, i32 %3563, float noundef 0x3F847AE140000000)
          to label %3564 unwind label %3617

3564:                                             ; preds = %3558
  call void @llvm.lifetime.end.p0(i64 64, ptr %367) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %360) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %344) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %343) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %336) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %334) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %332) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %331) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %330) #12
  br label %3629

3565:                                             ; preds = %3246, %3227
  %3566 = landingpad { ptr, i32 }
          cleanup
  %3567 = extractvalue { ptr, i32 } %3566, 0
  store ptr %3567, ptr %29, align 8
  %3568 = extractvalue { ptr, i32 } %3566, 1
  store i32 %3568, ptr %30, align 4
  br label %3635

3569:                                             ; preds = %3270, %3262
  %3570 = landingpad { ptr, i32 }
          cleanup
  %3571 = extractvalue { ptr, i32 } %3570, 0
  store ptr %3571, ptr %29, align 8
  %3572 = extractvalue { ptr, i32 } %3570, 1
  store i32 %3572, ptr %30, align 4
  br label %3634

3573:                                             ; preds = %3273
  %3574 = landingpad { ptr, i32 }
          cleanup
  %3575 = extractvalue { ptr, i32 } %3574, 0
  store ptr %3575, ptr %29, align 8
  %3576 = extractvalue { ptr, i32 } %3574, 1
  store i32 %3576, ptr %30, align 4
  br label %3633

3577:                                             ; preds = %3276
  %3578 = landingpad { ptr, i32 }
          cleanup
  %3579 = extractvalue { ptr, i32 } %3578, 0
  store ptr %3579, ptr %29, align 8
  %3580 = extractvalue { ptr, i32 } %3578, 1
  store i32 %3580, ptr %30, align 4
  br label %3628

3581:                                             ; preds = %3278
  %3582 = landingpad { ptr, i32 }
          cleanup
  %3583 = extractvalue { ptr, i32 } %3582, 0
  store ptr %3583, ptr %29, align 8
  %3584 = extractvalue { ptr, i32 } %3582, 1
  store i32 %3584, ptr %30, align 4
  br label %3627

3585:                                             ; preds = %3284
  %3586 = landingpad { ptr, i32 }
          cleanup
  %3587 = extractvalue { ptr, i32 } %3586, 0
  store ptr %3587, ptr %29, align 8
  %3588 = extractvalue { ptr, i32 } %3586, 1
  store i32 %3588, ptr %30, align 4
  br label %3626

3589:                                             ; preds = %3293
  %3590 = landingpad { ptr, i32 }
          cleanup
  %3591 = extractvalue { ptr, i32 } %3590, 0
  store ptr %3591, ptr %29, align 8
  %3592 = extractvalue { ptr, i32 } %3590, 1
  store i32 %3592, ptr %30, align 4
  br label %3625

3593:                                             ; preds = %3349, %3331, %3317, %3307
  %3594 = landingpad { ptr, i32 }
          cleanup
  %3595 = extractvalue { ptr, i32 } %3594, 0
  store ptr %3595, ptr %29, align 8
  %3596 = extractvalue { ptr, i32 } %3594, 1
  store i32 %3596, ptr %30, align 4
  br label %3624

3597:                                             ; preds = %3359
  %3598 = landingpad { ptr, i32 }
          cleanup
  %3599 = extractvalue { ptr, i32 } %3598, 0
  store ptr %3599, ptr %29, align 8
  %3600 = extractvalue { ptr, i32 } %3598, 1
  store i32 %3600, ptr %30, align 4
  br label %3623

3601:                                             ; preds = %3488, %3476, %3464, %3452, %3444, %3423, %3411, %3399, %3387, %3373, %3361
  %3602 = landingpad { ptr, i32 }
          cleanup
  %3603 = extractvalue { ptr, i32 } %3602, 0
  store ptr %3603, ptr %29, align 8
  %3604 = extractvalue { ptr, i32 } %3602, 1
  store i32 %3604, ptr %30, align 4
  br label %3622

3605:                                             ; preds = %3512, %3509
  %3606 = landingpad { ptr, i32 }
          cleanup
  %3607 = extractvalue { ptr, i32 } %3606, 0
  store ptr %3607, ptr %29, align 8
  %3608 = extractvalue { ptr, i32 } %3606, 1
  store i32 %3608, ptr %30, align 4
  br label %3621

3609:                                             ; preds = %3527, %3519
  %3610 = landingpad { ptr, i32 }
          cleanup
  %3611 = extractvalue { ptr, i32 } %3610, 0
  store ptr %3611, ptr %29, align 8
  %3612 = extractvalue { ptr, i32 } %3610, 1
  store i32 %3612, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %362) #12
  br label %3621

3613:                                             ; preds = %3545, %3538
  %3614 = landingpad { ptr, i32 }
          cleanup
  %3615 = extractvalue { ptr, i32 } %3614, 0
  store ptr %3615, ptr %29, align 8
  %3616 = extractvalue { ptr, i32 } %3614, 1
  store i32 %3616, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %364) #12
  br label %3621

3617:                                             ; preds = %3558, %3551
  %3618 = landingpad { ptr, i32 }
          cleanup
  %3619 = extractvalue { ptr, i32 } %3618, 0
  store ptr %3619, ptr %29, align 8
  %3620 = extractvalue { ptr, i32 } %3618, 1
  store i32 %3620, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %367) #12
  br label %3621

3621:                                             ; preds = %3617, %3613, %3609, %3605
  call void @llvm.lifetime.end.p0(i64 8, ptr %360) #12
  br label %3622

3622:                                             ; preds = %3621, %3601
  call void @llvm.lifetime.end.p0(i64 16, ptr %344) #12
  br label %3623

3623:                                             ; preds = %3622, %3597
  call void @llvm.lifetime.end.p0(i64 16, ptr %343) #12
  br label %3624

3624:                                             ; preds = %3623, %3593
  call void @llvm.lifetime.end.p0(i64 16, ptr %336) #12
  br label %3625

3625:                                             ; preds = %3624, %3589
  call void @llvm.lifetime.end.p0(i64 16, ptr %334) #12
  br label %3626

3626:                                             ; preds = %3625, %3585
  call void @llvm.lifetime.end.p0(i64 16, ptr %332) #12
  br label %3627

3627:                                             ; preds = %3626, %3581
  call void @llvm.lifetime.end.p0(i64 4, ptr %331) #12
  br label %3628

3628:                                             ; preds = %3627, %3577
  call void @llvm.lifetime.end.p0(i64 8, ptr %330) #12
  br label %3633

3629:                                             ; preds = %3564, %3275
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %329) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %329) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %325) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %324) #12
  br label %3630

3630:                                             ; preds = %3629
  %3631 = load ptr, ptr %322, align 8, !tbaa !5
  %3632 = getelementptr inbounds %"class.JPH::ShapeCastResult", ptr %3631, i32 1
  store ptr %3632, ptr %322, align 8, !tbaa !5
  br label %3202

3633:                                             ; preds = %3628, %3573
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %329) #12
  br label %3634

3634:                                             ; preds = %3633, %3569
  call void @llvm.lifetime.end.p0(i64 24, ptr %329) #12
  br label %3635

3635:                                             ; preds = %3634, %3565
  call void @llvm.lifetime.end.p0(i64 16, ptr %325) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %324) #12
  br label %3636

3636:                                             ; preds = %3635, %3223
  call void @llvm.lifetime.end.p0(i64 8, ptr %323) #12
  br label %3637

3637:                                             ; preds = %3636, %3219
  call void @llvm.lifetime.end.p0(i64 8, ptr %322) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %321) #12
  br label %3684

3638:                                             ; preds = %3206
  %3639 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3640 = load ptr, ptr %3639, align 16, !tbaa !56
  %3641 = invoke noundef nonnull align 16 dereferenceable(1125) ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %292)
          to label %3642 unwind label %3680

3642:                                             ; preds = %3638
  %3643 = getelementptr inbounds %"class.JPH::ShapeCastResult", ptr %3641, i32 0, i32 1
  %3644 = load float, ptr %3643, align 16, !tbaa !90
  %3645 = invoke { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144) %285, float noundef %3644)
          to label %3646 unwind label %3680

3646:                                             ; preds = %3642
  %3647 = getelementptr inbounds %"class.JPH::Vec3", ptr %370, i32 0, i32 0
  %3648 = getelementptr inbounds %union.anon, ptr %3647, i32 0, i32 0
  %3649 = getelementptr inbounds { double, double }, ptr %3648, i32 0, i32 0
  %3650 = extractvalue { double, double } %3645, 0
  store double %3650, ptr %3649, align 16
  %3651 = getelementptr inbounds { double, double }, ptr %3648, i32 0, i32 1
  %3652 = extractvalue { double, double } %3645, 1
  store double %3652, ptr %3651, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %372, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %3653 = getelementptr inbounds { double, double }, ptr %372, i32 0, i32 0
  %3654 = load double, ptr %3653, align 16
  %3655 = getelementptr inbounds { double, double }, ptr %372, i32 0, i32 1
  %3656 = load double, ptr %3655, align 8
  %3657 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %3654, double %3656)
          to label %3658 unwind label %3680

3658:                                             ; preds = %3646
  %3659 = getelementptr inbounds %"class.JPH::Vec3", ptr %371, i32 0, i32 0
  %3660 = getelementptr inbounds %union.anon, ptr %3659, i32 0, i32 0
  %3661 = getelementptr inbounds { double, double }, ptr %3660, i32 0, i32 0
  %3662 = extractvalue { double, double } %3657, 0
  store double %3662, ptr %3661, align 16
  %3663 = getelementptr inbounds { double, double }, ptr %3660, i32 0, i32 1
  %3664 = extractvalue { double, double } %3657, 1
  store double %3664, ptr %3663, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %373, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %3665 = getelementptr inbounds { double, double }, ptr %370, i32 0, i32 0
  %3666 = load double, ptr %3665, align 16
  %3667 = getelementptr inbounds { double, double }, ptr %370, i32 0, i32 1
  %3668 = load double, ptr %3667, align 8
  %3669 = getelementptr inbounds { double, double }, ptr %371, i32 0, i32 0
  %3670 = load double, ptr %3669, align 16
  %3671 = getelementptr inbounds { double, double }, ptr %371, i32 0, i32 1
  %3672 = load double, ptr %3671, align 8
  %3673 = getelementptr inbounds %"class.JPH::Color", ptr %373, i32 0, i32 0
  %3674 = getelementptr inbounds %union.anon.62, ptr %3673, i32 0, i32 0
  %3675 = load i32, ptr %3674, align 4
  %3676 = load ptr, ptr %3640, align 8, !tbaa !58
  %3677 = getelementptr inbounds ptr, ptr %3676, i64 2
  %3678 = load ptr, ptr %3677, align 8
  invoke void %3678(ptr noundef nonnull align 8 dereferenceable(320) %3640, double %3666, double %3668, double %3670, double %3672, i32 %3675)
          to label %3679 unwind label %3680

3679:                                             ; preds = %3658
  call void @llvm.lifetime.end.p0(i64 1, ptr %320) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %319) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %317) #12
  br label %3716

3680:                                             ; preds = %3658, %3646, %3642, %3638
  %3681 = landingpad { ptr, i32 }
          cleanup
  %3682 = extractvalue { ptr, i32 } %3681, 0
  store ptr %3682, ptr %29, align 8
  %3683 = extractvalue { ptr, i32 } %3681, 1
  store i32 %3683, ptr %30, align 4
  br label %3684

3684:                                             ; preds = %3680, %3637
  call void @llvm.lifetime.end.p0(i64 1, ptr %320) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %319) #12
  br label %3685

3685:                                             ; preds = %3684, %3215, %3211
  call void @llvm.lifetime.end.p0(i64 8, ptr %317) #12
  br label %3717

3686:                                             ; preds = %3169
  %3687 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3688 = load ptr, ptr %3687, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %374, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %376, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %3689 = getelementptr inbounds { double, double }, ptr %376, i32 0, i32 0
  %3690 = load double, ptr %3689, align 16
  %3691 = getelementptr inbounds { double, double }, ptr %376, i32 0, i32 1
  %3692 = load double, ptr %3691, align 8
  %3693 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %3690, double %3692)
          to label %3694 unwind label %3207

3694:                                             ; preds = %3686
  %3695 = getelementptr inbounds %"class.JPH::Vec3", ptr %375, i32 0, i32 0
  %3696 = getelementptr inbounds %union.anon, ptr %3695, i32 0, i32 0
  %3697 = getelementptr inbounds { double, double }, ptr %3696, i32 0, i32 0
  %3698 = extractvalue { double, double } %3693, 0
  store double %3698, ptr %3697, align 16
  %3699 = getelementptr inbounds { double, double }, ptr %3696, i32 0, i32 1
  %3700 = extractvalue { double, double } %3693, 1
  store double %3700, ptr %3699, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %377, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %3701 = getelementptr inbounds { double, double }, ptr %374, i32 0, i32 0
  %3702 = load double, ptr %3701, align 16
  %3703 = getelementptr inbounds { double, double }, ptr %374, i32 0, i32 1
  %3704 = load double, ptr %3703, align 8
  %3705 = getelementptr inbounds { double, double }, ptr %375, i32 0, i32 0
  %3706 = load double, ptr %3705, align 16
  %3707 = getelementptr inbounds { double, double }, ptr %375, i32 0, i32 1
  %3708 = load double, ptr %3707, align 8
  %3709 = getelementptr inbounds %"class.JPH::Color", ptr %377, i32 0, i32 0
  %3710 = getelementptr inbounds %union.anon.62, ptr %3709, i32 0, i32 0
  %3711 = load i32, ptr %3710, align 4
  %3712 = load ptr, ptr %3688, align 8, !tbaa !58
  %3713 = getelementptr inbounds ptr, ptr %3712, i64 2
  %3714 = load ptr, ptr %3713, align 8
  invoke void %3714(ptr noundef nonnull align 8 dereferenceable(320) %3688, double %3702, double %3704, double %3706, double %3708, i32 %3711)
          to label %3715 unwind label %3207

3715:                                             ; preds = %3694
  br label %3716

3716:                                             ; preds = %3715, %3679
  call void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %292) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %292) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %291) #12
  call void @llvm.lifetime.end.p0(i64 144, ptr %285) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %280) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %279) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %279) #12
  br label %6190

3717:                                             ; preds = %3685, %3207, %3164, %3117, %3066, %3025
  call void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %292) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %292) #12
  br label %3718

3718:                                             ; preds = %3717, %3002
  call void @llvm.lifetime.end.p0(i64 48, ptr %291) #12
  br label %3719

3719:                                             ; preds = %3718, %2998, %2994
  call void @llvm.lifetime.end.p0(i64 144, ptr %285) #12
  br label %3720

3720:                                             ; preds = %3719, %2993
  call void @llvm.lifetime.end.p0(i64 64, ptr %280) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %279) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %279) #12
  br label %6193

3721:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %378) #12
  store float 0x3FC99999A0000000, ptr %378, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %379) #12
  store float 1.000000e+01, ptr %379, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %380) #12
  store float 1.000000e+00, ptr %380, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %381) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %382, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %3722 = getelementptr inbounds { double, double }, ptr %382, i32 0, i32 0
  %3723 = load double, ptr %3722, align 16
  %3724 = getelementptr inbounds { double, double }, ptr %382, i32 0, i32 1
  %3725 = load double, ptr %3724, align 8
  %3726 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %3723, double %3725)
  %3727 = getelementptr inbounds %"class.JPH::Vec3", ptr %381, i32 0, i32 0
  %3728 = getelementptr inbounds %union.anon, ptr %3727, i32 0, i32 0
  %3729 = getelementptr inbounds { double, double }, ptr %3728, i32 0, i32 0
  %3730 = extractvalue { double, double } %3726, 0
  store double %3730, ptr %3729, align 16
  %3731 = getelementptr inbounds { double, double }, ptr %3728, i32 0, i32 1
  %3732 = extractvalue { double, double } %3726, 1
  store double %3732, ptr %3731, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %383) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %384) #12
  store float 0xC7EFFFFFE0000000, ptr %384, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %385) #12
  store i32 -1, ptr %385, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 80, ptr %386) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %387) #12
  call void @_ZN3JPH10StridedPtrIKNS_4Vec3EEC2EPS2_i(ptr noundef nonnull align 8 dereferenceable(12) %387, ptr noundef %381, i32 noundef 16)
  call void @llvm.lifetime.start.p0(i64 16, ptr %388) #12
  call void @_ZN3JPH10StridedPtrIKfEC2EPS1_i(ptr noundef nonnull align 8 dereferenceable(12) %388, ptr noundef %380, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 16, ptr %389) #12
  call void @_ZN3JPH10StridedPtrINS_5PlaneEEC2EPS1_i(ptr noundef nonnull align 8 dereferenceable(12) %389, ptr noundef %383, i32 noundef 16)
  call void @llvm.lifetime.start.p0(i64 16, ptr %390) #12
  call void @_ZN3JPH10StridedPtrIfEC2EPfi(ptr noundef nonnull align 8 dereferenceable(12) %390, ptr noundef %384, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 16, ptr %391) #12
  call void @_ZN3JPH10StridedPtrIiEC2EPii(ptr noundef nonnull align 8 dereferenceable(12) %391, ptr noundef %385, i32 noundef 4)
  call void @_ZN3JPH29CollideSoftBodyVertexIteratorC2ERKNS_10StridedPtrIKNS_4Vec3EEERKNS1_IKfEERKNS1_INS_5PlaneEEERKNS1_IfEERKNS1_IiEE(ptr noundef nonnull align 8 dereferenceable(80) %386, ptr noundef nonnull align 8 dereferenceable(12) %387, ptr noundef nonnull align 8 dereferenceable(12) %388, ptr noundef nonnull align 8 dereferenceable(12) %389, ptr noundef nonnull align 8 dereferenceable(12) %390, ptr noundef nonnull align 8 dereferenceable(12) %391)
  call void @llvm.lifetime.end.p0(i64 16, ptr %391) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %390) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %389) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %388) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %387) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr %392) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %394, ptr align 16 %381, i64 16, i1 false), !tbaa.struct !11
  %3733 = getelementptr inbounds { double, double }, ptr %394, i32 0, i32 0
  %3734 = load double, ptr %3733, align 16
  %3735 = getelementptr inbounds { double, double }, ptr %394, i32 0, i32 1
  %3736 = load double, ptr %3735, align 8
  %3737 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %3734, double %3736)
  %3738 = getelementptr inbounds %"class.JPH::Vec3", ptr %393, i32 0, i32 0
  %3739 = getelementptr inbounds %union.anon, ptr %3738, i32 0, i32 0
  %3740 = getelementptr inbounds { double, double }, ptr %3739, i32 0, i32 0
  %3741 = extractvalue { double, double } %3737, 0
  store double %3741, ptr %3740, align 16
  %3742 = getelementptr inbounds { double, double }, ptr %3739, i32 0, i32 1
  %3743 = extractvalue { double, double } %3737, 1
  store double %3743, ptr %3742, align 8
  %3744 = getelementptr inbounds { double, double }, ptr %393, i32 0, i32 0
  %3745 = load double, ptr %3744, align 16
  %3746 = getelementptr inbounds { double, double }, ptr %393, i32 0, i32 1
  %3747 = load double, ptr %3746, align 8
  call void @_ZN3JPH5AABoxC2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(32) %392, double %3745, double %3747, float noundef 1.000000e+01)
  call void @llvm.lifetime.start.p0(i64 48, ptr %395) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %395) #12
  %3748 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %3749 = load ptr, ptr %3748, align 8, !tbaa !50
  %3750 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %3749)
          to label %3751 unwind label %3766

3751:                                             ; preds = %3721
  call void @llvm.lifetime.start.p0(i64 8, ptr %396) #12
  call void @llvm.memset.p0.i64(ptr align 8 %396, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %396) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %397) #12
  call void @llvm.memset.p0.i64(ptr align 8 %397, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %397) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %398) #12
  call void @llvm.memset.p0.i64(ptr align 8 %398, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %398) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %399) #12
  call void @llvm.memset.p0.i64(ptr align 8 %399, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %399)
          to label %3752 unwind label %3770

3752:                                             ; preds = %3751
  invoke void @_ZNK3JPH16NarrowPhaseQuery24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %3750, ptr noundef nonnull align 16 dereferenceable(32) %392, ptr noundef nonnull align 8 dereferenceable(24) %395, ptr noundef nonnull align 8 dereferenceable(8) %396, ptr noundef nonnull align 8 dereferenceable(8) %397, ptr noundef nonnull align 8 dereferenceable(8) %398, ptr noundef nonnull align 8 dereferenceable(12) %399)
          to label %3753 unwind label %3774

3753:                                             ; preds = %3752
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %399) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %399) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %398) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %398) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %397) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %397) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %396) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %396) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %400) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %400, ptr align 16 %381, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %401) #12
  store float 0.000000e+00, ptr %401, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %402) #12
  %3754 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.188", ptr %395, i32 0, i32 1
  store ptr %3754, ptr %402, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %403) #12
  %3755 = load ptr, ptr %402, align 8, !tbaa !5
  %3756 = invoke noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %3755)
          to label %3757 unwind label %3779

3757:                                             ; preds = %3753
  store ptr %3756, ptr %403, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %404) #12
  %3758 = load ptr, ptr %402, align 8, !tbaa !5
  %3759 = invoke noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %3758)
          to label %3760 unwind label %3783

3760:                                             ; preds = %3757
  store ptr %3759, ptr %404, align 8, !tbaa !5
  br label %3761

3761:                                             ; preds = %3948, %3760
  %3762 = load ptr, ptr %403, align 8, !tbaa !5
  %3763 = load ptr, ptr %404, align 8, !tbaa !5
  %3764 = icmp ne ptr %3762, %3763
  br i1 %3764, label %3787, label %3765

3765:                                             ; preds = %3761
  call void @llvm.lifetime.end.p0(i64 8, ptr %404) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %403) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %402) #12
  br label %3954

3766:                                             ; preds = %3721
  %3767 = landingpad { ptr, i32 }
          cleanup
  %3768 = extractvalue { ptr, i32 } %3767, 0
  store ptr %3768, ptr %29, align 8
  %3769 = extractvalue { ptr, i32 } %3767, 1
  store i32 %3769, ptr %30, align 4
  br label %4161

3770:                                             ; preds = %3751
  %3771 = landingpad { ptr, i32 }
          cleanup
  %3772 = extractvalue { ptr, i32 } %3771, 0
  store ptr %3772, ptr %29, align 8
  %3773 = extractvalue { ptr, i32 } %3771, 1
  store i32 %3773, ptr %30, align 4
  br label %3778

3774:                                             ; preds = %3752
  %3775 = landingpad { ptr, i32 }
          cleanup
  %3776 = extractvalue { ptr, i32 } %3775, 0
  store ptr %3776, ptr %29, align 8
  %3777 = extractvalue { ptr, i32 } %3775, 1
  store i32 %3777, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %399) #12
  br label %3778

3778:                                             ; preds = %3774, %3770
  call void @llvm.lifetime.end.p0(i64 16, ptr %399) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %398) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %398) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %397) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %397) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %396) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %396) #12
  br label %4161

3779:                                             ; preds = %3753
  %3780 = landingpad { ptr, i32 }
          cleanup
  %3781 = extractvalue { ptr, i32 } %3780, 0
  store ptr %3781, ptr %29, align 8
  %3782 = extractvalue { ptr, i32 } %3780, 1
  store i32 %3782, ptr %30, align 4
  br label %3953

3783:                                             ; preds = %3757
  %3784 = landingpad { ptr, i32 }
          cleanup
  %3785 = extractvalue { ptr, i32 } %3784, 0
  store ptr %3785, ptr %29, align 8
  %3786 = extractvalue { ptr, i32 } %3784, 1
  store i32 %3786, ptr %30, align 4
  br label %3952

3787:                                             ; preds = %3761
  call void @llvm.lifetime.start.p0(i64 8, ptr %405) #12
  %3788 = load ptr, ptr %403, align 8, !tbaa !5
  store ptr %3788, ptr %405, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %406) #12
  %3789 = load ptr, ptr %405, align 8, !tbaa !5
  %3790 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.188", ptr %395, i32 0, i32 1
  %3791 = invoke noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %3790)
          to label %3792 unwind label %3894

3792:                                             ; preds = %3787
  %3793 = ptrtoint ptr %3789 to i64
  %3794 = ptrtoint ptr %3791 to i64
  %3795 = sub i64 %3793, %3794
  %3796 = sdiv exact i64 %3795, 64
  %3797 = trunc i64 %3796 to i32
  store i32 %3797, ptr %406, align 4, !tbaa !14
  %3798 = load ptr, ptr %405, align 8, !tbaa !5
  %3799 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %3798, i32 0, i32 2
  %3800 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %3799)
          to label %3801 unwind label %3894

3801:                                             ; preds = %3792
  call void @llvm.lifetime.start.p0(i64 64, ptr %407) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %408) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %409) #12
  %3802 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %12)
          to label %3803 unwind label %3898

3803:                                             ; preds = %3801
  %3804 = getelementptr inbounds %"class.JPH::Vec3", ptr %410, i32 0, i32 0
  %3805 = getelementptr inbounds %union.anon, ptr %3804, i32 0, i32 0
  %3806 = getelementptr inbounds { double, double }, ptr %3805, i32 0, i32 0
  %3807 = extractvalue { double, double } %3802, 0
  store double %3807, ptr %3806, align 16
  %3808 = getelementptr inbounds { double, double }, ptr %3805, i32 0, i32 1
  %3809 = extractvalue { double, double } %3802, 1
  store double %3809, ptr %3808, align 8
  %3810 = getelementptr inbounds { double, double }, ptr %410, i32 0, i32 0
  %3811 = load double, ptr %3810, align 16
  %3812 = getelementptr inbounds { double, double }, ptr %410, i32 0, i32 1
  %3813 = load double, ptr %3812, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %409, double %3811, double %3813)
          to label %3814 unwind label %3898

3814:                                             ; preds = %3803
  call void @llvm.lifetime.start.p0(i64 64, ptr %411) #12
  %3815 = load ptr, ptr %405, align 8, !tbaa !5
  invoke void @_ZNK3JPH16TransformedShape24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %411, ptr noundef nonnull align 16 dereferenceable(64) %3815)
          to label %3816 unwind label %3902

3816:                                             ; preds = %3814
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %408, ptr noundef nonnull align 16 dereferenceable(64) %409, ptr noundef nonnull align 16 dereferenceable(64) %411)
          to label %3817 unwind label %3902

3817:                                             ; preds = %3816
  invoke void @_ZNK3JPH5Mat447ToMat44Ev(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %407, ptr noundef nonnull align 16 dereferenceable(64) %408)
          to label %3818 unwind label %3902

3818:                                             ; preds = %3817
  %3819 = load ptr, ptr %405, align 8, !tbaa !5
  %3820 = invoke { double, double } @_ZNK3JPH16TransformedShape13GetShapeScaleEv(ptr noundef nonnull align 16 dereferenceable(64) %3819)
          to label %3821 unwind label %3902

3821:                                             ; preds = %3818
  %3822 = getelementptr inbounds %"class.JPH::Vec3", ptr %412, i32 0, i32 0
  %3823 = getelementptr inbounds %union.anon, ptr %3822, i32 0, i32 0
  %3824 = getelementptr inbounds { double, double }, ptr %3823, i32 0, i32 0
  %3825 = extractvalue { double, double } %3820, 0
  store double %3825, ptr %3824, align 16
  %3826 = getelementptr inbounds { double, double }, ptr %3823, i32 0, i32 1
  %3827 = extractvalue { double, double } %3820, 1
  store double %3827, ptr %3826, align 8
  %3828 = load i32, ptr %406, align 4, !tbaa !14
  %3829 = getelementptr inbounds { double, double }, ptr %412, i32 0, i32 0
  %3830 = load double, ptr %3829, align 16
  %3831 = getelementptr inbounds { double, double }, ptr %412, i32 0, i32 1
  %3832 = load double, ptr %3831, align 8
  %3833 = load ptr, ptr %3800, align 8, !tbaa !58
  %3834 = getelementptr inbounds ptr, ptr %3833, i64 19
  %3835 = load ptr, ptr %3834, align 8
  invoke void %3835(ptr noundef nonnull align 8 dereferenceable(26) %3800, ptr noundef nonnull align 16 dereferenceable(64) %407, double %3830, double %3832, ptr noundef nonnull align 8 dereferenceable(80) %386, i32 noundef 1, i32 noundef %3828)
          to label %3836 unwind label %3902

3836:                                             ; preds = %3821
  call void @llvm.lifetime.end.p0(i64 64, ptr %411) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %409) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %408) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %407) #12
  %3837 = load i32, ptr %385, align 4, !tbaa !14
  %3838 = load i32, ptr %406, align 4, !tbaa !14
  %3839 = icmp eq i32 %3837, %3838
  br i1 %3839, label %3840, label %3947

3840:                                             ; preds = %3836
  call void @llvm.lifetime.start.p0(i64 48, ptr %413) #12
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %413, float noundef 0x3EB0C6F7A0000000, ptr noundef null)
          to label %3841 unwind label %3907

3841:                                             ; preds = %3840
  %3842 = getelementptr inbounds i8, ptr %413, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_5ShapeEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %3842)
          to label %3843 unwind label %3911

3843:                                             ; preds = %3841
  call void @llvm.lifetime.start.p0(i64 48, ptr %414) #12
  invoke void @_ZN3JPH20CollideShapeSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(37) %414)
          to label %3844 unwind label %3915

3844:                                             ; preds = %3843
  %3845 = invoke noundef float @_ZSt4sqrtf(float noundef 3.000000e+00)
          to label %3846 unwind label %3915

3846:                                             ; preds = %3844
  %3847 = fmul float %3845, 1.000000e+01
  %3848 = getelementptr inbounds %"class.JPH::CollideShapeSettings", ptr %414, i32 0, i32 1
  store float %3847, ptr %3848, align 16, !tbaa !78
  call void @llvm.lifetime.start.p0(i64 1168, ptr %415) #12
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %415)
          to label %3849 unwind label %3919

3849:                                             ; preds = %3846
  %3850 = load ptr, ptr %405, align 8, !tbaa !5
  %3851 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %3852 unwind label %3923

3852:                                             ; preds = %3849
  %3853 = getelementptr inbounds %"class.JPH::Vec3", ptr %416, i32 0, i32 0
  %3854 = getelementptr inbounds %union.anon, ptr %3853, i32 0, i32 0
  %3855 = getelementptr inbounds { double, double }, ptr %3854, i32 0, i32 0
  %3856 = extractvalue { double, double } %3851, 0
  store double %3856, ptr %3855, align 16
  %3857 = getelementptr inbounds { double, double }, ptr %3854, i32 0, i32 1
  %3858 = extractvalue { double, double } %3851, 1
  store double %3858, ptr %3857, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %417) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %419, ptr align 16 %381, i64 16, i1 false), !tbaa.struct !11
  %3859 = getelementptr inbounds { double, double }, ptr %419, i32 0, i32 0
  %3860 = load double, ptr %3859, align 16
  %3861 = getelementptr inbounds { double, double }, ptr %419, i32 0, i32 1
  %3862 = load double, ptr %3861, align 8
  %3863 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %3860, double %3862)
          to label %3864 unwind label %3927

3864:                                             ; preds = %3852
  %3865 = getelementptr inbounds %"class.JPH::Vec3", ptr %418, i32 0, i32 0
  %3866 = getelementptr inbounds %union.anon, ptr %3865, i32 0, i32 0
  %3867 = getelementptr inbounds { double, double }, ptr %3866, i32 0, i32 0
  %3868 = extractvalue { double, double } %3863, 0
  store double %3868, ptr %3867, align 16
  %3869 = getelementptr inbounds { double, double }, ptr %3866, i32 0, i32 1
  %3870 = extractvalue { double, double } %3863, 1
  store double %3870, ptr %3869, align 8
  %3871 = getelementptr inbounds { double, double }, ptr %418, i32 0, i32 0
  %3872 = load double, ptr %3871, align 16
  %3873 = getelementptr inbounds { double, double }, ptr %418, i32 0, i32 1
  %3874 = load double, ptr %3873, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %417, double %3872, double %3874)
          to label %3875 unwind label %3927

3875:                                             ; preds = %3864
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %420, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %421) #12
  call void @llvm.memset.p0.i64(ptr align 8 %421, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %421)
          to label %3876 unwind label %3931

3876:                                             ; preds = %3875
  %3877 = getelementptr inbounds { double, double }, ptr %416, i32 0, i32 0
  %3878 = load double, ptr %3877, align 16
  %3879 = getelementptr inbounds { double, double }, ptr %416, i32 0, i32 1
  %3880 = load double, ptr %3879, align 8
  %3881 = getelementptr inbounds { double, double }, ptr %420, i32 0, i32 0
  %3882 = load double, ptr %3881, align 16
  %3883 = getelementptr inbounds { double, double }, ptr %420, i32 0, i32 1
  %3884 = load double, ptr %3883, align 8
  invoke void @_ZNK3JPH16TransformedShape12CollideShapeEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(64) %3850, ptr noundef %413, double %3878, double %3880, ptr noundef nonnull align 16 dereferenceable(64) %417, ptr noundef nonnull align 16 dereferenceable(37) %414, double %3882, double %3884, ptr noundef nonnull align 8 dereferenceable(24) %415, ptr noundef nonnull align 8 dereferenceable(12) %421)
          to label %3885 unwind label %3935

3885:                                             ; preds = %3876
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %421) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %421) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %417) #12
  %3886 = invoke noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1153) %415)
          to label %3887 unwind label %3923

3887:                                             ; preds = %3885
  br i1 %3886, label %3888, label %3941

3888:                                             ; preds = %3887
  %3889 = getelementptr inbounds %"class.JPH::ClosestHitCollisionCollector.164", ptr %415, i32 0, i32 2
  %3890 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3889, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %400, ptr align 16 %3890, i64 16, i1 false), !tbaa.struct !11
  %3891 = getelementptr inbounds %"class.JPH::ClosestHitCollisionCollector.164", ptr %415, i32 0, i32 2
  %3892 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %3891, i32 0, i32 3
  %3893 = load float, ptr %3892, align 16, !tbaa !92
  store float %3893, ptr %401, align 4, !tbaa !9
  br label %3941

3894:                                             ; preds = %3792, %3787
  %3895 = landingpad { ptr, i32 }
          cleanup
  %3896 = extractvalue { ptr, i32 } %3895, 0
  store ptr %3896, ptr %29, align 8
  %3897 = extractvalue { ptr, i32 } %3895, 1
  store i32 %3897, ptr %30, align 4
  br label %3951

3898:                                             ; preds = %3803, %3801
  %3899 = landingpad { ptr, i32 }
          cleanup
  %3900 = extractvalue { ptr, i32 } %3899, 0
  store ptr %3900, ptr %29, align 8
  %3901 = extractvalue { ptr, i32 } %3899, 1
  store i32 %3901, ptr %30, align 4
  br label %3906

3902:                                             ; preds = %3821, %3818, %3817, %3816, %3814
  %3903 = landingpad { ptr, i32 }
          cleanup
  %3904 = extractvalue { ptr, i32 } %3903, 0
  store ptr %3904, ptr %29, align 8
  %3905 = extractvalue { ptr, i32 } %3903, 1
  store i32 %3905, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %411) #12
  br label %3906

3906:                                             ; preds = %3902, %3898
  call void @llvm.lifetime.end.p0(i64 64, ptr %409) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %408) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %407) #12
  br label %3951

3907:                                             ; preds = %3840
  %3908 = landingpad { ptr, i32 }
          cleanup
  %3909 = extractvalue { ptr, i32 } %3908, 0
  store ptr %3909, ptr %29, align 8
  %3910 = extractvalue { ptr, i32 } %3908, 1
  store i32 %3910, ptr %30, align 4
  br label %3946

3911:                                             ; preds = %3841
  %3912 = landingpad { ptr, i32 }
          cleanup
  %3913 = extractvalue { ptr, i32 } %3912, 0
  store ptr %3913, ptr %29, align 8
  %3914 = extractvalue { ptr, i32 } %3912, 1
  store i32 %3914, ptr %30, align 4
  br label %3945

3915:                                             ; preds = %3844, %3843
  %3916 = landingpad { ptr, i32 }
          cleanup
  %3917 = extractvalue { ptr, i32 } %3916, 0
  store ptr %3917, ptr %29, align 8
  %3918 = extractvalue { ptr, i32 } %3916, 1
  store i32 %3918, ptr %30, align 4
  br label %3944

3919:                                             ; preds = %3846
  %3920 = landingpad { ptr, i32 }
          cleanup
  %3921 = extractvalue { ptr, i32 } %3920, 0
  store ptr %3921, ptr %29, align 8
  %3922 = extractvalue { ptr, i32 } %3920, 1
  store i32 %3922, ptr %30, align 4
  br label %3943

3923:                                             ; preds = %3885, %3849
  %3924 = landingpad { ptr, i32 }
          cleanup
  %3925 = extractvalue { ptr, i32 } %3924, 0
  store ptr %3925, ptr %29, align 8
  %3926 = extractvalue { ptr, i32 } %3924, 1
  store i32 %3926, ptr %30, align 4
  br label %3942

3927:                                             ; preds = %3864, %3852
  %3928 = landingpad { ptr, i32 }
          cleanup
  %3929 = extractvalue { ptr, i32 } %3928, 0
  store ptr %3929, ptr %29, align 8
  %3930 = extractvalue { ptr, i32 } %3928, 1
  store i32 %3930, ptr %30, align 4
  br label %3940

3931:                                             ; preds = %3875
  %3932 = landingpad { ptr, i32 }
          cleanup
  %3933 = extractvalue { ptr, i32 } %3932, 0
  store ptr %3933, ptr %29, align 8
  %3934 = extractvalue { ptr, i32 } %3932, 1
  store i32 %3934, ptr %30, align 4
  br label %3939

3935:                                             ; preds = %3876
  %3936 = landingpad { ptr, i32 }
          cleanup
  %3937 = extractvalue { ptr, i32 } %3936, 0
  store ptr %3937, ptr %29, align 8
  %3938 = extractvalue { ptr, i32 } %3936, 1
  store i32 %3938, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %421) #12
  br label %3939

3939:                                             ; preds = %3935, %3931
  call void @llvm.lifetime.end.p0(i64 16, ptr %421) #12
  br label %3940

3940:                                             ; preds = %3939, %3927
  call void @llvm.lifetime.end.p0(i64 64, ptr %417) #12
  br label %3942

3941:                                             ; preds = %3888, %3887
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %415) #12
  call void @llvm.lifetime.end.p0(i64 1168, ptr %415) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %414) #12
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %413) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %413) #12
  br label %3947

3942:                                             ; preds = %3940, %3923
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %415) #12
  br label %3943

3943:                                             ; preds = %3942, %3919
  call void @llvm.lifetime.end.p0(i64 1168, ptr %415) #12
  br label %3944

3944:                                             ; preds = %3943, %3915
  call void @llvm.lifetime.end.p0(i64 48, ptr %414) #12
  br label %3945

3945:                                             ; preds = %3944, %3911
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %413) #12
  br label %3946

3946:                                             ; preds = %3945, %3907
  call void @llvm.lifetime.end.p0(i64 48, ptr %413) #12
  br label %3951

3947:                                             ; preds = %3941, %3836
  call void @llvm.lifetime.end.p0(i64 4, ptr %406) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %405) #12
  br label %3948

3948:                                             ; preds = %3947
  %3949 = load ptr, ptr %403, align 8, !tbaa !5
  %3950 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %3949, i32 1
  store ptr %3950, ptr %403, align 8, !tbaa !5
  br label %3761

3951:                                             ; preds = %3946, %3906, %3894
  call void @llvm.lifetime.end.p0(i64 4, ptr %406) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %405) #12
  br label %3952

3952:                                             ; preds = %3951, %3783
  call void @llvm.lifetime.end.p0(i64 8, ptr %404) #12
  br label %3953

3953:                                             ; preds = %3952, %3779
  call void @llvm.lifetime.end.p0(i64 8, ptr %403) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %402) #12
  br label %4160

3954:                                             ; preds = %3765
  %3955 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3956 = load ptr, ptr %3955, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %423, ptr align 16 %381, i64 16, i1 false), !tbaa.struct !11
  %3957 = getelementptr inbounds { double, double }, ptr %423, i32 0, i32 0
  %3958 = load double, ptr %3957, align 16
  %3959 = getelementptr inbounds { double, double }, ptr %423, i32 0, i32 1
  %3960 = load double, ptr %3959, align 8
  %3961 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %3958, double %3960)
          to label %3962 unwind label %4100

3962:                                             ; preds = %3954
  %3963 = getelementptr inbounds %"class.JPH::Vec3", ptr %422, i32 0, i32 0
  %3964 = getelementptr inbounds %union.anon, ptr %3963, i32 0, i32 0
  %3965 = getelementptr inbounds { double, double }, ptr %3964, i32 0, i32 0
  %3966 = extractvalue { double, double } %3961, 0
  store double %3966, ptr %3965, align 16
  %3967 = getelementptr inbounds { double, double }, ptr %3964, i32 0, i32 1
  %3968 = extractvalue { double, double } %3961, 1
  store double %3968, ptr %3967, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %424, ptr align 4 @_ZN3JPH5Color7sYellowE, i64 4, i1 false), !tbaa.struct !57
  %3969 = getelementptr inbounds { double, double }, ptr %422, i32 0, i32 0
  %3970 = load double, ptr %3969, align 16
  %3971 = getelementptr inbounds { double, double }, ptr %422, i32 0, i32 1
  %3972 = load double, ptr %3971, align 8
  %3973 = getelementptr inbounds %"class.JPH::Color", ptr %424, i32 0, i32 0
  %3974 = getelementptr inbounds %union.anon.62, ptr %3973, i32 0, i32 0
  %3975 = load i32, ptr %3974, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %3956, double %3970, double %3972, i32 %3975, float noundef 0x3FB99999A0000000)
          to label %3976 unwind label %4100

3976:                                             ; preds = %3962
  %3977 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %3978 = load ptr, ptr %3977, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %426, ptr align 16 %400, i64 16, i1 false), !tbaa.struct !11
  %3979 = getelementptr inbounds { double, double }, ptr %426, i32 0, i32 0
  %3980 = load double, ptr %3979, align 16
  %3981 = getelementptr inbounds { double, double }, ptr %426, i32 0, i32 1
  %3982 = load double, ptr %3981, align 8
  %3983 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %3980, double %3982)
          to label %3984 unwind label %4100

3984:                                             ; preds = %3976
  %3985 = getelementptr inbounds %"class.JPH::Vec3", ptr %425, i32 0, i32 0
  %3986 = getelementptr inbounds %union.anon, ptr %3985, i32 0, i32 0
  %3987 = getelementptr inbounds { double, double }, ptr %3986, i32 0, i32 0
  %3988 = extractvalue { double, double } %3983, 0
  store double %3988, ptr %3987, align 16
  %3989 = getelementptr inbounds { double, double }, ptr %3986, i32 0, i32 1
  %3990 = extractvalue { double, double } %3983, 1
  store double %3990, ptr %3989, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %427, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %3991 = getelementptr inbounds { double, double }, ptr %425, i32 0, i32 0
  %3992 = load double, ptr %3991, align 16
  %3993 = getelementptr inbounds { double, double }, ptr %425, i32 0, i32 1
  %3994 = load double, ptr %3993, align 8
  %3995 = getelementptr inbounds %"class.JPH::Color", ptr %427, i32 0, i32 0
  %3996 = getelementptr inbounds %union.anon.62, ptr %3995, i32 0, i32 0
  %3997 = load i32, ptr %3996, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %3978, double %3992, double %3994, i32 %3997, float noundef 0x3FB99999A0000000)
          to label %3998 unwind label %4100

3998:                                             ; preds = %3984
  %3999 = load i32, ptr %385, align 4, !tbaa !14
  %4000 = icmp ne i32 %3999, -1
  br i1 %4000, label %4001, label %4159

4001:                                             ; preds = %3998
  call void @llvm.lifetime.start.p0(i64 16, ptr %428) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %429) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %430, ptr align 16 %381, i64 16, i1 false), !tbaa.struct !11
  %4002 = getelementptr inbounds { double, double }, ptr %430, i32 0, i32 0
  %4003 = load double, ptr %4002, align 16
  %4004 = getelementptr inbounds { double, double }, ptr %430, i32 0, i32 1
  %4005 = load double, ptr %4004, align 8
  %4006 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %4003, double %4005)
          to label %4007 unwind label %4104

4007:                                             ; preds = %4001
  %4008 = getelementptr inbounds %"class.JPH::Vec3", ptr %429, i32 0, i32 0
  %4009 = getelementptr inbounds %union.anon, ptr %4008, i32 0, i32 0
  %4010 = getelementptr inbounds { double, double }, ptr %4009, i32 0, i32 0
  %4011 = extractvalue { double, double } %4006, 0
  store double %4011, ptr %4010, align 16
  %4012 = getelementptr inbounds { double, double }, ptr %4009, i32 0, i32 1
  %4013 = extractvalue { double, double } %4006, 1
  store double %4013, ptr %4012, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %432) #12
  %4014 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %383)
          to label %4015 unwind label %4108

4015:                                             ; preds = %4007
  %4016 = getelementptr inbounds %"class.JPH::Vec3", ptr %432, i32 0, i32 0
  %4017 = getelementptr inbounds %union.anon, ptr %4016, i32 0, i32 0
  %4018 = getelementptr inbounds { double, double }, ptr %4017, i32 0, i32 0
  %4019 = extractvalue { double, double } %4014, 0
  store double %4019, ptr %4018, align 16
  %4020 = getelementptr inbounds { double, double }, ptr %4017, i32 0, i32 1
  %4021 = extractvalue { double, double } %4014, 1
  store double %4021, ptr %4020, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %433, ptr align 16 %381, i64 16, i1 false), !tbaa.struct !11
  %4022 = getelementptr inbounds { double, double }, ptr %433, i32 0, i32 0
  %4023 = load double, ptr %4022, align 16
  %4024 = getelementptr inbounds { double, double }, ptr %433, i32 0, i32 1
  %4025 = load double, ptr %4024, align 8
  %4026 = invoke noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %383, double %4023, double %4025)
          to label %4027 unwind label %4108

4027:                                             ; preds = %4015
  %4028 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %432, float noundef %4026)
          to label %4029 unwind label %4108

4029:                                             ; preds = %4027
  %4030 = getelementptr inbounds %"class.JPH::Vec3", ptr %431, i32 0, i32 0
  %4031 = getelementptr inbounds %union.anon, ptr %4030, i32 0, i32 0
  %4032 = getelementptr inbounds { double, double }, ptr %4031, i32 0, i32 0
  %4033 = extractvalue { double, double } %4028, 0
  store double %4033, ptr %4032, align 16
  %4034 = getelementptr inbounds { double, double }, ptr %4031, i32 0, i32 1
  %4035 = extractvalue { double, double } %4028, 1
  store double %4035, ptr %4034, align 8
  %4036 = getelementptr inbounds { double, double }, ptr %431, i32 0, i32 0
  %4037 = load double, ptr %4036, align 16
  %4038 = getelementptr inbounds { double, double }, ptr %431, i32 0, i32 1
  %4039 = load double, ptr %4038, align 8
  %4040 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %429, double %4037, double %4039)
          to label %4041 unwind label %4108

4041:                                             ; preds = %4029
  %4042 = getelementptr inbounds %"class.JPH::Vec3", ptr %428, i32 0, i32 0
  %4043 = getelementptr inbounds %union.anon, ptr %4042, i32 0, i32 0
  %4044 = getelementptr inbounds { double, double }, ptr %4043, i32 0, i32 0
  %4045 = extractvalue { double, double } %4040, 0
  store double %4045, ptr %4044, align 16
  %4046 = getelementptr inbounds { double, double }, ptr %4043, i32 0, i32 1
  %4047 = extractvalue { double, double } %4040, 1
  store double %4047, ptr %4046, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %432) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %429) #12
  %4048 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4049 = load ptr, ptr %4048, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %434, ptr align 16 %428, i64 16, i1 false), !tbaa.struct !11
  %4050 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %383)
          to label %4051 unwind label %4113

4051:                                             ; preds = %4041
  %4052 = getelementptr inbounds %"class.JPH::Vec3", ptr %435, i32 0, i32 0
  %4053 = getelementptr inbounds %union.anon, ptr %4052, i32 0, i32 0
  %4054 = getelementptr inbounds { double, double }, ptr %4053, i32 0, i32 0
  %4055 = extractvalue { double, double } %4050, 0
  store double %4055, ptr %4054, align 16
  %4056 = getelementptr inbounds { double, double }, ptr %4053, i32 0, i32 1
  %4057 = extractvalue { double, double } %4050, 1
  store double %4057, ptr %4056, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %436, ptr align 4 @_ZN3JPH5Color6sGreenE, i64 4, i1 false), !tbaa.struct !57
  %4058 = getelementptr inbounds { double, double }, ptr %434, i32 0, i32 0
  %4059 = load double, ptr %4058, align 16
  %4060 = getelementptr inbounds { double, double }, ptr %434, i32 0, i32 1
  %4061 = load double, ptr %4060, align 8
  %4062 = getelementptr inbounds { double, double }, ptr %435, i32 0, i32 0
  %4063 = load double, ptr %4062, align 16
  %4064 = getelementptr inbounds { double, double }, ptr %435, i32 0, i32 1
  %4065 = load double, ptr %4064, align 8
  %4066 = getelementptr inbounds %"class.JPH::Color", ptr %436, i32 0, i32 0
  %4067 = getelementptr inbounds %union.anon.62, ptr %4066, i32 0, i32 0
  %4068 = load i32, ptr %4067, align 4
  invoke void @_ZN3JPH13DebugRenderer9DrawPlaneENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %4049, double %4059, double %4061, double %4063, double %4065, i32 %4068, float noundef 2.000000e+00)
          to label %4069 unwind label %4113

4069:                                             ; preds = %4051
  %4070 = load float, ptr %401, align 4, !tbaa !9
  %4071 = load float, ptr %384, align 4, !tbaa !9
  %4072 = fsub float %4070, %4071
  %4073 = invoke noundef float @_ZSt3absf(float noundef %4072)
          to label %4074 unwind label %4113

4074:                                             ; preds = %4069
  %4075 = fcmp ogt float %4073, 0x3F50624DE0000000
  br i1 %4075, label %4076, label %4126

4076:                                             ; preds = %4074
  %4077 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4078 = load ptr, ptr %4077, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %437, ptr align 16 %428, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %438) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr %439) #12
  %4079 = load float, ptr %384, align 4, !tbaa !9
  %4080 = fpext float %4079 to double
  %4081 = load float, ptr %401, align 4, !tbaa !9
  %4082 = fpext float %4081 to double
  invoke void (ptr, ptr, ...) @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %439, ptr noundef @.str.150, double noundef %4080, double noundef %4082)
          to label %4083 unwind label %4117

4083:                                             ; preds = %4076
  %4084 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %439) #12
  %4085 = getelementptr inbounds { i64, ptr }, ptr %438, i32 0, i32 0
  %4086 = extractvalue { i64, ptr } %4084, 0
  store i64 %4086, ptr %4085, align 8
  %4087 = getelementptr inbounds { i64, ptr }, ptr %438, i32 0, i32 1
  %4088 = extractvalue { i64, ptr } %4084, 1
  store ptr %4088, ptr %4087, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %440, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !57
  %4089 = getelementptr inbounds { double, double }, ptr %437, i32 0, i32 0
  %4090 = load double, ptr %4089, align 16
  %4091 = getelementptr inbounds { double, double }, ptr %437, i32 0, i32 1
  %4092 = load double, ptr %4091, align 8
  %4093 = getelementptr inbounds %"class.JPH::Color", ptr %440, i32 0, i32 0
  %4094 = getelementptr inbounds %union.anon.62, ptr %4093, i32 0, i32 0
  %4095 = load i32, ptr %4094, align 4
  %4096 = load ptr, ptr %4078, align 8, !tbaa !58
  %4097 = getelementptr inbounds ptr, ptr %4096, i64 7
  %4098 = load ptr, ptr %4097, align 8
  invoke void %4098(ptr noundef nonnull align 8 dereferenceable(320) %4078, double %4090, double %4092, ptr noundef nonnull align 8 dereferenceable(16) %438, i32 %4095, float noundef 5.000000e-01)
          to label %4099 unwind label %4121

4099:                                             ; preds = %4083
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %439) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %439) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %438) #12
  br label %4157

4100:                                             ; preds = %3984, %3976, %3962, %3954
  %4101 = landingpad { ptr, i32 }
          cleanup
  %4102 = extractvalue { ptr, i32 } %4101, 0
  store ptr %4102, ptr %29, align 8
  %4103 = extractvalue { ptr, i32 } %4101, 1
  store i32 %4103, ptr %30, align 4
  br label %4160

4104:                                             ; preds = %4001
  %4105 = landingpad { ptr, i32 }
          cleanup
  %4106 = extractvalue { ptr, i32 } %4105, 0
  store ptr %4106, ptr %29, align 8
  %4107 = extractvalue { ptr, i32 } %4105, 1
  store i32 %4107, ptr %30, align 4
  br label %4112

4108:                                             ; preds = %4029, %4027, %4015, %4007
  %4109 = landingpad { ptr, i32 }
          cleanup
  %4110 = extractvalue { ptr, i32 } %4109, 0
  store ptr %4110, ptr %29, align 8
  %4111 = extractvalue { ptr, i32 } %4109, 1
  store i32 %4111, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %432) #12
  br label %4112

4112:                                             ; preds = %4108, %4104
  call void @llvm.lifetime.end.p0(i64 16, ptr %429) #12
  br label %4158

4113:                                             ; preds = %4069, %4051, %4041
  %4114 = landingpad { ptr, i32 }
          cleanup
  %4115 = extractvalue { ptr, i32 } %4114, 0
  store ptr %4115, ptr %29, align 8
  %4116 = extractvalue { ptr, i32 } %4114, 1
  store i32 %4116, ptr %30, align 4
  br label %4158

4117:                                             ; preds = %4076
  %4118 = landingpad { ptr, i32 }
          cleanup
  %4119 = extractvalue { ptr, i32 } %4118, 0
  store ptr %4119, ptr %29, align 8
  %4120 = extractvalue { ptr, i32 } %4118, 1
  store i32 %4120, ptr %30, align 4
  br label %4125

4121:                                             ; preds = %4083
  %4122 = landingpad { ptr, i32 }
          cleanup
  %4123 = extractvalue { ptr, i32 } %4122, 0
  store ptr %4123, ptr %29, align 8
  %4124 = extractvalue { ptr, i32 } %4122, 1
  store i32 %4124, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %439) #12
  br label %4125

4125:                                             ; preds = %4121, %4117
  call void @llvm.lifetime.end.p0(i64 32, ptr %439) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %438) #12
  br label %4158

4126:                                             ; preds = %4074
  %4127 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4128 = load ptr, ptr %4127, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %441, ptr align 16 %428, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %442) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr %443) #12
  %4129 = load float, ptr %384, align 4, !tbaa !9
  %4130 = fpext float %4129 to double
  invoke void (ptr, ptr, ...) @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %443, ptr noundef @.str.151, double noundef %4130)
          to label %4131 unwind label %4148

4131:                                             ; preds = %4126
  %4132 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %443) #12
  %4133 = getelementptr inbounds { i64, ptr }, ptr %442, i32 0, i32 0
  %4134 = extractvalue { i64, ptr } %4132, 0
  store i64 %4134, ptr %4133, align 8
  %4135 = getelementptr inbounds { i64, ptr }, ptr %442, i32 0, i32 1
  %4136 = extractvalue { i64, ptr } %4132, 1
  store ptr %4136, ptr %4135, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %444, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !57
  %4137 = getelementptr inbounds { double, double }, ptr %441, i32 0, i32 0
  %4138 = load double, ptr %4137, align 16
  %4139 = getelementptr inbounds { double, double }, ptr %441, i32 0, i32 1
  %4140 = load double, ptr %4139, align 8
  %4141 = getelementptr inbounds %"class.JPH::Color", ptr %444, i32 0, i32 0
  %4142 = getelementptr inbounds %union.anon.62, ptr %4141, i32 0, i32 0
  %4143 = load i32, ptr %4142, align 4
  %4144 = load ptr, ptr %4128, align 8, !tbaa !58
  %4145 = getelementptr inbounds ptr, ptr %4144, i64 7
  %4146 = load ptr, ptr %4145, align 8
  invoke void %4146(ptr noundef nonnull align 8 dereferenceable(320) %4128, double %4138, double %4140, ptr noundef nonnull align 8 dereferenceable(16) %442, i32 %4143, float noundef 5.000000e-01)
          to label %4147 unwind label %4152

4147:                                             ; preds = %4131
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %443) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %443) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %442) #12
  br label %4157

4148:                                             ; preds = %4126
  %4149 = landingpad { ptr, i32 }
          cleanup
  %4150 = extractvalue { ptr, i32 } %4149, 0
  store ptr %4150, ptr %29, align 8
  %4151 = extractvalue { ptr, i32 } %4149, 1
  store i32 %4151, ptr %30, align 4
  br label %4156

4152:                                             ; preds = %4131
  %4153 = landingpad { ptr, i32 }
          cleanup
  %4154 = extractvalue { ptr, i32 } %4153, 0
  store ptr %4154, ptr %29, align 8
  %4155 = extractvalue { ptr, i32 } %4153, 1
  store i32 %4155, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %443) #12
  br label %4156

4156:                                             ; preds = %4152, %4148
  call void @llvm.lifetime.end.p0(i64 32, ptr %443) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %442) #12
  br label %4158

4157:                                             ; preds = %4147, %4099
  call void @llvm.lifetime.end.p0(i64 16, ptr %428) #12
  br label %4159

4158:                                             ; preds = %4156, %4125, %4113, %4112
  call void @llvm.lifetime.end.p0(i64 16, ptr %428) #12
  br label %4160

4159:                                             ; preds = %4157, %3998
  call void @llvm.lifetime.end.p0(i64 4, ptr %401) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %400) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %395) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %395) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %392) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr %386) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %385) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %384) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %383) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %381) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %380) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %379) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %378) #12
  br label %6190

4160:                                             ; preds = %4158, %4100, %3953
  call void @llvm.lifetime.end.p0(i64 4, ptr %401) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %400) #12
  br label %4161

4161:                                             ; preds = %4160, %3778, %3766
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %395) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %395) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %392) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr %386) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %385) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %384) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %383) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %381) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %380) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %379) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %378) #12
  br label %6193

4162:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %445) #12
  store float 0x3FC99999A0000000, ptr %445, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %446) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %448, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %4163 = getelementptr inbounds { double, double }, ptr %448, i32 0, i32 0
  %4164 = load double, ptr %4163, align 16
  %4165 = getelementptr inbounds { double, double }, ptr %448, i32 0, i32 1
  %4166 = load double, ptr %4165, align 8
  %4167 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %4164, double %4166)
  %4168 = getelementptr inbounds %"class.JPH::Vec3", ptr %447, i32 0, i32 0
  %4169 = getelementptr inbounds %union.anon, ptr %4168, i32 0, i32 0
  %4170 = getelementptr inbounds { double, double }, ptr %4169, i32 0, i32 0
  %4171 = extractvalue { double, double } %4167, 0
  store double %4171, ptr %4170, align 16
  %4172 = getelementptr inbounds { double, double }, ptr %4169, i32 0, i32 1
  %4173 = extractvalue { double, double } %4167, 1
  store double %4173, ptr %4172, align 8
  %4174 = getelementptr inbounds { double, double }, ptr %447, i32 0, i32 0
  %4175 = load double, ptr %4174, align 16
  %4176 = getelementptr inbounds { double, double }, ptr %447, i32 0, i32 1
  %4177 = load double, ptr %4176, align 8
  %4178 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %4175, double %4177)
  %4179 = getelementptr inbounds %"class.JPH::Vec3", ptr %446, i32 0, i32 0
  %4180 = getelementptr inbounds %union.anon, ptr %4179, i32 0, i32 0
  %4181 = getelementptr inbounds { double, double }, ptr %4180, i32 0, i32 0
  %4182 = extractvalue { double, double } %4178, 0
  store double %4182, ptr %4181, align 16
  %4183 = getelementptr inbounds { double, double }, ptr %4180, i32 0, i32 1
  %4184 = extractvalue { double, double } %4178, 1
  store double %4184, ptr %4183, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %449) #12
  %4185 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 34
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %450, ptr align 16 %4185, i64 16, i1 false), !tbaa.struct !11
  %4186 = getelementptr inbounds { double, double }, ptr %450, i32 0, i32 0
  %4187 = load double, ptr %4186, align 16
  %4188 = getelementptr inbounds { double, double }, ptr %450, i32 0, i32 1
  %4189 = load double, ptr %4188, align 8
  %4190 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 5.000000e-01, double %4187, double %4189)
  %4191 = getelementptr inbounds %"class.JPH::Vec3", ptr %449, i32 0, i32 0
  %4192 = getelementptr inbounds %union.anon, ptr %4191, i32 0, i32 0
  %4193 = getelementptr inbounds { double, double }, ptr %4192, i32 0, i32 0
  %4194 = extractvalue { double, double } %4190, 0
  store double %4194, ptr %4193, align 16
  %4195 = getelementptr inbounds { double, double }, ptr %4192, i32 0, i32 1
  %4196 = extractvalue { double, double } %4190, 1
  store double %4196, ptr %4195, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %451) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %453, ptr align 16 %449, i64 16, i1 false), !tbaa.struct !11
  %4197 = getelementptr inbounds { double, double }, ptr %453, i32 0, i32 0
  %4198 = load double, ptr %4197, align 16
  %4199 = getelementptr inbounds { double, double }, ptr %453, i32 0, i32 1
  %4200 = load double, ptr %4199, align 8
  %4201 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %446, double %4198, double %4200)
  %4202 = getelementptr inbounds %"class.JPH::Vec3", ptr %452, i32 0, i32 0
  %4203 = getelementptr inbounds %union.anon, ptr %4202, i32 0, i32 0
  %4204 = getelementptr inbounds { double, double }, ptr %4203, i32 0, i32 0
  %4205 = extractvalue { double, double } %4201, 0
  store double %4205, ptr %4204, align 16
  %4206 = getelementptr inbounds { double, double }, ptr %4203, i32 0, i32 1
  %4207 = extractvalue { double, double } %4201, 1
  store double %4207, ptr %4206, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %455, ptr align 16 %449, i64 16, i1 false), !tbaa.struct !11
  %4208 = getelementptr inbounds { double, double }, ptr %455, i32 0, i32 0
  %4209 = load double, ptr %4208, align 16
  %4210 = getelementptr inbounds { double, double }, ptr %455, i32 0, i32 1
  %4211 = load double, ptr %4210, align 8
  %4212 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %446, double %4209, double %4211)
  %4213 = getelementptr inbounds %"class.JPH::Vec3", ptr %454, i32 0, i32 0
  %4214 = getelementptr inbounds %union.anon, ptr %4213, i32 0, i32 0
  %4215 = getelementptr inbounds { double, double }, ptr %4214, i32 0, i32 0
  %4216 = extractvalue { double, double } %4212, 0
  store double %4216, ptr %4215, align 16
  %4217 = getelementptr inbounds { double, double }, ptr %4214, i32 0, i32 1
  %4218 = extractvalue { double, double } %4212, 1
  store double %4218, ptr %4217, align 8
  %4219 = getelementptr inbounds { double, double }, ptr %452, i32 0, i32 0
  %4220 = load double, ptr %4219, align 16
  %4221 = getelementptr inbounds { double, double }, ptr %452, i32 0, i32 1
  %4222 = load double, ptr %4221, align 8
  %4223 = getelementptr inbounds { double, double }, ptr %454, i32 0, i32 0
  %4224 = load double, ptr %4223, align 16
  %4225 = getelementptr inbounds { double, double }, ptr %454, i32 0, i32 1
  %4226 = load double, ptr %4225, align 8
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %451, double %4220, double %4222, double %4224, double %4226)
  call void @llvm.lifetime.start.p0(i64 48, ptr %456) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %456) #12
  %4227 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %4228 = load ptr, ptr %4227, align 8, !tbaa !50
  %4229 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %4228)
          to label %4230 unwind label %4245

4230:                                             ; preds = %4162
  call void @llvm.lifetime.start.p0(i64 8, ptr %457) #12
  call void @llvm.memset.p0.i64(ptr align 8 %457, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %457) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %458) #12
  call void @llvm.memset.p0.i64(ptr align 8 %458, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %458) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %459) #12
  call void @llvm.memset.p0.i64(ptr align 8 %459, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %459) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %460) #12
  call void @llvm.memset.p0.i64(ptr align 8 %460, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %460)
          to label %4231 unwind label %4249

4231:                                             ; preds = %4230
  invoke void @_ZNK3JPH16NarrowPhaseQuery24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %4229, ptr noundef nonnull align 16 dereferenceable(32) %451, ptr noundef nonnull align 8 dereferenceable(24) %456, ptr noundef nonnull align 8 dereferenceable(8) %457, ptr noundef nonnull align 8 dereferenceable(8) %458, ptr noundef nonnull align 8 dereferenceable(8) %459, ptr noundef nonnull align 8 dereferenceable(12) %460)
          to label %4232 unwind label %4253

4232:                                             ; preds = %4231
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %460) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %460) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %459) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %459) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %458) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %458) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %457) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %457) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %461) #12
  %4233 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.188", ptr %456, i32 0, i32 1
  store ptr %4233, ptr %461, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %462) #12
  %4234 = load ptr, ptr %461, align 8, !tbaa !5
  %4235 = invoke noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4234)
          to label %4236 unwind label %4258

4236:                                             ; preds = %4232
  store ptr %4235, ptr %462, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %463) #12
  %4237 = load ptr, ptr %461, align 8, !tbaa !5
  %4238 = invoke noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4237)
          to label %4239 unwind label %4262

4239:                                             ; preds = %4236
  store ptr %4238, ptr %463, align 8, !tbaa !5
  br label %4240

4240:                                             ; preds = %4310, %4239
  %4241 = load ptr, ptr %462, align 8, !tbaa !5
  %4242 = load ptr, ptr %463, align 8, !tbaa !5
  %4243 = icmp ne ptr %4241, %4242
  br i1 %4243, label %4266, label %4244

4244:                                             ; preds = %4240
  call void @llvm.lifetime.end.p0(i64 8, ptr %463) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %462) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %461) #12
  br label %4329

4245:                                             ; preds = %4337, %4329, %4162
  %4246 = landingpad { ptr, i32 }
          cleanup
  %4247 = extractvalue { ptr, i32 } %4246, 0
  store ptr %4247, ptr %29, align 8
  %4248 = extractvalue { ptr, i32 } %4246, 1
  store i32 %4248, ptr %30, align 4
  br label %4343

4249:                                             ; preds = %4230
  %4250 = landingpad { ptr, i32 }
          cleanup
  %4251 = extractvalue { ptr, i32 } %4250, 0
  store ptr %4251, ptr %29, align 8
  %4252 = extractvalue { ptr, i32 } %4250, 1
  store i32 %4252, ptr %30, align 4
  br label %4257

4253:                                             ; preds = %4231
  %4254 = landingpad { ptr, i32 }
          cleanup
  %4255 = extractvalue { ptr, i32 } %4254, 0
  store ptr %4255, ptr %29, align 8
  %4256 = extractvalue { ptr, i32 } %4254, 1
  store i32 %4256, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %460) #12
  br label %4257

4257:                                             ; preds = %4253, %4249
  call void @llvm.lifetime.end.p0(i64 16, ptr %460) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %459) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %459) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %458) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %458) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %457) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %457) #12
  br label %4343

4258:                                             ; preds = %4232
  %4259 = landingpad { ptr, i32 }
          cleanup
  %4260 = extractvalue { ptr, i32 } %4259, 0
  store ptr %4260, ptr %29, align 8
  %4261 = extractvalue { ptr, i32 } %4259, 1
  store i32 %4261, ptr %30, align 4
  br label %4328

4262:                                             ; preds = %4236
  %4263 = landingpad { ptr, i32 }
          cleanup
  %4264 = extractvalue { ptr, i32 } %4263, 0
  store ptr %4264, ptr %29, align 8
  %4265 = extractvalue { ptr, i32 } %4263, 1
  store i32 %4265, ptr %30, align 4
  br label %4327

4266:                                             ; preds = %4240
  call void @llvm.lifetime.start.p0(i64 8, ptr %464) #12
  %4267 = load ptr, ptr %462, align 8, !tbaa !5
  store ptr %4267, ptr %464, align 8, !tbaa !5
  %4268 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4269 = load ptr, ptr %4268, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %465) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %466) #12
  %4270 = load ptr, ptr %464, align 8, !tbaa !5
  %4271 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %4270, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %467, ptr align 16 %4271, i64 16, i1 false), !tbaa.struct !11
  %4272 = load ptr, ptr %464, align 8, !tbaa !5
  %4273 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %4272, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %468, ptr align 16 %4273, i64 16, i1 false), !tbaa.struct !11
  %4274 = getelementptr inbounds { double, double }, ptr %467, i32 0, i32 0
  %4275 = load double, ptr %4274, align 16
  %4276 = getelementptr inbounds { double, double }, ptr %467, i32 0, i32 1
  %4277 = load double, ptr %4276, align 8
  %4278 = getelementptr inbounds { double, double }, ptr %468, i32 0, i32 0
  %4279 = load double, ptr %4278, align 16
  %4280 = getelementptr inbounds { double, double }, ptr %468, i32 0, i32 1
  %4281 = load double, ptr %4280, align 8
  invoke void @_ZN3JPH5Mat4420sRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %466, double %4275, double %4277, double %4279, double %4281)
          to label %4282 unwind label %4313

4282:                                             ; preds = %4266
  call void @llvm.lifetime.start.p0(i64 64, ptr %469) #12
  %4283 = load ptr, ptr %464, align 8, !tbaa !5
  %4284 = invoke { double, double } @_ZNK3JPH16TransformedShape13GetShapeScaleEv(ptr noundef nonnull align 16 dereferenceable(64) %4283)
          to label %4285 unwind label %4317

4285:                                             ; preds = %4282
  %4286 = getelementptr inbounds %"class.JPH::Vec3", ptr %470, i32 0, i32 0
  %4287 = getelementptr inbounds %union.anon, ptr %4286, i32 0, i32 0
  %4288 = getelementptr inbounds { double, double }, ptr %4287, i32 0, i32 0
  %4289 = extractvalue { double, double } %4284, 0
  store double %4289, ptr %4288, align 16
  %4290 = getelementptr inbounds { double, double }, ptr %4287, i32 0, i32 1
  %4291 = extractvalue { double, double } %4284, 1
  store double %4291, ptr %4290, align 8
  %4292 = getelementptr inbounds { double, double }, ptr %470, i32 0, i32 0
  %4293 = load double, ptr %4292, align 16
  %4294 = getelementptr inbounds { double, double }, ptr %470, i32 0, i32 1
  %4295 = load double, ptr %4294, align 8
  invoke void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %469, double %4293, double %4295)
          to label %4296 unwind label %4317

4296:                                             ; preds = %4285
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %465, ptr noundef nonnull align 16 dereferenceable(64) %466, ptr noundef nonnull align 16 dereferenceable(64) %469)
          to label %4297 unwind label %4317

4297:                                             ; preds = %4296
  call void @llvm.lifetime.start.p0(i64 32, ptr %471) #12
  %4298 = load ptr, ptr %464, align 8, !tbaa !5
  %4299 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %4298, i32 0, i32 2
  %4300 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %4299)
          to label %4301 unwind label %4321

4301:                                             ; preds = %4297
  %4302 = load ptr, ptr %4300, align 8, !tbaa !58
  %4303 = getelementptr inbounds ptr, ptr %4302, i64 4
  %4304 = load ptr, ptr %4303, align 8
  invoke void %4304(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %471, ptr noundef nonnull align 8 dereferenceable(26) %4300)
          to label %4305 unwind label %4321

4305:                                             ; preds = %4301
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %472, ptr align 4 @_ZN3JPH5Color7sYellowE, i64 4, i1 false), !tbaa.struct !57
  %4306 = getelementptr inbounds %"class.JPH::Color", ptr %472, i32 0, i32 0
  %4307 = getelementptr inbounds %union.anon.62, ptr %4306, i32 0, i32 0
  %4308 = load i32, ptr %4307, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %4269, ptr noundef nonnull align 16 dereferenceable(64) %465, ptr noundef nonnull align 16 dereferenceable(32) %471, i32 %4308)
          to label %4309 unwind label %4321

4309:                                             ; preds = %4305
  call void @llvm.lifetime.end.p0(i64 32, ptr %471) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %469) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %466) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %465) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %464) #12
  br label %4310

4310:                                             ; preds = %4309
  %4311 = load ptr, ptr %462, align 8, !tbaa !5
  %4312 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %4311, i32 1
  store ptr %4312, ptr %462, align 8, !tbaa !5
  br label %4240

4313:                                             ; preds = %4266
  %4314 = landingpad { ptr, i32 }
          cleanup
  %4315 = extractvalue { ptr, i32 } %4314, 0
  store ptr %4315, ptr %29, align 8
  %4316 = extractvalue { ptr, i32 } %4314, 1
  store i32 %4316, ptr %30, align 4
  br label %4326

4317:                                             ; preds = %4296, %4285, %4282
  %4318 = landingpad { ptr, i32 }
          cleanup
  %4319 = extractvalue { ptr, i32 } %4318, 0
  store ptr %4319, ptr %29, align 8
  %4320 = extractvalue { ptr, i32 } %4318, 1
  store i32 %4320, ptr %30, align 4
  br label %4325

4321:                                             ; preds = %4305, %4301, %4297
  %4322 = landingpad { ptr, i32 }
          cleanup
  %4323 = extractvalue { ptr, i32 } %4322, 0
  store ptr %4323, ptr %29, align 8
  %4324 = extractvalue { ptr, i32 } %4322, 1
  store i32 %4324, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %471) #12
  br label %4325

4325:                                             ; preds = %4321, %4317
  call void @llvm.lifetime.end.p0(i64 64, ptr %469) #12
  br label %4326

4326:                                             ; preds = %4325, %4313
  call void @llvm.lifetime.end.p0(i64 64, ptr %466) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %465) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %464) #12
  br label %4327

4327:                                             ; preds = %4326, %4262
  call void @llvm.lifetime.end.p0(i64 8, ptr %463) #12
  br label %4328

4328:                                             ; preds = %4327, %4258
  call void @llvm.lifetime.end.p0(i64 8, ptr %462) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %461) #12
  br label %4343

4329:                                             ; preds = %4244
  %4330 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4331 = load ptr, ptr %4330, align 16, !tbaa !56
  %4332 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.188", ptr %456, i32 0, i32 1
  %4333 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %4332)
          to label %4334 unwind label %4245

4334:                                             ; preds = %4329
  br i1 %4333, label %4336, label %4335

4335:                                             ; preds = %4334
  br label %4337

4336:                                             ; preds = %4334
  br label %4337

4337:                                             ; preds = %4336, %4335
  %4338 = phi ptr [ @_ZN3JPH5Color6sGreenE, %4335 ], [ @_ZN3JPH5Color4sRedE, %4336 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %473, ptr align 4 %4338, i64 4, i1 false), !tbaa.struct !57
  %4339 = getelementptr inbounds %"class.JPH::Color", ptr %473, i32 0, i32 0
  %4340 = getelementptr inbounds %union.anon.62, ptr %4339, i32 0, i32 0
  %4341 = load i32, ptr %4340, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %4331, ptr noundef nonnull align 16 dereferenceable(32) %451, i32 %4341)
          to label %4342 unwind label %4245

4342:                                             ; preds = %4337
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %456) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %456) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %451) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %449) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %446) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %445) #12
  br label %6190

4343:                                             ; preds = %4328, %4257, %4245
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %456) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %456) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %451) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %449) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %446) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %445) #12
  br label %6193

4344:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %474) #12
  store float 0x3FC99999A0000000, ptr %474, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %475) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %477, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %4345 = getelementptr inbounds { double, double }, ptr %477, i32 0, i32 0
  %4346 = load double, ptr %4345, align 16
  %4347 = getelementptr inbounds { double, double }, ptr %477, i32 0, i32 1
  %4348 = load double, ptr %4347, align 8
  %4349 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %4346, double %4348)
  %4350 = getelementptr inbounds %"class.JPH::Vec3", ptr %476, i32 0, i32 0
  %4351 = getelementptr inbounds %union.anon, ptr %4350, i32 0, i32 0
  %4352 = getelementptr inbounds { double, double }, ptr %4351, i32 0, i32 0
  %4353 = extractvalue { double, double } %4349, 0
  store double %4353, ptr %4352, align 16
  %4354 = getelementptr inbounds { double, double }, ptr %4351, i32 0, i32 1
  %4355 = extractvalue { double, double } %4349, 1
  store double %4355, ptr %4354, align 8
  %4356 = getelementptr inbounds { double, double }, ptr %476, i32 0, i32 0
  %4357 = load double, ptr %4356, align 16
  %4358 = getelementptr inbounds { double, double }, ptr %476, i32 0, i32 1
  %4359 = load double, ptr %4358, align 8
  %4360 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %4357, double %4359)
  %4361 = getelementptr inbounds %"class.JPH::Vec3", ptr %475, i32 0, i32 0
  %4362 = getelementptr inbounds %union.anon, ptr %4361, i32 0, i32 0
  %4363 = getelementptr inbounds { double, double }, ptr %4362, i32 0, i32 0
  %4364 = extractvalue { double, double } %4360, 0
  store double %4364, ptr %4363, align 16
  %4365 = getelementptr inbounds { double, double }, ptr %4362, i32 0, i32 1
  %4366 = extractvalue { double, double } %4360, 1
  store double %4366, ptr %4365, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %478) #12
  %4367 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 34
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %479, ptr align 16 %4367, i64 16, i1 false), !tbaa.struct !11
  %4368 = getelementptr inbounds { double, double }, ptr %479, i32 0, i32 0
  %4369 = load double, ptr %4368, align 16
  %4370 = getelementptr inbounds { double, double }, ptr %479, i32 0, i32 1
  %4371 = load double, ptr %4370, align 8
  %4372 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+00, double %4369, double %4371)
  %4373 = getelementptr inbounds %"class.JPH::Vec3", ptr %478, i32 0, i32 0
  %4374 = getelementptr inbounds %union.anon, ptr %4373, i32 0, i32 0
  %4375 = getelementptr inbounds { double, double }, ptr %4374, i32 0, i32 0
  %4376 = extractvalue { double, double } %4372, 0
  store double %4376, ptr %4375, align 16
  %4377 = getelementptr inbounds { double, double }, ptr %4374, i32 0, i32 1
  %4378 = extractvalue { double, double } %4372, 1
  store double %4378, ptr %4377, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %480) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %482, ptr align 16 %478, i64 16, i1 false), !tbaa.struct !11
  %4379 = getelementptr inbounds { double, double }, ptr %482, i32 0, i32 0
  %4380 = load double, ptr %4379, align 16
  %4381 = getelementptr inbounds { double, double }, ptr %482, i32 0, i32 1
  %4382 = load double, ptr %4381, align 8
  %4383 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %475, double %4380, double %4382)
  %4384 = getelementptr inbounds %"class.JPH::Vec3", ptr %481, i32 0, i32 0
  %4385 = getelementptr inbounds %union.anon, ptr %4384, i32 0, i32 0
  %4386 = getelementptr inbounds { double, double }, ptr %4385, i32 0, i32 0
  %4387 = extractvalue { double, double } %4383, 0
  store double %4387, ptr %4386, align 16
  %4388 = getelementptr inbounds { double, double }, ptr %4385, i32 0, i32 1
  %4389 = extractvalue { double, double } %4383, 1
  store double %4389, ptr %4388, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %484, ptr align 16 %478, i64 16, i1 false), !tbaa.struct !11
  %4390 = getelementptr inbounds { double, double }, ptr %484, i32 0, i32 0
  %4391 = load double, ptr %4390, align 16
  %4392 = getelementptr inbounds { double, double }, ptr %484, i32 0, i32 1
  %4393 = load double, ptr %4392, align 8
  %4394 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %475, double %4391, double %4393)
  %4395 = getelementptr inbounds %"class.JPH::Vec3", ptr %483, i32 0, i32 0
  %4396 = getelementptr inbounds %union.anon, ptr %4395, i32 0, i32 0
  %4397 = getelementptr inbounds { double, double }, ptr %4396, i32 0, i32 0
  %4398 = extractvalue { double, double } %4394, 0
  store double %4398, ptr %4397, align 16
  %4399 = getelementptr inbounds { double, double }, ptr %4396, i32 0, i32 1
  %4400 = extractvalue { double, double } %4394, 1
  store double %4400, ptr %4399, align 8
  %4401 = getelementptr inbounds { double, double }, ptr %481, i32 0, i32 0
  %4402 = load double, ptr %4401, align 16
  %4403 = getelementptr inbounds { double, double }, ptr %481, i32 0, i32 1
  %4404 = load double, ptr %4403, align 8
  %4405 = getelementptr inbounds { double, double }, ptr %483, i32 0, i32 0
  %4406 = load double, ptr %4405, align 16
  %4407 = getelementptr inbounds { double, double }, ptr %483, i32 0, i32 1
  %4408 = load double, ptr %4407, align 8
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %480, double %4402, double %4404, double %4406, double %4408)
  call void @llvm.lifetime.start.p0(i64 48, ptr %485) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %485) #12
  %4409 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %4410 = load ptr, ptr %4409, align 8, !tbaa !50
  %4411 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %4410)
          to label %4412 unwind label %4427

4412:                                             ; preds = %4344
  call void @llvm.lifetime.start.p0(i64 8, ptr %486) #12
  call void @llvm.memset.p0.i64(ptr align 8 %486, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %486) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %487) #12
  call void @llvm.memset.p0.i64(ptr align 8 %487, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %487) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %488) #12
  call void @llvm.memset.p0.i64(ptr align 8 %488, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %488) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %489) #12
  call void @llvm.memset.p0.i64(ptr align 8 %489, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %489)
          to label %4413 unwind label %4431

4413:                                             ; preds = %4412
  invoke void @_ZNK3JPH16NarrowPhaseQuery24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %4411, ptr noundef nonnull align 16 dereferenceable(32) %480, ptr noundef nonnull align 8 dereferenceable(24) %485, ptr noundef nonnull align 8 dereferenceable(8) %486, ptr noundef nonnull align 8 dereferenceable(8) %487, ptr noundef nonnull align 8 dereferenceable(8) %488, ptr noundef nonnull align 8 dereferenceable(12) %489)
          to label %4414 unwind label %4435

4414:                                             ; preds = %4413
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %489) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %489) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %488) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %488) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %487) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %487) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %486) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %486) #12
  store i8 0, ptr %21, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %490) #12
  %4415 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.188", ptr %485, i32 0, i32 1
  store ptr %4415, ptr %490, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %491) #12
  %4416 = load ptr, ptr %490, align 8, !tbaa !5
  %4417 = invoke noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4416)
          to label %4418 unwind label %4440

4418:                                             ; preds = %4414
  store ptr %4417, ptr %491, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %492) #12
  %4419 = load ptr, ptr %490, align 8, !tbaa !5
  %4420 = invoke noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4419)
          to label %4421 unwind label %4444

4421:                                             ; preds = %4418
  store ptr %4420, ptr %492, align 8, !tbaa !5
  br label %4422

4422:                                             ; preds = %4701, %4421
  %4423 = load ptr, ptr %491, align 8, !tbaa !5
  %4424 = load ptr, ptr %492, align 8, !tbaa !5
  %4425 = icmp ne ptr %4423, %4424
  br i1 %4425, label %4448, label %4426

4426:                                             ; preds = %4422
  store i32 15, ptr %493, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %492) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %491) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %490) #12
  br label %4707

4427:                                             ; preds = %4714, %4344
  %4428 = landingpad { ptr, i32 }
          cleanup
  %4429 = extractvalue { ptr, i32 } %4428, 0
  store ptr %4429, ptr %29, align 8
  %4430 = extractvalue { ptr, i32 } %4428, 1
  store i32 %4430, ptr %30, align 4
  br label %4720

4431:                                             ; preds = %4412
  %4432 = landingpad { ptr, i32 }
          cleanup
  %4433 = extractvalue { ptr, i32 } %4432, 0
  store ptr %4433, ptr %29, align 8
  %4434 = extractvalue { ptr, i32 } %4432, 1
  store i32 %4434, ptr %30, align 4
  br label %4439

4435:                                             ; preds = %4413
  %4436 = landingpad { ptr, i32 }
          cleanup
  %4437 = extractvalue { ptr, i32 } %4436, 0
  store ptr %4437, ptr %29, align 8
  %4438 = extractvalue { ptr, i32 } %4436, 1
  store i32 %4438, ptr %30, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %489) #12
  br label %4439

4439:                                             ; preds = %4435, %4431
  call void @llvm.lifetime.end.p0(i64 16, ptr %489) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %488) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %488) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %487) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %487) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %486) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %486) #12
  br label %4720

4440:                                             ; preds = %4414
  %4441 = landingpad { ptr, i32 }
          cleanup
  %4442 = extractvalue { ptr, i32 } %4441, 0
  store ptr %4442, ptr %29, align 8
  %4443 = extractvalue { ptr, i32 } %4441, 1
  store i32 %4443, ptr %30, align 4
  br label %4706

4444:                                             ; preds = %4418
  %4445 = landingpad { ptr, i32 }
          cleanup
  %4446 = extractvalue { ptr, i32 } %4445, 0
  store ptr %4446, ptr %29, align 8
  %4447 = extractvalue { ptr, i32 } %4445, 1
  store i32 %4447, ptr %30, align 4
  br label %4705

4448:                                             ; preds = %4422
  call void @llvm.lifetime.start.p0(i64 8, ptr %494) #12
  %4449 = load ptr, ptr %491, align 8, !tbaa !5
  store ptr %4449, ptr %494, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %495) #12
  store i32 32, ptr %495, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1152, ptr %496) #12
  call void @llvm.lifetime.start.p0(i64 256, ptr %497) #12
  call void @llvm.lifetime.start.p0(i64 4288, ptr %498) #12
  %4450 = load ptr, ptr %494, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %499, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !11
  %4451 = getelementptr inbounds { double, double }, ptr %499, i32 0, i32 0
  %4452 = load double, ptr %4451, align 16
  %4453 = getelementptr inbounds { double, double }, ptr %499, i32 0, i32 1
  %4454 = load double, ptr %4453, align 8
  invoke void @_ZNK3JPH16TransformedShape17GetTrianglesStartERNS_5Shape19GetTrianglesContextERKNS_5AABoxENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %4450, ptr noundef nonnull align 16 dereferenceable(4288) %498, ptr noundef nonnull align 16 dereferenceable(32) %480, double %4452, double %4454)
          to label %4455 unwind label %4465

4455:                                             ; preds = %4448
  br label %4456

4456:                                             ; preds = %4698, %4455
  call void @llvm.lifetime.start.p0(i64 4, ptr %500) #12
  %4457 = load ptr, ptr %494, align 8, !tbaa !5
  %4458 = getelementptr inbounds [96 x %"class.JPH::Float3"], ptr %496, i64 0, i64 0
  %4459 = getelementptr inbounds [32 x ptr], ptr %497, i64 0, i64 0
  %4460 = invoke noundef i32 @_ZNK3JPH16TransformedShape16GetTrianglesNextERNS_5Shape19GetTrianglesContextEiPNS_6Float3EPPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(64) %4457, ptr noundef nonnull align 16 dereferenceable(4288) %498, i32 noundef 32, ptr noundef %4458, ptr noundef %4459)
          to label %4461 unwind label %4469

4461:                                             ; preds = %4456
  store i32 %4460, ptr %500, align 4, !tbaa !14
  %4462 = load i32, ptr %500, align 4, !tbaa !14
  %4463 = icmp eq i32 %4462, 0
  br i1 %4463, label %4464, label %4473

4464:                                             ; preds = %4461
  store i32 17, ptr %493, align 4
  br label %4696

4465:                                             ; preds = %4448
  %4466 = landingpad { ptr, i32 }
          cleanup
  %4467 = extractvalue { ptr, i32 } %4466, 0
  store ptr %4467, ptr %29, align 8
  %4468 = extractvalue { ptr, i32 } %4466, 1
  store i32 %4468, ptr %30, align 4
  br label %4704

4469:                                             ; preds = %4456
  %4470 = landingpad { ptr, i32 }
          cleanup
  %4471 = extractvalue { ptr, i32 } %4470, 0
  store ptr %4471, ptr %29, align 8
  %4472 = extractvalue { ptr, i32 } %4470, 1
  store i32 %4472, ptr %30, align 4
  br label %4699

4473:                                             ; preds = %4461
  call void @llvm.lifetime.start.p0(i64 8, ptr %501) #12
  %4474 = getelementptr inbounds [32 x ptr], ptr %497, i64 0, i64 0
  store ptr %4474, ptr %501, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %502) #12
  %4475 = getelementptr inbounds [96 x %"class.JPH::Float3"], ptr %496, i64 0, i64 0
  store ptr %4475, ptr %502, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %503) #12
  %4476 = getelementptr inbounds [96 x %"class.JPH::Float3"], ptr %496, i64 0, i64 0
  %4477 = load i32, ptr %500, align 4, !tbaa !14
  %4478 = mul nsw i32 3, %4477
  %4479 = sext i32 %4478 to i64
  %4480 = getelementptr inbounds %"class.JPH::Float3", ptr %4476, i64 %4479
  store ptr %4480, ptr %503, align 8, !tbaa !5
  br label %4481

4481:                                             ; preds = %4661, %4473
  %4482 = load ptr, ptr %502, align 8, !tbaa !5
  %4483 = load ptr, ptr %503, align 8, !tbaa !5
  %4484 = icmp ult ptr %4482, %4483
  br i1 %4484, label %4486, label %4485

4485:                                             ; preds = %4481
  store i32 19, ptr %493, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %503) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %502) #12
  br label %4695

4486:                                             ; preds = %4481
  call void @llvm.lifetime.start.p0(i64 16, ptr %504) #12
  %4487 = load ptr, ptr %502, align 8, !tbaa !5
  %4488 = getelementptr inbounds %"class.JPH::Float3", ptr %4487, i64 0
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %505, ptr noundef nonnull align 4 dereferenceable(12) %4488)
          to label %4489 unwind label %4666

4489:                                             ; preds = %4486
  %4490 = getelementptr inbounds { double, double }, ptr %505, i32 0, i32 0
  %4491 = load double, ptr %4490, align 16
  %4492 = getelementptr inbounds { double, double }, ptr %505, i32 0, i32 1
  %4493 = load double, ptr %4492, align 8
  %4494 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %4491, double %4493)
          to label %4495 unwind label %4666

4495:                                             ; preds = %4489
  %4496 = getelementptr inbounds %"class.JPH::Vec3", ptr %504, i32 0, i32 0
  %4497 = getelementptr inbounds %union.anon, ptr %4496, i32 0, i32 0
  %4498 = getelementptr inbounds { double, double }, ptr %4497, i32 0, i32 0
  %4499 = extractvalue { double, double } %4494, 0
  store double %4499, ptr %4498, align 16
  %4500 = getelementptr inbounds { double, double }, ptr %4497, i32 0, i32 1
  %4501 = extractvalue { double, double } %4494, 1
  store double %4501, ptr %4500, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %506) #12
  %4502 = load ptr, ptr %502, align 8, !tbaa !5
  %4503 = getelementptr inbounds %"class.JPH::Float3", ptr %4502, i64 1
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %507, ptr noundef nonnull align 4 dereferenceable(12) %4503)
          to label %4504 unwind label %4670

4504:                                             ; preds = %4495
  %4505 = getelementptr inbounds { double, double }, ptr %507, i32 0, i32 0
  %4506 = load double, ptr %4505, align 16
  %4507 = getelementptr inbounds { double, double }, ptr %507, i32 0, i32 1
  %4508 = load double, ptr %4507, align 8
  %4509 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %4506, double %4508)
          to label %4510 unwind label %4670

4510:                                             ; preds = %4504
  %4511 = getelementptr inbounds %"class.JPH::Vec3", ptr %506, i32 0, i32 0
  %4512 = getelementptr inbounds %union.anon, ptr %4511, i32 0, i32 0
  %4513 = getelementptr inbounds { double, double }, ptr %4512, i32 0, i32 0
  %4514 = extractvalue { double, double } %4509, 0
  store double %4514, ptr %4513, align 16
  %4515 = getelementptr inbounds { double, double }, ptr %4512, i32 0, i32 1
  %4516 = extractvalue { double, double } %4509, 1
  store double %4516, ptr %4515, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %508) #12
  %4517 = load ptr, ptr %502, align 8, !tbaa !5
  %4518 = getelementptr inbounds %"class.JPH::Float3", ptr %4517, i64 2
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %509, ptr noundef nonnull align 4 dereferenceable(12) %4518)
          to label %4519 unwind label %4674

4519:                                             ; preds = %4510
  %4520 = getelementptr inbounds { double, double }, ptr %509, i32 0, i32 0
  %4521 = load double, ptr %4520, align 16
  %4522 = getelementptr inbounds { double, double }, ptr %509, i32 0, i32 1
  %4523 = load double, ptr %4522, align 8
  %4524 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %4521, double %4523)
          to label %4525 unwind label %4674

4525:                                             ; preds = %4519
  %4526 = getelementptr inbounds %"class.JPH::Vec3", ptr %508, i32 0, i32 0
  %4527 = getelementptr inbounds %union.anon, ptr %4526, i32 0, i32 0
  %4528 = getelementptr inbounds { double, double }, ptr %4527, i32 0, i32 0
  %4529 = extractvalue { double, double } %4524, 0
  store double %4529, ptr %4528, align 16
  %4530 = getelementptr inbounds { double, double }, ptr %4527, i32 0, i32 1
  %4531 = extractvalue { double, double } %4524, 1
  store double %4531, ptr %4530, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %510) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %511) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %512) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %513, ptr align 16 %506, i64 16, i1 false), !tbaa.struct !11
  %4532 = getelementptr inbounds { double, double }, ptr %513, i32 0, i32 0
  %4533 = load double, ptr %4532, align 16
  %4534 = getelementptr inbounds { double, double }, ptr %513, i32 0, i32 1
  %4535 = load double, ptr %4534, align 8
  %4536 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %504, double %4533, double %4535)
          to label %4537 unwind label %4678

4537:                                             ; preds = %4525
  %4538 = getelementptr inbounds %"class.JPH::Vec3", ptr %512, i32 0, i32 0
  %4539 = getelementptr inbounds %union.anon, ptr %4538, i32 0, i32 0
  %4540 = getelementptr inbounds { double, double }, ptr %4539, i32 0, i32 0
  %4541 = extractvalue { double, double } %4536, 0
  store double %4541, ptr %4540, align 16
  %4542 = getelementptr inbounds { double, double }, ptr %4539, i32 0, i32 1
  %4543 = extractvalue { double, double } %4536, 1
  store double %4543, ptr %4542, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %514, ptr align 16 %508, i64 16, i1 false), !tbaa.struct !11
  %4544 = getelementptr inbounds { double, double }, ptr %514, i32 0, i32 0
  %4545 = load double, ptr %4544, align 16
  %4546 = getelementptr inbounds { double, double }, ptr %514, i32 0, i32 1
  %4547 = load double, ptr %4546, align 8
  %4548 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %512, double %4545, double %4547)
          to label %4549 unwind label %4678

4549:                                             ; preds = %4537
  %4550 = getelementptr inbounds %"class.JPH::Vec3", ptr %511, i32 0, i32 0
  %4551 = getelementptr inbounds %union.anon, ptr %4550, i32 0, i32 0
  %4552 = getelementptr inbounds { double, double }, ptr %4551, i32 0, i32 0
  %4553 = extractvalue { double, double } %4548, 0
  store double %4553, ptr %4552, align 16
  %4554 = getelementptr inbounds { double, double }, ptr %4551, i32 0, i32 1
  %4555 = extractvalue { double, double } %4548, 1
  store double %4555, ptr %4554, align 8
  %4556 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %511, float noundef 3.000000e+00)
          to label %4557 unwind label %4678

4557:                                             ; preds = %4549
  %4558 = getelementptr inbounds %"class.JPH::Vec3", ptr %510, i32 0, i32 0
  %4559 = getelementptr inbounds %union.anon, ptr %4558, i32 0, i32 0
  %4560 = getelementptr inbounds { double, double }, ptr %4559, i32 0, i32 0
  %4561 = extractvalue { double, double } %4556, 0
  store double %4561, ptr %4560, align 16
  %4562 = getelementptr inbounds { double, double }, ptr %4559, i32 0, i32 1
  %4563 = extractvalue { double, double } %4556, 1
  store double %4563, ptr %4562, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %512) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %511) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %515) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %516) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %517) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %518, ptr align 16 %504, i64 16, i1 false), !tbaa.struct !11
  %4564 = getelementptr inbounds { double, double }, ptr %518, i32 0, i32 0
  %4565 = load double, ptr %4564, align 16
  %4566 = getelementptr inbounds { double, double }, ptr %518, i32 0, i32 1
  %4567 = load double, ptr %4566, align 8
  %4568 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %506, double %4565, double %4567)
          to label %4569 unwind label %4682

4569:                                             ; preds = %4557
  %4570 = getelementptr inbounds %"class.JPH::Vec3", ptr %517, i32 0, i32 0
  %4571 = getelementptr inbounds %union.anon, ptr %4570, i32 0, i32 0
  %4572 = getelementptr inbounds { double, double }, ptr %4571, i32 0, i32 0
  %4573 = extractvalue { double, double } %4568, 0
  store double %4573, ptr %4572, align 16
  %4574 = getelementptr inbounds { double, double }, ptr %4571, i32 0, i32 1
  %4575 = extractvalue { double, double } %4568, 1
  store double %4575, ptr %4574, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %520, ptr align 16 %504, i64 16, i1 false), !tbaa.struct !11
  %4576 = getelementptr inbounds { double, double }, ptr %520, i32 0, i32 0
  %4577 = load double, ptr %4576, align 16
  %4578 = getelementptr inbounds { double, double }, ptr %520, i32 0, i32 1
  %4579 = load double, ptr %4578, align 8
  %4580 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %508, double %4577, double %4579)
          to label %4581 unwind label %4682

4581:                                             ; preds = %4569
  %4582 = getelementptr inbounds %"class.JPH::Vec3", ptr %519, i32 0, i32 0
  %4583 = getelementptr inbounds %union.anon, ptr %4582, i32 0, i32 0
  %4584 = getelementptr inbounds { double, double }, ptr %4583, i32 0, i32 0
  %4585 = extractvalue { double, double } %4580, 0
  store double %4585, ptr %4584, align 16
  %4586 = getelementptr inbounds { double, double }, ptr %4583, i32 0, i32 1
  %4587 = extractvalue { double, double } %4580, 1
  store double %4587, ptr %4586, align 8
  %4588 = getelementptr inbounds { double, double }, ptr %519, i32 0, i32 0
  %4589 = load double, ptr %4588, align 16
  %4590 = getelementptr inbounds { double, double }, ptr %519, i32 0, i32 1
  %4591 = load double, ptr %4590, align 8
  %4592 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %517, double %4589, double %4591)
          to label %4593 unwind label %4682

4593:                                             ; preds = %4581
  %4594 = getelementptr inbounds %"class.JPH::Vec3", ptr %516, i32 0, i32 0
  %4595 = getelementptr inbounds %union.anon, ptr %4594, i32 0, i32 0
  %4596 = getelementptr inbounds { double, double }, ptr %4595, i32 0, i32 0
  %4597 = extractvalue { double, double } %4592, 0
  store double %4597, ptr %4596, align 16
  %4598 = getelementptr inbounds { double, double }, ptr %4595, i32 0, i32 1
  %4599 = extractvalue { double, double } %4592, 1
  store double %4599, ptr %4598, align 8
  %4600 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %516)
          to label %4601 unwind label %4682

4601:                                             ; preds = %4593
  %4602 = getelementptr inbounds %"class.JPH::Vec3", ptr %515, i32 0, i32 0
  %4603 = getelementptr inbounds %union.anon, ptr %4602, i32 0, i32 0
  %4604 = getelementptr inbounds { double, double }, ptr %4603, i32 0, i32 0
  %4605 = extractvalue { double, double } %4600, 0
  store double %4605, ptr %4604, align 16
  %4606 = getelementptr inbounds { double, double }, ptr %4603, i32 0, i32 1
  %4607 = extractvalue { double, double } %4600, 1
  store double %4607, ptr %4606, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %517) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %516) #12
  %4608 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4609 = load ptr, ptr %4608, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %521, ptr align 16 %504, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %522, ptr align 16 %506, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %523, ptr align 16 %508, i64 16, i1 false), !tbaa.struct !11
  %4610 = load ptr, ptr %501, align 8, !tbaa !5
  %4611 = load ptr, ptr %4610, align 8, !tbaa !5
  %4612 = load ptr, ptr %4611, align 8, !tbaa !58
  %4613 = getelementptr inbounds ptr, ptr %4612, i64 5
  %4614 = load ptr, ptr %4613, align 8
  %4615 = invoke i32 %4614(ptr noundef nonnull align 8 dereferenceable(12) %4611)
          to label %4616 unwind label %4686

4616:                                             ; preds = %4601
  %4617 = getelementptr inbounds %"class.JPH::Color", ptr %524, i32 0, i32 0
  %4618 = getelementptr inbounds %union.anon.62, ptr %4617, i32 0, i32 0
  store i32 %4615, ptr %4618, align 4
  %4619 = getelementptr inbounds { double, double }, ptr %521, i32 0, i32 0
  %4620 = load double, ptr %4619, align 16
  %4621 = getelementptr inbounds { double, double }, ptr %521, i32 0, i32 1
  %4622 = load double, ptr %4621, align 8
  %4623 = getelementptr inbounds { double, double }, ptr %522, i32 0, i32 0
  %4624 = load double, ptr %4623, align 16
  %4625 = getelementptr inbounds { double, double }, ptr %522, i32 0, i32 1
  %4626 = load double, ptr %4625, align 8
  %4627 = getelementptr inbounds { double, double }, ptr %523, i32 0, i32 0
  %4628 = load double, ptr %4627, align 16
  %4629 = getelementptr inbounds { double, double }, ptr %523, i32 0, i32 1
  %4630 = load double, ptr %4629, align 8
  %4631 = getelementptr inbounds %"class.JPH::Color", ptr %524, i32 0, i32 0
  %4632 = getelementptr inbounds %union.anon.62, ptr %4631, i32 0, i32 0
  %4633 = load i32, ptr %4632, align 4
  invoke void @_ZN3JPH13DebugRenderer16DrawWireTriangleENS_4Vec3ES1_S1_NS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %4609, double %4620, double %4622, double %4624, double %4626, double %4628, double %4630, i32 %4633)
          to label %4634 unwind label %4686

4634:                                             ; preds = %4616
  %4635 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4636 = load ptr, ptr %4635, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %525, ptr align 16 %510, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %527, ptr align 16 %515, i64 16, i1 false), !tbaa.struct !11
  %4637 = getelementptr inbounds { double, double }, ptr %527, i32 0, i32 0
  %4638 = load double, ptr %4637, align 16
  %4639 = getelementptr inbounds { double, double }, ptr %527, i32 0, i32 1
  %4640 = load double, ptr %4639, align 8
  %4641 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %510, double %4638, double %4640)
          to label %4642 unwind label %4686

4642:                                             ; preds = %4634
  %4643 = getelementptr inbounds %"class.JPH::Vec3", ptr %526, i32 0, i32 0
  %4644 = getelementptr inbounds %union.anon, ptr %4643, i32 0, i32 0
  %4645 = getelementptr inbounds { double, double }, ptr %4644, i32 0, i32 0
  %4646 = extractvalue { double, double } %4641, 0
  store double %4646, ptr %4645, align 16
  %4647 = getelementptr inbounds { double, double }, ptr %4644, i32 0, i32 1
  %4648 = extractvalue { double, double } %4641, 1
  store double %4648, ptr %4647, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %528, ptr align 4 @_ZN3JPH5Color6sGreenE, i64 4, i1 false), !tbaa.struct !57
  %4649 = getelementptr inbounds { double, double }, ptr %525, i32 0, i32 0
  %4650 = load double, ptr %4649, align 16
  %4651 = getelementptr inbounds { double, double }, ptr %525, i32 0, i32 1
  %4652 = load double, ptr %4651, align 8
  %4653 = getelementptr inbounds { double, double }, ptr %526, i32 0, i32 0
  %4654 = load double, ptr %4653, align 16
  %4655 = getelementptr inbounds { double, double }, ptr %526, i32 0, i32 1
  %4656 = load double, ptr %4655, align 8
  %4657 = getelementptr inbounds %"class.JPH::Color", ptr %528, i32 0, i32 0
  %4658 = getelementptr inbounds %union.anon.62, ptr %4657, i32 0, i32 0
  %4659 = load i32, ptr %4658, align 4
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %4636, double %4650, double %4652, double %4654, double %4656, i32 %4659, float noundef 0x3F847AE140000000)
          to label %4660 unwind label %4686

4660:                                             ; preds = %4642
  call void @llvm.lifetime.end.p0(i64 16, ptr %515) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %510) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %508) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %506) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %504) #12
  br label %4661

4661:                                             ; preds = %4660
  %4662 = load ptr, ptr %502, align 8, !tbaa !5
  %4663 = getelementptr inbounds %"class.JPH::Float3", ptr %4662, i64 3
  store ptr %4663, ptr %502, align 8, !tbaa !5
  %4664 = load ptr, ptr %501, align 8, !tbaa !5
  %4665 = getelementptr inbounds ptr, ptr %4664, i32 1
  store ptr %4665, ptr %501, align 8, !tbaa !5
  br label %4481, !llvm.loop !95

4666:                                             ; preds = %4489, %4486
  %4667 = landingpad { ptr, i32 }
          cleanup
  %4668 = extractvalue { ptr, i32 } %4667, 0
  store ptr %4668, ptr %29, align 8
  %4669 = extractvalue { ptr, i32 } %4667, 1
  store i32 %4669, ptr %30, align 4
  br label %4694

4670:                                             ; preds = %4504, %4495
  %4671 = landingpad { ptr, i32 }
          cleanup
  %4672 = extractvalue { ptr, i32 } %4671, 0
  store ptr %4672, ptr %29, align 8
  %4673 = extractvalue { ptr, i32 } %4671, 1
  store i32 %4673, ptr %30, align 4
  br label %4693

4674:                                             ; preds = %4519, %4510
  %4675 = landingpad { ptr, i32 }
          cleanup
  %4676 = extractvalue { ptr, i32 } %4675, 0
  store ptr %4676, ptr %29, align 8
  %4677 = extractvalue { ptr, i32 } %4675, 1
  store i32 %4677, ptr %30, align 4
  br label %4692

4678:                                             ; preds = %4549, %4537, %4525
  %4679 = landingpad { ptr, i32 }
          cleanup
  %4680 = extractvalue { ptr, i32 } %4679, 0
  store ptr %4680, ptr %29, align 8
  %4681 = extractvalue { ptr, i32 } %4679, 1
  store i32 %4681, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %512) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %511) #12
  br label %4691

4682:                                             ; preds = %4593, %4581, %4569, %4557
  %4683 = landingpad { ptr, i32 }
          cleanup
  %4684 = extractvalue { ptr, i32 } %4683, 0
  store ptr %4684, ptr %29, align 8
  %4685 = extractvalue { ptr, i32 } %4683, 1
  store i32 %4685, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %517) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %516) #12
  br label %4690

4686:                                             ; preds = %4642, %4634, %4616, %4601
  %4687 = landingpad { ptr, i32 }
          cleanup
  %4688 = extractvalue { ptr, i32 } %4687, 0
  store ptr %4688, ptr %29, align 8
  %4689 = extractvalue { ptr, i32 } %4687, 1
  store i32 %4689, ptr %30, align 4
  br label %4690

4690:                                             ; preds = %4686, %4682
  call void @llvm.lifetime.end.p0(i64 16, ptr %515) #12
  br label %4691

4691:                                             ; preds = %4690, %4678
  call void @llvm.lifetime.end.p0(i64 16, ptr %510) #12
  br label %4692

4692:                                             ; preds = %4691, %4674
  call void @llvm.lifetime.end.p0(i64 16, ptr %508) #12
  br label %4693

4693:                                             ; preds = %4692, %4670
  call void @llvm.lifetime.end.p0(i64 16, ptr %506) #12
  br label %4694

4694:                                             ; preds = %4693, %4666
  call void @llvm.lifetime.end.p0(i64 16, ptr %504) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %503) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %502) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %501) #12
  br label %4699

4695:                                             ; preds = %4485
  store i8 1, ptr %21, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %501) #12
  store i32 0, ptr %493, align 4
  br label %4696

4696:                                             ; preds = %4695, %4464
  call void @llvm.lifetime.end.p0(i64 4, ptr %500) #12
  %4697 = load i32, ptr %493, align 4
  switch i32 %4697, label %6199 [
    i32 0, label %4698
    i32 17, label %4700
  ]

4698:                                             ; preds = %4696
  br label %4456, !llvm.loop !97

4699:                                             ; preds = %4694, %4469
  call void @llvm.lifetime.end.p0(i64 4, ptr %500) #12
  br label %4704

4700:                                             ; preds = %4696
  call void @llvm.lifetime.end.p0(i64 4288, ptr %498) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr %497) #12
  call void @llvm.lifetime.end.p0(i64 1152, ptr %496) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %495) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %494) #12
  br label %4701

4701:                                             ; preds = %4700
  %4702 = load ptr, ptr %491, align 8, !tbaa !5
  %4703 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %4702, i32 1
  store ptr %4703, ptr %491, align 8, !tbaa !5
  br label %4422

4704:                                             ; preds = %4699, %4465
  call void @llvm.lifetime.end.p0(i64 4288, ptr %498) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr %497) #12
  call void @llvm.lifetime.end.p0(i64 1152, ptr %496) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %495) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %494) #12
  br label %4705

4705:                                             ; preds = %4704, %4444
  call void @llvm.lifetime.end.p0(i64 8, ptr %492) #12
  br label %4706

4706:                                             ; preds = %4705, %4440
  call void @llvm.lifetime.end.p0(i64 8, ptr %491) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %490) #12
  br label %4720

4707:                                             ; preds = %4426
  %4708 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4709 = load ptr, ptr %4708, align 16, !tbaa !56
  %4710 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %4711 = trunc i8 %4710 to i1
  br i1 %4711, label %4712, label %4713

4712:                                             ; preds = %4707
  br label %4714

4713:                                             ; preds = %4707
  br label %4714

4714:                                             ; preds = %4713, %4712
  %4715 = phi ptr [ @_ZN3JPH5Color6sGreenE, %4712 ], [ @_ZN3JPH5Color4sRedE, %4713 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %529, ptr align 4 %4715, i64 4, i1 false), !tbaa.struct !57
  %4716 = getelementptr inbounds %"class.JPH::Color", ptr %529, i32 0, i32 0
  %4717 = getelementptr inbounds %union.anon.62, ptr %4716, i32 0, i32 0
  %4718 = load i32, ptr %4717, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %4709, ptr noundef nonnull align 16 dereferenceable(32) %480, i32 %4718)
          to label %4719 unwind label %4427

4719:                                             ; preds = %4714
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %485) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %485) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %480) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %478) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %475) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %474) #12
  br label %6190

4720:                                             ; preds = %4706, %4439, %4427
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %485) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %485) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %480) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %478) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %475) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %474) #12
  br label %6193

4721:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 32, ptr %530) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %531, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %532, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %4722 = getelementptr inbounds { double, double }, ptr %531, i32 0, i32 0
  %4723 = load double, ptr %4722, align 16
  %4724 = getelementptr inbounds { double, double }, ptr %531, i32 0, i32 1
  %4725 = load double, ptr %4724, align 8
  %4726 = getelementptr inbounds { double, double }, ptr %532, i32 0, i32 0
  %4727 = load double, ptr %4726, align 16
  %4728 = getelementptr inbounds { double, double }, ptr %532, i32 0, i32 1
  %4729 = load double, ptr %4728, align 8
  call void @_ZN3JPH7RayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %530, double %4723, double %4725, double %4727, double %4729)
  call void @llvm.lifetime.start.p0(i64 48, ptr %533) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %533) #12
  %4730 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %4731 = load ptr, ptr %4730, align 8, !tbaa !50
  %4732 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %4731)
          to label %4733 unwind label %4759

4733:                                             ; preds = %4721
  call void @llvm.lifetime.start.p0(i64 8, ptr %534) #12
  call void @llvm.memset.p0.i64(ptr align 8 %534, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %534) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %535) #12
  call void @llvm.memset.p0.i64(ptr align 8 %535, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %535) #12
  %4734 = load ptr, ptr %4732, align 8, !tbaa !58
  %4735 = getelementptr inbounds ptr, ptr %4734, i64 2
  %4736 = load ptr, ptr %4735, align 8
  invoke void %4736(ptr noundef nonnull align 8 dereferenceable(8) %4732, ptr noundef nonnull align 16 dereferenceable(32) %530, ptr noundef nonnull align 8 dereferenceable(24) %533, ptr noundef nonnull align 8 dereferenceable(8) %534, ptr noundef nonnull align 8 dereferenceable(8) %535)
          to label %4737 unwind label %4763

4737:                                             ; preds = %4733
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %535) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %535) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %534) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %534) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %533)
          to label %4738 unwind label %4759

4738:                                             ; preds = %4737
  %4739 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.194", ptr %533, i32 0, i32 1
  %4740 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %4739)
          to label %4741 unwind label %4759

4741:                                             ; preds = %4738
  %4742 = xor i1 %4740, true
  %4743 = zext i1 %4742 to i8
  store i8 %4743, ptr %21, align 1, !tbaa !16
  %4744 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %4745 = trunc i8 %4744 to i1
  br i1 %4745, label %4746, label %4984

4746:                                             ; preds = %4741
  call void @llvm.lifetime.start.p0(i64 16, ptr %536) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %536, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %537) #12
  store i8 0, ptr %537, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %538) #12
  %4747 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.194", ptr %533, i32 0, i32 1
  store ptr %4747, ptr %538, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %539) #12
  %4748 = load ptr, ptr %538, align 8, !tbaa !5
  %4749 = invoke noundef ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4748)
          to label %4750 unwind label %4767

4750:                                             ; preds = %4746
  store ptr %4749, ptr %539, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %540) #12
  %4751 = load ptr, ptr %538, align 8, !tbaa !5
  %4752 = invoke noundef ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4751)
          to label %4753 unwind label %4771

4753:                                             ; preds = %4750
  store ptr %4752, ptr %540, align 8, !tbaa !5
  br label %4754

4754:                                             ; preds = %4911, %4753
  %4755 = load ptr, ptr %539, align 8, !tbaa !5
  %4756 = load ptr, ptr %540, align 8, !tbaa !5
  %4757 = icmp ne ptr %4755, %4756
  br i1 %4757, label %4775, label %4758

4758:                                             ; preds = %4754
  store i32 22, ptr %493, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %540) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %539) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %538) #12
  br label %4920

4759:                                             ; preds = %5021, %5013, %4992, %4984, %4738, %4737, %4721
  %4760 = landingpad { ptr, i32 }
          cleanup
  %4761 = extractvalue { ptr, i32 } %4760, 0
  store ptr %4761, ptr %29, align 8
  %4762 = extractvalue { ptr, i32 } %4760, 1
  store i32 %4762, ptr %30, align 4
  br label %5037

4763:                                             ; preds = %4733
  %4764 = landingpad { ptr, i32 }
          cleanup
  %4765 = extractvalue { ptr, i32 } %4764, 0
  store ptr %4765, ptr %29, align 8
  %4766 = extractvalue { ptr, i32 } %4764, 1
  store i32 %4766, ptr %30, align 4
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %535) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %535) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %534) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %534) #12
  br label %5037

4767:                                             ; preds = %4746
  %4768 = landingpad { ptr, i32 }
          cleanup
  %4769 = extractvalue { ptr, i32 } %4768, 0
  store ptr %4769, ptr %29, align 8
  %4770 = extractvalue { ptr, i32 } %4768, 1
  store i32 %4770, ptr %30, align 4
  br label %4919

4771:                                             ; preds = %4750
  %4772 = landingpad { ptr, i32 }
          cleanup
  %4773 = extractvalue { ptr, i32 } %4772, 0
  store ptr %4773, ptr %29, align 8
  %4774 = extractvalue { ptr, i32 } %4772, 1
  store i32 %4774, ptr %30, align 4
  br label %4918

4775:                                             ; preds = %4754
  call void @llvm.lifetime.start.p0(i64 8, ptr %541) #12
  %4776 = load ptr, ptr %539, align 8, !tbaa !5
  store ptr %4776, ptr %541, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %542) #12
  %4777 = load ptr, ptr %541, align 8, !tbaa !5
  %4778 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %4777, i32 0, i32 1
  %4779 = load float, ptr %4778, align 4, !tbaa !52
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %544, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %4780 = getelementptr inbounds { double, double }, ptr %544, i32 0, i32 0
  %4781 = load double, ptr %4780, align 16
  %4782 = getelementptr inbounds { double, double }, ptr %544, i32 0, i32 1
  %4783 = load double, ptr %4782, align 8
  %4784 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %4779, double %4781, double %4783)
          to label %4785 unwind label %4875

4785:                                             ; preds = %4775
  %4786 = getelementptr inbounds %"class.JPH::Vec3", ptr %543, i32 0, i32 0
  %4787 = getelementptr inbounds %union.anon, ptr %4786, i32 0, i32 0
  %4788 = getelementptr inbounds { double, double }, ptr %4787, i32 0, i32 0
  %4789 = extractvalue { double, double } %4784, 0
  store double %4789, ptr %4788, align 16
  %4790 = getelementptr inbounds { double, double }, ptr %4787, i32 0, i32 1
  %4791 = extractvalue { double, double } %4784, 1
  store double %4791, ptr %4790, align 8
  %4792 = getelementptr inbounds { double, double }, ptr %543, i32 0, i32 0
  %4793 = load double, ptr %4792, align 16
  %4794 = getelementptr inbounds { double, double }, ptr %543, i32 0, i32 1
  %4795 = load double, ptr %4794, align 8
  %4796 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %4793, double %4795)
          to label %4797 unwind label %4875

4797:                                             ; preds = %4785
  %4798 = getelementptr inbounds %"class.JPH::Vec3", ptr %542, i32 0, i32 0
  %4799 = getelementptr inbounds %union.anon, ptr %4798, i32 0, i32 0
  %4800 = getelementptr inbounds { double, double }, ptr %4799, i32 0, i32 0
  %4801 = extractvalue { double, double } %4796, 0
  store double %4801, ptr %4800, align 16
  %4802 = getelementptr inbounds { double, double }, ptr %4799, i32 0, i32 1
  %4803 = extractvalue { double, double } %4796, 1
  store double %4803, ptr %4802, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %545) #12
  %4804 = load i8, ptr %537, align 1, !tbaa !16, !range !54, !noundef !55
  %4805 = trunc i8 %4804 to i1
  br i1 %4805, label %4806, label %4807

4806:                                             ; preds = %4797
  br label %4808

4807:                                             ; preds = %4797
  br label %4808

4808:                                             ; preds = %4807, %4806
  %4809 = phi ptr [ @_ZN3JPH5Color5sGreyE, %4806 ], [ @_ZN3JPH5Color6sWhiteE, %4807 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %545, ptr align 4 %4809, i64 4, i1 false), !tbaa.struct !57
  %4810 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4811 = load ptr, ptr %4810, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %546, ptr align 16 %536, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %547, ptr align 16 %542, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %548, ptr align 4 %545, i64 4, i1 false), !tbaa.struct !57
  %4812 = getelementptr inbounds { double, double }, ptr %546, i32 0, i32 0
  %4813 = load double, ptr %4812, align 16
  %4814 = getelementptr inbounds { double, double }, ptr %546, i32 0, i32 1
  %4815 = load double, ptr %4814, align 8
  %4816 = getelementptr inbounds { double, double }, ptr %547, i32 0, i32 0
  %4817 = load double, ptr %4816, align 16
  %4818 = getelementptr inbounds { double, double }, ptr %547, i32 0, i32 1
  %4819 = load double, ptr %4818, align 8
  %4820 = getelementptr inbounds %"class.JPH::Color", ptr %548, i32 0, i32 0
  %4821 = getelementptr inbounds %union.anon.62, ptr %4820, i32 0, i32 0
  %4822 = load i32, ptr %4821, align 4
  %4823 = load ptr, ptr %4811, align 8, !tbaa !58
  %4824 = getelementptr inbounds ptr, ptr %4823, i64 2
  %4825 = load ptr, ptr %4824, align 8
  invoke void %4825(ptr noundef nonnull align 8 dereferenceable(320) %4811, double %4813, double %4815, double %4817, double %4819, i32 %4822)
          to label %4826 unwind label %4879

4826:                                             ; preds = %4808
  %4827 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4828 = load ptr, ptr %4827, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %549, ptr align 16 %542, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %550, ptr align 4 %545, i64 4, i1 false), !tbaa.struct !57
  %4829 = getelementptr inbounds { double, double }, ptr %549, i32 0, i32 0
  %4830 = load double, ptr %4829, align 16
  %4831 = getelementptr inbounds { double, double }, ptr %549, i32 0, i32 1
  %4832 = load double, ptr %4831, align 8
  %4833 = getelementptr inbounds %"class.JPH::Color", ptr %550, i32 0, i32 0
  %4834 = getelementptr inbounds %union.anon.62, ptr %4833, i32 0, i32 0
  %4835 = load i32, ptr %4834, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %4828, double %4830, double %4832, i32 %4835, float noundef 0x3FB99999A0000000)
          to label %4836 unwind label %4879

4836:                                             ; preds = %4826
  %4837 = load i8, ptr %537, align 1, !tbaa !16, !range !54, !noundef !55
  %4838 = trunc i8 %4837 to i1
  %4839 = xor i1 %4838, true
  %4840 = zext i1 %4839 to i8
  store i8 %4840, ptr %537, align 1, !tbaa !16
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %536, ptr align 16 %542, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %551) #12
  %4841 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %4842 = load ptr, ptr %4841, align 8, !tbaa !50
  %4843 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %4842)
          to label %4844 unwind label %4883

4844:                                             ; preds = %4836
  %4845 = load ptr, ptr %541, align 8, !tbaa !5
  %4846 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %4845, i32 0, i32 0
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %551, ptr noundef nonnull align 8 dereferenceable(16) %4843, ptr noundef nonnull align 4 dereferenceable(4) %4846)
          to label %4847 unwind label %4883

4847:                                             ; preds = %4844
  %4848 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %551)
          to label %4849 unwind label %4887

4849:                                             ; preds = %4847
  br i1 %4848, label %4850, label %4910

4850:                                             ; preds = %4849
  call void @llvm.lifetime.start.p0(i64 8, ptr %552) #12
  %4851 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %551)
          to label %4852 unwind label %4891

4852:                                             ; preds = %4850
  store ptr %4851, ptr %552, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %553) #12
  %4853 = load ptr, ptr %552, align 8, !tbaa !5
  %4854 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %4853)
          to label %4855 unwind label %4895

4855:                                             ; preds = %4852
  br i1 %4854, label %4856, label %4857

4856:                                             ; preds = %4855
  br label %4858

4857:                                             ; preds = %4855
  br label %4858

4858:                                             ; preds = %4857, %4856
  %4859 = phi ptr [ @_ZN3JPH5Color7sYellowE, %4856 ], [ @_ZN3JPH5Color7sOrangeE, %4857 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %553, ptr align 4 %4859, i64 4, i1 false), !tbaa.struct !57
  %4860 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4861 = load ptr, ptr %4860, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %554) #12
  %4862 = load ptr, ptr %552, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %554, ptr noundef nonnull align 16 dereferenceable(122) %4862)
          to label %4863 unwind label %4899

4863:                                             ; preds = %4858
  call void @llvm.lifetime.start.p0(i64 32, ptr %555) #12
  %4864 = load ptr, ptr %552, align 8, !tbaa !5
  %4865 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %4864)
          to label %4866 unwind label %4903

4866:                                             ; preds = %4863
  %4867 = load ptr, ptr %4865, align 8, !tbaa !58
  %4868 = getelementptr inbounds ptr, ptr %4867, i64 4
  %4869 = load ptr, ptr %4868, align 8
  invoke void %4869(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %555, ptr noundef nonnull align 8 dereferenceable(26) %4865)
          to label %4870 unwind label %4903

4870:                                             ; preds = %4866
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %556, ptr align 4 %553, i64 4, i1 false), !tbaa.struct !57
  %4871 = getelementptr inbounds %"class.JPH::Color", ptr %556, i32 0, i32 0
  %4872 = getelementptr inbounds %union.anon.62, ptr %4871, i32 0, i32 0
  %4873 = load i32, ptr %4872, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %4861, ptr noundef nonnull align 16 dereferenceable(64) %554, ptr noundef nonnull align 16 dereferenceable(32) %555, i32 %4873)
          to label %4874 unwind label %4903

4874:                                             ; preds = %4870
  call void @llvm.lifetime.end.p0(i64 32, ptr %555) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %554) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %553) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %552) #12
  br label %4910

4875:                                             ; preds = %4785, %4775
  %4876 = landingpad { ptr, i32 }
          cleanup
  %4877 = extractvalue { ptr, i32 } %4876, 0
  store ptr %4877, ptr %29, align 8
  %4878 = extractvalue { ptr, i32 } %4876, 1
  store i32 %4878, ptr %30, align 4
  br label %4917

4879:                                             ; preds = %4826, %4808
  %4880 = landingpad { ptr, i32 }
          cleanup
  %4881 = extractvalue { ptr, i32 } %4880, 0
  store ptr %4881, ptr %29, align 8
  %4882 = extractvalue { ptr, i32 } %4880, 1
  store i32 %4882, ptr %30, align 4
  br label %4916

4883:                                             ; preds = %4844, %4836
  %4884 = landingpad { ptr, i32 }
          cleanup
  %4885 = extractvalue { ptr, i32 } %4884, 0
  store ptr %4885, ptr %29, align 8
  %4886 = extractvalue { ptr, i32 } %4884, 1
  store i32 %4886, ptr %30, align 4
  br label %4915

4887:                                             ; preds = %4847
  %4888 = landingpad { ptr, i32 }
          cleanup
  %4889 = extractvalue { ptr, i32 } %4888, 0
  store ptr %4889, ptr %29, align 8
  %4890 = extractvalue { ptr, i32 } %4888, 1
  store i32 %4890, ptr %30, align 4
  br label %4914

4891:                                             ; preds = %4850
  %4892 = landingpad { ptr, i32 }
          cleanup
  %4893 = extractvalue { ptr, i32 } %4892, 0
  store ptr %4893, ptr %29, align 8
  %4894 = extractvalue { ptr, i32 } %4892, 1
  store i32 %4894, ptr %30, align 4
  br label %4909

4895:                                             ; preds = %4852
  %4896 = landingpad { ptr, i32 }
          cleanup
  %4897 = extractvalue { ptr, i32 } %4896, 0
  store ptr %4897, ptr %29, align 8
  %4898 = extractvalue { ptr, i32 } %4896, 1
  store i32 %4898, ptr %30, align 4
  br label %4908

4899:                                             ; preds = %4858
  %4900 = landingpad { ptr, i32 }
          cleanup
  %4901 = extractvalue { ptr, i32 } %4900, 0
  store ptr %4901, ptr %29, align 8
  %4902 = extractvalue { ptr, i32 } %4900, 1
  store i32 %4902, ptr %30, align 4
  br label %4907

4903:                                             ; preds = %4870, %4866, %4863
  %4904 = landingpad { ptr, i32 }
          cleanup
  %4905 = extractvalue { ptr, i32 } %4904, 0
  store ptr %4905, ptr %29, align 8
  %4906 = extractvalue { ptr, i32 } %4904, 1
  store i32 %4906, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %555) #12
  br label %4907

4907:                                             ; preds = %4903, %4899
  call void @llvm.lifetime.end.p0(i64 64, ptr %554) #12
  br label %4908

4908:                                             ; preds = %4907, %4895
  call void @llvm.lifetime.end.p0(i64 4, ptr %553) #12
  br label %4909

4909:                                             ; preds = %4908, %4891
  call void @llvm.lifetime.end.p0(i64 8, ptr %552) #12
  br label %4914

4910:                                             ; preds = %4874, %4849
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %551) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %551) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %545) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %542) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %541) #12
  br label %4911

4911:                                             ; preds = %4910
  %4912 = load ptr, ptr %539, align 8, !tbaa !5
  %4913 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %4912, i32 1
  store ptr %4913, ptr %539, align 8, !tbaa !5
  br label %4754

4914:                                             ; preds = %4909, %4887
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %551) #12
  br label %4915

4915:                                             ; preds = %4914, %4883
  call void @llvm.lifetime.end.p0(i64 24, ptr %551) #12
  br label %4916

4916:                                             ; preds = %4915, %4879
  call void @llvm.lifetime.end.p0(i64 4, ptr %545) #12
  br label %4917

4917:                                             ; preds = %4916, %4875
  call void @llvm.lifetime.end.p0(i64 16, ptr %542) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %541) #12
  br label %4918

4918:                                             ; preds = %4917, %4771
  call void @llvm.lifetime.end.p0(i64 8, ptr %540) #12
  br label %4919

4919:                                             ; preds = %4918, %4767
  call void @llvm.lifetime.end.p0(i64 8, ptr %539) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %538) #12
  br label %4983

4920:                                             ; preds = %4758
  %4921 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4922 = load ptr, ptr %4921, align 16, !tbaa !56
  %4923 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.194", ptr %533, i32 0, i32 1
  %4924 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %4923)
          to label %4925 unwind label %4979

4925:                                             ; preds = %4920
  %4926 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %4924, i32 0, i32 1
  %4927 = load float, ptr %4926, align 4, !tbaa !52
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %559, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %4928 = getelementptr inbounds { double, double }, ptr %559, i32 0, i32 0
  %4929 = load double, ptr %4928, align 16
  %4930 = getelementptr inbounds { double, double }, ptr %559, i32 0, i32 1
  %4931 = load double, ptr %4930, align 8
  %4932 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %4927, double %4929, double %4931)
          to label %4933 unwind label %4979

4933:                                             ; preds = %4925
  %4934 = getelementptr inbounds %"class.JPH::Vec3", ptr %558, i32 0, i32 0
  %4935 = getelementptr inbounds %union.anon, ptr %4934, i32 0, i32 0
  %4936 = getelementptr inbounds { double, double }, ptr %4935, i32 0, i32 0
  %4937 = extractvalue { double, double } %4932, 0
  store double %4937, ptr %4936, align 16
  %4938 = getelementptr inbounds { double, double }, ptr %4935, i32 0, i32 1
  %4939 = extractvalue { double, double } %4932, 1
  store double %4939, ptr %4938, align 8
  %4940 = getelementptr inbounds { double, double }, ptr %558, i32 0, i32 0
  %4941 = load double, ptr %4940, align 16
  %4942 = getelementptr inbounds { double, double }, ptr %558, i32 0, i32 1
  %4943 = load double, ptr %4942, align 8
  %4944 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %4941, double %4943)
          to label %4945 unwind label %4979

4945:                                             ; preds = %4933
  %4946 = getelementptr inbounds %"class.JPH::Vec3", ptr %557, i32 0, i32 0
  %4947 = getelementptr inbounds %union.anon, ptr %4946, i32 0, i32 0
  %4948 = getelementptr inbounds { double, double }, ptr %4947, i32 0, i32 0
  %4949 = extractvalue { double, double } %4944, 0
  store double %4949, ptr %4948, align 16
  %4950 = getelementptr inbounds { double, double }, ptr %4947, i32 0, i32 1
  %4951 = extractvalue { double, double } %4944, 1
  store double %4951, ptr %4950, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %561, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %4952 = getelementptr inbounds { double, double }, ptr %561, i32 0, i32 0
  %4953 = load double, ptr %4952, align 16
  %4954 = getelementptr inbounds { double, double }, ptr %561, i32 0, i32 1
  %4955 = load double, ptr %4954, align 8
  %4956 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %4953, double %4955)
          to label %4957 unwind label %4979

4957:                                             ; preds = %4945
  %4958 = getelementptr inbounds %"class.JPH::Vec3", ptr %560, i32 0, i32 0
  %4959 = getelementptr inbounds %union.anon, ptr %4958, i32 0, i32 0
  %4960 = getelementptr inbounds { double, double }, ptr %4959, i32 0, i32 0
  %4961 = extractvalue { double, double } %4956, 0
  store double %4961, ptr %4960, align 16
  %4962 = getelementptr inbounds { double, double }, ptr %4959, i32 0, i32 1
  %4963 = extractvalue { double, double } %4956, 1
  store double %4963, ptr %4962, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %562, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %4964 = getelementptr inbounds { double, double }, ptr %557, i32 0, i32 0
  %4965 = load double, ptr %4964, align 16
  %4966 = getelementptr inbounds { double, double }, ptr %557, i32 0, i32 1
  %4967 = load double, ptr %4966, align 8
  %4968 = getelementptr inbounds { double, double }, ptr %560, i32 0, i32 0
  %4969 = load double, ptr %4968, align 16
  %4970 = getelementptr inbounds { double, double }, ptr %560, i32 0, i32 1
  %4971 = load double, ptr %4970, align 8
  %4972 = getelementptr inbounds %"class.JPH::Color", ptr %562, i32 0, i32 0
  %4973 = getelementptr inbounds %union.anon.62, ptr %4972, i32 0, i32 0
  %4974 = load i32, ptr %4973, align 4
  %4975 = load ptr, ptr %4922, align 8, !tbaa !58
  %4976 = getelementptr inbounds ptr, ptr %4975, i64 2
  %4977 = load ptr, ptr %4976, align 8
  invoke void %4977(ptr noundef nonnull align 8 dereferenceable(320) %4922, double %4965, double %4967, double %4969, double %4971, i32 %4974)
          to label %4978 unwind label %4979

4978:                                             ; preds = %4957
  call void @llvm.lifetime.end.p0(i64 1, ptr %537) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %536) #12
  br label %5036

4979:                                             ; preds = %4957, %4945, %4933, %4925, %4920
  %4980 = landingpad { ptr, i32 }
          cleanup
  %4981 = extractvalue { ptr, i32 } %4980, 0
  store ptr %4981, ptr %29, align 8
  %4982 = extractvalue { ptr, i32 } %4980, 1
  store i32 %4982, ptr %30, align 4
  br label %4983

4983:                                             ; preds = %4979, %4919
  call void @llvm.lifetime.end.p0(i64 1, ptr %537) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %536) #12
  br label %5037

4984:                                             ; preds = %4741
  %4985 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %4986 = load ptr, ptr %4985, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %563, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %565, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %4987 = getelementptr inbounds { double, double }, ptr %565, i32 0, i32 0
  %4988 = load double, ptr %4987, align 16
  %4989 = getelementptr inbounds { double, double }, ptr %565, i32 0, i32 1
  %4990 = load double, ptr %4989, align 8
  %4991 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %4988, double %4990)
          to label %4992 unwind label %4759

4992:                                             ; preds = %4984
  %4993 = getelementptr inbounds %"class.JPH::Vec3", ptr %564, i32 0, i32 0
  %4994 = getelementptr inbounds %union.anon, ptr %4993, i32 0, i32 0
  %4995 = getelementptr inbounds { double, double }, ptr %4994, i32 0, i32 0
  %4996 = extractvalue { double, double } %4991, 0
  store double %4996, ptr %4995, align 16
  %4997 = getelementptr inbounds { double, double }, ptr %4994, i32 0, i32 1
  %4998 = extractvalue { double, double } %4991, 1
  store double %4998, ptr %4997, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %566, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %4999 = getelementptr inbounds { double, double }, ptr %563, i32 0, i32 0
  %5000 = load double, ptr %4999, align 16
  %5001 = getelementptr inbounds { double, double }, ptr %563, i32 0, i32 1
  %5002 = load double, ptr %5001, align 8
  %5003 = getelementptr inbounds { double, double }, ptr %564, i32 0, i32 0
  %5004 = load double, ptr %5003, align 16
  %5005 = getelementptr inbounds { double, double }, ptr %564, i32 0, i32 1
  %5006 = load double, ptr %5005, align 8
  %5007 = getelementptr inbounds %"class.JPH::Color", ptr %566, i32 0, i32 0
  %5008 = getelementptr inbounds %union.anon.62, ptr %5007, i32 0, i32 0
  %5009 = load i32, ptr %5008, align 4
  %5010 = load ptr, ptr %4986, align 8, !tbaa !58
  %5011 = getelementptr inbounds ptr, ptr %5010, i64 2
  %5012 = load ptr, ptr %5011, align 8
  invoke void %5012(ptr noundef nonnull align 8 dereferenceable(320) %4986, double %5000, double %5002, double %5004, double %5006, i32 %5009)
          to label %5013 unwind label %4759

5013:                                             ; preds = %4992
  %5014 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5015 = load ptr, ptr %5014, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %568, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %5016 = getelementptr inbounds { double, double }, ptr %568, i32 0, i32 0
  %5017 = load double, ptr %5016, align 16
  %5018 = getelementptr inbounds { double, double }, ptr %568, i32 0, i32 1
  %5019 = load double, ptr %5018, align 8
  %5020 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %5017, double %5019)
          to label %5021 unwind label %4759

5021:                                             ; preds = %5013
  %5022 = getelementptr inbounds %"class.JPH::Vec3", ptr %567, i32 0, i32 0
  %5023 = getelementptr inbounds %union.anon, ptr %5022, i32 0, i32 0
  %5024 = getelementptr inbounds { double, double }, ptr %5023, i32 0, i32 0
  %5025 = extractvalue { double, double } %5020, 0
  store double %5025, ptr %5024, align 16
  %5026 = getelementptr inbounds { double, double }, ptr %5023, i32 0, i32 1
  %5027 = extractvalue { double, double } %5020, 1
  store double %5027, ptr %5026, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %569, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %5028 = getelementptr inbounds { double, double }, ptr %567, i32 0, i32 0
  %5029 = load double, ptr %5028, align 16
  %5030 = getelementptr inbounds { double, double }, ptr %567, i32 0, i32 1
  %5031 = load double, ptr %5030, align 8
  %5032 = getelementptr inbounds %"class.JPH::Color", ptr %569, i32 0, i32 0
  %5033 = getelementptr inbounds %union.anon.62, ptr %5032, i32 0, i32 0
  %5034 = load i32, ptr %5033, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %5015, double %5029, double %5031, i32 %5034, float noundef 0x3FB99999A0000000)
          to label %5035 unwind label %4759

5035:                                             ; preds = %5021
  br label %5036

5036:                                             ; preds = %5035, %4978
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %533) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %533) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %530) #12
  br label %6190

5037:                                             ; preds = %4983, %4763, %4759
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %533) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %533) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %530) #12
  br label %6193

5038:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %570) #12
  store float 0x3FC99999A0000000, ptr %570, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %571) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %573, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %5039 = getelementptr inbounds { double, double }, ptr %573, i32 0, i32 0
  %5040 = load double, ptr %5039, align 16
  %5041 = getelementptr inbounds { double, double }, ptr %573, i32 0, i32 1
  %5042 = load double, ptr %5041, align 8
  %5043 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %5040, double %5042)
  %5044 = getelementptr inbounds %"class.JPH::Vec3", ptr %572, i32 0, i32 0
  %5045 = getelementptr inbounds %union.anon, ptr %5044, i32 0, i32 0
  %5046 = getelementptr inbounds { double, double }, ptr %5045, i32 0, i32 0
  %5047 = extractvalue { double, double } %5043, 0
  store double %5047, ptr %5046, align 16
  %5048 = getelementptr inbounds { double, double }, ptr %5045, i32 0, i32 1
  %5049 = extractvalue { double, double } %5043, 1
  store double %5049, ptr %5048, align 8
  %5050 = getelementptr inbounds { double, double }, ptr %572, i32 0, i32 0
  %5051 = load double, ptr %5050, align 16
  %5052 = getelementptr inbounds { double, double }, ptr %572, i32 0, i32 1
  %5053 = load double, ptr %5052, align 8
  %5054 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %5051, double %5053)
  %5055 = getelementptr inbounds %"class.JPH::Vec3", ptr %571, i32 0, i32 0
  %5056 = getelementptr inbounds %union.anon, ptr %5055, i32 0, i32 0
  %5057 = getelementptr inbounds { double, double }, ptr %5056, i32 0, i32 0
  %5058 = extractvalue { double, double } %5054, 0
  store double %5058, ptr %5057, align 16
  %5059 = getelementptr inbounds { double, double }, ptr %5056, i32 0, i32 1
  %5060 = extractvalue { double, double } %5054, 1
  store double %5060, ptr %5059, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %574) #12
  %5061 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 34
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %575, ptr align 16 %5061, i64 16, i1 false), !tbaa.struct !11
  %5062 = getelementptr inbounds { double, double }, ptr %575, i32 0, i32 0
  %5063 = load double, ptr %5062, align 16
  %5064 = getelementptr inbounds { double, double }, ptr %575, i32 0, i32 1
  %5065 = load double, ptr %5064, align 8
  %5066 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+00, double %5063, double %5065)
  %5067 = getelementptr inbounds %"class.JPH::Vec3", ptr %574, i32 0, i32 0
  %5068 = getelementptr inbounds %union.anon, ptr %5067, i32 0, i32 0
  %5069 = getelementptr inbounds { double, double }, ptr %5068, i32 0, i32 0
  %5070 = extractvalue { double, double } %5066, 0
  store double %5070, ptr %5069, align 16
  %5071 = getelementptr inbounds { double, double }, ptr %5068, i32 0, i32 1
  %5072 = extractvalue { double, double } %5066, 1
  store double %5072, ptr %5071, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %576) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %578, ptr align 16 %574, i64 16, i1 false), !tbaa.struct !11
  %5073 = getelementptr inbounds { double, double }, ptr %578, i32 0, i32 0
  %5074 = load double, ptr %5073, align 16
  %5075 = getelementptr inbounds { double, double }, ptr %578, i32 0, i32 1
  %5076 = load double, ptr %5075, align 8
  %5077 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %571, double %5074, double %5076)
  %5078 = getelementptr inbounds %"class.JPH::Vec3", ptr %577, i32 0, i32 0
  %5079 = getelementptr inbounds %union.anon, ptr %5078, i32 0, i32 0
  %5080 = getelementptr inbounds { double, double }, ptr %5079, i32 0, i32 0
  %5081 = extractvalue { double, double } %5077, 0
  store double %5081, ptr %5080, align 16
  %5082 = getelementptr inbounds { double, double }, ptr %5079, i32 0, i32 1
  %5083 = extractvalue { double, double } %5077, 1
  store double %5083, ptr %5082, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %580, ptr align 16 %574, i64 16, i1 false), !tbaa.struct !11
  %5084 = getelementptr inbounds { double, double }, ptr %580, i32 0, i32 0
  %5085 = load double, ptr %5084, align 16
  %5086 = getelementptr inbounds { double, double }, ptr %580, i32 0, i32 1
  %5087 = load double, ptr %5086, align 8
  %5088 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %571, double %5085, double %5087)
  %5089 = getelementptr inbounds %"class.JPH::Vec3", ptr %579, i32 0, i32 0
  %5090 = getelementptr inbounds %union.anon, ptr %5089, i32 0, i32 0
  %5091 = getelementptr inbounds { double, double }, ptr %5090, i32 0, i32 0
  %5092 = extractvalue { double, double } %5088, 0
  store double %5092, ptr %5091, align 16
  %5093 = getelementptr inbounds { double, double }, ptr %5090, i32 0, i32 1
  %5094 = extractvalue { double, double } %5088, 1
  store double %5094, ptr %5093, align 8
  %5095 = getelementptr inbounds { double, double }, ptr %577, i32 0, i32 0
  %5096 = load double, ptr %5095, align 16
  %5097 = getelementptr inbounds { double, double }, ptr %577, i32 0, i32 1
  %5098 = load double, ptr %5097, align 8
  %5099 = getelementptr inbounds { double, double }, ptr %579, i32 0, i32 0
  %5100 = load double, ptr %5099, align 16
  %5101 = getelementptr inbounds { double, double }, ptr %579, i32 0, i32 1
  %5102 = load double, ptr %5101, align 8
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %576, double %5096, double %5098, double %5100, double %5102)
  call void @llvm.lifetime.start.p0(i64 48, ptr %581) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %581) #12
  %5103 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5104 = load ptr, ptr %5103, align 8, !tbaa !50
  %5105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %5104)
          to label %5106 unwind label %5131

5106:                                             ; preds = %5038
  call void @llvm.lifetime.start.p0(i64 8, ptr %582) #12
  call void @llvm.memset.p0.i64(ptr align 8 %582, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %582) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %583) #12
  call void @llvm.memset.p0.i64(ptr align 8 %583, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %583) #12
  %5107 = load ptr, ptr %5105, align 8, !tbaa !58
  %5108 = getelementptr inbounds ptr, ptr %5107, i64 3
  %5109 = load ptr, ptr %5108, align 8
  invoke void %5109(ptr noundef nonnull align 8 dereferenceable(8) %5105, ptr noundef nonnull align 16 dereferenceable(32) %576, ptr noundef nonnull align 8 dereferenceable(24) %581, ptr noundef nonnull align 8 dereferenceable(8) %582, ptr noundef nonnull align 8 dereferenceable(8) %583)
          to label %5110 unwind label %5135

5110:                                             ; preds = %5106
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %583) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %583) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %582) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %582) #12
  %5111 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.199", ptr %581, i32 0, i32 1
  %5112 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %5111)
          to label %5113 unwind label %5131

5113:                                             ; preds = %5110
  %5114 = xor i1 %5112, true
  %5115 = zext i1 %5114 to i8
  store i8 %5115, ptr %21, align 1, !tbaa !16
  %5116 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %5117 = trunc i8 %5116 to i1
  br i1 %5117, label %5118, label %5218

5118:                                             ; preds = %5113
  call void @llvm.lifetime.start.p0(i64 8, ptr %584) #12
  %5119 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.199", ptr %581, i32 0, i32 1
  store ptr %5119, ptr %584, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %585) #12
  %5120 = load ptr, ptr %584, align 8, !tbaa !5
  %5121 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5120)
          to label %5122 unwind label %5139

5122:                                             ; preds = %5118
  store ptr %5121, ptr %585, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %586) #12
  %5123 = load ptr, ptr %584, align 8, !tbaa !5
  %5124 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5123)
          to label %5125 unwind label %5143

5125:                                             ; preds = %5122
  store ptr %5124, ptr %586, align 8, !tbaa !5
  br label %5126

5126:                                             ; preds = %5210, %5125
  %5127 = load ptr, ptr %585, align 8, !tbaa !5
  %5128 = load ptr, ptr %586, align 8, !tbaa !5
  %5129 = icmp ne ptr %5127, %5128
  br i1 %5129, label %5147, label %5130

5130:                                             ; preds = %5126
  store i32 24, ptr %493, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %586) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %585) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %584) #12
  br label %5217

5131:                                             ; preds = %5225, %5110, %5038
  %5132 = landingpad { ptr, i32 }
          cleanup
  %5133 = extractvalue { ptr, i32 } %5132, 0
  store ptr %5133, ptr %29, align 8
  %5134 = extractvalue { ptr, i32 } %5132, 1
  store i32 %5134, ptr %30, align 4
  br label %5231

5135:                                             ; preds = %5106
  %5136 = landingpad { ptr, i32 }
          cleanup
  %5137 = extractvalue { ptr, i32 } %5136, 0
  store ptr %5137, ptr %29, align 8
  %5138 = extractvalue { ptr, i32 } %5136, 1
  store i32 %5138, ptr %30, align 4
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %583) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %583) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %582) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %582) #12
  br label %5231

5139:                                             ; preds = %5118
  %5140 = landingpad { ptr, i32 }
          cleanup
  %5141 = extractvalue { ptr, i32 } %5140, 0
  store ptr %5141, ptr %29, align 8
  %5142 = extractvalue { ptr, i32 } %5140, 1
  store i32 %5142, ptr %30, align 4
  br label %5216

5143:                                             ; preds = %5122
  %5144 = landingpad { ptr, i32 }
          cleanup
  %5145 = extractvalue { ptr, i32 } %5144, 0
  store ptr %5145, ptr %29, align 8
  %5146 = extractvalue { ptr, i32 } %5144, 1
  store i32 %5146, ptr %30, align 4
  br label %5215

5147:                                             ; preds = %5126
  call void @llvm.lifetime.start.p0(i64 8, ptr %587) #12
  %5148 = load ptr, ptr %585, align 8, !tbaa !5
  store ptr %5148, ptr %587, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %588) #12
  %5149 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5150 = load ptr, ptr %5149, align 8, !tbaa !50
  %5151 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %5150)
          to label %5152 unwind label %5182

5152:                                             ; preds = %5147
  %5153 = load ptr, ptr %587, align 8, !tbaa !5
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %588, ptr noundef nonnull align 8 dereferenceable(16) %5151, ptr noundef nonnull align 4 dereferenceable(4) %5153)
          to label %5154 unwind label %5182

5154:                                             ; preds = %5152
  %5155 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %588)
          to label %5156 unwind label %5186

5156:                                             ; preds = %5154
  br i1 %5155, label %5157, label %5209

5157:                                             ; preds = %5156
  call void @llvm.lifetime.start.p0(i64 8, ptr %589) #12
  %5158 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %588)
          to label %5159 unwind label %5190

5159:                                             ; preds = %5157
  store ptr %5158, ptr %589, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %590) #12
  %5160 = load ptr, ptr %589, align 8, !tbaa !5
  %5161 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %5160)
          to label %5162 unwind label %5194

5162:                                             ; preds = %5159
  br i1 %5161, label %5163, label %5164

5163:                                             ; preds = %5162
  br label %5165

5164:                                             ; preds = %5162
  br label %5165

5165:                                             ; preds = %5164, %5163
  %5166 = phi ptr [ @_ZN3JPH5Color7sYellowE, %5163 ], [ @_ZN3JPH5Color7sOrangeE, %5164 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %590, ptr align 4 %5166, i64 4, i1 false), !tbaa.struct !57
  %5167 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5168 = load ptr, ptr %5167, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %591) #12
  %5169 = load ptr, ptr %589, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %591, ptr noundef nonnull align 16 dereferenceable(122) %5169)
          to label %5170 unwind label %5198

5170:                                             ; preds = %5165
  call void @llvm.lifetime.start.p0(i64 32, ptr %592) #12
  %5171 = load ptr, ptr %589, align 8, !tbaa !5
  %5172 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %5171)
          to label %5173 unwind label %5202

5173:                                             ; preds = %5170
  %5174 = load ptr, ptr %5172, align 8, !tbaa !58
  %5175 = getelementptr inbounds ptr, ptr %5174, i64 4
  %5176 = load ptr, ptr %5175, align 8
  invoke void %5176(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %592, ptr noundef nonnull align 8 dereferenceable(26) %5172)
          to label %5177 unwind label %5202

5177:                                             ; preds = %5173
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %593, ptr align 4 %590, i64 4, i1 false), !tbaa.struct !57
  %5178 = getelementptr inbounds %"class.JPH::Color", ptr %593, i32 0, i32 0
  %5179 = getelementptr inbounds %union.anon.62, ptr %5178, i32 0, i32 0
  %5180 = load i32, ptr %5179, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %5168, ptr noundef nonnull align 16 dereferenceable(64) %591, ptr noundef nonnull align 16 dereferenceable(32) %592, i32 %5180)
          to label %5181 unwind label %5202

5181:                                             ; preds = %5177
  call void @llvm.lifetime.end.p0(i64 32, ptr %592) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %591) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %590) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %589) #12
  br label %5209

5182:                                             ; preds = %5152, %5147
  %5183 = landingpad { ptr, i32 }
          cleanup
  %5184 = extractvalue { ptr, i32 } %5183, 0
  store ptr %5184, ptr %29, align 8
  %5185 = extractvalue { ptr, i32 } %5183, 1
  store i32 %5185, ptr %30, align 4
  br label %5214

5186:                                             ; preds = %5154
  %5187 = landingpad { ptr, i32 }
          cleanup
  %5188 = extractvalue { ptr, i32 } %5187, 0
  store ptr %5188, ptr %29, align 8
  %5189 = extractvalue { ptr, i32 } %5187, 1
  store i32 %5189, ptr %30, align 4
  br label %5213

5190:                                             ; preds = %5157
  %5191 = landingpad { ptr, i32 }
          cleanup
  %5192 = extractvalue { ptr, i32 } %5191, 0
  store ptr %5192, ptr %29, align 8
  %5193 = extractvalue { ptr, i32 } %5191, 1
  store i32 %5193, ptr %30, align 4
  br label %5208

5194:                                             ; preds = %5159
  %5195 = landingpad { ptr, i32 }
          cleanup
  %5196 = extractvalue { ptr, i32 } %5195, 0
  store ptr %5196, ptr %29, align 8
  %5197 = extractvalue { ptr, i32 } %5195, 1
  store i32 %5197, ptr %30, align 4
  br label %5207

5198:                                             ; preds = %5165
  %5199 = landingpad { ptr, i32 }
          cleanup
  %5200 = extractvalue { ptr, i32 } %5199, 0
  store ptr %5200, ptr %29, align 8
  %5201 = extractvalue { ptr, i32 } %5199, 1
  store i32 %5201, ptr %30, align 4
  br label %5206

5202:                                             ; preds = %5177, %5173, %5170
  %5203 = landingpad { ptr, i32 }
          cleanup
  %5204 = extractvalue { ptr, i32 } %5203, 0
  store ptr %5204, ptr %29, align 8
  %5205 = extractvalue { ptr, i32 } %5203, 1
  store i32 %5205, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %592) #12
  br label %5206

5206:                                             ; preds = %5202, %5198
  call void @llvm.lifetime.end.p0(i64 64, ptr %591) #12
  br label %5207

5207:                                             ; preds = %5206, %5194
  call void @llvm.lifetime.end.p0(i64 4, ptr %590) #12
  br label %5208

5208:                                             ; preds = %5207, %5190
  call void @llvm.lifetime.end.p0(i64 8, ptr %589) #12
  br label %5213

5209:                                             ; preds = %5181, %5156
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %588) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %588) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %587) #12
  br label %5210

5210:                                             ; preds = %5209
  %5211 = load ptr, ptr %585, align 8, !tbaa !5
  %5212 = getelementptr inbounds %"class.JPH::BodyID", ptr %5211, i32 1
  store ptr %5212, ptr %585, align 8, !tbaa !5
  br label %5126

5213:                                             ; preds = %5208, %5186
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %588) #12
  br label %5214

5214:                                             ; preds = %5213, %5182
  call void @llvm.lifetime.end.p0(i64 24, ptr %588) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %587) #12
  br label %5215

5215:                                             ; preds = %5214, %5143
  call void @llvm.lifetime.end.p0(i64 8, ptr %586) #12
  br label %5216

5216:                                             ; preds = %5215, %5139
  call void @llvm.lifetime.end.p0(i64 8, ptr %585) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %584) #12
  br label %5231

5217:                                             ; preds = %5130
  br label %5218

5218:                                             ; preds = %5217, %5113
  %5219 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5220 = load ptr, ptr %5219, align 16, !tbaa !56
  %5221 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %5222 = trunc i8 %5221 to i1
  br i1 %5222, label %5223, label %5224

5223:                                             ; preds = %5218
  br label %5225

5224:                                             ; preds = %5218
  br label %5225

5225:                                             ; preds = %5224, %5223
  %5226 = phi ptr [ @_ZN3JPH5Color6sGreenE, %5223 ], [ @_ZN3JPH5Color4sRedE, %5224 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %594, ptr align 4 %5226, i64 4, i1 false), !tbaa.struct !57
  %5227 = getelementptr inbounds %"class.JPH::Color", ptr %594, i32 0, i32 0
  %5228 = getelementptr inbounds %union.anon.62, ptr %5227, i32 0, i32 0
  %5229 = load i32, ptr %5228, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %5220, ptr noundef nonnull align 16 dereferenceable(32) %576, i32 %5229)
          to label %5230 unwind label %5131

5230:                                             ; preds = %5225
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %581) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %581) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %576) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %574) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %571) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %570) #12
  br label %6190

5231:                                             ; preds = %5216, %5135, %5131
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %581) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %581) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %576) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %574) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %571) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %570) #12
  br label %6193

5232:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %595) #12
  store float 0x3FC99999A0000000, ptr %595, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %596) #12
  %5233 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 34
  %5234 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %5233)
  %5235 = fmul float %5234, 2.000000e+00
  store float %5235, ptr %596, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %597) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %599, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %5236 = getelementptr inbounds { double, double }, ptr %599, i32 0, i32 0
  %5237 = load double, ptr %5236, align 16
  %5238 = getelementptr inbounds { double, double }, ptr %599, i32 0, i32 1
  %5239 = load double, ptr %5238, align 8
  %5240 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %5237, double %5239)
  %5241 = getelementptr inbounds %"class.JPH::Vec3", ptr %598, i32 0, i32 0
  %5242 = getelementptr inbounds %union.anon, ptr %5241, i32 0, i32 0
  %5243 = getelementptr inbounds { double, double }, ptr %5242, i32 0, i32 0
  %5244 = extractvalue { double, double } %5240, 0
  store double %5244, ptr %5243, align 16
  %5245 = getelementptr inbounds { double, double }, ptr %5242, i32 0, i32 1
  %5246 = extractvalue { double, double } %5240, 1
  store double %5246, ptr %5245, align 8
  %5247 = getelementptr inbounds { double, double }, ptr %598, i32 0, i32 0
  %5248 = load double, ptr %5247, align 16
  %5249 = getelementptr inbounds { double, double }, ptr %598, i32 0, i32 1
  %5250 = load double, ptr %5249, align 8
  %5251 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %5248, double %5250)
  %5252 = getelementptr inbounds %"class.JPH::Vec3", ptr %597, i32 0, i32 0
  %5253 = getelementptr inbounds %union.anon, ptr %5252, i32 0, i32 0
  %5254 = getelementptr inbounds { double, double }, ptr %5253, i32 0, i32 0
  %5255 = extractvalue { double, double } %5251, 0
  store double %5255, ptr %5254, align 16
  %5256 = getelementptr inbounds { double, double }, ptr %5253, i32 0, i32 1
  %5257 = extractvalue { double, double } %5251, 1
  store double %5257, ptr %5256, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr %600) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %600) #12
  %5258 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5259 = load ptr, ptr %5258, align 8, !tbaa !50
  %5260 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %5259)
          to label %5261 unwind label %5291

5261:                                             ; preds = %5232
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %601, ptr align 16 %597, i64 16, i1 false), !tbaa.struct !11
  %5262 = load float, ptr %596, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %602) #12
  call void @llvm.memset.p0.i64(ptr align 8 %602, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %602) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %603) #12
  call void @llvm.memset.p0.i64(ptr align 8 %603, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %603) #12
  %5263 = getelementptr inbounds { double, double }, ptr %601, i32 0, i32 0
  %5264 = load double, ptr %5263, align 16
  %5265 = getelementptr inbounds { double, double }, ptr %601, i32 0, i32 1
  %5266 = load double, ptr %5265, align 8
  %5267 = load ptr, ptr %5260, align 8, !tbaa !58
  %5268 = getelementptr inbounds ptr, ptr %5267, i64 4
  %5269 = load ptr, ptr %5268, align 8
  invoke void %5269(ptr noundef nonnull align 8 dereferenceable(8) %5260, double %5264, double %5266, float noundef %5262, ptr noundef nonnull align 8 dereferenceable(24) %600, ptr noundef nonnull align 8 dereferenceable(8) %602, ptr noundef nonnull align 8 dereferenceable(8) %603)
          to label %5270 unwind label %5295

5270:                                             ; preds = %5261
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %603) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %603) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %602) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %602) #12
  %5271 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.199", ptr %600, i32 0, i32 1
  %5272 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %5271)
          to label %5273 unwind label %5291

5273:                                             ; preds = %5270
  %5274 = xor i1 %5272, true
  %5275 = zext i1 %5274 to i8
  store i8 %5275, ptr %21, align 1, !tbaa !16
  %5276 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %5277 = trunc i8 %5276 to i1
  br i1 %5277, label %5278, label %5378

5278:                                             ; preds = %5273
  call void @llvm.lifetime.start.p0(i64 8, ptr %604) #12
  %5279 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.199", ptr %600, i32 0, i32 1
  store ptr %5279, ptr %604, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %605) #12
  %5280 = load ptr, ptr %604, align 8, !tbaa !5
  %5281 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5280)
          to label %5282 unwind label %5299

5282:                                             ; preds = %5278
  store ptr %5281, ptr %605, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %606) #12
  %5283 = load ptr, ptr %604, align 8, !tbaa !5
  %5284 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5283)
          to label %5285 unwind label %5303

5285:                                             ; preds = %5282
  store ptr %5284, ptr %606, align 8, !tbaa !5
  br label %5286

5286:                                             ; preds = %5370, %5285
  %5287 = load ptr, ptr %605, align 8, !tbaa !5
  %5288 = load ptr, ptr %606, align 8, !tbaa !5
  %5289 = icmp ne ptr %5287, %5288
  br i1 %5289, label %5307, label %5290

5290:                                             ; preds = %5286
  store i32 26, ptr %493, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %606) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %605) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %604) #12
  br label %5377

5291:                                             ; preds = %5386, %5270, %5232
  %5292 = landingpad { ptr, i32 }
          cleanup
  %5293 = extractvalue { ptr, i32 } %5292, 0
  store ptr %5293, ptr %29, align 8
  %5294 = extractvalue { ptr, i32 } %5292, 1
  store i32 %5294, ptr %30, align 4
  br label %5396

5295:                                             ; preds = %5261
  %5296 = landingpad { ptr, i32 }
          cleanup
  %5297 = extractvalue { ptr, i32 } %5296, 0
  store ptr %5297, ptr %29, align 8
  %5298 = extractvalue { ptr, i32 } %5296, 1
  store i32 %5298, ptr %30, align 4
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %603) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %603) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %602) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %602) #12
  br label %5396

5299:                                             ; preds = %5278
  %5300 = landingpad { ptr, i32 }
          cleanup
  %5301 = extractvalue { ptr, i32 } %5300, 0
  store ptr %5301, ptr %29, align 8
  %5302 = extractvalue { ptr, i32 } %5300, 1
  store i32 %5302, ptr %30, align 4
  br label %5376

5303:                                             ; preds = %5282
  %5304 = landingpad { ptr, i32 }
          cleanup
  %5305 = extractvalue { ptr, i32 } %5304, 0
  store ptr %5305, ptr %29, align 8
  %5306 = extractvalue { ptr, i32 } %5304, 1
  store i32 %5306, ptr %30, align 4
  br label %5375

5307:                                             ; preds = %5286
  call void @llvm.lifetime.start.p0(i64 8, ptr %607) #12
  %5308 = load ptr, ptr %605, align 8, !tbaa !5
  store ptr %5308, ptr %607, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %608) #12
  %5309 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5310 = load ptr, ptr %5309, align 8, !tbaa !50
  %5311 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %5310)
          to label %5312 unwind label %5342

5312:                                             ; preds = %5307
  %5313 = load ptr, ptr %607, align 8, !tbaa !5
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %608, ptr noundef nonnull align 8 dereferenceable(16) %5311, ptr noundef nonnull align 4 dereferenceable(4) %5313)
          to label %5314 unwind label %5342

5314:                                             ; preds = %5312
  %5315 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %608)
          to label %5316 unwind label %5346

5316:                                             ; preds = %5314
  br i1 %5315, label %5317, label %5369

5317:                                             ; preds = %5316
  call void @llvm.lifetime.start.p0(i64 8, ptr %609) #12
  %5318 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %608)
          to label %5319 unwind label %5350

5319:                                             ; preds = %5317
  store ptr %5318, ptr %609, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %610) #12
  %5320 = load ptr, ptr %609, align 8, !tbaa !5
  %5321 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %5320)
          to label %5322 unwind label %5354

5322:                                             ; preds = %5319
  br i1 %5321, label %5323, label %5324

5323:                                             ; preds = %5322
  br label %5325

5324:                                             ; preds = %5322
  br label %5325

5325:                                             ; preds = %5324, %5323
  %5326 = phi ptr [ @_ZN3JPH5Color7sYellowE, %5323 ], [ @_ZN3JPH5Color7sOrangeE, %5324 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %610, ptr align 4 %5326, i64 4, i1 false), !tbaa.struct !57
  %5327 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5328 = load ptr, ptr %5327, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %611) #12
  %5329 = load ptr, ptr %609, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %611, ptr noundef nonnull align 16 dereferenceable(122) %5329)
          to label %5330 unwind label %5358

5330:                                             ; preds = %5325
  call void @llvm.lifetime.start.p0(i64 32, ptr %612) #12
  %5331 = load ptr, ptr %609, align 8, !tbaa !5
  %5332 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %5331)
          to label %5333 unwind label %5362

5333:                                             ; preds = %5330
  %5334 = load ptr, ptr %5332, align 8, !tbaa !58
  %5335 = getelementptr inbounds ptr, ptr %5334, i64 4
  %5336 = load ptr, ptr %5335, align 8
  invoke void %5336(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %612, ptr noundef nonnull align 8 dereferenceable(26) %5332)
          to label %5337 unwind label %5362

5337:                                             ; preds = %5333
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %613, ptr align 4 %610, i64 4, i1 false), !tbaa.struct !57
  %5338 = getelementptr inbounds %"class.JPH::Color", ptr %613, i32 0, i32 0
  %5339 = getelementptr inbounds %union.anon.62, ptr %5338, i32 0, i32 0
  %5340 = load i32, ptr %5339, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %5328, ptr noundef nonnull align 16 dereferenceable(64) %611, ptr noundef nonnull align 16 dereferenceable(32) %612, i32 %5340)
          to label %5341 unwind label %5362

5341:                                             ; preds = %5337
  call void @llvm.lifetime.end.p0(i64 32, ptr %612) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %611) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %610) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %609) #12
  br label %5369

5342:                                             ; preds = %5312, %5307
  %5343 = landingpad { ptr, i32 }
          cleanup
  %5344 = extractvalue { ptr, i32 } %5343, 0
  store ptr %5344, ptr %29, align 8
  %5345 = extractvalue { ptr, i32 } %5343, 1
  store i32 %5345, ptr %30, align 4
  br label %5374

5346:                                             ; preds = %5314
  %5347 = landingpad { ptr, i32 }
          cleanup
  %5348 = extractvalue { ptr, i32 } %5347, 0
  store ptr %5348, ptr %29, align 8
  %5349 = extractvalue { ptr, i32 } %5347, 1
  store i32 %5349, ptr %30, align 4
  br label %5373

5350:                                             ; preds = %5317
  %5351 = landingpad { ptr, i32 }
          cleanup
  %5352 = extractvalue { ptr, i32 } %5351, 0
  store ptr %5352, ptr %29, align 8
  %5353 = extractvalue { ptr, i32 } %5351, 1
  store i32 %5353, ptr %30, align 4
  br label %5368

5354:                                             ; preds = %5319
  %5355 = landingpad { ptr, i32 }
          cleanup
  %5356 = extractvalue { ptr, i32 } %5355, 0
  store ptr %5356, ptr %29, align 8
  %5357 = extractvalue { ptr, i32 } %5355, 1
  store i32 %5357, ptr %30, align 4
  br label %5367

5358:                                             ; preds = %5325
  %5359 = landingpad { ptr, i32 }
          cleanup
  %5360 = extractvalue { ptr, i32 } %5359, 0
  store ptr %5360, ptr %29, align 8
  %5361 = extractvalue { ptr, i32 } %5359, 1
  store i32 %5361, ptr %30, align 4
  br label %5366

5362:                                             ; preds = %5337, %5333, %5330
  %5363 = landingpad { ptr, i32 }
          cleanup
  %5364 = extractvalue { ptr, i32 } %5363, 0
  store ptr %5364, ptr %29, align 8
  %5365 = extractvalue { ptr, i32 } %5363, 1
  store i32 %5365, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %612) #12
  br label %5366

5366:                                             ; preds = %5362, %5358
  call void @llvm.lifetime.end.p0(i64 64, ptr %611) #12
  br label %5367

5367:                                             ; preds = %5366, %5354
  call void @llvm.lifetime.end.p0(i64 4, ptr %610) #12
  br label %5368

5368:                                             ; preds = %5367, %5350
  call void @llvm.lifetime.end.p0(i64 8, ptr %609) #12
  br label %5373

5369:                                             ; preds = %5341, %5316
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %608) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %608) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %607) #12
  br label %5370

5370:                                             ; preds = %5369
  %5371 = load ptr, ptr %605, align 8, !tbaa !5
  %5372 = getelementptr inbounds %"class.JPH::BodyID", ptr %5371, i32 1
  store ptr %5372, ptr %605, align 8, !tbaa !5
  br label %5286

5373:                                             ; preds = %5368, %5346
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %608) #12
  br label %5374

5374:                                             ; preds = %5373, %5342
  call void @llvm.lifetime.end.p0(i64 24, ptr %608) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %607) #12
  br label %5375

5375:                                             ; preds = %5374, %5303
  call void @llvm.lifetime.end.p0(i64 8, ptr %606) #12
  br label %5376

5376:                                             ; preds = %5375, %5299
  call void @llvm.lifetime.end.p0(i64 8, ptr %605) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %604) #12
  br label %5396

5377:                                             ; preds = %5290
  br label %5378

5378:                                             ; preds = %5377, %5273
  %5379 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5380 = load ptr, ptr %5379, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %614, ptr align 16 %597, i64 16, i1 false), !tbaa.struct !11
  %5381 = load float, ptr %596, align 4, !tbaa !9
  %5382 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %5383 = trunc i8 %5382 to i1
  br i1 %5383, label %5384, label %5385

5384:                                             ; preds = %5378
  br label %5386

5385:                                             ; preds = %5378
  br label %5386

5386:                                             ; preds = %5385, %5384
  %5387 = phi ptr [ @_ZN3JPH5Color6sGreenE, %5384 ], [ @_ZN3JPH5Color4sRedE, %5385 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %615, ptr align 4 %5387, i64 4, i1 false), !tbaa.struct !57
  %5388 = getelementptr inbounds { double, double }, ptr %614, i32 0, i32 0
  %5389 = load double, ptr %5388, align 16
  %5390 = getelementptr inbounds { double, double }, ptr %614, i32 0, i32 1
  %5391 = load double, ptr %5390, align 8
  %5392 = getelementptr inbounds %"class.JPH::Color", ptr %615, i32 0, i32 0
  %5393 = getelementptr inbounds %union.anon.62, ptr %5392, i32 0, i32 0
  %5394 = load i32, ptr %5393, align 4
  invoke void @_ZN3JPH13DebugRenderer14DrawWireSphereENS_4Vec3EfNS_5ColorEi(ptr noundef nonnull align 8 dereferenceable(320) %5380, double %5389, double %5391, float noundef %5381, i32 %5394, i32 noundef 3)
          to label %5395 unwind label %5291

5395:                                             ; preds = %5386
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %600) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %600) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %597) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %596) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %595) #12
  br label %6190

5396:                                             ; preds = %5376, %5295, %5291
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %600) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %600) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %597) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %596) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %595) #12
  br label %6193

5397:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %616) #12
  store float 0x3FB99999A0000000, ptr %616, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %617) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %619, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %5398 = getelementptr inbounds { double, double }, ptr %619, i32 0, i32 0
  %5399 = load double, ptr %5398, align 16
  %5400 = getelementptr inbounds { double, double }, ptr %619, i32 0, i32 1
  %5401 = load double, ptr %5400, align 8
  %5402 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %5399, double %5401)
  %5403 = getelementptr inbounds %"class.JPH::Vec3", ptr %618, i32 0, i32 0
  %5404 = getelementptr inbounds %union.anon, ptr %5403, i32 0, i32 0
  %5405 = getelementptr inbounds { double, double }, ptr %5404, i32 0, i32 0
  %5406 = extractvalue { double, double } %5402, 0
  store double %5406, ptr %5405, align 16
  %5407 = getelementptr inbounds { double, double }, ptr %5404, i32 0, i32 1
  %5408 = extractvalue { double, double } %5402, 1
  store double %5408, ptr %5407, align 8
  %5409 = getelementptr inbounds { double, double }, ptr %618, i32 0, i32 0
  %5410 = load double, ptr %5409, align 16
  %5411 = getelementptr inbounds { double, double }, ptr %618, i32 0, i32 1
  %5412 = load double, ptr %5411, align 8
  %5413 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %5410, double %5412)
  %5414 = getelementptr inbounds %"class.JPH::Vec3", ptr %617, i32 0, i32 0
  %5415 = getelementptr inbounds %union.anon, ptr %5414, i32 0, i32 0
  %5416 = getelementptr inbounds { double, double }, ptr %5415, i32 0, i32 0
  %5417 = extractvalue { double, double } %5413, 0
  store double %5417, ptr %5416, align 16
  %5418 = getelementptr inbounds { double, double }, ptr %5415, i32 0, i32 1
  %5419 = extractvalue { double, double } %5413, 1
  store double %5419, ptr %5418, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr %620) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %620) #12
  %5420 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5421 = load ptr, ptr %5420, align 8, !tbaa !50
  %5422 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %5421)
          to label %5423 unwind label %5452

5423:                                             ; preds = %5397
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %621, ptr align 16 %617, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %622) #12
  call void @llvm.memset.p0.i64(ptr align 8 %622, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %622) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %623) #12
  call void @llvm.memset.p0.i64(ptr align 8 %623, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %623) #12
  %5424 = getelementptr inbounds { double, double }, ptr %621, i32 0, i32 0
  %5425 = load double, ptr %5424, align 16
  %5426 = getelementptr inbounds { double, double }, ptr %621, i32 0, i32 1
  %5427 = load double, ptr %5426, align 8
  %5428 = load ptr, ptr %5422, align 8, !tbaa !58
  %5429 = getelementptr inbounds ptr, ptr %5428, i64 5
  %5430 = load ptr, ptr %5429, align 8
  invoke void %5430(ptr noundef nonnull align 8 dereferenceable(8) %5422, double %5425, double %5427, ptr noundef nonnull align 8 dereferenceable(24) %620, ptr noundef nonnull align 8 dereferenceable(8) %622, ptr noundef nonnull align 8 dereferenceable(8) %623)
          to label %5431 unwind label %5456

5431:                                             ; preds = %5423
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %623) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %623) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %622) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %622) #12
  %5432 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.199", ptr %620, i32 0, i32 1
  %5433 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %5432)
          to label %5434 unwind label %5452

5434:                                             ; preds = %5431
  %5435 = xor i1 %5433, true
  %5436 = zext i1 %5435 to i8
  store i8 %5436, ptr %21, align 1, !tbaa !16
  %5437 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %5438 = trunc i8 %5437 to i1
  br i1 %5438, label %5439, label %5539

5439:                                             ; preds = %5434
  call void @llvm.lifetime.start.p0(i64 8, ptr %624) #12
  %5440 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.199", ptr %620, i32 0, i32 1
  store ptr %5440, ptr %624, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %625) #12
  %5441 = load ptr, ptr %624, align 8, !tbaa !5
  %5442 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5441)
          to label %5443 unwind label %5460

5443:                                             ; preds = %5439
  store ptr %5442, ptr %625, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %626) #12
  %5444 = load ptr, ptr %624, align 8, !tbaa !5
  %5445 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5444)
          to label %5446 unwind label %5464

5446:                                             ; preds = %5443
  store ptr %5445, ptr %626, align 8, !tbaa !5
  br label %5447

5447:                                             ; preds = %5531, %5446
  %5448 = load ptr, ptr %625, align 8, !tbaa !5
  %5449 = load ptr, ptr %626, align 8, !tbaa !5
  %5450 = icmp ne ptr %5448, %5449
  br i1 %5450, label %5468, label %5451

5451:                                             ; preds = %5447
  store i32 28, ptr %493, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %626) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %625) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %624) #12
  br label %5538

5452:                                             ; preds = %5546, %5431, %5397
  %5453 = landingpad { ptr, i32 }
          cleanup
  %5454 = extractvalue { ptr, i32 } %5453, 0
  store ptr %5454, ptr %29, align 8
  %5455 = extractvalue { ptr, i32 } %5453, 1
  store i32 %5455, ptr %30, align 4
  br label %5556

5456:                                             ; preds = %5423
  %5457 = landingpad { ptr, i32 }
          cleanup
  %5458 = extractvalue { ptr, i32 } %5457, 0
  store ptr %5458, ptr %29, align 8
  %5459 = extractvalue { ptr, i32 } %5457, 1
  store i32 %5459, ptr %30, align 4
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %623) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %623) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %622) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %622) #12
  br label %5556

5460:                                             ; preds = %5439
  %5461 = landingpad { ptr, i32 }
          cleanup
  %5462 = extractvalue { ptr, i32 } %5461, 0
  store ptr %5462, ptr %29, align 8
  %5463 = extractvalue { ptr, i32 } %5461, 1
  store i32 %5463, ptr %30, align 4
  br label %5537

5464:                                             ; preds = %5443
  %5465 = landingpad { ptr, i32 }
          cleanup
  %5466 = extractvalue { ptr, i32 } %5465, 0
  store ptr %5466, ptr %29, align 8
  %5467 = extractvalue { ptr, i32 } %5465, 1
  store i32 %5467, ptr %30, align 4
  br label %5536

5468:                                             ; preds = %5447
  call void @llvm.lifetime.start.p0(i64 8, ptr %627) #12
  %5469 = load ptr, ptr %625, align 8, !tbaa !5
  store ptr %5469, ptr %627, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %628) #12
  %5470 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5471 = load ptr, ptr %5470, align 8, !tbaa !50
  %5472 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %5471)
          to label %5473 unwind label %5503

5473:                                             ; preds = %5468
  %5474 = load ptr, ptr %627, align 8, !tbaa !5
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %628, ptr noundef nonnull align 8 dereferenceable(16) %5472, ptr noundef nonnull align 4 dereferenceable(4) %5474)
          to label %5475 unwind label %5503

5475:                                             ; preds = %5473
  %5476 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %628)
          to label %5477 unwind label %5507

5477:                                             ; preds = %5475
  br i1 %5476, label %5478, label %5530

5478:                                             ; preds = %5477
  call void @llvm.lifetime.start.p0(i64 8, ptr %629) #12
  %5479 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %628)
          to label %5480 unwind label %5511

5480:                                             ; preds = %5478
  store ptr %5479, ptr %629, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %630) #12
  %5481 = load ptr, ptr %629, align 8, !tbaa !5
  %5482 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %5481)
          to label %5483 unwind label %5515

5483:                                             ; preds = %5480
  br i1 %5482, label %5484, label %5485

5484:                                             ; preds = %5483
  br label %5486

5485:                                             ; preds = %5483
  br label %5486

5486:                                             ; preds = %5485, %5484
  %5487 = phi ptr [ @_ZN3JPH5Color7sYellowE, %5484 ], [ @_ZN3JPH5Color7sOrangeE, %5485 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %630, ptr align 4 %5487, i64 4, i1 false), !tbaa.struct !57
  %5488 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5489 = load ptr, ptr %5488, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %631) #12
  %5490 = load ptr, ptr %629, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %631, ptr noundef nonnull align 16 dereferenceable(122) %5490)
          to label %5491 unwind label %5519

5491:                                             ; preds = %5486
  call void @llvm.lifetime.start.p0(i64 32, ptr %632) #12
  %5492 = load ptr, ptr %629, align 8, !tbaa !5
  %5493 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %5492)
          to label %5494 unwind label %5523

5494:                                             ; preds = %5491
  %5495 = load ptr, ptr %5493, align 8, !tbaa !58
  %5496 = getelementptr inbounds ptr, ptr %5495, i64 4
  %5497 = load ptr, ptr %5496, align 8
  invoke void %5497(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %632, ptr noundef nonnull align 8 dereferenceable(26) %5493)
          to label %5498 unwind label %5523

5498:                                             ; preds = %5494
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %633, ptr align 4 %630, i64 4, i1 false), !tbaa.struct !57
  %5499 = getelementptr inbounds %"class.JPH::Color", ptr %633, i32 0, i32 0
  %5500 = getelementptr inbounds %union.anon.62, ptr %5499, i32 0, i32 0
  %5501 = load i32, ptr %5500, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %5489, ptr noundef nonnull align 16 dereferenceable(64) %631, ptr noundef nonnull align 16 dereferenceable(32) %632, i32 %5501)
          to label %5502 unwind label %5523

5502:                                             ; preds = %5498
  call void @llvm.lifetime.end.p0(i64 32, ptr %632) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %631) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %630) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %629) #12
  br label %5530

5503:                                             ; preds = %5473, %5468
  %5504 = landingpad { ptr, i32 }
          cleanup
  %5505 = extractvalue { ptr, i32 } %5504, 0
  store ptr %5505, ptr %29, align 8
  %5506 = extractvalue { ptr, i32 } %5504, 1
  store i32 %5506, ptr %30, align 4
  br label %5535

5507:                                             ; preds = %5475
  %5508 = landingpad { ptr, i32 }
          cleanup
  %5509 = extractvalue { ptr, i32 } %5508, 0
  store ptr %5509, ptr %29, align 8
  %5510 = extractvalue { ptr, i32 } %5508, 1
  store i32 %5510, ptr %30, align 4
  br label %5534

5511:                                             ; preds = %5478
  %5512 = landingpad { ptr, i32 }
          cleanup
  %5513 = extractvalue { ptr, i32 } %5512, 0
  store ptr %5513, ptr %29, align 8
  %5514 = extractvalue { ptr, i32 } %5512, 1
  store i32 %5514, ptr %30, align 4
  br label %5529

5515:                                             ; preds = %5480
  %5516 = landingpad { ptr, i32 }
          cleanup
  %5517 = extractvalue { ptr, i32 } %5516, 0
  store ptr %5517, ptr %29, align 8
  %5518 = extractvalue { ptr, i32 } %5516, 1
  store i32 %5518, ptr %30, align 4
  br label %5528

5519:                                             ; preds = %5486
  %5520 = landingpad { ptr, i32 }
          cleanup
  %5521 = extractvalue { ptr, i32 } %5520, 0
  store ptr %5521, ptr %29, align 8
  %5522 = extractvalue { ptr, i32 } %5520, 1
  store i32 %5522, ptr %30, align 4
  br label %5527

5523:                                             ; preds = %5498, %5494, %5491
  %5524 = landingpad { ptr, i32 }
          cleanup
  %5525 = extractvalue { ptr, i32 } %5524, 0
  store ptr %5525, ptr %29, align 8
  %5526 = extractvalue { ptr, i32 } %5524, 1
  store i32 %5526, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %632) #12
  br label %5527

5527:                                             ; preds = %5523, %5519
  call void @llvm.lifetime.end.p0(i64 64, ptr %631) #12
  br label %5528

5528:                                             ; preds = %5527, %5515
  call void @llvm.lifetime.end.p0(i64 4, ptr %630) #12
  br label %5529

5529:                                             ; preds = %5528, %5511
  call void @llvm.lifetime.end.p0(i64 8, ptr %629) #12
  br label %5534

5530:                                             ; preds = %5502, %5477
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %628) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %628) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %627) #12
  br label %5531

5531:                                             ; preds = %5530
  %5532 = load ptr, ptr %625, align 8, !tbaa !5
  %5533 = getelementptr inbounds %"class.JPH::BodyID", ptr %5532, i32 1
  store ptr %5533, ptr %625, align 8, !tbaa !5
  br label %5447

5534:                                             ; preds = %5529, %5507
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %628) #12
  br label %5535

5535:                                             ; preds = %5534, %5503
  call void @llvm.lifetime.end.p0(i64 24, ptr %628) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %627) #12
  br label %5536

5536:                                             ; preds = %5535, %5464
  call void @llvm.lifetime.end.p0(i64 8, ptr %626) #12
  br label %5537

5537:                                             ; preds = %5536, %5460
  call void @llvm.lifetime.end.p0(i64 8, ptr %625) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %624) #12
  br label %5556

5538:                                             ; preds = %5451
  br label %5539

5539:                                             ; preds = %5538, %5434
  %5540 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5541 = load ptr, ptr %5540, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %634, ptr align 16 %617, i64 16, i1 false), !tbaa.struct !11
  %5542 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %5543 = trunc i8 %5542 to i1
  br i1 %5543, label %5544, label %5545

5544:                                             ; preds = %5539
  br label %5546

5545:                                             ; preds = %5539
  br label %5546

5546:                                             ; preds = %5545, %5544
  %5547 = phi ptr [ @_ZN3JPH5Color6sGreenE, %5544 ], [ @_ZN3JPH5Color4sRedE, %5545 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %635, ptr align 4 %5547, i64 4, i1 false), !tbaa.struct !57
  %5548 = getelementptr inbounds { double, double }, ptr %634, i32 0, i32 0
  %5549 = load double, ptr %5548, align 16
  %5550 = getelementptr inbounds { double, double }, ptr %634, i32 0, i32 1
  %5551 = load double, ptr %5550, align 8
  %5552 = getelementptr inbounds %"class.JPH::Color", ptr %635, i32 0, i32 0
  %5553 = getelementptr inbounds %union.anon.62, ptr %5552, i32 0, i32 0
  %5554 = load i32, ptr %5553, align 4
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %5541, double %5549, double %5551, i32 %5554, float noundef 0x3FB99999A0000000)
          to label %5555 unwind label %5452

5555:                                             ; preds = %5546
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %620) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %620) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %617) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %616) #12
  br label %6190

5556:                                             ; preds = %5537, %5456, %5452
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %620) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %620) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %617) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %616) #12
  br label %6193

5557:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %636) #12
  store float 0x3FC99999A0000000, ptr %636, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %637) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %639, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %5558 = getelementptr inbounds { double, double }, ptr %639, i32 0, i32 0
  %5559 = load double, ptr %5558, align 16
  %5560 = getelementptr inbounds { double, double }, ptr %639, i32 0, i32 1
  %5561 = load double, ptr %5560, align 8
  %5562 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %5559, double %5561)
  %5563 = getelementptr inbounds %"class.JPH::Vec3", ptr %638, i32 0, i32 0
  %5564 = getelementptr inbounds %union.anon, ptr %5563, i32 0, i32 0
  %5565 = getelementptr inbounds { double, double }, ptr %5564, i32 0, i32 0
  %5566 = extractvalue { double, double } %5562, 0
  store double %5566, ptr %5565, align 16
  %5567 = getelementptr inbounds { double, double }, ptr %5564, i32 0, i32 1
  %5568 = extractvalue { double, double } %5562, 1
  store double %5568, ptr %5567, align 8
  %5569 = getelementptr inbounds { double, double }, ptr %638, i32 0, i32 0
  %5570 = load double, ptr %5569, align 16
  %5571 = getelementptr inbounds { double, double }, ptr %638, i32 0, i32 1
  %5572 = load double, ptr %5571, align 8
  %5573 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %5570, double %5572)
  %5574 = getelementptr inbounds %"class.JPH::Vec3", ptr %637, i32 0, i32 0
  %5575 = getelementptr inbounds %union.anon, ptr %5574, i32 0, i32 0
  %5576 = getelementptr inbounds { double, double }, ptr %5575, i32 0, i32 0
  %5577 = extractvalue { double, double } %5573, 0
  store double %5577, ptr %5576, align 16
  %5578 = getelementptr inbounds { double, double }, ptr %5575, i32 0, i32 1
  %5579 = extractvalue { double, double } %5573, 1
  store double %5579, ptr %5578, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %640) #12
  %5580 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 34
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %641, ptr align 16 %5580, i64 16, i1 false), !tbaa.struct !11
  %5581 = getelementptr inbounds { double, double }, ptr %641, i32 0, i32 0
  %5582 = load double, ptr %5581, align 16
  %5583 = getelementptr inbounds { double, double }, ptr %641, i32 0, i32 1
  %5584 = load double, ptr %5583, align 8
  %5585 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+00, double %5582, double %5584)
  %5586 = getelementptr inbounds %"class.JPH::Vec3", ptr %640, i32 0, i32 0
  %5587 = getelementptr inbounds %union.anon, ptr %5586, i32 0, i32 0
  %5588 = getelementptr inbounds { double, double }, ptr %5587, i32 0, i32 0
  %5589 = extractvalue { double, double } %5585, 0
  store double %5589, ptr %5588, align 16
  %5590 = getelementptr inbounds { double, double }, ptr %5587, i32 0, i32 1
  %5591 = extractvalue { double, double } %5585, 1
  store double %5591, ptr %5590, align 8
  call void @llvm.lifetime.start.p0(i64 80, ptr %642) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %643) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %645) #12
  %5592 = call { double, double } @_ZN3JPH4Vec36sAxisZEv()
  %5593 = getelementptr inbounds %"class.JPH::Vec3", ptr %646, i32 0, i32 0
  %5594 = getelementptr inbounds %union.anon, ptr %5593, i32 0, i32 0
  %5595 = getelementptr inbounds { double, double }, ptr %5594, i32 0, i32 0
  %5596 = extractvalue { double, double } %5592, 0
  store double %5596, ptr %5595, align 16
  %5597 = getelementptr inbounds { double, double }, ptr %5594, i32 0, i32 1
  %5598 = extractvalue { double, double } %5592, 1
  store double %5598, ptr %5597, align 8
  %5599 = getelementptr inbounds { double, double }, ptr %646, i32 0, i32 0
  %5600 = load double, ptr %5599, align 16
  %5601 = getelementptr inbounds { double, double }, ptr %646, i32 0, i32 1
  %5602 = load double, ptr %5601, align 8
  %5603 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %5600, double %5602, float noundef 0x3FE41B2F80000000)
  %5604 = getelementptr inbounds %"class.JPH::Quat", ptr %645, i32 0, i32 0
  %5605 = getelementptr inbounds %"class.JPH::Vec4", ptr %5604, i32 0, i32 0
  %5606 = getelementptr inbounds %union.anon.55, ptr %5605, i32 0, i32 0
  %5607 = getelementptr inbounds { double, double }, ptr %5606, i32 0, i32 0
  %5608 = extractvalue { double, double } %5603, 0
  store double %5608, ptr %5607, align 16
  %5609 = getelementptr inbounds { double, double }, ptr %5606, i32 0, i32 1
  %5610 = extractvalue { double, double } %5603, 1
  store double %5610, ptr %5609, align 8
  %5611 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %5612 = getelementptr inbounds %"class.JPH::Vec3", ptr %648, i32 0, i32 0
  %5613 = getelementptr inbounds %union.anon, ptr %5612, i32 0, i32 0
  %5614 = getelementptr inbounds { double, double }, ptr %5613, i32 0, i32 0
  %5615 = extractvalue { double, double } %5611, 0
  store double %5615, ptr %5614, align 16
  %5616 = getelementptr inbounds { double, double }, ptr %5613, i32 0, i32 1
  %5617 = extractvalue { double, double } %5611, 1
  store double %5617, ptr %5616, align 8
  %5618 = getelementptr inbounds { double, double }, ptr %648, i32 0, i32 0
  %5619 = load double, ptr %5618, align 16
  %5620 = getelementptr inbounds { double, double }, ptr %648, i32 0, i32 1
  %5621 = load double, ptr %5620, align 8
  %5622 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %5619, double %5621, float noundef 0x3FD41B2F80000000)
  %5623 = getelementptr inbounds %"class.JPH::Quat", ptr %647, i32 0, i32 0
  %5624 = getelementptr inbounds %"class.JPH::Vec4", ptr %5623, i32 0, i32 0
  %5625 = getelementptr inbounds %union.anon.55, ptr %5624, i32 0, i32 0
  %5626 = getelementptr inbounds { double, double }, ptr %5625, i32 0, i32 0
  %5627 = extractvalue { double, double } %5622, 0
  store double %5627, ptr %5626, align 16
  %5628 = getelementptr inbounds { double, double }, ptr %5625, i32 0, i32 1
  %5629 = extractvalue { double, double } %5622, 1
  store double %5629, ptr %5628, align 8
  %5630 = getelementptr inbounds { double, double }, ptr %647, i32 0, i32 0
  %5631 = load double, ptr %5630, align 16
  %5632 = getelementptr inbounds { double, double }, ptr %647, i32 0, i32 1
  %5633 = load double, ptr %5632, align 8
  %5634 = call { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %645, double %5631, double %5633)
  %5635 = getelementptr inbounds %"class.JPH::Quat", ptr %644, i32 0, i32 0
  %5636 = getelementptr inbounds %"class.JPH::Vec4", ptr %5635, i32 0, i32 0
  %5637 = getelementptr inbounds %union.anon.55, ptr %5636, i32 0, i32 0
  %5638 = getelementptr inbounds { double, double }, ptr %5637, i32 0, i32 0
  %5639 = extractvalue { double, double } %5634, 0
  store double %5639, ptr %5638, align 16
  %5640 = getelementptr inbounds { double, double }, ptr %5637, i32 0, i32 1
  %5641 = extractvalue { double, double } %5634, 1
  store double %5641, ptr %5640, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %649, ptr align 16 %637, i64 16, i1 false), !tbaa.struct !11
  %5642 = getelementptr inbounds { double, double }, ptr %644, i32 0, i32 0
  %5643 = load double, ptr %5642, align 16
  %5644 = getelementptr inbounds { double, double }, ptr %644, i32 0, i32 1
  %5645 = load double, ptr %5644, align 8
  %5646 = getelementptr inbounds { double, double }, ptr %649, i32 0, i32 0
  %5647 = load double, ptr %5646, align 16
  %5648 = getelementptr inbounds { double, double }, ptr %649, i32 0, i32 1
  %5649 = load double, ptr %5648, align 8
  call void @_ZN3JPH5Mat4420sRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %643, double %5643, double %5645, double %5647, double %5649)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %650, ptr align 16 %640, i64 16, i1 false), !tbaa.struct !11
  %5650 = getelementptr inbounds { double, double }, ptr %650, i32 0, i32 0
  %5651 = load double, ptr %5650, align 16
  %5652 = getelementptr inbounds { double, double }, ptr %650, i32 0, i32 1
  %5653 = load double, ptr %5652, align 8
  call void @_ZN3JPH11OrientedBoxC2ERKNS_5Mat44ENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(80) %642, ptr noundef nonnull align 16 dereferenceable(64) %643, double %5651, double %5653)
  call void @llvm.lifetime.end.p0(i64 16, ptr %645) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %643) #12
  call void @llvm.lifetime.start.p0(i64 48, ptr %651) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %651) #12
  %5654 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5655 = load ptr, ptr %5654, align 8, !tbaa !50
  %5656 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %5655)
          to label %5657 unwind label %5682

5657:                                             ; preds = %5557
  call void @llvm.lifetime.start.p0(i64 8, ptr %652) #12
  call void @llvm.memset.p0.i64(ptr align 8 %652, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %652) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %653) #12
  call void @llvm.memset.p0.i64(ptr align 8 %653, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %653) #12
  %5658 = load ptr, ptr %5656, align 8, !tbaa !58
  %5659 = getelementptr inbounds ptr, ptr %5658, i64 6
  %5660 = load ptr, ptr %5659, align 8
  invoke void %5660(ptr noundef nonnull align 8 dereferenceable(8) %5656, ptr noundef nonnull align 16 dereferenceable(80) %642, ptr noundef nonnull align 8 dereferenceable(24) %651, ptr noundef nonnull align 8 dereferenceable(8) %652, ptr noundef nonnull align 8 dereferenceable(8) %653)
          to label %5661 unwind label %5686

5661:                                             ; preds = %5657
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %653) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %653) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %652) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %652) #12
  %5662 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.199", ptr %651, i32 0, i32 1
  %5663 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %5662)
          to label %5664 unwind label %5682

5664:                                             ; preds = %5661
  %5665 = xor i1 %5663, true
  %5666 = zext i1 %5665 to i8
  store i8 %5666, ptr %21, align 1, !tbaa !16
  %5667 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %5668 = trunc i8 %5667 to i1
  br i1 %5668, label %5669, label %5769

5669:                                             ; preds = %5664
  call void @llvm.lifetime.start.p0(i64 8, ptr %654) #12
  %5670 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.199", ptr %651, i32 0, i32 1
  store ptr %5670, ptr %654, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %655) #12
  %5671 = load ptr, ptr %654, align 8, !tbaa !5
  %5672 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5671)
          to label %5673 unwind label %5690

5673:                                             ; preds = %5669
  store ptr %5672, ptr %655, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %656) #12
  %5674 = load ptr, ptr %654, align 8, !tbaa !5
  %5675 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5674)
          to label %5676 unwind label %5694

5676:                                             ; preds = %5673
  store ptr %5675, ptr %656, align 8, !tbaa !5
  br label %5677

5677:                                             ; preds = %5761, %5676
  %5678 = load ptr, ptr %655, align 8, !tbaa !5
  %5679 = load ptr, ptr %656, align 8, !tbaa !5
  %5680 = icmp ne ptr %5678, %5679
  br i1 %5680, label %5698, label %5681

5681:                                             ; preds = %5677
  store i32 30, ptr %493, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %656) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %655) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %654) #12
  br label %5768

5682:                                             ; preds = %5776, %5661, %5557
  %5683 = landingpad { ptr, i32 }
          cleanup
  %5684 = extractvalue { ptr, i32 } %5683, 0
  store ptr %5684, ptr %29, align 8
  %5685 = extractvalue { ptr, i32 } %5683, 1
  store i32 %5685, ptr %30, align 4
  br label %5782

5686:                                             ; preds = %5657
  %5687 = landingpad { ptr, i32 }
          cleanup
  %5688 = extractvalue { ptr, i32 } %5687, 0
  store ptr %5688, ptr %29, align 8
  %5689 = extractvalue { ptr, i32 } %5687, 1
  store i32 %5689, ptr %30, align 4
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %653) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %653) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %652) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %652) #12
  br label %5782

5690:                                             ; preds = %5669
  %5691 = landingpad { ptr, i32 }
          cleanup
  %5692 = extractvalue { ptr, i32 } %5691, 0
  store ptr %5692, ptr %29, align 8
  %5693 = extractvalue { ptr, i32 } %5691, 1
  store i32 %5693, ptr %30, align 4
  br label %5767

5694:                                             ; preds = %5673
  %5695 = landingpad { ptr, i32 }
          cleanup
  %5696 = extractvalue { ptr, i32 } %5695, 0
  store ptr %5696, ptr %29, align 8
  %5697 = extractvalue { ptr, i32 } %5695, 1
  store i32 %5697, ptr %30, align 4
  br label %5766

5698:                                             ; preds = %5677
  call void @llvm.lifetime.start.p0(i64 8, ptr %657) #12
  %5699 = load ptr, ptr %655, align 8, !tbaa !5
  store ptr %5699, ptr %657, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %658) #12
  %5700 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5701 = load ptr, ptr %5700, align 8, !tbaa !50
  %5702 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %5701)
          to label %5703 unwind label %5733

5703:                                             ; preds = %5698
  %5704 = load ptr, ptr %657, align 8, !tbaa !5
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %658, ptr noundef nonnull align 8 dereferenceable(16) %5702, ptr noundef nonnull align 4 dereferenceable(4) %5704)
          to label %5705 unwind label %5733

5705:                                             ; preds = %5703
  %5706 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %658)
          to label %5707 unwind label %5737

5707:                                             ; preds = %5705
  br i1 %5706, label %5708, label %5760

5708:                                             ; preds = %5707
  call void @llvm.lifetime.start.p0(i64 8, ptr %659) #12
  %5709 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %658)
          to label %5710 unwind label %5741

5710:                                             ; preds = %5708
  store ptr %5709, ptr %659, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %660) #12
  %5711 = load ptr, ptr %659, align 8, !tbaa !5
  %5712 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %5711)
          to label %5713 unwind label %5745

5713:                                             ; preds = %5710
  br i1 %5712, label %5714, label %5715

5714:                                             ; preds = %5713
  br label %5716

5715:                                             ; preds = %5713
  br label %5716

5716:                                             ; preds = %5715, %5714
  %5717 = phi ptr [ @_ZN3JPH5Color7sYellowE, %5714 ], [ @_ZN3JPH5Color7sOrangeE, %5715 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %660, ptr align 4 %5717, i64 4, i1 false), !tbaa.struct !57
  %5718 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5719 = load ptr, ptr %5718, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %661) #12
  %5720 = load ptr, ptr %659, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %661, ptr noundef nonnull align 16 dereferenceable(122) %5720)
          to label %5721 unwind label %5749

5721:                                             ; preds = %5716
  call void @llvm.lifetime.start.p0(i64 32, ptr %662) #12
  %5722 = load ptr, ptr %659, align 8, !tbaa !5
  %5723 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %5722)
          to label %5724 unwind label %5753

5724:                                             ; preds = %5721
  %5725 = load ptr, ptr %5723, align 8, !tbaa !58
  %5726 = getelementptr inbounds ptr, ptr %5725, i64 4
  %5727 = load ptr, ptr %5726, align 8
  invoke void %5727(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %662, ptr noundef nonnull align 8 dereferenceable(26) %5723)
          to label %5728 unwind label %5753

5728:                                             ; preds = %5724
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %663, ptr align 4 %660, i64 4, i1 false), !tbaa.struct !57
  %5729 = getelementptr inbounds %"class.JPH::Color", ptr %663, i32 0, i32 0
  %5730 = getelementptr inbounds %union.anon.62, ptr %5729, i32 0, i32 0
  %5731 = load i32, ptr %5730, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %5719, ptr noundef nonnull align 16 dereferenceable(64) %661, ptr noundef nonnull align 16 dereferenceable(32) %662, i32 %5731)
          to label %5732 unwind label %5753

5732:                                             ; preds = %5728
  call void @llvm.lifetime.end.p0(i64 32, ptr %662) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %661) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %660) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %659) #12
  br label %5760

5733:                                             ; preds = %5703, %5698
  %5734 = landingpad { ptr, i32 }
          cleanup
  %5735 = extractvalue { ptr, i32 } %5734, 0
  store ptr %5735, ptr %29, align 8
  %5736 = extractvalue { ptr, i32 } %5734, 1
  store i32 %5736, ptr %30, align 4
  br label %5765

5737:                                             ; preds = %5705
  %5738 = landingpad { ptr, i32 }
          cleanup
  %5739 = extractvalue { ptr, i32 } %5738, 0
  store ptr %5739, ptr %29, align 8
  %5740 = extractvalue { ptr, i32 } %5738, 1
  store i32 %5740, ptr %30, align 4
  br label %5764

5741:                                             ; preds = %5708
  %5742 = landingpad { ptr, i32 }
          cleanup
  %5743 = extractvalue { ptr, i32 } %5742, 0
  store ptr %5743, ptr %29, align 8
  %5744 = extractvalue { ptr, i32 } %5742, 1
  store i32 %5744, ptr %30, align 4
  br label %5759

5745:                                             ; preds = %5710
  %5746 = landingpad { ptr, i32 }
          cleanup
  %5747 = extractvalue { ptr, i32 } %5746, 0
  store ptr %5747, ptr %29, align 8
  %5748 = extractvalue { ptr, i32 } %5746, 1
  store i32 %5748, ptr %30, align 4
  br label %5758

5749:                                             ; preds = %5716
  %5750 = landingpad { ptr, i32 }
          cleanup
  %5751 = extractvalue { ptr, i32 } %5750, 0
  store ptr %5751, ptr %29, align 8
  %5752 = extractvalue { ptr, i32 } %5750, 1
  store i32 %5752, ptr %30, align 4
  br label %5757

5753:                                             ; preds = %5728, %5724, %5721
  %5754 = landingpad { ptr, i32 }
          cleanup
  %5755 = extractvalue { ptr, i32 } %5754, 0
  store ptr %5755, ptr %29, align 8
  %5756 = extractvalue { ptr, i32 } %5754, 1
  store i32 %5756, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %662) #12
  br label %5757

5757:                                             ; preds = %5753, %5749
  call void @llvm.lifetime.end.p0(i64 64, ptr %661) #12
  br label %5758

5758:                                             ; preds = %5757, %5745
  call void @llvm.lifetime.end.p0(i64 4, ptr %660) #12
  br label %5759

5759:                                             ; preds = %5758, %5741
  call void @llvm.lifetime.end.p0(i64 8, ptr %659) #12
  br label %5764

5760:                                             ; preds = %5732, %5707
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %658) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %658) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %657) #12
  br label %5761

5761:                                             ; preds = %5760
  %5762 = load ptr, ptr %655, align 8, !tbaa !5
  %5763 = getelementptr inbounds %"class.JPH::BodyID", ptr %5762, i32 1
  store ptr %5763, ptr %655, align 8, !tbaa !5
  br label %5677

5764:                                             ; preds = %5759, %5737
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %658) #12
  br label %5765

5765:                                             ; preds = %5764, %5733
  call void @llvm.lifetime.end.p0(i64 24, ptr %658) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %657) #12
  br label %5766

5766:                                             ; preds = %5765, %5694
  call void @llvm.lifetime.end.p0(i64 8, ptr %656) #12
  br label %5767

5767:                                             ; preds = %5766, %5690
  call void @llvm.lifetime.end.p0(i64 8, ptr %655) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %654) #12
  br label %5782

5768:                                             ; preds = %5681
  br label %5769

5769:                                             ; preds = %5768, %5664
  %5770 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5771 = load ptr, ptr %5770, align 16, !tbaa !56
  %5772 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %5773 = trunc i8 %5772 to i1
  br i1 %5773, label %5774, label %5775

5774:                                             ; preds = %5769
  br label %5776

5775:                                             ; preds = %5769
  br label %5776

5776:                                             ; preds = %5775, %5774
  %5777 = phi ptr [ @_ZN3JPH5Color6sGreenE, %5774 ], [ @_ZN3JPH5Color4sRedE, %5775 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %664, ptr align 4 %5777, i64 4, i1 false), !tbaa.struct !57
  %5778 = getelementptr inbounds %"class.JPH::Color", ptr %664, i32 0, i32 0
  %5779 = getelementptr inbounds %union.anon.62, ptr %5778, i32 0, i32 0
  %5780 = load i32, ptr %5779, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_11OrientedBoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %5771, ptr noundef nonnull align 16 dereferenceable(80) %642, i32 %5780)
          to label %5781 unwind label %5682

5781:                                             ; preds = %5776
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %651) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %651) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr %642) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %640) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %637) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %636) #12
  br label %6190

5782:                                             ; preds = %5767, %5686, %5682
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %651) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %651) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr %642) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %640) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %637) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %636) #12
  br label %6193

5783:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 16, ptr %665) #12
  %5784 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 34
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %666, ptr align 16 %5784, i64 16, i1 false), !tbaa.struct !11
  %5785 = getelementptr inbounds { double, double }, ptr %666, i32 0, i32 0
  %5786 = load double, ptr %5785, align 16
  %5787 = getelementptr inbounds { double, double }, ptr %666, i32 0, i32 1
  %5788 = load double, ptr %5787, align 8
  %5789 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+00, double %5786, double %5788)
  %5790 = getelementptr inbounds %"class.JPH::Vec3", ptr %665, i32 0, i32 0
  %5791 = getelementptr inbounds %union.anon, ptr %5790, i32 0, i32 0
  %5792 = getelementptr inbounds { double, double }, ptr %5791, i32 0, i32 0
  %5793 = extractvalue { double, double } %5789, 0
  store double %5793, ptr %5792, align 16
  %5794 = getelementptr inbounds { double, double }, ptr %5791, i32 0, i32 1
  %5795 = extractvalue { double, double } %5789, 1
  store double %5795, ptr %5794, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %667) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %669, ptr align 16 %665, i64 16, i1 false), !tbaa.struct !11
  %5796 = getelementptr inbounds { double, double }, ptr %669, i32 0, i32 0
  %5797 = load double, ptr %5796, align 16
  %5798 = getelementptr inbounds { double, double }, ptr %669, i32 0, i32 1
  %5799 = load double, ptr %5798, align 8
  %5800 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %5797, double %5799)
  %5801 = getelementptr inbounds %"class.JPH::Vec3", ptr %668, i32 0, i32 0
  %5802 = getelementptr inbounds %union.anon, ptr %5801, i32 0, i32 0
  %5803 = getelementptr inbounds { double, double }, ptr %5802, i32 0, i32 0
  %5804 = extractvalue { double, double } %5800, 0
  store double %5804, ptr %5803, align 16
  %5805 = getelementptr inbounds { double, double }, ptr %5802, i32 0, i32 1
  %5806 = extractvalue { double, double } %5800, 1
  store double %5806, ptr %5805, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %671, ptr align 16 %665, i64 16, i1 false), !tbaa.struct !11
  %5807 = getelementptr inbounds { double, double }, ptr %671, i32 0, i32 0
  %5808 = load double, ptr %5807, align 16
  %5809 = getelementptr inbounds { double, double }, ptr %671, i32 0, i32 1
  %5810 = load double, ptr %5809, align 8
  %5811 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %5808, double %5810)
  %5812 = getelementptr inbounds %"class.JPH::Vec3", ptr %670, i32 0, i32 0
  %5813 = getelementptr inbounds %union.anon, ptr %5812, i32 0, i32 0
  %5814 = getelementptr inbounds { double, double }, ptr %5813, i32 0, i32 0
  %5815 = extractvalue { double, double } %5811, 0
  store double %5815, ptr %5814, align 16
  %5816 = getelementptr inbounds { double, double }, ptr %5813, i32 0, i32 1
  %5817 = extractvalue { double, double } %5811, 1
  store double %5817, ptr %5816, align 8
  %5818 = getelementptr inbounds { double, double }, ptr %668, i32 0, i32 0
  %5819 = load double, ptr %5818, align 16
  %5820 = getelementptr inbounds { double, double }, ptr %668, i32 0, i32 1
  %5821 = load double, ptr %5820, align 8
  %5822 = getelementptr inbounds { double, double }, ptr %670, i32 0, i32 0
  %5823 = load double, ptr %5822, align 16
  %5824 = getelementptr inbounds { double, double }, ptr %670, i32 0, i32 1
  %5825 = load double, ptr %5824, align 8
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %667, double %5819, double %5821, double %5823, double %5825)
  call void @llvm.lifetime.start.p0(i64 48, ptr %672) #12
  %5826 = getelementptr inbounds %"struct.JPH::AABoxCast", ptr %672, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %5826, ptr align 16 %667, i64 32, i1 false), !tbaa.struct !98
  %5827 = getelementptr inbounds %"struct.JPH::AABoxCast", ptr %672, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %5827, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 48, ptr %673) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %673) #12
  %5828 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5829 = load ptr, ptr %5828, align 8, !tbaa !50
  %5830 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %5829)
          to label %5831 unwind label %5857

5831:                                             ; preds = %5783
  call void @llvm.lifetime.start.p0(i64 8, ptr %674) #12
  call void @llvm.memset.p0.i64(ptr align 8 %674, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %674) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %675) #12
  call void @llvm.memset.p0.i64(ptr align 8 %675, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %675) #12
  %5832 = load ptr, ptr %5830, align 8, !tbaa !58
  %5833 = getelementptr inbounds ptr, ptr %5832, i64 7
  %5834 = load ptr, ptr %5833, align 8
  invoke void %5834(ptr noundef nonnull align 8 dereferenceable(8) %5830, ptr noundef nonnull align 16 dereferenceable(48) %672, ptr noundef nonnull align 8 dereferenceable(24) %673, ptr noundef nonnull align 8 dereferenceable(8) %674, ptr noundef nonnull align 8 dereferenceable(8) %675)
          to label %5835 unwind label %5861

5835:                                             ; preds = %5831
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %675) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %675) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %674) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %674) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %673)
          to label %5836 unwind label %5857

5836:                                             ; preds = %5835
  %5837 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.201", ptr %673, i32 0, i32 1
  %5838 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %5837)
          to label %5839 unwind label %5857

5839:                                             ; preds = %5836
  %5840 = xor i1 %5838, true
  %5841 = zext i1 %5840 to i8
  store i8 %5841, ptr %21, align 1, !tbaa !16
  %5842 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %5843 = trunc i8 %5842 to i1
  br i1 %5843, label %5844, label %6109

5844:                                             ; preds = %5839
  call void @llvm.lifetime.start.p0(i64 16, ptr %676) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %676, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %677) #12
  store i8 0, ptr %677, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %678) #12
  %5845 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.201", ptr %673, i32 0, i32 1
  store ptr %5845, ptr %678, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %679) #12
  %5846 = load ptr, ptr %678, align 8, !tbaa !5
  %5847 = invoke noundef ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5846)
          to label %5848 unwind label %5865

5848:                                             ; preds = %5844
  store ptr %5847, ptr %679, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %680) #12
  %5849 = load ptr, ptr %678, align 8, !tbaa !5
  %5850 = invoke noundef ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5849)
          to label %5851 unwind label %5869

5851:                                             ; preds = %5848
  store ptr %5850, ptr %680, align 8, !tbaa !5
  br label %5852

5852:                                             ; preds = %6036, %5851
  %5853 = load ptr, ptr %679, align 8, !tbaa !5
  %5854 = load ptr, ptr %680, align 8, !tbaa !5
  %5855 = icmp ne ptr %5853, %5854
  br i1 %5855, label %5873, label %5856

5856:                                             ; preds = %5852
  store i32 32, ptr %493, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %680) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %679) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %678) #12
  br label %6045

5857:                                             ; preds = %6117, %6109, %5836, %5835, %5783
  %5858 = landingpad { ptr, i32 }
          cleanup
  %5859 = extractvalue { ptr, i32 } %5858, 0
  store ptr %5859, ptr %29, align 8
  %5860 = extractvalue { ptr, i32 } %5858, 1
  store i32 %5860, ptr %30, align 4
  br label %6189

5861:                                             ; preds = %5831
  %5862 = landingpad { ptr, i32 }
          cleanup
  %5863 = extractvalue { ptr, i32 } %5862, 0
  store ptr %5863, ptr %29, align 8
  %5864 = extractvalue { ptr, i32 } %5862, 1
  store i32 %5864, ptr %30, align 4
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %675) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %675) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %674) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %674) #12
  br label %6189

5865:                                             ; preds = %5844
  %5866 = landingpad { ptr, i32 }
          cleanup
  %5867 = extractvalue { ptr, i32 } %5866, 0
  store ptr %5867, ptr %29, align 8
  %5868 = extractvalue { ptr, i32 } %5866, 1
  store i32 %5868, ptr %30, align 4
  br label %6044

5869:                                             ; preds = %5848
  %5870 = landingpad { ptr, i32 }
          cleanup
  %5871 = extractvalue { ptr, i32 } %5870, 0
  store ptr %5871, ptr %29, align 8
  %5872 = extractvalue { ptr, i32 } %5870, 1
  store i32 %5872, ptr %30, align 4
  br label %6043

5873:                                             ; preds = %5852
  call void @llvm.lifetime.start.p0(i64 8, ptr %681) #12
  %5874 = load ptr, ptr %679, align 8, !tbaa !5
  store ptr %5874, ptr %681, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %682) #12
  %5875 = load ptr, ptr %681, align 8, !tbaa !5
  %5876 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %5875, i32 0, i32 1
  %5877 = load float, ptr %5876, align 4, !tbaa !52
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %684, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %5878 = getelementptr inbounds { double, double }, ptr %684, i32 0, i32 0
  %5879 = load double, ptr %5878, align 16
  %5880 = getelementptr inbounds { double, double }, ptr %684, i32 0, i32 1
  %5881 = load double, ptr %5880, align 8
  %5882 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %5877, double %5879, double %5881)
          to label %5883 unwind label %5991

5883:                                             ; preds = %5873
  %5884 = getelementptr inbounds %"class.JPH::Vec3", ptr %683, i32 0, i32 0
  %5885 = getelementptr inbounds %union.anon, ptr %5884, i32 0, i32 0
  %5886 = getelementptr inbounds { double, double }, ptr %5885, i32 0, i32 0
  %5887 = extractvalue { double, double } %5882, 0
  store double %5887, ptr %5886, align 16
  %5888 = getelementptr inbounds { double, double }, ptr %5885, i32 0, i32 1
  %5889 = extractvalue { double, double } %5882, 1
  store double %5889, ptr %5888, align 8
  %5890 = getelementptr inbounds { double, double }, ptr %683, i32 0, i32 0
  %5891 = load double, ptr %5890, align 16
  %5892 = getelementptr inbounds { double, double }, ptr %683, i32 0, i32 1
  %5893 = load double, ptr %5892, align 8
  %5894 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %5891, double %5893)
          to label %5895 unwind label %5991

5895:                                             ; preds = %5883
  %5896 = getelementptr inbounds %"class.JPH::Vec3", ptr %682, i32 0, i32 0
  %5897 = getelementptr inbounds %union.anon, ptr %5896, i32 0, i32 0
  %5898 = getelementptr inbounds { double, double }, ptr %5897, i32 0, i32 0
  %5899 = extractvalue { double, double } %5894, 0
  store double %5899, ptr %5898, align 16
  %5900 = getelementptr inbounds { double, double }, ptr %5897, i32 0, i32 1
  %5901 = extractvalue { double, double } %5894, 1
  store double %5901, ptr %5900, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %685) #12
  %5902 = load i8, ptr %677, align 1, !tbaa !16, !range !54, !noundef !55
  %5903 = trunc i8 %5902 to i1
  br i1 %5903, label %5904, label %5905

5904:                                             ; preds = %5895
  br label %5906

5905:                                             ; preds = %5895
  br label %5906

5906:                                             ; preds = %5905, %5904
  %5907 = phi ptr [ @_ZN3JPH5Color5sGreyE, %5904 ], [ @_ZN3JPH5Color6sWhiteE, %5905 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %685, ptr align 4 %5907, i64 4, i1 false), !tbaa.struct !57
  %5908 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5909 = load ptr, ptr %5908, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %686, ptr align 16 %676, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %687, ptr align 16 %682, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %688, ptr align 4 %685, i64 4, i1 false), !tbaa.struct !57
  %5910 = getelementptr inbounds { double, double }, ptr %686, i32 0, i32 0
  %5911 = load double, ptr %5910, align 16
  %5912 = getelementptr inbounds { double, double }, ptr %686, i32 0, i32 1
  %5913 = load double, ptr %5912, align 8
  %5914 = getelementptr inbounds { double, double }, ptr %687, i32 0, i32 0
  %5915 = load double, ptr %5914, align 16
  %5916 = getelementptr inbounds { double, double }, ptr %687, i32 0, i32 1
  %5917 = load double, ptr %5916, align 8
  %5918 = getelementptr inbounds %"class.JPH::Color", ptr %688, i32 0, i32 0
  %5919 = getelementptr inbounds %union.anon.62, ptr %5918, i32 0, i32 0
  %5920 = load i32, ptr %5919, align 4
  %5921 = load ptr, ptr %5909, align 8, !tbaa !58
  %5922 = getelementptr inbounds ptr, ptr %5921, i64 2
  %5923 = load ptr, ptr %5922, align 8
  invoke void %5923(ptr noundef nonnull align 8 dereferenceable(320) %5909, double %5911, double %5913, double %5915, double %5917, i32 %5920)
          to label %5924 unwind label %5995

5924:                                             ; preds = %5906
  %5925 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5926 = load ptr, ptr %5925, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %689) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %690, ptr align 16 %682, i64 16, i1 false), !tbaa.struct !11
  %5927 = getelementptr inbounds { double, double }, ptr %690, i32 0, i32 0
  %5928 = load double, ptr %5927, align 16
  %5929 = getelementptr inbounds { double, double }, ptr %690, i32 0, i32 1
  %5930 = load double, ptr %5929, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %689, double %5928, double %5930)
          to label %5931 unwind label %5999

5931:                                             ; preds = %5924
  call void @llvm.lifetime.start.p0(i64 32, ptr %691) #12
  %5932 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %665)
          to label %5933 unwind label %6003

5933:                                             ; preds = %5931
  %5934 = getelementptr inbounds %"class.JPH::Vec3", ptr %692, i32 0, i32 0
  %5935 = getelementptr inbounds %union.anon, ptr %5934, i32 0, i32 0
  %5936 = getelementptr inbounds { double, double }, ptr %5935, i32 0, i32 0
  %5937 = extractvalue { double, double } %5932, 0
  store double %5937, ptr %5936, align 16
  %5938 = getelementptr inbounds { double, double }, ptr %5935, i32 0, i32 1
  %5939 = extractvalue { double, double } %5932, 1
  store double %5939, ptr %5938, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %693, ptr align 16 %665, i64 16, i1 false), !tbaa.struct !11
  %5940 = getelementptr inbounds { double, double }, ptr %692, i32 0, i32 0
  %5941 = load double, ptr %5940, align 16
  %5942 = getelementptr inbounds { double, double }, ptr %692, i32 0, i32 1
  %5943 = load double, ptr %5942, align 8
  %5944 = getelementptr inbounds { double, double }, ptr %693, i32 0, i32 0
  %5945 = load double, ptr %5944, align 16
  %5946 = getelementptr inbounds { double, double }, ptr %693, i32 0, i32 1
  %5947 = load double, ptr %5946, align 8
  invoke void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %691, double %5941, double %5943, double %5945, double %5947)
          to label %5948 unwind label %6003

5948:                                             ; preds = %5933
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %694, ptr align 4 %685, i64 4, i1 false), !tbaa.struct !57
  %5949 = getelementptr inbounds %"class.JPH::Color", ptr %694, i32 0, i32 0
  %5950 = getelementptr inbounds %union.anon.62, ptr %5949, i32 0, i32 0
  %5951 = load i32, ptr %5950, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %5926, ptr noundef nonnull align 16 dereferenceable(64) %689, ptr noundef nonnull align 16 dereferenceable(32) %691, i32 %5951)
          to label %5952 unwind label %6003

5952:                                             ; preds = %5948
  call void @llvm.lifetime.end.p0(i64 32, ptr %691) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %689) #12
  %5953 = load i8, ptr %677, align 1, !tbaa !16, !range !54, !noundef !55
  %5954 = trunc i8 %5953 to i1
  %5955 = xor i1 %5954, true
  %5956 = zext i1 %5955 to i8
  store i8 %5956, ptr %677, align 1, !tbaa !16
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %676, ptr align 16 %682, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %695) #12
  %5957 = getelementptr inbounds %class.SamplesApp, ptr %718, i32 0, i32 11
  %5958 = load ptr, ptr %5957, align 8, !tbaa !50
  %5959 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %5958)
          to label %5960 unwind label %6008

5960:                                             ; preds = %5952
  %5961 = load ptr, ptr %681, align 8, !tbaa !5
  %5962 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %5961, i32 0, i32 0
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %695, ptr noundef nonnull align 8 dereferenceable(16) %5959, ptr noundef nonnull align 4 dereferenceable(4) %5962)
          to label %5963 unwind label %6008

5963:                                             ; preds = %5960
  %5964 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %695)
          to label %5965 unwind label %6012

5965:                                             ; preds = %5963
  br i1 %5964, label %5966, label %6035

5966:                                             ; preds = %5965
  call void @llvm.lifetime.start.p0(i64 8, ptr %696) #12
  %5967 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %695)
          to label %5968 unwind label %6016

5968:                                             ; preds = %5966
  store ptr %5967, ptr %696, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %697) #12
  %5969 = load ptr, ptr %696, align 8, !tbaa !5
  %5970 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %5969)
          to label %5971 unwind label %6020

5971:                                             ; preds = %5968
  br i1 %5970, label %5972, label %5973

5972:                                             ; preds = %5971
  br label %5974

5973:                                             ; preds = %5971
  br label %5974

5974:                                             ; preds = %5973, %5972
  %5975 = phi ptr [ @_ZN3JPH5Color7sYellowE, %5972 ], [ @_ZN3JPH5Color7sOrangeE, %5973 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %697, ptr align 4 %5975, i64 4, i1 false), !tbaa.struct !57
  %5976 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %5977 = load ptr, ptr %5976, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %698) #12
  %5978 = load ptr, ptr %696, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %698, ptr noundef nonnull align 16 dereferenceable(122) %5978)
          to label %5979 unwind label %6024

5979:                                             ; preds = %5974
  call void @llvm.lifetime.start.p0(i64 32, ptr %699) #12
  %5980 = load ptr, ptr %696, align 8, !tbaa !5
  %5981 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %5980)
          to label %5982 unwind label %6028

5982:                                             ; preds = %5979
  %5983 = load ptr, ptr %5981, align 8, !tbaa !58
  %5984 = getelementptr inbounds ptr, ptr %5983, i64 4
  %5985 = load ptr, ptr %5984, align 8
  invoke void %5985(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %699, ptr noundef nonnull align 8 dereferenceable(26) %5981)
          to label %5986 unwind label %6028

5986:                                             ; preds = %5982
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %700, ptr align 4 %697, i64 4, i1 false), !tbaa.struct !57
  %5987 = getelementptr inbounds %"class.JPH::Color", ptr %700, i32 0, i32 0
  %5988 = getelementptr inbounds %union.anon.62, ptr %5987, i32 0, i32 0
  %5989 = load i32, ptr %5988, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %5977, ptr noundef nonnull align 16 dereferenceable(64) %698, ptr noundef nonnull align 16 dereferenceable(32) %699, i32 %5989)
          to label %5990 unwind label %6028

5990:                                             ; preds = %5986
  call void @llvm.lifetime.end.p0(i64 32, ptr %699) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %698) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %697) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %696) #12
  br label %6035

5991:                                             ; preds = %5883, %5873
  %5992 = landingpad { ptr, i32 }
          cleanup
  %5993 = extractvalue { ptr, i32 } %5992, 0
  store ptr %5993, ptr %29, align 8
  %5994 = extractvalue { ptr, i32 } %5992, 1
  store i32 %5994, ptr %30, align 4
  br label %6042

5995:                                             ; preds = %5906
  %5996 = landingpad { ptr, i32 }
          cleanup
  %5997 = extractvalue { ptr, i32 } %5996, 0
  store ptr %5997, ptr %29, align 8
  %5998 = extractvalue { ptr, i32 } %5996, 1
  store i32 %5998, ptr %30, align 4
  br label %6041

5999:                                             ; preds = %5924
  %6000 = landingpad { ptr, i32 }
          cleanup
  %6001 = extractvalue { ptr, i32 } %6000, 0
  store ptr %6001, ptr %29, align 8
  %6002 = extractvalue { ptr, i32 } %6000, 1
  store i32 %6002, ptr %30, align 4
  br label %6007

6003:                                             ; preds = %5948, %5933, %5931
  %6004 = landingpad { ptr, i32 }
          cleanup
  %6005 = extractvalue { ptr, i32 } %6004, 0
  store ptr %6005, ptr %29, align 8
  %6006 = extractvalue { ptr, i32 } %6004, 1
  store i32 %6006, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %691) #12
  br label %6007

6007:                                             ; preds = %6003, %5999
  call void @llvm.lifetime.end.p0(i64 64, ptr %689) #12
  br label %6041

6008:                                             ; preds = %5960, %5952
  %6009 = landingpad { ptr, i32 }
          cleanup
  %6010 = extractvalue { ptr, i32 } %6009, 0
  store ptr %6010, ptr %29, align 8
  %6011 = extractvalue { ptr, i32 } %6009, 1
  store i32 %6011, ptr %30, align 4
  br label %6040

6012:                                             ; preds = %5963
  %6013 = landingpad { ptr, i32 }
          cleanup
  %6014 = extractvalue { ptr, i32 } %6013, 0
  store ptr %6014, ptr %29, align 8
  %6015 = extractvalue { ptr, i32 } %6013, 1
  store i32 %6015, ptr %30, align 4
  br label %6039

6016:                                             ; preds = %5966
  %6017 = landingpad { ptr, i32 }
          cleanup
  %6018 = extractvalue { ptr, i32 } %6017, 0
  store ptr %6018, ptr %29, align 8
  %6019 = extractvalue { ptr, i32 } %6017, 1
  store i32 %6019, ptr %30, align 4
  br label %6034

6020:                                             ; preds = %5968
  %6021 = landingpad { ptr, i32 }
          cleanup
  %6022 = extractvalue { ptr, i32 } %6021, 0
  store ptr %6022, ptr %29, align 8
  %6023 = extractvalue { ptr, i32 } %6021, 1
  store i32 %6023, ptr %30, align 4
  br label %6033

6024:                                             ; preds = %5974
  %6025 = landingpad { ptr, i32 }
          cleanup
  %6026 = extractvalue { ptr, i32 } %6025, 0
  store ptr %6026, ptr %29, align 8
  %6027 = extractvalue { ptr, i32 } %6025, 1
  store i32 %6027, ptr %30, align 4
  br label %6032

6028:                                             ; preds = %5986, %5982, %5979
  %6029 = landingpad { ptr, i32 }
          cleanup
  %6030 = extractvalue { ptr, i32 } %6029, 0
  store ptr %6030, ptr %29, align 8
  %6031 = extractvalue { ptr, i32 } %6029, 1
  store i32 %6031, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %699) #12
  br label %6032

6032:                                             ; preds = %6028, %6024
  call void @llvm.lifetime.end.p0(i64 64, ptr %698) #12
  br label %6033

6033:                                             ; preds = %6032, %6020
  call void @llvm.lifetime.end.p0(i64 4, ptr %697) #12
  br label %6034

6034:                                             ; preds = %6033, %6016
  call void @llvm.lifetime.end.p0(i64 8, ptr %696) #12
  br label %6039

6035:                                             ; preds = %5990, %5965
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %695) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %695) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %685) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %682) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %681) #12
  br label %6036

6036:                                             ; preds = %6035
  %6037 = load ptr, ptr %679, align 8, !tbaa !5
  %6038 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %6037, i32 1
  store ptr %6038, ptr %679, align 8, !tbaa !5
  br label %5852

6039:                                             ; preds = %6034, %6012
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %695) #12
  br label %6040

6040:                                             ; preds = %6039, %6008
  call void @llvm.lifetime.end.p0(i64 24, ptr %695) #12
  br label %6041

6041:                                             ; preds = %6040, %6007, %5995
  call void @llvm.lifetime.end.p0(i64 4, ptr %685) #12
  br label %6042

6042:                                             ; preds = %6041, %5991
  call void @llvm.lifetime.end.p0(i64 16, ptr %682) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %681) #12
  br label %6043

6043:                                             ; preds = %6042, %5869
  call void @llvm.lifetime.end.p0(i64 8, ptr %680) #12
  br label %6044

6044:                                             ; preds = %6043, %5865
  call void @llvm.lifetime.end.p0(i64 8, ptr %679) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %678) #12
  br label %6108

6045:                                             ; preds = %5856
  %6046 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %6047 = load ptr, ptr %6046, align 16, !tbaa !56
  %6048 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.201", ptr %673, i32 0, i32 1
  %6049 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %6048)
          to label %6050 unwind label %6104

6050:                                             ; preds = %6045
  %6051 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %6049, i32 0, i32 1
  %6052 = load float, ptr %6051, align 4, !tbaa !52
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %703, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %6053 = getelementptr inbounds { double, double }, ptr %703, i32 0, i32 0
  %6054 = load double, ptr %6053, align 16
  %6055 = getelementptr inbounds { double, double }, ptr %703, i32 0, i32 1
  %6056 = load double, ptr %6055, align 8
  %6057 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %6052, double %6054, double %6056)
          to label %6058 unwind label %6104

6058:                                             ; preds = %6050
  %6059 = getelementptr inbounds %"class.JPH::Vec3", ptr %702, i32 0, i32 0
  %6060 = getelementptr inbounds %union.anon, ptr %6059, i32 0, i32 0
  %6061 = getelementptr inbounds { double, double }, ptr %6060, i32 0, i32 0
  %6062 = extractvalue { double, double } %6057, 0
  store double %6062, ptr %6061, align 16
  %6063 = getelementptr inbounds { double, double }, ptr %6060, i32 0, i32 1
  %6064 = extractvalue { double, double } %6057, 1
  store double %6064, ptr %6063, align 8
  %6065 = getelementptr inbounds { double, double }, ptr %702, i32 0, i32 0
  %6066 = load double, ptr %6065, align 16
  %6067 = getelementptr inbounds { double, double }, ptr %702, i32 0, i32 1
  %6068 = load double, ptr %6067, align 8
  %6069 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %6066, double %6068)
          to label %6070 unwind label %6104

6070:                                             ; preds = %6058
  %6071 = getelementptr inbounds %"class.JPH::Vec3", ptr %701, i32 0, i32 0
  %6072 = getelementptr inbounds %union.anon, ptr %6071, i32 0, i32 0
  %6073 = getelementptr inbounds { double, double }, ptr %6072, i32 0, i32 0
  %6074 = extractvalue { double, double } %6069, 0
  store double %6074, ptr %6073, align 16
  %6075 = getelementptr inbounds { double, double }, ptr %6072, i32 0, i32 1
  %6076 = extractvalue { double, double } %6069, 1
  store double %6076, ptr %6075, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %705, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %6077 = getelementptr inbounds { double, double }, ptr %705, i32 0, i32 0
  %6078 = load double, ptr %6077, align 16
  %6079 = getelementptr inbounds { double, double }, ptr %705, i32 0, i32 1
  %6080 = load double, ptr %6079, align 8
  %6081 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %6078, double %6080)
          to label %6082 unwind label %6104

6082:                                             ; preds = %6070
  %6083 = getelementptr inbounds %"class.JPH::Vec3", ptr %704, i32 0, i32 0
  %6084 = getelementptr inbounds %union.anon, ptr %6083, i32 0, i32 0
  %6085 = getelementptr inbounds { double, double }, ptr %6084, i32 0, i32 0
  %6086 = extractvalue { double, double } %6081, 0
  store double %6086, ptr %6085, align 16
  %6087 = getelementptr inbounds { double, double }, ptr %6084, i32 0, i32 1
  %6088 = extractvalue { double, double } %6081, 1
  store double %6088, ptr %6087, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %706, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %6089 = getelementptr inbounds { double, double }, ptr %701, i32 0, i32 0
  %6090 = load double, ptr %6089, align 16
  %6091 = getelementptr inbounds { double, double }, ptr %701, i32 0, i32 1
  %6092 = load double, ptr %6091, align 8
  %6093 = getelementptr inbounds { double, double }, ptr %704, i32 0, i32 0
  %6094 = load double, ptr %6093, align 16
  %6095 = getelementptr inbounds { double, double }, ptr %704, i32 0, i32 1
  %6096 = load double, ptr %6095, align 8
  %6097 = getelementptr inbounds %"class.JPH::Color", ptr %706, i32 0, i32 0
  %6098 = getelementptr inbounds %union.anon.62, ptr %6097, i32 0, i32 0
  %6099 = load i32, ptr %6098, align 4
  %6100 = load ptr, ptr %6047, align 8, !tbaa !58
  %6101 = getelementptr inbounds ptr, ptr %6100, i64 2
  %6102 = load ptr, ptr %6101, align 8
  invoke void %6102(ptr noundef nonnull align 8 dereferenceable(320) %6047, double %6090, double %6092, double %6094, double %6096, i32 %6099)
          to label %6103 unwind label %6104

6103:                                             ; preds = %6082
  call void @llvm.lifetime.end.p0(i64 1, ptr %677) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %676) #12
  br label %6188

6104:                                             ; preds = %6082, %6070, %6058, %6050, %6045
  %6105 = landingpad { ptr, i32 }
          cleanup
  %6106 = extractvalue { ptr, i32 } %6105, 0
  store ptr %6106, ptr %29, align 8
  %6107 = extractvalue { ptr, i32 } %6105, 1
  store i32 %6107, ptr %30, align 4
  br label %6108

6108:                                             ; preds = %6104, %6044
  call void @llvm.lifetime.end.p0(i64 1, ptr %677) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %676) #12
  br label %6189

6109:                                             ; preds = %5839
  %6110 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %6111 = load ptr, ptr %6110, align 16, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %707, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %709, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %6112 = getelementptr inbounds { double, double }, ptr %709, i32 0, i32 0
  %6113 = load double, ptr %6112, align 16
  %6114 = getelementptr inbounds { double, double }, ptr %709, i32 0, i32 1
  %6115 = load double, ptr %6114, align 8
  %6116 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %6113, double %6115)
          to label %6117 unwind label %5857

6117:                                             ; preds = %6109
  %6118 = getelementptr inbounds %"class.JPH::Vec3", ptr %708, i32 0, i32 0
  %6119 = getelementptr inbounds %union.anon, ptr %6118, i32 0, i32 0
  %6120 = getelementptr inbounds { double, double }, ptr %6119, i32 0, i32 0
  %6121 = extractvalue { double, double } %6116, 0
  store double %6121, ptr %6120, align 16
  %6122 = getelementptr inbounds { double, double }, ptr %6119, i32 0, i32 1
  %6123 = extractvalue { double, double } %6116, 1
  store double %6123, ptr %6122, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %710, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %6124 = getelementptr inbounds { double, double }, ptr %707, i32 0, i32 0
  %6125 = load double, ptr %6124, align 16
  %6126 = getelementptr inbounds { double, double }, ptr %707, i32 0, i32 1
  %6127 = load double, ptr %6126, align 8
  %6128 = getelementptr inbounds { double, double }, ptr %708, i32 0, i32 0
  %6129 = load double, ptr %6128, align 16
  %6130 = getelementptr inbounds { double, double }, ptr %708, i32 0, i32 1
  %6131 = load double, ptr %6130, align 8
  %6132 = getelementptr inbounds %"class.JPH::Color", ptr %710, i32 0, i32 0
  %6133 = getelementptr inbounds %union.anon.62, ptr %6132, i32 0, i32 0
  %6134 = load i32, ptr %6133, align 4
  %6135 = load ptr, ptr %6111, align 8, !tbaa !58
  %6136 = getelementptr inbounds ptr, ptr %6135, i64 2
  %6137 = load ptr, ptr %6136, align 8
  invoke void %6137(ptr noundef nonnull align 8 dereferenceable(320) %6111, double %6125, double %6127, double %6129, double %6131, i32 %6134)
          to label %6138 unwind label %5857

6138:                                             ; preds = %6117
  %6139 = getelementptr inbounds %class.Application, ptr %718, i32 0, i32 4
  %6140 = load ptr, ptr %6139, align 16, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 64, ptr %711) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %713, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %6141 = getelementptr inbounds { double, double }, ptr %713, i32 0, i32 0
  %6142 = load double, ptr %6141, align 16
  %6143 = getelementptr inbounds { double, double }, ptr %713, i32 0, i32 1
  %6144 = load double, ptr %6143, align 8
  %6145 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %6142, double %6144)
          to label %6146 unwind label %6179

6146:                                             ; preds = %6138
  %6147 = getelementptr inbounds %"class.JPH::Vec3", ptr %712, i32 0, i32 0
  %6148 = getelementptr inbounds %union.anon, ptr %6147, i32 0, i32 0
  %6149 = getelementptr inbounds { double, double }, ptr %6148, i32 0, i32 0
  %6150 = extractvalue { double, double } %6145, 0
  store double %6150, ptr %6149, align 16
  %6151 = getelementptr inbounds { double, double }, ptr %6148, i32 0, i32 1
  %6152 = extractvalue { double, double } %6145, 1
  store double %6152, ptr %6151, align 8
  %6153 = getelementptr inbounds { double, double }, ptr %712, i32 0, i32 0
  %6154 = load double, ptr %6153, align 16
  %6155 = getelementptr inbounds { double, double }, ptr %712, i32 0, i32 1
  %6156 = load double, ptr %6155, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %711, double %6154, double %6156)
          to label %6157 unwind label %6179

6157:                                             ; preds = %6146
  call void @llvm.lifetime.start.p0(i64 32, ptr %714) #12
  %6158 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %665)
          to label %6159 unwind label %6183

6159:                                             ; preds = %6157
  %6160 = getelementptr inbounds %"class.JPH::Vec3", ptr %715, i32 0, i32 0
  %6161 = getelementptr inbounds %union.anon, ptr %6160, i32 0, i32 0
  %6162 = getelementptr inbounds { double, double }, ptr %6161, i32 0, i32 0
  %6163 = extractvalue { double, double } %6158, 0
  store double %6163, ptr %6162, align 16
  %6164 = getelementptr inbounds { double, double }, ptr %6161, i32 0, i32 1
  %6165 = extractvalue { double, double } %6158, 1
  store double %6165, ptr %6164, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %716, ptr align 16 %665, i64 16, i1 false), !tbaa.struct !11
  %6166 = getelementptr inbounds { double, double }, ptr %715, i32 0, i32 0
  %6167 = load double, ptr %6166, align 16
  %6168 = getelementptr inbounds { double, double }, ptr %715, i32 0, i32 1
  %6169 = load double, ptr %6168, align 8
  %6170 = getelementptr inbounds { double, double }, ptr %716, i32 0, i32 0
  %6171 = load double, ptr %6170, align 16
  %6172 = getelementptr inbounds { double, double }, ptr %716, i32 0, i32 1
  %6173 = load double, ptr %6172, align 8
  invoke void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %714, double %6167, double %6169, double %6171, double %6173)
          to label %6174 unwind label %6183

6174:                                             ; preds = %6159
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %717, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !57
  %6175 = getelementptr inbounds %"class.JPH::Color", ptr %717, i32 0, i32 0
  %6176 = getelementptr inbounds %union.anon.62, ptr %6175, i32 0, i32 0
  %6177 = load i32, ptr %6176, align 4
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %6140, ptr noundef nonnull align 16 dereferenceable(64) %711, ptr noundef nonnull align 16 dereferenceable(32) %714, i32 %6177)
          to label %6178 unwind label %6183

6178:                                             ; preds = %6174
  call void @llvm.lifetime.end.p0(i64 32, ptr %714) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %711) #12
  br label %6188

6179:                                             ; preds = %6146, %6138
  %6180 = landingpad { ptr, i32 }
          cleanup
  %6181 = extractvalue { ptr, i32 } %6180, 0
  store ptr %6181, ptr %29, align 8
  %6182 = extractvalue { ptr, i32 } %6180, 1
  store i32 %6182, ptr %30, align 4
  br label %6187

6183:                                             ; preds = %6174, %6159, %6157
  %6184 = landingpad { ptr, i32 }
          cleanup
  %6185 = extractvalue { ptr, i32 } %6184, 0
  store ptr %6185, ptr %29, align 8
  %6186 = extractvalue { ptr, i32 } %6184, 1
  store i32 %6186, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %714) #12
  br label %6187

6187:                                             ; preds = %6183, %6179
  call void @llvm.lifetime.end.p0(i64 64, ptr %711) #12
  br label %6189

6188:                                             ; preds = %6178, %6103
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %673) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %673) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %672) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %667) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %665) #12
  br label %6190

6189:                                             ; preds = %6187, %6108, %5861, %5857
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %673) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %673) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %672) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %667) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %665) #12
  br label %6193

6190:                                             ; preds = %6188, %5781, %5555, %5395, %5230, %5036, %4719, %4342, %4159, %3716, %2883, %2190, %2026, %1294, %865, %5
  %6191 = load i8, ptr %21, align 1, !tbaa !16, !range !54, !noundef !55
  %6192 = trunc i8 %6191 to i1
  store i32 1, ptr %493, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #12
  ret i1 %6192

6193:                                             ; preds = %6189, %5782, %5556, %5396, %5231, %5037, %4720, %4343, %4161, %3720, %2888, %2191, %2027, %1295, %828
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #12
  br label %6194

6194:                                             ; preds = %6193
  %6195 = load ptr, ptr %29, align 8
  %6196 = load i32, ptr %30, align 4
  %6197 = insertvalue { ptr, i32 } poison, ptr %6195, 0
  %6198 = insertvalue { ptr, i32 } %6197, i32 %6196, 1
  resume { ptr, i32 } %6198

6199:                                             ; preds = %4696
  unreachable
}

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

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

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

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

declare noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9), i8) unnamed_addr #2 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32), float noundef) #9 align 2

declare void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320), double, double, i32, float noundef) #4

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320), double, double, double, double, i32, float noundef) #4

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EEC2Ev(ptr noundef nonnull align 16 dereferenceable(528)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(4), double, double, double, double, ptr noundef nonnull align 16 dereferenceable(528)) #6 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(528), i32, float noundef) #6 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528)) unnamed_addr #2 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(37)) unnamed_addr #9 align 2

declare void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #9 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(12)) #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(37)) unnamed_addr #9 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53)) #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) #6 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) #9 align 2

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

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

declare void @_ZNK3JPH16NarrowPhaseQuery12CollidePointENS_4Vec3ERNS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #4

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

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

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

declare void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(32), i32) #4

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double, float noundef) #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(64)) #10 align 2

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

declare void @_ZNK3JPH16NarrowPhaseQuery12CollideShapeEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(37), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #4

declare void @_ZNK3JPH16NarrowPhaseQuery35CollideShapeWithInternalEdgeRemovalEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(37), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #4

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1153)) #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(1120)) #9 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1153)) #7 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53)) #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) #6 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE19sFromWorldTransformEPKNS_5ShapeES1_RKS2_S1_(ptr dead_on_unwind noalias writable sret(%"struct.JPH::RShapeCast") align 16, ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), double, double) #9 align 2

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

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

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

declare void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1169)) #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(1125)) #9 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1169)) #7 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53)) #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) #6 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(1125) ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144), float noundef) #9 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(1125) ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) #9 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrIKNS_4Vec3EEC2EPS2_i(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrIKfEC2EPS1_i(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrINS_5PlaneEEC2EPS1_i(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrIfEC2EPfi(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrIiEC2EPii(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH29CollideSoftBodyVertexIteratorC2ERKNS_10StridedPtrIKNS_4Vec3EEERKNS1_IKfEERKNS1_INS_5PlaneEEERKNS1_IfEERKNS1_IiEE(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #2 align 2

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

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

declare void @_ZNK3JPH16NarrowPhaseQuery24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #4

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZNK3JPH5Mat447ToMat44Ev(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(64)) #11 align 2

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

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

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

declare void @_ZNK3JPH16TransformedShape12CollideShapeEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(37), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(12)) #4

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16), double, double) #6 align 2

declare void @_ZN3JPH13DebugRenderer9DrawPlaneENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320), double, double, double, double, i32, float noundef) #4

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4420sRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double, double, double) #1 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double) #1 align 2

declare void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(32), i32) #4

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

declare void @_ZNK3JPH16TransformedShape17GetTrianglesStartERNS_5Shape19GetTrianglesContextERKNS_5AABoxENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(4288), ptr noundef nonnull align 16 dereferenceable(32), double, double) #4

declare noundef i32 @_ZNK3JPH16TransformedShape16GetTrianglesNextERNS_5Shape19GetTrianglesContextEiPNS_6Float3EPPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(4288), i32 noundef, ptr noundef, ptr noundef) #4

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #8 align 2

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

declare void @_ZN3JPH13DebugRenderer16DrawWireTriangleENS_4Vec3ES1_S1_NS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320), double, double, double, double, double, double, i32) #4

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) #6 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) #9 align 2

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

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

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

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

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

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

declare void @_ZN3JPH13DebugRenderer14DrawWireSphereENS_4Vec3EfNS_5ColorEi(ptr noundef nonnull align 8 dereferenceable(320), double, double, float noundef, i32, i32 noundef) #4

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

declare void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_11OrientedBoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(80), i32) #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) #6 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{i64 0, i64 16, !12}
!12 = !{!7, !7, i64 0}
!13 = !{i64 0, i64 4, !14}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"bool", !7, i64 0}
!18 = !{!19, !40, i64 552}
!19 = !{!"_ZTS10SamplesApp", !20, i64 0, !15, i64 272, !10, i64 276, !15, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !29, i64 312, !31, i64 328, !33, i64 336, !6, i64 344, !6, i64 352, !35, i64 360, !36, i64 448, !6, i64 480, !6, i64 488, !6, i64 496, !15, i64 504, !17, i64 508, !10, i64 512, !17, i64 516, !17, i64 517, !17, i64 518, !17, i64 519, !38, i64 520, !39, i64 544, !15, i64 548, !40, i64 552, !41, i64 556, !17, i64 560, !22, i64 576, !42, i64 592, !42, i64 593, !43, i64 594, !44, i64 595, !10, i64 596, !17, i64 600, !17, i64 601, !17, i64 602, !17, i64 603, !15, i64 604, !17, i64 608, !45, i64 612, !10, i64 616, !46, i64 620, !10, i64 624, !10, i64 628, !17, i64 632, !22, i64 640, !17, i64 656, !6, i64 664, !47, i64 672, !48, i64 680, !15, i64 688, !10, i64 692, !10, i64 696, !15, i64 700, !49, i64 704}
!20 = !{!"_ZTS11Application", !21, i64 16, !21, i64 80, !6, i64 144, !6, i64 152, !6, i64 160, !23, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !24, i64 208, !27, i64 240, !17, i64 248, !17, i64 249, !17, i64 250, !17, i64 251, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !15, i64 268}
!21 = !{!"_ZTS11CameraState", !22, i64 0, !22, i64 16, !22, i64 32, !10, i64 48}
!22 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!23 = !{!"_ZTSN3JPH8RefConstI4FontEE", !6, i64 0}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !25, i64 0, !26, i64 8, !7, i64 16}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !6, i64 0}
!26 = !{!"long", !7, i64 0}
!27 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !28, i64 0}
!28 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !26, i64 0}
!29 = !{!"_ZTS20BPLayerInterfaceImpl", !30, i64 0, !7, i64 8}
!30 = !{!"_ZTSN3JPH24BroadPhaseLayerInterfaceE"}
!31 = !{!"_ZTS33ObjectVsBroadPhaseLayerFilterImpl", !32, i64 0}
!32 = !{!"_ZTSN3JPH29ObjectVsBroadPhaseLayerFilterE"}
!33 = !{!"_ZTS25ObjectLayerPairFilterImpl", !34, i64 0}
!34 = !{!"_ZTSN3JPH21ObjectLayerPairFilterE"}
!35 = !{!"_ZTSN3JPH15PhysicsSettingsE", !15, i64 0, !15, i64 4, !15, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !15, i64 56, !15, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !17, i64 76, !17, i64 77, !17, i64 78, !17, i64 79, !17, i64 80, !17, i64 81, !17, i64 82}
!36 = !{!"_ZTSN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEE", !37, i64 0}
!37 = !{!"_ZTSN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EEE", !6, i64 0, !6, i64 8, !15, i64 16, !15, i64 20, !15, i64 24}
!38 = !{!"_ZTSN3JPH5ArrayIN10SamplesApp13PlayBackFrameENS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!39 = !{!"_ZTSN10SamplesApp13EPlaybackModeE", !7, i64 0}
!40 = !{!"_ZTSN10SamplesApp10EProbeModeE", !7, i64 0}
!41 = !{!"_ZTSN10SamplesApp11EProbeShapeE", !7, i64 0}
!42 = !{!"_ZTSN3JPH13EBackFaceModeE", !7, i64 0}
!43 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !7, i64 0}
!44 = !{!"_ZTSN3JPH17ECollectFacesModeE", !7, i64 0}
!45 = !{!"_ZTSN10SamplesApp17EShootObjectShapeE", !7, i64 0}
!46 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!47 = !{!"_ZTSN3JPH6BodyIDE", !15, i64 0}
!48 = !{!"_ZTSN3JPH3RefINS_10ConstraintEEE", !6, i64 0}
!49 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000EEEE", !26, i64 0}
!50 = !{!19, !6, i64 344}
!51 = !{i64 0, i64 1, !12}
!52 = !{!53, !10, i64 4}
!53 = !{!"_ZTSN3JPH20BroadPhaseCastResultE", !47, i64 0, !10, i64 4}
!54 = !{i8 0, i8 2}
!55 = !{}
!56 = !{!20, !6, i64 144}
!57 = !{i64 0, i64 4, !12}
!58 = !{!59, !59, i64 0}
!59 = !{!"vtable pointer", !8, i64 0}
!60 = !{!19, !17, i64 603}
!61 = !{!19, !42, i64 592}
!62 = !{!63, !42, i64 0}
!63 = !{!"_ZTSN3JPH15RayCastSettingsE", !42, i64 0, !42, i64 1, !17, i64 2}
!64 = !{!19, !42, i64 593}
!65 = !{!63, !42, i64 1}
!66 = !{!19, !17, i64 600}
!67 = !{!63, !17, i64 2}
!68 = !{!19, !15, i64 604}
!69 = !{!19, !17, i64 608}
!70 = !{!19, !43, i64 594}
!71 = !{!72, !43, i64 0}
!72 = !{!"_ZTSN3JPH19CollideSettingsBaseE", !43, i64 0, !44, i64 1, !10, i64 4, !10, i64 8, !22, i64 16}
!73 = !{!74, !42, i64 36}
!74 = !{!"_ZTSN3JPH20CollideShapeSettingsE", !72, i64 0, !10, i64 32, !42, i64 36}
!75 = !{!19, !44, i64 595}
!76 = !{!72, !44, i64 1}
!77 = !{!19, !10, i64 596}
!78 = !{!74, !10, i64 32}
!79 = !{!80, !10, i64 48}
!80 = !{!"_ZTSN3JPH18CollideShapeResultE", !22, i64 0, !22, i64 16, !22, i64 32, !10, i64 48, !81, i64 52, !81, i64 56, !47, i64 60, !82, i64 64, !82, i64 592}
!81 = !{!"_ZTSN3JPH10SubShapeIDE", !15, i64 0}
!82 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj32EEE", !15, i64 0, !7, i64 16}
!83 = !{!19, !17, i64 602}
!84 = !{!85, !17, i64 34}
!85 = !{!"_ZTSN3JPH17ShapeCastSettingsE", !72, i64 0, !42, i64 32, !42, i64 33, !17, i64 34, !17, i64 35}
!86 = !{!85, !42, i64 32}
!87 = !{!85, !42, i64 33}
!88 = !{!19, !17, i64 601}
!89 = !{!85, !17, i64 35}
!90 = !{!91, !10, i64 1120}
!91 = !{!"_ZTSN3JPH15ShapeCastResultE", !80, i64 0, !10, i64 1120, !17, i64 1124}
!92 = !{!93, !10, i64 80}
!93 = !{!"_ZTSN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEE", !94, i64 0, !80, i64 32, !17, i64 1152}
!94 = !{!"_ZTSN3JPH18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEE", !10, i64 8, !6, i64 16}
!95 = distinct !{!95, !96}
!96 = !{!"llvm.loop.mustprogress"}
!97 = distinct !{!97, !96}
!98 = !{i64 0, i64 16, !12, i64 16, i64 16, !12}


; 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::BroadPhaseLayer" = type { i8 }
%"class.JPH::Color" = type { %union.anon.62 }
%union.anon.62 = type { i32 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.0 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.0 = type { i64, [8 x i8] }
%"class.JPH::RefConst.74" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::BodyID" = type { i32 }
%"struct.JPH::RRayCast" = type { %"struct.JPH::RayCastT" }
%"struct.JPH::RayCastT" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::RayCastResult" = type { %"class.JPH::BroadPhaseCastResult", %"class.JPH::SubShapeID" }
%"class.JPH::BroadPhaseCastResult" = type { %"class.JPH::BodyID", float }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::SpecifiedBroadPhaseLayerFilter" = type <{ %"class.JPH::BroadPhaseLayerFilter", %"class.JPH::BroadPhaseLayer", [7 x i8] }>
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::SpecifiedObjectLayerFilter" = type <{ %"class.JPH::ObjectLayerFilter", i16, [6 x i8] }>
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::BodyFilter" = type { ptr }
%"class.JPH::BodyLockRead" = type { %"class.JPH::BodyLockBase" }
%"class.JPH::BodyLockBase" = type { ptr, ptr, ptr }
%"class.std::basic_string_view" = type { i64, ptr }
%"class.JPH::StaticArray.149" = 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.JPH::TransformedShape" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::RefConst.74", %"class.JPH::Float3", %"class.JPH::BodyID", %"class.JPH::SubShapeIDCreator" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.55 }
%union.anon.55 = type { <4 x float> }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::SubShapeIDCreator" = type { %"class.JPH::SubShapeID", i32 }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RayCastSettings" = type { i8, i8, i8 }
%"class.JPH::Array.150" = type { i64, i64, ptr }
%"class.JPH::AnyHitCollisionCollector" = type <{ %"class.JPH::CollisionCollector", %"class.JPH::RayCastResult", i8, [3 x i8] }>
%"class.JPH::CollisionCollector" = type { ptr, float, ptr }
%"class.JPH::ShapeFilter" = type <{ ptr, %"class.JPH::BodyID", [4 x i8] }>
%"class.JPH::ClosestHitCollisionCollector" = type <{ %"class.JPH::CollisionCollector", %"class.JPH::RayCastResult", i8, [3 x i8] }>
%"class.JPH::ClosestHitPerBodyCollisionCollector" = type <{ %"class.JPH::CollisionCollector", %"class.JPH::Array.150", float, i8, [3 x i8] }>
%"class.JPH::AllHitCollisionCollector" = type { %"class.JPH::CollisionCollector", %"class.JPH::Array.150" }
%"class.JPH::AllHitCollisionCollector.153" = type { %"class.JPH::CollisionCollector.154", %"class.JPH::Array.155" }
%"class.JPH::CollisionCollector.154" = type { ptr, float, ptr }
%"class.JPH::Array.155" = type { i64, i64, ptr }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::CollideShapeSettings" = type <{ %"class.JPH::CollideSettingsBase", float, i8, [11 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::Array.158" = type { i64, i64, ptr }
%"class.JPH::AnyHitCollisionCollector.161" = type <{ %"class.JPH::CollisionCollector.162", [8 x i8], %"class.JPH::CollideShapeResult", i8, [15 x i8] }>
%"class.JPH::CollisionCollector.162" = type { ptr, float, ptr }
%"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.149", %"class.JPH::StaticArray.149" }
%"class.JPH::ClosestHitCollisionCollector.164" = type <{ %"class.JPH::CollisionCollector.162", [8 x i8], %"class.JPH::CollideShapeResult", i8, [15 x i8] }>
%"class.JPH::ClosestHitPerBodyCollisionCollector.166" = type <{ %"class.JPH::CollisionCollector.162", %"class.JPH::Array.158", float, i8, [3 x i8] }>
%"class.JPH::AllHitCollisionCollector.168" = type { %"class.JPH::CollisionCollector.162", %"class.JPH::Array.158" }
%"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::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::Array.169" = type { i64, i64, ptr }
%"class.JPH::AnyHitCollisionCollector.172" = type <{ %"class.JPH::CollisionCollector.173", [8 x i8], %"class.JPH::ShapeCastResult", i8, [15 x i8] }>
%"class.JPH::CollisionCollector.173" = type { ptr, float, ptr }
%"class.JPH::ShapeCastResult" = type <{ %"class.JPH::CollideShapeResult", float, i8, [11 x i8] }>
%"class.JPH::ClosestHitCollisionCollector.175" = type <{ %"class.JPH::CollisionCollector.173", [8 x i8], %"class.JPH::ShapeCastResult", i8, [15 x i8] }>
%"class.JPH::ClosestHitPerBodyCollisionCollector.177" = type <{ %"class.JPH::CollisionCollector.173", %"class.JPH::Array.169", float, i8, [3 x i8] }>
%"class.JPH::AllHitCollisionCollector.179" = type { %"class.JPH::CollisionCollector.173", %"class.JPH::Array.169" }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }
%"class.JPH::CollideSoftBodyVertexIterator" = type { %"class.JPH::StridedPtr", %"class.JPH::StridedPtr.180", %"class.JPH::StridedPtr.182", %"class.JPH::StridedPtr.184", %"class.JPH::StridedPtr.186" }
%"class.JPH::StridedPtr" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::StridedPtr.180" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::StridedPtr.182" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::StridedPtr.184" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::StridedPtr.186" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::AllHitCollisionCollector.188" = type { %"class.JPH::CollisionCollector.189", %"class.JPH::Array.190" }
%"class.JPH::CollisionCollector.189" = type { ptr, float, ptr }
%"class.JPH::Array.190" = type { i64, i64, ptr }
%"class.JPH::SphereShape" = type { %"class.JPH::ConvexShape.base", float }
%"class.JPH::ConvexShape.base" = type <{ %"class.JPH::Shape.base", [6 x i8], %"class.JPH::RefConst.76", float }>
%"class.JPH::Shape.base" = type <{ ptr, %"class.JPH::RefTarget.75", [4 x i8], i64, i8, i8 }>
%"class.JPH::RefTarget.75" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.76" = type { ptr }
%"struct.JPH::Shape::GetTrianglesContext" = type { [4288 x i8] }
%"struct.JPH::RayCast" = type { %"struct.JPH::RayCastT.193" }
%"struct.JPH::RayCastT.193" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::AllHitCollisionCollector.194" = type { %"class.JPH::CollisionCollector.195", %"class.JPH::Array.196" }
%"class.JPH::CollisionCollector.195" = type { ptr, float, ptr }
%"class.JPH::Array.196" = type { i64, i64, ptr }
%"class.JPH::AllHitCollisionCollector.199" = type { %"class.JPH::CollisionCollector.200", %"class.JPH::Array.43" }
%"class.JPH::CollisionCollector.200" = type { ptr, float, ptr }
%"class.JPH::Array.43" = type { i64, i64, ptr }
%"class.JPH::OrientedBox" = type { %"class.JPH::Mat44", %"class.JPH::Vec3" }
%"struct.JPH::AABoxCast" = type { %"class.JPH::AABox", %"class.JPH::Vec3" }
%"class.JPH::AllHitCollisionCollector.201" = type { %"class.JPH::CollisionCollector.202", %"class.JPH::Array.196" }
%"class.JPH::CollisionCollector.202" = type { ptr, float, ptr }

@_ZN16BroadPhaseLayersL6MOVINGE = external hidden local_unnamed_addr constant %"class.JPH::BroadPhaseLayer", align 1
@_ZN3JPH5Color7sYellowE = external local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPH5Color4sRedE = external local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPH5Color7sOrangeE = external local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPH5Color6sWhiteE = external local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPH5Color5sGreyE = external local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPH5Color6sGreenE = external local_unnamed_addr global %"class.JPH::Color", align 4
@.str.150 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.151 = external hidden unnamed_addr constant [7 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

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

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

declare void @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ...) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10SamplesApp16CreateProbeShapeEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::RefConst.74") align 8, ptr noundef nonnull align 16 dereferenceable(712)) local_unnamed_addr #6 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN10SamplesApp9CastProbeEfRfRN3JPH4Vec3ERNS1_6BodyIDE(ptr noundef nonnull align 16 dereferenceable(712) %0, float noundef %1, ptr nocapture noundef nonnull writeonly align 4 dereferenceable(4) %2, ptr noundef nonnull align 16 dereferenceable(16) %3, ptr nocapture noundef nonnull writeonly align 4 dereferenceable(4) %4) local_unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::BodyID", align 4
  %9 = alloca %"struct.JPH::RRayCast", align 16
  %10 = alloca %"class.JPH::RayCastResult", align 4
  %11 = alloca %"class.JPH::SpecifiedBroadPhaseLayerFilter", align 8
  %12 = alloca %"class.JPH::SpecifiedObjectLayerFilter", align 8
  %13 = alloca %"class.JPH::BodyFilter", align 8
  %14 = alloca %"struct.JPH::RRayCast", align 16
  %15 = alloca %"class.JPH::RayCastResult", align 4
  %16 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %17 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %18 = alloca %"class.JPH::BodyFilter", align 8
  %19 = alloca %"class.JPH::BodyLockRead", align 8
  %20 = alloca %"class.std::basic_string_view", align 8
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::StaticArray.149", align 16
  %23 = alloca %"class.JPH::TransformedShape", align 16
  %24 = alloca %"class.JPH::Mat44", align 16
  %25 = alloca %"struct.JPH::RRayCast", align 16
  %26 = alloca %"class.JPH::RayCastSettings", align 1
  %27 = alloca %"class.JPH::Array.150", align 8
  %28 = alloca %"class.JPH::AnyHitCollisionCollector", align 8
  %29 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %30 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %31 = alloca %"class.JPH::BodyFilter", align 8
  %32 = alloca %"class.JPH::ShapeFilter", align 8
  %33 = alloca %"class.JPH::ClosestHitCollisionCollector", align 8
  %34 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %35 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %36 = alloca %"class.JPH::BodyFilter", align 8
  %37 = alloca %"class.JPH::ShapeFilter", align 8
  %38 = alloca %"class.JPH::ClosestHitPerBodyCollisionCollector", align 8
  %39 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %40 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %41 = alloca %"class.JPH::BodyFilter", align 8
  %42 = alloca %"class.JPH::ShapeFilter", align 8
  %43 = alloca %"class.JPH::AllHitCollisionCollector", align 8
  %44 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %45 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %46 = alloca %"class.JPH::BodyFilter", align 8
  %47 = alloca %"class.JPH::ShapeFilter", align 8
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::BodyLockRead", align 8
  %50 = alloca %"class.std::basic_string_view", align 8
  %51 = alloca %"class.JPH::Vec3", align 16
  %52 = alloca %"class.JPH::StaticArray.149", align 16
  %53 = alloca %"class.JPH::TransformedShape", align 16
  %54 = alloca %"class.JPH::Mat44", align 16
  %55 = alloca %"class.JPH::AllHitCollisionCollector.153", align 8
  %56 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %57 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %58 = alloca %"class.JPH::BodyFilter", align 8
  %59 = alloca %"class.JPH::ShapeFilter", align 8
  %60 = alloca %"class.JPH::BodyLockRead", align 8
  %61 = alloca %"class.JPH::Mat44", align 16
  %62 = alloca %"class.JPH::AABox", align 16
  %63 = alloca %"class.JPH::RefConst.74", align 8
  %64 = alloca %"class.JPH::Mat44", align 16
  %65 = alloca %"class.JPH::Mat44", align 16
  %66 = alloca %"class.JPH::Mat44", align 16
  %67 = alloca %"class.JPH::Mat44", align 16
  %68 = alloca %"class.JPH::Mat44", align 16
  %69 = alloca %"class.JPH::Mat44", align 16
  %70 = alloca %"class.JPH::Mat44", align 16
  %71 = alloca %"class.JPH::CollideShapeSettings", align 16
  %72 = alloca %"class.JPH::Array.158", align 8
  %73 = alloca %"class.JPH::AnyHitCollisionCollector.161", align 16
  %74 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %75 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %76 = alloca %"class.JPH::BodyFilter", align 8
  %77 = alloca %"class.JPH::ShapeFilter", align 8
  %78 = alloca %"class.JPH::ClosestHitCollisionCollector.164", align 16
  %79 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %80 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %81 = alloca %"class.JPH::BodyFilter", align 8
  %82 = alloca %"class.JPH::ShapeFilter", align 8
  %83 = alloca %"class.JPH::ClosestHitPerBodyCollisionCollector.166", align 8
  %84 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %85 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %86 = alloca %"class.JPH::BodyFilter", align 8
  %87 = alloca %"class.JPH::ShapeFilter", align 8
  %88 = alloca %"class.JPH::AllHitCollisionCollector.168", align 8
  %89 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %90 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %91 = alloca %"class.JPH::BodyFilter", align 8
  %92 = alloca %"class.JPH::ShapeFilter", align 8
  %93 = alloca %"class.JPH::BodyLockRead", align 8
  %94 = alloca %"class.JPH::Vec3", align 16
  %95 = alloca %"class.JPH::Vec3", align 16
  %96 = alloca %"class.std::basic_string_view", align 8
  %97 = alloca %"class.JPH::Mat44", align 16
  %98 = alloca %"class.JPH::Mat44", align 16
  %99 = alloca %"class.JPH::RefConst.74", align 8
  %100 = alloca %"class.JPH::Mat44", align 16
  %101 = alloca %"class.JPH::Mat44", align 16
  %102 = alloca %"class.JPH::Mat44", align 16
  %103 = alloca %"struct.JPH::RShapeCast", align 16
  %104 = alloca %"class.JPH::Mat44", align 16
  %105 = alloca %"class.JPH::Mat44", align 16
  %106 = alloca %"class.JPH::ShapeCastSettings", align 16
  %107 = alloca %"class.JPH::Array.169", align 8
  %108 = alloca %"class.JPH::AnyHitCollisionCollector.172", align 16
  %109 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %110 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %111 = alloca %"class.JPH::BodyFilter", align 8
  %112 = alloca %"class.JPH::ShapeFilter", align 8
  %113 = alloca %"class.JPH::ClosestHitCollisionCollector.175", align 16
  %114 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %115 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %116 = alloca %"class.JPH::BodyFilter", align 8
  %117 = alloca %"class.JPH::ShapeFilter", align 8
  %118 = alloca %"class.JPH::ClosestHitPerBodyCollisionCollector.177", align 8
  %119 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %120 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %121 = alloca %"class.JPH::BodyFilter", align 8
  %122 = alloca %"class.JPH::ShapeFilter", align 8
  %123 = alloca %"class.JPH::AllHitCollisionCollector.179", align 8
  %124 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %125 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %126 = alloca %"class.JPH::BodyFilter", align 8
  %127 = alloca %"class.JPH::ShapeFilter", align 8
  %128 = alloca %"class.JPH::BodyLockRead", align 8
  %129 = alloca %"class.JPH::Vec3", align 16
  %130 = alloca %"class.JPH::Vec3", align 16
  %131 = alloca %"class.std::basic_string_view", align 8
  %132 = alloca %"class.JPH::Mat44", align 16
  %133 = alloca %"class.JPH::Mat44", align 16
  %134 = alloca float, align 4
  %135 = alloca %"class.JPH::Vec3", align 16
  %136 = alloca %"class.JPH::Plane", align 16
  %137 = alloca float, align 4
  %138 = alloca i32, align 4
  %139 = alloca %"class.JPH::CollideSoftBodyVertexIterator", align 8
  %140 = alloca %"class.JPH::StridedPtr", align 8
  %141 = alloca %"class.JPH::StridedPtr.180", align 8
  %142 = alloca %"class.JPH::StridedPtr.182", align 8
  %143 = alloca %"class.JPH::StridedPtr.184", align 8
  %144 = alloca %"class.JPH::StridedPtr.186", align 8
  %145 = alloca %"class.JPH::AABox", align 16
  %146 = alloca %"class.JPH::AllHitCollisionCollector.188", align 8
  %147 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %148 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %149 = alloca %"class.JPH::BodyFilter", align 8
  %150 = alloca %"class.JPH::ShapeFilter", align 8
  %151 = alloca %"class.JPH::Mat44", align 16
  %152 = alloca %"class.JPH::Mat44", align 16
  %153 = alloca %"class.JPH::Mat44", align 16
  %154 = alloca %"class.JPH::Mat44", align 16
  %155 = alloca %"class.JPH::SphereShape", align 8
  %156 = alloca %"class.JPH::CollideShapeSettings", align 16
  %157 = alloca %"class.JPH::ClosestHitCollisionCollector.164", align 16
  %158 = alloca %"class.JPH::Mat44", align 16
  %159 = alloca %"class.JPH::ShapeFilter", align 8
  %160 = alloca %"class.JPH::Vec3", align 16
  %161 = alloca %"class.JPH::Vec3", align 16
  %162 = alloca %"class.std::basic_string_view", align 8
  %163 = alloca %"class.std::__cxx11::basic_string", align 8
  %164 = alloca %"class.std::basic_string_view", align 8
  %165 = alloca %"class.std::__cxx11::basic_string", align 8
  %166 = alloca %"class.JPH::Vec3", align 16
  %167 = alloca %"class.JPH::AABox", align 16
  %168 = alloca %"class.JPH::AllHitCollisionCollector.188", align 8
  %169 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %170 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %171 = alloca %"class.JPH::BodyFilter", align 8
  %172 = alloca %"class.JPH::ShapeFilter", align 8
  %173 = alloca %"class.JPH::Mat44", align 16
  %174 = alloca %"class.JPH::Mat44", align 16
  %175 = alloca %"class.JPH::Mat44", align 16
  %176 = alloca %"class.JPH::AABox", align 16
  %177 = alloca %"class.JPH::Vec3", align 16
  %178 = alloca %"class.JPH::AABox", align 16
  %179 = alloca %"class.JPH::AllHitCollisionCollector.188", align 8
  %180 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %181 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %182 = alloca %"class.JPH::BodyFilter", align 8
  %183 = alloca %"class.JPH::ShapeFilter", align 8
  %184 = alloca [96 x %"class.JPH::Float3"], align 16
  %185 = alloca [32 x ptr], align 16
  %186 = alloca %"struct.JPH::Shape::GetTrianglesContext", align 16
  %187 = alloca %"class.JPH::Vec3", align 16
  %188 = alloca %"class.JPH::Vec3", align 16
  %189 = alloca %"class.JPH::Vec3", align 16
  %190 = alloca %"class.JPH::Vec3", align 16
  %191 = alloca %"class.JPH::Vec3", align 16
  %192 = alloca %"class.JPH::Vec3", align 16
  %193 = alloca %"class.JPH::Vec3", align 16
  %194 = alloca %"class.JPH::Vec3", align 16
  %195 = alloca %"class.JPH::Vec3", align 16
  %196 = alloca %"class.JPH::Vec3", align 16
  %197 = alloca %"class.JPH::Vec3", align 16
  %198 = alloca %"struct.JPH::RayCast", align 16
  %199 = alloca %"class.JPH::AllHitCollisionCollector.194", align 8
  %200 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %201 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %202 = alloca %"class.JPH::BodyLockRead", align 8
  %203 = alloca %"class.JPH::Mat44", align 16
  %204 = alloca %"class.JPH::AABox", align 16
  %205 = alloca %"class.JPH::Vec3", align 16
  %206 = alloca %"class.JPH::AABox", align 16
  %207 = alloca %"class.JPH::AllHitCollisionCollector.199", align 8
  %208 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %209 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %210 = alloca %"class.JPH::BodyLockRead", align 8
  %211 = alloca %"class.JPH::Mat44", align 16
  %212 = alloca %"class.JPH::AABox", align 16
  %213 = alloca %"class.JPH::AllHitCollisionCollector.199", align 8
  %214 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %215 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %216 = alloca %"class.JPH::BodyLockRead", align 8
  %217 = alloca %"class.JPH::Mat44", align 16
  %218 = alloca %"class.JPH::AABox", align 16
  %219 = alloca %"class.JPH::AllHitCollisionCollector.199", align 8
  %220 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %221 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %222 = alloca %"class.JPH::BodyLockRead", align 8
  %223 = alloca %"class.JPH::Mat44", align 16
  %224 = alloca %"class.JPH::AABox", align 16
  %225 = alloca %"class.JPH::OrientedBox", align 16
  %226 = alloca %"class.JPH::Mat44", align 16
  %227 = alloca %"class.JPH::Quat", align 16
  %228 = alloca %"class.JPH::AllHitCollisionCollector.199", align 8
  %229 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %230 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %231 = alloca %"class.JPH::BodyLockRead", align 8
  %232 = alloca %"class.JPH::Mat44", align 16
  %233 = alloca %"class.JPH::AABox", align 16
  %234 = alloca %"class.JPH::Vec3", align 16
  %235 = alloca %"class.JPH::AABox", align 16
  %236 = alloca %"struct.JPH::AABoxCast", align 16
  %237 = alloca %"class.JPH::AllHitCollisionCollector.201", align 8
  %238 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %239 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %240 = alloca %"class.JPH::Mat44", align 16
  %241 = alloca %"class.JPH::AABox", align 16
  %242 = alloca %"class.JPH::BodyLockRead", align 8
  %243 = alloca %"class.JPH::Mat44", align 16
  %244 = alloca %"class.JPH::AABox", align 16
  %245 = alloca %"class.JPH::Mat44", align 16
  %246 = alloca %"class.JPH::AABox", align 16
  %247 = tail call noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272) %0)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %6, ptr noundef nonnull align 16 dereferenceable(16) %247, i64 16, i1 false), !tbaa.struct !5
  %248 = getelementptr inbounds i8, ptr %247, i64 16
  %.sroa.0904.0.copyload = load double, ptr %248, align 16
  %.sroa.2905.0..sroa_idx = getelementptr inbounds i8, ptr %247, i64 24
  %.sroa.2905.0.copyload = load double, ptr %.sroa.2905.0..sroa_idx, align 8, !tbaa !6
  %249 = tail call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %1, double %.sroa.0904.0.copyload, double %.sroa.2905.0.copyload)
  %250 = extractvalue { double, double } %249, 0
  %251 = extractvalue { double, double } %249, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #12
  %252 = tail call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 5.000000e-01, double %250, double %251)
  %253 = extractvalue { double, double } %252, 0
  %254 = extractvalue { double, double } %252, 1
  %255 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %253, double %254)
  %256 = extractvalue { double, double } %255, 0
  store double %256, ptr %7, align 16
  %257 = getelementptr inbounds i8, ptr %7, i64 8
  %258 = extractvalue { double, double } %255, 1
  store double %258, ptr %257, align 8
  %259 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
  %260 = extractvalue { double, double } %259, 0
  %261 = extractvalue { double, double } %259, 1
  store double %260, ptr %3, align 16
  %.sroa.4899.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 8
  store double %261, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  store float 1.000000e+00, ptr %2, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #12
  call void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %8)
  %262 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %262, ptr %4, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #12
  %263 = getelementptr inbounds i8, ptr %0, i64 552
  %264 = load i32, ptr %263, align 8, !tbaa !13
  switch i32 %264, label %2439 [
    i32 0, label %265
    i32 1, label %291
    i32 2, label %452
    i32 3, label %775
    i32 4, label %836
    i32 5, label %836
    i32 6, label %1127
    i32 7, label %1488
    i32 8, label %1690
    i32 9, label %1754
    i32 10, label %1904
    i32 11, label %2018
    i32 12, label %2089
    i32 13, label %2152
    i32 14, label %2212
    i32 15, label %2292
  ]

265:                                              ; preds = %5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #12
  %.sroa.0875.0.copyload = load double, ptr %6, align 16
  %.sroa.2876.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %.sroa.2876.0.copyload = load double, ptr %.sroa.2876.0..sroa_idx, align 8, !tbaa !6
  call void @_ZN3JPH8RRayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %9, double %.sroa.0875.0.copyload, double %.sroa.2876.0.copyload, double %250, double %251)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #12
  call void @_ZN3JPH13RayCastResultC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %10)
  %266 = getelementptr inbounds i8, ptr %0, i64 344
  %267 = load ptr, ptr %266, align 8, !tbaa !47
  %268 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %267)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #12
  %.sroa.0872.0.copyload = load i8, ptr @_ZN16BroadPhaseLayersL6MOVINGE, align 1, !tbaa !6
  call void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9) %11, i8 %.sroa.0872.0.copyload)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #12
  call void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10) %12, i16 noundef zeroext 1)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #12
  store i64 0, ptr %13, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #12
  %269 = invoke noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16) %268, ptr noundef nonnull align 16 dereferenceable(32) %9, ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %270 unwind label %281

270:                                              ; preds = %265
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %12) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %11) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #12
  %271 = getelementptr inbounds i8, ptr %10, i64 4
  %272 = load float, ptr %271, align 4, !tbaa !48
  %273 = call { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %9, float noundef %272)
  %274 = extractvalue { double, double } %273, 0
  %275 = extractvalue { double, double } %273, 1
  store double %274, ptr %3, align 16
  store double %275, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %276 = load float, ptr %271, align 4, !tbaa !48
  store float %276, ptr %2, align 4, !tbaa !9
  %277 = load i32, ptr %10, align 4, !tbaa !11
  store i32 %277, ptr %4, align 4, !tbaa !11
  %278 = getelementptr inbounds i8, ptr %0, i64 144
  %279 = load ptr, ptr %278, align 16, !tbaa !50
  br i1 %269, label %280, label %283

280:                                              ; preds = %270
  %.sroa.0866.0.copyload = load double, ptr %3, align 16
  %.sroa.2867.0.copyload = load double, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %.sroa.0865.0.copyload = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4, !tbaa !6
  call void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %279, double %.sroa.0866.0.copyload, double %.sroa.2867.0.copyload, i32 %.sroa.0865.0.copyload, float noundef 0x3FB99999A0000000)
  br label %290

281:                                              ; preds = %265
  %282 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %12) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %11) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #12
  br label %2440

283:                                              ; preds = %270
  %.sroa.0859.0.copyload = load double, ptr %248, align 16
  %.sroa.2860.0.copyload = load double, ptr %.sroa.2905.0..sroa_idx, align 8, !tbaa !6
  %284 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %.sroa.0859.0.copyload, double %.sroa.2860.0.copyload)
  %285 = extractvalue { double, double } %284, 0
  %286 = extractvalue { double, double } %284, 1
  %287 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %247, double %285, double %286)
  %288 = extractvalue { double, double } %287, 0
  %289 = extractvalue { double, double } %287, 1
  %.sroa.0858.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  call void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %279, double %288, double %289, i32 %.sroa.0858.0.copyload, float noundef 0x3F50624DE0000000)
  br label %290

290:                                              ; preds = %283, %280
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #12
  br label %2439

291:                                              ; preds = %5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #12
  %.sroa.0856.0.copyload = load double, ptr %6, align 16
  %.sroa.2857.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %.sroa.2857.0.copyload = load double, ptr %.sroa.2857.0..sroa_idx, align 8, !tbaa !6
  call void @_ZN3JPH8RRayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %14, double %.sroa.0856.0.copyload, double %.sroa.2857.0.copyload, double %250, double %251)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %15) #12
  call void @_ZN3JPH13RayCastResultC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %15)
  %292 = getelementptr inbounds i8, ptr %0, i64 344
  %293 = load ptr, ptr %292, align 8, !tbaa !47
  %294 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %293)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #12
  store i64 0, ptr %16, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #12
  store i64 0, ptr %17, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #12
  store i64 0, ptr %18, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #12
  %295 = invoke noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16) %294, ptr noundef nonnull align 16 dereferenceable(32) %14, ptr noundef nonnull align 4 dereferenceable(12) %15, ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %296 unwind label %419

296:                                              ; preds = %291
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #12
  %297 = getelementptr inbounds i8, ptr %15, i64 4
  %298 = load float, ptr %297, align 4, !tbaa !48
  %299 = call { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %14, float noundef %298)
  %300 = extractvalue { double, double } %299, 0
  %301 = extractvalue { double, double } %299, 1
  store double %300, ptr %3, align 16
  store double %301, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %302 = load float, ptr %297, align 4, !tbaa !48
  store float %302, ptr %2, align 4, !tbaa !9
  %303 = load i32, ptr %15, align 4, !tbaa !11
  store i32 %303, ptr %4, align 4, !tbaa !11
  br i1 %295, label %304, label %447

304:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #12
  %305 = load ptr, ptr %292, align 8, !tbaa !47
  %306 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %305)
  call void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(16) %306, ptr noundef nonnull align 4 dereferenceable(4) %15)
  %307 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %19)
  br i1 %307, label %308, label %446

308:                                              ; preds = %304
  %309 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %310 unwind label %421

310:                                              ; preds = %308
  %311 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %309)
  %_ZN3JPH5Color7sYellowE.val1347 = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val1348 = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.0845.0.copyload = select i1 %311, i32 %_ZN3JPH5Color7sYellowE.val1347, i32 %_ZN3JPH5Color7sOrangeE.val1348
  %312 = getelementptr inbounds i8, ptr %0, i64 144
  %313 = load ptr, ptr %312, align 16, !tbaa !50
  %.sroa.0843.0.copyload = load double, ptr %6, align 16
  %.sroa.2844.0.copyload = load double, ptr %.sroa.2857.0..sroa_idx, align 8, !tbaa !6
  %.sroa.0841.0.copyload = load double, ptr %3, align 16
  %.sroa.2842.0.copyload = load double, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %314 = load ptr, ptr %313, align 8, !tbaa !51
  %315 = getelementptr inbounds i8, ptr %314, i64 16
  %316 = load ptr, ptr %315, align 8
  invoke void %316(ptr noundef nonnull align 8 dereferenceable(320) %313, double %.sroa.0843.0.copyload, double %.sroa.2844.0.copyload, double %.sroa.0841.0.copyload, double %.sroa.2842.0.copyload, i32 %.sroa.0845.0.copyload)
          to label %317 unwind label %423

317:                                              ; preds = %310
  %318 = load ptr, ptr %312, align 16, !tbaa !50
  %.sroa.0838.0.copyload = load double, ptr %3, align 16
  %.sroa.2839.0.copyload = load double, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %319 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %320 unwind label %423

320:                                              ; preds = %317
  %321 = extractvalue { double, double } %319, 0
  %322 = extractvalue { double, double } %319, 1
  %.sroa.0833.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  %323 = load ptr, ptr %318, align 8, !tbaa !51
  %324 = getelementptr inbounds i8, ptr %323, i64 16
  %325 = load ptr, ptr %324, align 8
  invoke void %325(ptr noundef nonnull align 8 dereferenceable(320) %318, double %.sroa.0838.0.copyload, double %.sroa.2839.0.copyload, double %321, double %322, i32 %.sroa.0833.0.copyload)
          to label %326 unwind label %423

326:                                              ; preds = %320
  %327 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %309)
          to label %328 unwind label %425

328:                                              ; preds = %326
  %329 = getelementptr inbounds i8, ptr %15, i64 8
  %330 = load ptr, ptr %327, align 8, !tbaa !51
  %331 = getelementptr inbounds i8, ptr %330, i64 80
  %332 = load ptr, ptr %331, align 8
  %333 = invoke noundef ptr %332(ptr noundef nonnull align 8 dereferenceable(26) %327, ptr noundef nonnull align 4 dereferenceable(4) %329)
          to label %334 unwind label %425

334:                                              ; preds = %328
  %335 = load ptr, ptr %312, align 16, !tbaa !50
  %.sroa.0830.0.copyload = load double, ptr %3, align 16
  %.sroa.2831.0.copyload = load double, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #12
  %336 = load ptr, ptr %333, align 8, !tbaa !51
  %337 = getelementptr inbounds i8, ptr %336, i64 32
  %338 = load ptr, ptr %337, align 8
  %339 = invoke noundef ptr %338(ptr noundef nonnull align 8 dereferenceable(12) %333)
          to label %340 unwind label %427

340:                                              ; preds = %334
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %20, ptr noundef %339) #12
  %.sroa.0829.0.copyload = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !6
  %341 = load ptr, ptr %335, align 8, !tbaa !51
  %342 = getelementptr inbounds i8, ptr %341, i64 56
  %343 = load ptr, ptr %342, align 8
  invoke void %343(ptr noundef nonnull align 8 dereferenceable(320) %335, double %.sroa.0830.0.copyload, double %.sroa.2831.0.copyload, ptr noundef nonnull align 8 dereferenceable(16) %20, i32 %.sroa.0829.0.copyload, float noundef 5.000000e-01)
          to label %344 unwind label %427

344:                                              ; preds = %340
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #12
  %.sroa.0827.0.copyload = load double, ptr %3, align 16
  %.sroa.2828.0.copyload = load double, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %345 = invoke { double, double } @_ZNK3JPH4Body26GetWorldSpaceSurfaceNormalERKNS_10SubShapeIDENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %309, ptr noundef nonnull align 4 dereferenceable(4) %329, double %.sroa.0827.0.copyload, double %.sroa.2828.0.copyload)
          to label %346 unwind label %429

346:                                              ; preds = %344
  %347 = extractvalue { double, double } %345, 0
  store double %347, ptr %21, align 16
  %348 = getelementptr inbounds i8, ptr %21, i64 8
  %349 = extractvalue { double, double } %345, 1
  store double %349, ptr %348, align 8
  %350 = load ptr, ptr %312, align 16, !tbaa !50
  %.sroa.0825.0.copyload = load double, ptr %3, align 16
  %.sroa.2826.0.copyload = load double, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %351 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %3, double %347, double %349)
          to label %352 unwind label %429

352:                                              ; preds = %346
  %353 = extractvalue { double, double } %351, 0
  %354 = extractvalue { double, double } %351, 1
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %350, double %.sroa.0825.0.copyload, double %.sroa.2826.0.copyload, double %353, double %354, i32 %.sroa.0845.0.copyload, float noundef 0x3F847AE140000000)
          to label %355 unwind label %429

355:                                              ; preds = %352
  %356 = invoke { double, double } @_ZNK3JPH4Vec326GetNormalizedPerpendicularEv(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %357 unwind label %431

357:                                              ; preds = %355
  %358 = extractvalue { double, double } %356, 0
  %359 = extractvalue { double, double } %356, 1
  %360 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %358, double %359)
          to label %361 unwind label %433

361:                                              ; preds = %357
  %362 = extractvalue { double, double } %360, 0
  %363 = extractvalue { double, double } %360, 1
  %364 = load ptr, ptr %312, align 16, !tbaa !50
  %365 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %358, double %359)
          to label %366 unwind label %433

366:                                              ; preds = %361
  %367 = extractvalue { double, double } %365, 0
  %368 = extractvalue { double, double } %365, 1
  %369 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %3, double %367, double %368)
          to label %370 unwind label %433

370:                                              ; preds = %366
  %371 = extractvalue { double, double } %369, 0
  %372 = extractvalue { double, double } %369, 1
  %373 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %358, double %359)
          to label %374 unwind label %433

374:                                              ; preds = %370
  %375 = extractvalue { double, double } %373, 0
  %376 = extractvalue { double, double } %373, 1
  %377 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %3, double %375, double %376)
          to label %378 unwind label %433

378:                                              ; preds = %374
  %379 = extractvalue { double, double } %377, 0
  %380 = extractvalue { double, double } %377, 1
  %381 = load ptr, ptr %364, align 8, !tbaa !51
  %382 = getelementptr inbounds i8, ptr %381, i64 16
  %383 = load ptr, ptr %382, align 8
  invoke void %383(ptr noundef nonnull align 8 dereferenceable(320) %364, double %371, double %372, double %379, double %380, i32 %.sroa.0845.0.copyload)
          to label %384 unwind label %433

384:                                              ; preds = %378
  %385 = load ptr, ptr %312, align 16, !tbaa !50
  %386 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %362, double %363)
          to label %387 unwind label %433

387:                                              ; preds = %384
  %388 = extractvalue { double, double } %386, 0
  %389 = extractvalue { double, double } %386, 1
  %390 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %3, double %388, double %389)
          to label %391 unwind label %433

391:                                              ; preds = %387
  %392 = extractvalue { double, double } %390, 0
  %393 = extractvalue { double, double } %390, 1
  %394 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %362, double %363)
          to label %395 unwind label %433

395:                                              ; preds = %391
  %396 = extractvalue { double, double } %394, 0
  %397 = extractvalue { double, double } %394, 1
  %398 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %3, double %396, double %397)
          to label %399 unwind label %433

399:                                              ; preds = %395
  %400 = extractvalue { double, double } %398, 0
  %401 = extractvalue { double, double } %398, 1
  %402 = load ptr, ptr %385, align 8, !tbaa !51
  %403 = getelementptr inbounds i8, ptr %402, i64 16
  %404 = load ptr, ptr %403, align 8
  invoke void %404(ptr noundef nonnull align 8 dereferenceable(320) %385, double %392, double %393, double %400, double %401, i32 %.sroa.0845.0.copyload)
          to label %405 unwind label %433

405:                                              ; preds = %399
  %406 = getelementptr inbounds i8, ptr %0, i64 603
  %407 = load i8, ptr %406, align 1, !tbaa !53, !range !54, !noundef !55
  %408 = trunc nuw i8 %407 to i1
  br i1 %408, label %409, label %443

409:                                              ; preds = %405
  call void @llvm.lifetime.start.p0(i64 528, ptr nonnull %22) #12
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EEC2Ev(ptr noundef nonnull align 16 dereferenceable(528) %22) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %23) #12
  invoke void @_ZNK3JPH4Body19GetTransformedShapeEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::TransformedShape") align 16 %23, ptr noundef nonnull align 16 dereferenceable(122) %309)
          to label %410 unwind label %435

410:                                              ; preds = %409
  %411 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %412 unwind label %437

412:                                              ; preds = %410
  %413 = extractvalue { double, double } %411, 0
  %414 = extractvalue { double, double } %411, 1
  %.sroa.0784.0.copyload = load double, ptr %7, align 16
  %.sroa.2785.0.copyload = load double, ptr %257, align 8, !tbaa !6
  invoke void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64) %23, ptr noundef nonnull align 4 dereferenceable(4) %329, double %413, double %414, double %.sroa.0784.0.copyload, double %.sroa.2785.0.copyload, ptr noundef nonnull align 16 dereferenceable(528) %22)
          to label %415 unwind label %437

415:                                              ; preds = %412
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %23) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %23) #12
  %416 = load ptr, ptr %312, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %24) #12
  %.sroa.0782.0.copyload = load double, ptr %7, align 16
  %.sroa.2783.0.copyload = load double, ptr %257, align 8, !tbaa !6
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %24, double %.sroa.0782.0.copyload, double %.sroa.2783.0.copyload)
          to label %417 unwind label %440

417:                                              ; preds = %415
  %.sroa.0781.0.copyload = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %416, ptr noundef nonnull align 16 dereferenceable(64) %24, ptr noundef nonnull align 16 dereferenceable(528) %22, i32 %.sroa.0781.0.copyload, float noundef 0x3F847AE140000000)
          to label %418 unwind label %440

418:                                              ; preds = %417
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %24) #12
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %22) #12
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %22) #12
  br label %443

419:                                              ; preds = %291
  %420 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #12
  br label %451

421:                                              ; preds = %308
  %422 = landingpad { ptr, i32 }
          cleanup
  br label %445

423:                                              ; preds = %320, %317, %310
  %424 = landingpad { ptr, i32 }
          cleanup
  br label %445

425:                                              ; preds = %328, %326
  %426 = landingpad { ptr, i32 }
          cleanup
  br label %445

427:                                              ; preds = %340, %334
  %428 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #12
  br label %445

429:                                              ; preds = %352, %346, %344
  %430 = landingpad { ptr, i32 }
          cleanup
  br label %444

431:                                              ; preds = %355
  %432 = landingpad { ptr, i32 }
          cleanup
  br label %444

433:                                              ; preds = %399, %395, %391, %387, %384, %378, %374, %370, %366, %361, %357
  %434 = landingpad { ptr, i32 }
          cleanup
  br label %444

435:                                              ; preds = %409
  %436 = landingpad { ptr, i32 }
          cleanup
  br label %439

437:                                              ; preds = %412, %410
  %438 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %23) #12
  br label %439

439:                                              ; preds = %437, %435
  %.pn1349 = phi { ptr, i32 } [ %438, %437 ], [ %436, %435 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %23) #12
  br label %442

440:                                              ; preds = %417, %415
  %441 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %24) #12
  br label %442

442:                                              ; preds = %440, %439
  %.pn1351 = phi { ptr, i32 } [ %441, %440 ], [ %.pn1349, %439 ]
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %22) #12
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %22) #12
  br label %444

443:                                              ; preds = %418, %405
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #12
  br label %446

444:                                              ; preds = %431, %442, %433, %429
  %.pn1351.pn.pn.pn = phi { ptr, i32 } [ %430, %429 ], [ %432, %431 ], [ %.pn1351, %442 ], [ %434, %433 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #12
  br label %445

445:                                              ; preds = %423, %444, %427, %425, %421
  %.pn1351.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %422, %421 ], [ %424, %423 ], [ %.pn1351.pn.pn.pn, %444 ], [ %428, %427 ], [ %426, %425 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #12
  br label %451

446:                                              ; preds = %443, %304
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #12
  br label %450

447:                                              ; preds = %296
  %448 = getelementptr inbounds i8, ptr %0, i64 144
  %449 = load ptr, ptr %448, align 16, !tbaa !50
  %.sroa.0779.0.copyload = load double, ptr %3, align 16
  %.sroa.2780.0.copyload = load double, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %.sroa.0778.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  call void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %449, double %.sroa.0779.0.copyload, double %.sroa.2780.0.copyload, i32 %.sroa.0778.0.copyload, float noundef 0x3FB99999A0000000)
  br label %450

450:                                              ; preds = %447, %446
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #12
  br label %2439

451:                                              ; preds = %445, %419
  %.pn1351.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1351.pn.pn.pn.pn.pn.pn, %445 ], [ %420, %419 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #12
  br label %2440

452:                                              ; preds = %5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #12
  %.sroa.0776.0.copyload = load double, ptr %6, align 16
  %.sroa.2777.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %.sroa.2777.0.copyload = load double, ptr %.sroa.2777.0..sroa_idx, align 8, !tbaa !6
  call void @_ZN3JPH8RRayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %25, double %.sroa.0776.0.copyload, double %.sroa.2777.0.copyload, double %250, double %251)
  call void @llvm.lifetime.start.p0(i64 3, ptr nonnull %26) #12
  call void @_ZN3JPH15RayCastSettingsC2Ev(ptr noundef nonnull align 1 dereferenceable(3) %26) #12
  %453 = getelementptr inbounds i8, ptr %0, i64 592
  %454 = load i8, ptr %453, align 16, !tbaa !56
  store i8 %454, ptr %26, align 1, !tbaa !57
  %455 = getelementptr inbounds i8, ptr %0, i64 593
  %456 = load i8, ptr %455, align 1, !tbaa !59
  %457 = getelementptr inbounds i8, ptr %26, i64 1
  store i8 %456, ptr %457, align 1, !tbaa !60
  %458 = getelementptr inbounds i8, ptr %0, i64 600
  %459 = load i8, ptr %458, align 8, !tbaa !61, !range !54, !noundef !55
  %460 = getelementptr inbounds i8, ptr %26, i64 2
  store i8 %459, ptr %460, align 1, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %27) #12
  call void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #12
  %461 = getelementptr inbounds i8, ptr %0, i64 604
  %462 = load i32, ptr %461, align 4, !tbaa !63
  switch i32 %462, label %507 [
    i32 0, label %463
    i32 1, label %485
  ]

463:                                              ; preds = %452
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %28) #12
  invoke void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(37) %28)
          to label %464 unwind label %473

464:                                              ; preds = %463
  %465 = getelementptr inbounds i8, ptr %0, i64 344
  %466 = load ptr, ptr %465, align 8, !tbaa !47
  %467 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %466)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #12
  store i64 0, ptr %29, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #12
  store i64 0, ptr %30, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #12
  store i64 0, ptr %31, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %32, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %32)
          to label %468 unwind label %477

468:                                              ; preds = %464
  invoke void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %467, ptr noundef nonnull align 16 dereferenceable(32) %25, ptr noundef nonnull align 1 dereferenceable(3) %26, ptr noundef nonnull align 8 dereferenceable(24) %28, ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(12) %32)
          to label %469 unwind label %479

469:                                              ; preds = %468
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %32) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #12
  %470 = call noundef zeroext i1 @_ZNK3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE6HadHitEv(ptr noundef nonnull align 8 dereferenceable(37) %28)
  br i1 %470, label %471, label %482

471:                                              ; preds = %469
  %472 = getelementptr inbounds i8, ptr %28, i64 24
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 4 dereferenceable(12) %472)
          to label %482 unwind label %475

473:                                              ; preds = %463
  %474 = landingpad { ptr, i32 }
          cleanup
  br label %484

475:                                              ; preds = %471
  %476 = landingpad { ptr, i32 }
          cleanup
  br label %483

477:                                              ; preds = %464
  %478 = landingpad { ptr, i32 }
          cleanup
  br label %481

479:                                              ; preds = %468
  %480 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %32) #12
  br label %481

481:                                              ; preds = %479, %477
  %.pn1323 = phi { ptr, i32 } [ %480, %479 ], [ %478, %477 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #12
  br label %483

482:                                              ; preds = %471, %469
  call void @_ZN3JPH18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEED2Ev(ptr noundef nonnull align 8 dereferenceable(37) %28) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #12
  br label %564

483:                                              ; preds = %481, %475
  %.pn1325 = phi { ptr, i32 } [ %476, %475 ], [ %.pn1323, %481 ]
  call void @_ZN3JPH18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEED2Ev(ptr noundef nonnull align 8 dereferenceable(37) %28) #12
  br label %484

484:                                              ; preds = %483, %473
  %.pn1325.pn = phi { ptr, i32 } [ %.pn1325, %483 ], [ %474, %473 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #12
  br label %774

485:                                              ; preds = %452
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %33) #12
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(37) %33)
          to label %486 unwind label %495

486:                                              ; preds = %485
  %487 = getelementptr inbounds i8, ptr %0, i64 344
  %488 = load ptr, ptr %487, align 8, !tbaa !47
  %489 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %488)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #12
  store i64 0, ptr %34, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #12
  store i64 0, ptr %35, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #12
  store i64 0, ptr %36, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %37, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %37)
          to label %490 unwind label %499

490:                                              ; preds = %486
  invoke void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %489, ptr noundef nonnull align 16 dereferenceable(32) %25, ptr noundef nonnull align 1 dereferenceable(3) %26, ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(12) %37)
          to label %491 unwind label %501

491:                                              ; preds = %490
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %37) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #12
  %492 = call noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE6HadHitEv(ptr noundef nonnull align 8 dereferenceable(37) %33)
  br i1 %492, label %493, label %504

493:                                              ; preds = %491
  %494 = getelementptr inbounds i8, ptr %33, i64 24
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 4 dereferenceable(12) %494)
          to label %504 unwind label %497

495:                                              ; preds = %485
  %496 = landingpad { ptr, i32 }
          cleanup
  br label %506

497:                                              ; preds = %493
  %498 = landingpad { ptr, i32 }
          cleanup
  br label %505

499:                                              ; preds = %486
  %500 = landingpad { ptr, i32 }
          cleanup
  br label %503

501:                                              ; preds = %490
  %502 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %37) #12
  br label %503

503:                                              ; preds = %501, %499
  %.pn1318 = phi { ptr, i32 } [ %502, %501 ], [ %500, %499 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #12
  br label %505

504:                                              ; preds = %493, %491
  call void @_ZN3JPH18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEED2Ev(ptr noundef nonnull align 8 dereferenceable(37) %33) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %33) #12
  br label %564

505:                                              ; preds = %503, %497
  %.pn1320 = phi { ptr, i32 } [ %498, %497 ], [ %.pn1318, %503 ]
  call void @_ZN3JPH18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEED2Ev(ptr noundef nonnull align 8 dereferenceable(37) %33) #12
  br label %506

506:                                              ; preds = %505, %495
  %.pn1320.pn = phi { ptr, i32 } [ %.pn1320, %505 ], [ %496, %495 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %33) #12
  br label %774

507:                                              ; preds = %452
  %508 = getelementptr inbounds i8, ptr %0, i64 608
  %509 = load i8, ptr %508, align 16, !tbaa !64, !range !54, !noundef !55
  %510 = trunc nuw i8 %509 to i1
  %511 = getelementptr inbounds i8, ptr %0, i64 344
  br i1 %510, label %512, label %538

512:                                              ; preds = %507
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %38) #12
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(53) %38) #12
  %513 = load ptr, ptr %511, align 8, !tbaa !47
  %514 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %513)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #12
  store i64 0, ptr %39, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %39) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #12
  store i64 0, ptr %40, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #12
  store i64 0, ptr %41, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %42) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %42, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %42)
          to label %515 unwind label %531

515:                                              ; preds = %512
  invoke void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %514, ptr noundef nonnull align 16 dereferenceable(32) %25, ptr noundef nonnull align 1 dereferenceable(3) %26, ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(12) %42)
          to label %516 unwind label %533

516:                                              ; preds = %515
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %42) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %42) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %39) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #12
  invoke void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53) %38)
          to label %517 unwind label %529

517:                                              ; preds = %516
  %518 = call noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %519 = getelementptr inbounds i8, ptr %38, i64 24
  %520 = call noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %519)
  %521 = call noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %519)
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef %518, ptr noundef %520, ptr noundef %521)
          to label %522 unwind label %529

522:                                              ; preds = %517
  %523 = call noundef i64 @_ZNK3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %524 = trunc i64 %523 to i32
  %525 = load i32, ptr %461, align 4, !tbaa !63
  %526 = icmp slt i32 %525, %524
  br i1 %526, label %527, label %536

527:                                              ; preds = %522
  %528 = sext i32 %525 to i64
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %528)
          to label %536 unwind label %529

529:                                              ; preds = %527, %517, %516
  %530 = landingpad { ptr, i32 }
          cleanup
  br label %537

531:                                              ; preds = %512
  %532 = landingpad { ptr, i32 }
          cleanup
  br label %535

533:                                              ; preds = %515
  %534 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %42) #12
  br label %535

535:                                              ; preds = %533, %531
  %.pn1314 = phi { ptr, i32 } [ %534, %533 ], [ %532, %531 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %42) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %39) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #12
  br label %537

536:                                              ; preds = %527, %522
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %38) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %38) #12
  br label %564

537:                                              ; preds = %535, %529
  %.pn1316 = phi { ptr, i32 } [ %530, %529 ], [ %.pn1314, %535 ]
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %38) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %38) #12
  br label %774

538:                                              ; preds = %507
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %43) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %43) #12
  %539 = load ptr, ptr %511, align 8, !tbaa !47
  %540 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %539)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #12
  store i64 0, ptr %44, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #12
  store i64 0, ptr %45, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %45) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #12
  store i64 0, ptr %46, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %47) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %47, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %47)
          to label %541 unwind label %557

541:                                              ; preds = %538
  invoke void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %540, ptr noundef nonnull align 16 dereferenceable(32) %25, ptr noundef nonnull align 1 dereferenceable(3) %26, ptr noundef nonnull align 8 dereferenceable(24) %43, ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(12) %47)
          to label %542 unwind label %559

542:                                              ; preds = %541
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %47) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %45) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %43)
          to label %543 unwind label %555

543:                                              ; preds = %542
  %544 = call noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %545 = getelementptr inbounds i8, ptr %43, i64 24
  %546 = call noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %545)
  %547 = call noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %545)
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef %544, ptr noundef %546, ptr noundef %547)
          to label %548 unwind label %555

548:                                              ; preds = %543
  %549 = call noundef i64 @_ZNK3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %550 = trunc i64 %549 to i32
  %551 = load i32, ptr %461, align 4, !tbaa !63
  %552 = icmp slt i32 %551, %550
  br i1 %552, label %553, label %562

553:                                              ; preds = %548
  %554 = sext i32 %551 to i64
  invoke void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %554)
          to label %562 unwind label %555

555:                                              ; preds = %553, %543, %542
  %556 = landingpad { ptr, i32 }
          cleanup
  br label %563

557:                                              ; preds = %538
  %558 = landingpad { ptr, i32 }
          cleanup
  br label %561

559:                                              ; preds = %541
  %560 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %47) #12
  br label %561

561:                                              ; preds = %559, %557
  %.pn1310 = phi { ptr, i32 } [ %560, %559 ], [ %558, %557 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %45) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #12
  br label %563

562:                                              ; preds = %553, %548
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %43) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %43) #12
  br label %564

563:                                              ; preds = %561, %555
  %.pn1312 = phi { ptr, i32 } [ %556, %555 ], [ %.pn1310, %561 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %43) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %43) #12
  br label %774

564:                                              ; preds = %504, %562, %536, %482
  %565 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %566 = xor i1 %565, true
  br i1 %565, label %757, label %567

567:                                              ; preds = %564
  %568 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
          to label %569 unwind label %591

569:                                              ; preds = %567
  %570 = getelementptr inbounds i8, ptr %568, i64 4
  %571 = load float, ptr %570, align 4, !tbaa !48
  %572 = invoke { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %25, float noundef %571)
          to label %573 unwind label %593

573:                                              ; preds = %569
  %574 = extractvalue { double, double } %572, 0
  %575 = extractvalue { double, double } %572, 1
  store double %574, ptr %3, align 16
  store double %575, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %576 = load float, ptr %570, align 4, !tbaa !48
  store float %576, ptr %2, align 4, !tbaa !9
  %577 = load i32, ptr %568, align 4, !tbaa !11
  store i32 %577, ptr %4, align 4, !tbaa !11
  %578 = load <2 x double>, ptr %6, align 16
  %579 = call noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %580 = call noundef ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %.not13281487 = icmp eq ptr %579, %580
  br i1 %.not13281487, label %._crit_edge1494, label %.lr.ph1493

.lr.ph1493:                                       ; preds = %573
  %581 = getelementptr inbounds i8, ptr %48, i64 8
  %582 = getelementptr inbounds i8, ptr %0, i64 144
  %583 = getelementptr inbounds i8, ptr %0, i64 344
  %584 = getelementptr inbounds i8, ptr %51, i64 8
  %585 = getelementptr inbounds i8, ptr %0, i64 603
  br label %595

._crit_edge1494:                                  ; preds = %737, %573
  %586 = getelementptr inbounds i8, ptr %0, i64 144
  %587 = load ptr, ptr %586, align 16, !tbaa !50
  %588 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
          to label %741 unwind label %755

589:                                              ; preds = %770, %767, %761, %757
  %590 = landingpad { ptr, i32 }
          cleanup
  br label %774

591:                                              ; preds = %567
  %592 = landingpad { ptr, i32 }
          cleanup
  br label %774

593:                                              ; preds = %569
  %594 = landingpad { ptr, i32 }
          cleanup
  br label %774

595:                                              ; preds = %.lr.ph1493, %737
  %.010911489 = phi i1 [ false, %.lr.ph1493 ], [ %610, %737 ]
  %.010921488 = phi ptr [ %579, %.lr.ph1493 ], [ %738, %737 ]
  %596 = phi <2 x double> [ %578, %.lr.ph1493 ], [ %611, %737 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %48) #12
  %597 = getelementptr inbounds i8, ptr %.010921488, i64 4
  %598 = load float, ptr %597, align 4, !tbaa !48
  %599 = invoke { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %25, float noundef %598)
          to label %600 unwind label %710

600:                                              ; preds = %595
  %601 = extractvalue { double, double } %599, 0
  store double %601, ptr %48, align 16
  %602 = extractvalue { double, double } %599, 1
  store double %602, ptr %581, align 8
  %603 = load ptr, ptr %582, align 16, !tbaa !50
  %_ZN3JPH5Color5sGreyE.val1329 = load i32, ptr @_ZN3JPH5Color5sGreyE, align 4
  %_ZN3JPH5Color6sWhiteE.val1330 = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4
  %.sroa.0746.0.copyload = select i1 %.010911489, i32 %_ZN3JPH5Color5sGreyE.val1329, i32 %_ZN3JPH5Color6sWhiteE.val1330
  %604 = load ptr, ptr %603, align 8, !tbaa !51
  %605 = getelementptr inbounds i8, ptr %604, i64 16
  %606 = load ptr, ptr %605, align 8
  %607 = extractelement <2 x double> %596, i64 0
  %608 = extractelement <2 x double> %596, i64 1
  invoke void %606(ptr noundef nonnull align 8 dereferenceable(320) %603, double %607, double %608, double %601, double %602, i32 %.sroa.0746.0.copyload)
          to label %609 unwind label %710

609:                                              ; preds = %600
  %610 = xor i1 %.010911489, true
  %611 = load <2 x double>, ptr %48, align 16
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %49) #12
  %612 = load ptr, ptr %583, align 8, !tbaa !47
  %613 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %612)
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %49, ptr noundef nonnull align 8 dereferenceable(16) %613, ptr noundef nonnull align 4 dereferenceable(4) %.010921488)
          to label %614 unwind label %712

614:                                              ; preds = %609
  %615 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %49)
  br i1 %615, label %616, label %737

616:                                              ; preds = %614
  %617 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %49)
          to label %618 unwind label %714

618:                                              ; preds = %616
  %619 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %617)
          to label %620 unwind label %716

620:                                              ; preds = %618
  %621 = getelementptr inbounds i8, ptr %.010921488, i64 8
  %622 = load ptr, ptr %619, align 8, !tbaa !51
  %623 = getelementptr inbounds i8, ptr %622, i64 80
  %624 = load ptr, ptr %623, align 8
  %625 = invoke noundef ptr %624(ptr noundef nonnull align 8 dereferenceable(26) %619, ptr noundef nonnull align 4 dereferenceable(4) %621)
          to label %626 unwind label %716

626:                                              ; preds = %620
  %627 = load ptr, ptr %582, align 16, !tbaa !50
  %.sroa.0739.0.copyload = load double, ptr %48, align 16
  %.sroa.2740.0.copyload = load double, ptr %581, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %50) #12
  %628 = load ptr, ptr %625, align 8, !tbaa !51
  %629 = getelementptr inbounds i8, ptr %628, i64 32
  %630 = load ptr, ptr %629, align 8
  %631 = invoke noundef ptr %630(ptr noundef nonnull align 8 dereferenceable(12) %625)
          to label %632 unwind label %718

632:                                              ; preds = %626
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %50, ptr noundef %631) #12
  %.sroa.0738.0.copyload = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !6
  %633 = load ptr, ptr %627, align 8, !tbaa !51
  %634 = getelementptr inbounds i8, ptr %633, i64 56
  %635 = load ptr, ptr %634, align 8
  invoke void %635(ptr noundef nonnull align 8 dereferenceable(320) %627, double %.sroa.0739.0.copyload, double %.sroa.2740.0.copyload, ptr noundef nonnull align 8 dereferenceable(16) %50, i32 %.sroa.0738.0.copyload, float noundef 5.000000e-01)
          to label %636 unwind label %718

636:                                              ; preds = %632
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #12
  %637 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %617)
  %_ZN3JPH5Color7sYellowE.val1331 = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val1332 = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.0735.0.copyload = select i1 %637, i32 %_ZN3JPH5Color7sYellowE.val1331, i32 %_ZN3JPH5Color7sOrangeE.val1332
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %51) #12
  %.sroa.0733.0.copyload = load double, ptr %48, align 16
  %.sroa.2734.0.copyload = load double, ptr %581, align 8, !tbaa !6
  %638 = invoke { double, double } @_ZNK3JPH4Body26GetWorldSpaceSurfaceNormalERKNS_10SubShapeIDENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %617, ptr noundef nonnull align 4 dereferenceable(4) %621, double %.sroa.0733.0.copyload, double %.sroa.2734.0.copyload)
          to label %639 unwind label %720

639:                                              ; preds = %636
  %640 = extractvalue { double, double } %638, 0
  store double %640, ptr %51, align 16
  %641 = extractvalue { double, double } %638, 1
  store double %641, ptr %584, align 8
  %642 = load ptr, ptr %582, align 16, !tbaa !50
  %.sroa.0731.0.copyload = load double, ptr %48, align 16
  %.sroa.2732.0.copyload = load double, ptr %581, align 8, !tbaa !6
  %643 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %48, double %640, double %641)
          to label %644 unwind label %720

644:                                              ; preds = %639
  %645 = extractvalue { double, double } %643, 0
  %646 = extractvalue { double, double } %643, 1
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %642, double %.sroa.0731.0.copyload, double %.sroa.2732.0.copyload, double %645, double %646, i32 %.sroa.0735.0.copyload, float noundef 0x3F847AE140000000)
          to label %647 unwind label %720

647:                                              ; preds = %644
  %648 = invoke { double, double } @_ZNK3JPH4Vec326GetNormalizedPerpendicularEv(ptr noundef nonnull align 16 dereferenceable(16) %51)
          to label %649 unwind label %722

649:                                              ; preds = %647
  %650 = extractvalue { double, double } %648, 0
  %651 = extractvalue { double, double } %648, 1
  %652 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %51, double %650, double %651)
          to label %653 unwind label %724

653:                                              ; preds = %649
  %654 = extractvalue { double, double } %652, 0
  %655 = extractvalue { double, double } %652, 1
  %656 = load ptr, ptr %582, align 16, !tbaa !50
  %657 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %650, double %651)
          to label %658 unwind label %724

658:                                              ; preds = %653
  %659 = extractvalue { double, double } %657, 0
  %660 = extractvalue { double, double } %657, 1
  %661 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %48, double %659, double %660)
          to label %662 unwind label %724

662:                                              ; preds = %658
  %663 = extractvalue { double, double } %661, 0
  %664 = extractvalue { double, double } %661, 1
  %665 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %650, double %651)
          to label %666 unwind label %724

666:                                              ; preds = %662
  %667 = extractvalue { double, double } %665, 0
  %668 = extractvalue { double, double } %665, 1
  %669 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %48, double %667, double %668)
          to label %670 unwind label %724

670:                                              ; preds = %666
  %671 = extractvalue { double, double } %669, 0
  %672 = extractvalue { double, double } %669, 1
  %673 = load ptr, ptr %656, align 8, !tbaa !51
  %674 = getelementptr inbounds i8, ptr %673, i64 16
  %675 = load ptr, ptr %674, align 8
  invoke void %675(ptr noundef nonnull align 8 dereferenceable(320) %656, double %663, double %664, double %671, double %672, i32 %.sroa.0735.0.copyload)
          to label %676 unwind label %724

676:                                              ; preds = %670
  %677 = load ptr, ptr %582, align 16, !tbaa !50
  %678 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %654, double %655)
          to label %679 unwind label %724

679:                                              ; preds = %676
  %680 = extractvalue { double, double } %678, 0
  %681 = extractvalue { double, double } %678, 1
  %682 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %48, double %680, double %681)
          to label %683 unwind label %724

683:                                              ; preds = %679
  %684 = extractvalue { double, double } %682, 0
  %685 = extractvalue { double, double } %682, 1
  %686 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %654, double %655)
          to label %687 unwind label %724

687:                                              ; preds = %683
  %688 = extractvalue { double, double } %686, 0
  %689 = extractvalue { double, double } %686, 1
  %690 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %48, double %688, double %689)
          to label %691 unwind label %724

691:                                              ; preds = %687
  %692 = extractvalue { double, double } %690, 0
  %693 = extractvalue { double, double } %690, 1
  %694 = load ptr, ptr %677, align 8, !tbaa !51
  %695 = getelementptr inbounds i8, ptr %694, i64 16
  %696 = load ptr, ptr %695, align 8
  invoke void %696(ptr noundef nonnull align 8 dereferenceable(320) %677, double %684, double %685, double %692, double %693, i32 %.sroa.0735.0.copyload)
          to label %697 unwind label %724

697:                                              ; preds = %691
  %698 = load i8, ptr %585, align 1, !tbaa !53, !range !54, !noundef !55
  %699 = trunc nuw i8 %698 to i1
  br i1 %699, label %700, label %734

700:                                              ; preds = %697
  call void @llvm.lifetime.start.p0(i64 528, ptr nonnull %52) #12
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EEC2Ev(ptr noundef nonnull align 16 dereferenceable(528) %52) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %53) #12
  invoke void @_ZNK3JPH4Body19GetTransformedShapeEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::TransformedShape") align 16 %53, ptr noundef nonnull align 16 dereferenceable(122) %617)
          to label %701 unwind label %726

701:                                              ; preds = %700
  %702 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %51)
          to label %703 unwind label %728

703:                                              ; preds = %701
  %704 = extractvalue { double, double } %702, 0
  %705 = extractvalue { double, double } %702, 1
  %.sroa.0690.0.copyload = load double, ptr %7, align 16
  %.sroa.2691.0.copyload = load double, ptr %257, align 8, !tbaa !6
  invoke void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64) %53, ptr noundef nonnull align 4 dereferenceable(4) %621, double %704, double %705, double %.sroa.0690.0.copyload, double %.sroa.2691.0.copyload, ptr noundef nonnull align 16 dereferenceable(528) %52)
          to label %706 unwind label %728

706:                                              ; preds = %703
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %53) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %53) #12
  %707 = load ptr, ptr %582, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %54) #12
  %.sroa.0688.0.copyload = load double, ptr %7, align 16
  %.sroa.2689.0.copyload = load double, ptr %257, align 8, !tbaa !6
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %54, double %.sroa.0688.0.copyload, double %.sroa.2689.0.copyload)
          to label %708 unwind label %731

708:                                              ; preds = %706
  %.sroa.0687.0.copyload = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %707, ptr noundef nonnull align 16 dereferenceable(64) %54, ptr noundef nonnull align 16 dereferenceable(528) %52, i32 %.sroa.0687.0.copyload, float noundef 0x3F847AE140000000)
          to label %709 unwind label %731

709:                                              ; preds = %708
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %54) #12
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %52) #12
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %52) #12
  br label %734

710:                                              ; preds = %600, %595
  %711 = landingpad { ptr, i32 }
          cleanup
  br label %740

712:                                              ; preds = %609
  %713 = landingpad { ptr, i32 }
          cleanup
  br label %739

714:                                              ; preds = %616
  %715 = landingpad { ptr, i32 }
          cleanup
  br label %736

716:                                              ; preds = %620, %618
  %717 = landingpad { ptr, i32 }
          cleanup
  br label %736

718:                                              ; preds = %632, %626
  %719 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #12
  br label %736

720:                                              ; preds = %644, %639, %636
  %721 = landingpad { ptr, i32 }
          cleanup
  br label %735

722:                                              ; preds = %647
  %723 = landingpad { ptr, i32 }
          cleanup
  br label %735

724:                                              ; preds = %691, %687, %683, %679, %676, %670, %666, %662, %658, %653, %649
  %725 = landingpad { ptr, i32 }
          cleanup
  br label %735

726:                                              ; preds = %700
  %727 = landingpad { ptr, i32 }
          cleanup
  br label %730

728:                                              ; preds = %703, %701
  %729 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %53) #12
  br label %730

730:                                              ; preds = %728, %726
  %.pn1333 = phi { ptr, i32 } [ %729, %728 ], [ %727, %726 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %53) #12
  br label %733

731:                                              ; preds = %708, %706
  %732 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %54) #12
  br label %733

733:                                              ; preds = %731, %730
  %.pn1335 = phi { ptr, i32 } [ %732, %731 ], [ %.pn1333, %730 ]
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %52) #12
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %52) #12
  br label %735

734:                                              ; preds = %709, %697
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #12
  br label %737

735:                                              ; preds = %722, %733, %724, %720
  %.pn1335.pn.pn.pn = phi { ptr, i32 } [ %721, %720 ], [ %723, %722 ], [ %.pn1335, %733 ], [ %725, %724 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #12
  br label %736

736:                                              ; preds = %716, %718, %735, %714
  %.pn1335.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %715, %714 ], [ %.pn1335.pn.pn.pn, %735 ], [ %719, %718 ], [ %717, %716 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #12
  br label %739

737:                                              ; preds = %734, %614
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %49) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #12
  %738 = getelementptr inbounds i8, ptr %.010921488, i64 12
  %.not1328 = icmp eq ptr %738, %580
  br i1 %.not1328, label %._crit_edge1494, label %595

739:                                              ; preds = %736, %712
  %.pn1335.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1335.pn.pn.pn.pn.pn, %736 ], [ %713, %712 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %49) #12
  br label %740

740:                                              ; preds = %739, %710
  %.pn1335.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1335.pn.pn.pn.pn.pn.pn, %739 ], [ %711, %710 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #12
  br label %774

741:                                              ; preds = %._crit_edge1494
  %742 = getelementptr inbounds i8, ptr %588, i64 4
  %743 = load float, ptr %742, align 4, !tbaa !48
  %744 = invoke { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %25, float noundef %743)
          to label %745 unwind label %755

745:                                              ; preds = %741
  %746 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %747 unwind label %755

747:                                              ; preds = %745
  %748 = extractvalue { double, double } %744, 1
  %749 = extractvalue { double, double } %744, 0
  %750 = extractvalue { double, double } %746, 0
  %751 = extractvalue { double, double } %746, 1
  %.sroa.0680.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  %752 = load ptr, ptr %587, align 8, !tbaa !51
  %753 = getelementptr inbounds i8, ptr %752, i64 16
  %754 = load ptr, ptr %753, align 8
  invoke void %754(ptr noundef nonnull align 8 dereferenceable(320) %587, double %749, double %748, double %750, double %751, i32 %.sroa.0680.0.copyload)
          to label %773 unwind label %755

755:                                              ; preds = %747, %745, %741, %._crit_edge1494
  %756 = landingpad { ptr, i32 }
          cleanup
  br label %774

757:                                              ; preds = %564
  %758 = getelementptr inbounds i8, ptr %0, i64 144
  %759 = load ptr, ptr %758, align 16, !tbaa !50
  %.sroa.0678.0.copyload = load double, ptr %6, align 16
  %.sroa.2679.0.copyload = load double, ptr %.sroa.2777.0..sroa_idx, align 8, !tbaa !6
  %760 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %761 unwind label %589

761:                                              ; preds = %757
  %762 = extractvalue { double, double } %760, 0
  %763 = extractvalue { double, double } %760, 1
  %.sroa.0673.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  %764 = load ptr, ptr %759, align 8, !tbaa !51
  %765 = getelementptr inbounds i8, ptr %764, i64 16
  %766 = load ptr, ptr %765, align 8
  invoke void %766(ptr noundef nonnull align 8 dereferenceable(320) %759, double %.sroa.0678.0.copyload, double %.sroa.2679.0.copyload, double %762, double %763, i32 %.sroa.0673.0.copyload)
          to label %767 unwind label %589

767:                                              ; preds = %761
  %768 = load ptr, ptr %758, align 16, !tbaa !50
  %769 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %770 unwind label %589

770:                                              ; preds = %767
  %771 = extractvalue { double, double } %769, 0
  %772 = extractvalue { double, double } %769, 1
  %.sroa.0668.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %768, double %771, double %772, i32 %.sroa.0668.0.copyload, float noundef 0x3FB99999A0000000)
          to label %773 unwind label %589

773:                                              ; preds = %747, %770
  call void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #12
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %26) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #12
  br label %2439

774:                                              ; preds = %591, %593, %755, %740, %589, %563, %537, %506, %484
  %.pn1335.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %590, %589 ], [ %.pn1325.pn, %484 ], [ %.pn1320.pn, %506 ], [ %.pn1316, %537 ], [ %.pn1312, %563 ], [ %594, %593 ], [ %592, %591 ], [ %.pn1335.pn.pn.pn.pn.pn.pn.pn, %740 ], [ %756, %755 ]
  call void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #12
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %26) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #12
  br label %2440

775:                                              ; preds = %5
  %776 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %250, double %251)
  %777 = extractvalue { double, double } %776, 0
  %778 = extractvalue { double, double } %776, 1
  %779 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %777, double %778)
  %780 = extractvalue { double, double } %779, 0
  %781 = extractvalue { double, double } %779, 1
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %55) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %55) #12
  %782 = getelementptr inbounds i8, ptr %0, i64 344
  %783 = load ptr, ptr %782, align 8, !tbaa !47
  %784 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %783)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #12
  store i64 0, ptr %56, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %56) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #12
  store i64 0, ptr %57, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %57) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #12
  store i64 0, ptr %58, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %59) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %59, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %59)
          to label %785 unwind label %796

785:                                              ; preds = %775
  invoke void @_ZNK3JPH16NarrowPhaseQuery12CollidePointENS_4Vec3ERNS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %784, double %780, double %781, ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull align 8 dereferenceable(12) %59)
          to label %786 unwind label %798

786:                                              ; preds = %785
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %59) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %59) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %57) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %56) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #12
  %787 = getelementptr inbounds i8, ptr %55, i64 24
  %788 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_18CollidePointResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %787)
  %789 = xor i1 %788, true
  br i1 %788, label %.loopexit, label %790

790:                                              ; preds = %786
  %791 = call noundef ptr @_ZN3JPH5ArrayINS_18CollidePointResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %787)
  %792 = call noundef ptr @_ZN3JPH5ArrayINS_18CollidePointResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %787)
  %.not13021483 = icmp eq ptr %791, %792
  br i1 %.not13021483, label %.loopexit, label %.lr.ph1486

.lr.ph1486:                                       ; preds = %790
  %793 = getelementptr inbounds i8, ptr %0, i64 144
  br label %801

794:                                              ; preds = %.loopexit
  %795 = landingpad { ptr, i32 }
          cleanup
  br label %835

796:                                              ; preds = %775
  %797 = landingpad { ptr, i32 }
          cleanup
  br label %800

798:                                              ; preds = %785
  %799 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %59) #12
  br label %800

800:                                              ; preds = %798, %796
  %.pn1300 = phi { ptr, i32 } [ %799, %798 ], [ %797, %796 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %59) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %57) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %56) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #12
  br label %835

801:                                              ; preds = %.lr.ph1486, %829
  %.010931484 = phi ptr [ %791, %.lr.ph1486 ], [ %830, %829 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %60) #12
  %802 = load ptr, ptr %782, align 8, !tbaa !47
  %803 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %802)
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 8 dereferenceable(16) %803, ptr noundef nonnull align 4 dereferenceable(4) %.010931484)
          to label %804 unwind label %819

804:                                              ; preds = %801
  %805 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %60)
  br i1 %805, label %806, label %829

806:                                              ; preds = %804
  %807 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %60)
          to label %808 unwind label %821

808:                                              ; preds = %806
  %809 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %807)
  %_ZN3JPH5Color7sYellowE.val1303 = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val1304 = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.0649.0.copyload = select i1 %809, i32 %_ZN3JPH5Color7sYellowE.val1303, i32 %_ZN3JPH5Color7sOrangeE.val1304
  %810 = load ptr, ptr %793, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %61) #12
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %61, ptr noundef nonnull align 16 dereferenceable(122) %807)
          to label %811 unwind label %823

811:                                              ; preds = %808
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #12
  %812 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %807)
          to label %813 unwind label %825

813:                                              ; preds = %811
  %814 = load ptr, ptr %812, align 8, !tbaa !51
  %815 = getelementptr inbounds i8, ptr %814, i64 32
  %816 = load ptr, ptr %815, align 8
  invoke void %816(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %62, ptr noundef nonnull align 8 dereferenceable(26) %812)
          to label %817 unwind label %825

817:                                              ; preds = %813
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %810, ptr noundef nonnull align 16 dereferenceable(64) %61, ptr noundef nonnull align 16 dereferenceable(32) %62, i32 %.sroa.0649.0.copyload)
          to label %818 unwind label %825

818:                                              ; preds = %817
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %61) #12
  br label %829

819:                                              ; preds = %801
  %820 = landingpad { ptr, i32 }
          cleanup
  br label %831

821:                                              ; preds = %806
  %822 = landingpad { ptr, i32 }
          cleanup
  br label %828

823:                                              ; preds = %808
  %824 = landingpad { ptr, i32 }
          cleanup
  br label %827

825:                                              ; preds = %817, %813, %811
  %826 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #12
  br label %827

827:                                              ; preds = %825, %823
  %.pn1305 = phi { ptr, i32 } [ %826, %825 ], [ %824, %823 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %61) #12
  br label %828

828:                                              ; preds = %827, %821
  %.pn1305.pn = phi { ptr, i32 } [ %.pn1305, %827 ], [ %822, %821 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #12
  br label %831

829:                                              ; preds = %818, %804
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %60) #12
  %830 = getelementptr inbounds i8, ptr %.010931484, i64 8
  %.not1302 = icmp eq ptr %830, %792
  br i1 %.not1302, label %.loopexit, label %801

831:                                              ; preds = %828, %819
  %.pn1305.pn.pn = phi { ptr, i32 } [ %.pn1305.pn, %828 ], [ %820, %819 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %60) #12
  br label %835

.loopexit:                                        ; preds = %829, %790, %786
  %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE = phi ptr [ @_ZN3JPH5Color4sRedE, %786 ], [ @_ZN3JPH5Color6sGreenE, %790 ], [ @_ZN3JPH5Color6sGreenE, %829 ]
  %832 = getelementptr inbounds i8, ptr %0, i64 144
  %833 = load ptr, ptr %832, align 16, !tbaa !50
  %.sroa.0645.0.copyload = load i32, ptr %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %833, double %780, double %781, i32 %.sroa.0645.0.copyload, float noundef 0x3FB99999A0000000)
          to label %834 unwind label %794

834:                                              ; preds = %.loopexit
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %55) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %55) #12
  br label %2439

835:                                              ; preds = %831, %800, %794
  %.pn1305.pn.pn.pn = phi { ptr, i32 } [ %.pn1305.pn.pn, %831 ], [ %795, %794 ], [ %.pn1300, %800 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %55) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %55) #12
  br label %2440

836:                                              ; preds = %5, %5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #12
  call void @_ZN10SamplesApp16CreateProbeShapeEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::RefConst.74") align 8 %63, ptr noundef nonnull align 16 dereferenceable(712) %0)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %64) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %65) #12
  %837 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %838 unwind label %889

838:                                              ; preds = %836
  %839 = extractvalue { double, double } %837, 0
  %840 = extractvalue { double, double } %837, 1
  invoke void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %65, double %839, double %840, float noundef 0x3FD41B2F80000000)
          to label %841 unwind label %889

841:                                              ; preds = %838
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %66) #12
  %842 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %843 unwind label %891

843:                                              ; preds = %841
  %844 = extractvalue { double, double } %842, 0
  %845 = extractvalue { double, double } %842, 1
  invoke void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %66, double %844, double %845, float noundef 0x3FE41B2F80000000)
          to label %846 unwind label %891

846:                                              ; preds = %843
  call void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %64, ptr noundef nonnull align 16 dereferenceable(64) %65, ptr noundef nonnull align 16 dereferenceable(64) %66)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %66) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %65) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %67) #12
  %847 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %63)
  %848 = load ptr, ptr %847, align 8, !tbaa !51
  %849 = getelementptr inbounds i8, ptr %848, i64 24
  %850 = load ptr, ptr %849, align 8
  %851 = invoke { double, double } %850(ptr noundef nonnull align 8 dereferenceable(26) %847)
          to label %852 unwind label %894

852:                                              ; preds = %846
  %853 = extractvalue { double, double } %851, 0
  %854 = extractvalue { double, double } %851, 1
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %67, double %853, double %854)
          to label %855 unwind label %894

855:                                              ; preds = %852
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %68) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %69) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %70) #12
  %.sroa.0633.0.copyload = load double, ptr %248, align 16
  %.sroa.2634.0.copyload = load double, ptr %.sroa.2905.0..sroa_idx, align 8, !tbaa !6
  %856 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 5.000000e+00, double %.sroa.0633.0.copyload, double %.sroa.2634.0.copyload)
          to label %857 unwind label %896

857:                                              ; preds = %855
  %858 = extractvalue { double, double } %856, 0
  %859 = extractvalue { double, double } %856, 1
  %860 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %858, double %859)
          to label %861 unwind label %896

861:                                              ; preds = %857
  %862 = extractvalue { double, double } %860, 0
  %863 = extractvalue { double, double } %860, 1
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %70, double %862, double %863)
          to label %864 unwind label %896

864:                                              ; preds = %861
  call void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %69, ptr noundef nonnull align 16 dereferenceable(64) %70, ptr noundef nonnull align 16 dereferenceable(64) %64)
  call void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %68, ptr noundef nonnull align 16 dereferenceable(64) %69, ptr noundef nonnull align 16 dereferenceable(64) %67)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %70) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %69) #12
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %71) #12
  invoke void @_ZN3JPH20CollideShapeSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(37) %71)
          to label %865 unwind label %898

865:                                              ; preds = %864
  %866 = getelementptr inbounds i8, ptr %0, i64 594
  %867 = load i8, ptr %866, align 2, !tbaa !65
  store i8 %867, ptr %71, align 16, !tbaa !66
  %868 = getelementptr inbounds i8, ptr %0, i64 592
  %869 = load i8, ptr %868, align 16, !tbaa !56
  %870 = getelementptr inbounds i8, ptr %71, i64 36
  store i8 %869, ptr %870, align 4, !tbaa !68
  %871 = getelementptr inbounds i8, ptr %0, i64 595
  %872 = load i8, ptr %871, align 1, !tbaa !70
  %873 = getelementptr inbounds i8, ptr %71, i64 1
  store i8 %872, ptr %873, align 1, !tbaa !71
  %874 = getelementptr inbounds i8, ptr %0, i64 596
  %875 = load float, ptr %874, align 4, !tbaa !72
  %876 = getelementptr inbounds i8, ptr %71, i64 32
  store float %875, ptr %876, align 16, !tbaa !73
  %877 = load i32, ptr %263, align 8, !tbaa !13
  %878 = icmp eq i32 %877, 4
  %.fca.0.extract = select i1 %878, i64 ptrtoint (ptr @_ZNK3JPH16NarrowPhaseQuery12CollideShapeEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE to i64), i64 ptrtoint (ptr @_ZNK3JPH16NarrowPhaseQuery35CollideShapeWithInternalEdgeRemovalEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE to i64)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %72) #12
  call void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %72) #12
  %879 = getelementptr inbounds i8, ptr %0, i64 604
  %880 = load i32, ptr %879, align 4, !tbaa !63
  switch i32 %880, label %948 [
    i32 0, label %881
    i32 1, label %920
  ]

881:                                              ; preds = %865
  call void @llvm.lifetime.start.p0(i64 1168, ptr nonnull %73) #12
  invoke void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %73)
          to label %882 unwind label %900

882:                                              ; preds = %881
  %883 = getelementptr inbounds i8, ptr %0, i64 344
  %884 = load ptr, ptr %883, align 8, !tbaa !47
  %885 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %884)
  %886 = inttoptr i64 %.fca.0.extract to ptr
  %887 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %63)
  %888 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %904 unwind label %902

889:                                              ; preds = %838, %836
  %890 = landingpad { ptr, i32 }
          cleanup
  br label %893

891:                                              ; preds = %843, %841
  %892 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %66) #12
  br label %893

893:                                              ; preds = %891, %889
  %.pn1267 = phi { ptr, i32 } [ %892, %891 ], [ %890, %889 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %65) #12
  br label %1126

894:                                              ; preds = %852, %846
  %895 = landingpad { ptr, i32 }
          cleanup
  br label %1125

896:                                              ; preds = %861, %857, %855
  %897 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %70) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %69) #12
  br label %1124

898:                                              ; preds = %864
  %899 = landingpad { ptr, i32 }
          cleanup
  br label %1123

900:                                              ; preds = %881
  %901 = landingpad { ptr, i32 }
          cleanup
  br label %919

902:                                              ; preds = %910, %882
  %903 = landingpad { ptr, i32 }
          cleanup
  br label %918

904:                                              ; preds = %882
  %.sroa.0602.0.copyload = load double, ptr %7, align 16
  %.sroa.2603.0.copyload = load double, ptr %257, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #12
  store i64 0, ptr %74, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %74) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %75) #12
  store i64 0, ptr %75, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %75) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #12
  store i64 0, ptr %76, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %76) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %77) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %77, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %77)
          to label %905 unwind label %912

905:                                              ; preds = %904
  %906 = extractvalue { double, double } %888, 1
  %907 = extractvalue { double, double } %888, 0
  invoke void %886(ptr noundef nonnull align 8 dereferenceable(16) %885, ptr noundef %887, double %907, double %906, ptr noundef nonnull align 16 dereferenceable(64) %68, ptr noundef nonnull align 16 dereferenceable(37) %71, double %.sroa.0602.0.copyload, double %.sroa.2603.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %73, ptr noundef nonnull align 8 dereferenceable(8) %74, ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(12) %77)
          to label %908 unwind label %914

908:                                              ; preds = %905
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %77) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %77) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %76) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %75) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %74) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #12
  %909 = call noundef zeroext i1 @_ZNK3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1153) %73)
  br i1 %909, label %910, label %917

910:                                              ; preds = %908
  %911 = getelementptr inbounds i8, ptr %73, i64 32
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %72, ptr noundef nonnull align 16 dereferenceable(1120) %911)
          to label %917 unwind label %902

912:                                              ; preds = %904
  %913 = landingpad { ptr, i32 }
          cleanup
  br label %916

914:                                              ; preds = %905
  %915 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %77) #12
  br label %916

916:                                              ; preds = %914, %912
  %.pn1282 = phi { ptr, i32 } [ %915, %914 ], [ %913, %912 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %77) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %76) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %75) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %74) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #12
  br label %918

917:                                              ; preds = %910, %908
  call void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %73) #12
  call void @llvm.lifetime.end.p0(i64 1168, ptr nonnull %73) #12
  br label %1016

918:                                              ; preds = %916, %902
  %.pn1284 = phi { ptr, i32 } [ %903, %902 ], [ %.pn1282, %916 ]
  call void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %73) #12
  br label %919

919:                                              ; preds = %918, %900
  %.pn1284.pn = phi { ptr, i32 } [ %.pn1284, %918 ], [ %901, %900 ]
  call void @llvm.lifetime.end.p0(i64 1168, ptr nonnull %73) #12
  br label %1122

920:                                              ; preds = %865
  call void @llvm.lifetime.start.p0(i64 1168, ptr nonnull %78) #12
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %78)
          to label %921 unwind label %928

921:                                              ; preds = %920
  %922 = getelementptr inbounds i8, ptr %0, i64 344
  %923 = load ptr, ptr %922, align 8, !tbaa !47
  %924 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %923)
  %925 = inttoptr i64 %.fca.0.extract to ptr
  %926 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %63)
  %927 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %932 unwind label %930

928:                                              ; preds = %920
  %929 = landingpad { ptr, i32 }
          cleanup
  br label %947

930:                                              ; preds = %938, %921
  %931 = landingpad { ptr, i32 }
          cleanup
  br label %946

932:                                              ; preds = %921
  %.sroa.0598.0.copyload = load double, ptr %7, align 16
  %.sroa.2599.0.copyload = load double, ptr %257, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #12
  store i64 0, ptr %79, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %79) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %80) #12
  store i64 0, ptr %80, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %81) #12
  store i64 0, ptr %81, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %81) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %82) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %82, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %82)
          to label %933 unwind label %940

933:                                              ; preds = %932
  %934 = extractvalue { double, double } %927, 1
  %935 = extractvalue { double, double } %927, 0
  invoke void %925(ptr noundef nonnull align 8 dereferenceable(16) %924, ptr noundef %926, double %935, double %934, ptr noundef nonnull align 16 dereferenceable(64) %68, ptr noundef nonnull align 16 dereferenceable(37) %71, double %.sroa.0598.0.copyload, double %.sroa.2599.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %78, ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %80, ptr noundef nonnull align 8 dereferenceable(8) %81, ptr noundef nonnull align 8 dereferenceable(12) %82)
          to label %936 unwind label %942

936:                                              ; preds = %933
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %82) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %82) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %81) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %79) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #12
  %937 = call noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1153) %78)
  br i1 %937, label %938, label %945

938:                                              ; preds = %936
  %939 = getelementptr inbounds i8, ptr %78, i64 32
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %72, ptr noundef nonnull align 16 dereferenceable(1120) %939)
          to label %945 unwind label %930

940:                                              ; preds = %932
  %941 = landingpad { ptr, i32 }
          cleanup
  br label %944

942:                                              ; preds = %933
  %943 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %82) #12
  br label %944

944:                                              ; preds = %942, %940
  %.pn1277 = phi { ptr, i32 } [ %943, %942 ], [ %941, %940 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %82) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %81) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %79) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #12
  br label %946

945:                                              ; preds = %938, %936
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %78) #12
  call void @llvm.lifetime.end.p0(i64 1168, ptr nonnull %78) #12
  br label %1016

946:                                              ; preds = %944, %930
  %.pn1279 = phi { ptr, i32 } [ %931, %930 ], [ %.pn1277, %944 ]
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %78) #12
  br label %947

947:                                              ; preds = %946, %928
  %.pn1279.pn = phi { ptr, i32 } [ %.pn1279, %946 ], [ %929, %928 ]
  call void @llvm.lifetime.end.p0(i64 1168, ptr nonnull %78) #12
  br label %1122

948:                                              ; preds = %865
  %949 = getelementptr inbounds i8, ptr %0, i64 608
  %950 = load i8, ptr %949, align 16, !tbaa !64, !range !54, !noundef !55
  %951 = trunc nuw i8 %950 to i1
  %952 = getelementptr inbounds i8, ptr %0, i64 344
  %953 = inttoptr i64 %.fca.0.extract to ptr
  br i1 %951, label %954, label %985

954:                                              ; preds = %948
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %83) #12
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(53) %83) #12
  %955 = load ptr, ptr %952, align 8, !tbaa !47
  %956 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %955)
  %957 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %63)
  %958 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %961 unwind label %959

959:                                              ; preds = %976, %966, %965, %954
  %960 = landingpad { ptr, i32 }
          cleanup
  br label %984

961:                                              ; preds = %954
  %.sroa.0594.0.copyload = load double, ptr %7, align 16
  %.sroa.2595.0.copyload = load double, ptr %257, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %84) #12
  store i64 0, ptr %84, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %84) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %85) #12
  store i64 0, ptr %85, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #12
  store i64 0, ptr %86, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %86) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %87) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %87, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %87)
          to label %962 unwind label %978

962:                                              ; preds = %961
  %963 = extractvalue { double, double } %958, 1
  %964 = extractvalue { double, double } %958, 0
  invoke void %953(ptr noundef nonnull align 8 dereferenceable(16) %956, ptr noundef %957, double %964, double %963, ptr noundef nonnull align 16 dereferenceable(64) %68, ptr noundef nonnull align 16 dereferenceable(37) %71, double %.sroa.0594.0.copyload, double %.sroa.2595.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(8) %84, ptr noundef nonnull align 8 dereferenceable(8) %85, ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull align 8 dereferenceable(12) %87)
          to label %965 unwind label %980

965:                                              ; preds = %962
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %87) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %87) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %86) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %84) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #12
  invoke void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53) %83)
          to label %966 unwind label %959

966:                                              ; preds = %965
  %967 = call noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %72)
  %968 = getelementptr inbounds i8, ptr %83, i64 24
  %969 = call noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %968)
  %970 = call noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %968)
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %72, ptr noundef %967, ptr noundef %969, ptr noundef %970)
          to label %971 unwind label %959

971:                                              ; preds = %966
  %972 = call noundef i64 @_ZNK3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %72)
  %973 = trunc i64 %972 to i32
  %974 = load i32, ptr %879, align 4, !tbaa !63
  %975 = icmp slt i32 %974, %973
  br i1 %975, label %976, label %983

976:                                              ; preds = %971
  %977 = sext i32 %974 to i64
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %72, i64 noundef %977)
          to label %983 unwind label %959

978:                                              ; preds = %961
  %979 = landingpad { ptr, i32 }
          cleanup
  br label %982

980:                                              ; preds = %962
  %981 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %87) #12
  br label %982

982:                                              ; preds = %980, %978
  %.pn1273 = phi { ptr, i32 } [ %981, %980 ], [ %979, %978 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %87) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %86) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %84) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #12
  br label %984

983:                                              ; preds = %976, %971
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %83) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %83) #12
  br label %1016

984:                                              ; preds = %982, %959
  %.pn1275 = phi { ptr, i32 } [ %960, %959 ], [ %.pn1273, %982 ]
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %83) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %83) #12
  br label %1122

985:                                              ; preds = %948
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %88) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %88) #12
  %986 = load ptr, ptr %952, align 8, !tbaa !47
  %987 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %986)
  %988 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %63)
  %989 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %992 unwind label %990

990:                                              ; preds = %1007, %997, %996, %985
  %991 = landingpad { ptr, i32 }
          cleanup
  br label %1015

992:                                              ; preds = %985
  %.sroa.0590.0.copyload = load double, ptr %7, align 16
  %.sroa.2591.0.copyload = load double, ptr %257, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %89) #12
  store i64 0, ptr %89, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %89) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %90) #12
  store i64 0, ptr %90, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %90) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %91) #12
  store i64 0, ptr %91, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %91) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %92) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %92, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %92)
          to label %993 unwind label %1009

993:                                              ; preds = %992
  %994 = extractvalue { double, double } %989, 1
  %995 = extractvalue { double, double } %989, 0
  invoke void %953(ptr noundef nonnull align 8 dereferenceable(16) %987, ptr noundef %988, double %995, double %994, ptr noundef nonnull align 16 dereferenceable(64) %68, ptr noundef nonnull align 16 dereferenceable(37) %71, double %.sroa.0590.0.copyload, double %.sroa.2591.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %88, ptr noundef nonnull align 8 dereferenceable(8) %89, ptr noundef nonnull align 8 dereferenceable(8) %90, ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull align 8 dereferenceable(12) %92)
          to label %996 unwind label %1011

996:                                              ; preds = %993
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %92) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %92) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %91) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %90) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %89) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %88)
          to label %997 unwind label %990

997:                                              ; preds = %996
  %998 = call noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %72)
  %999 = getelementptr inbounds i8, ptr %88, i64 24
  %1000 = call noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %999)
  %1001 = call noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %999)
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %72, ptr noundef %998, ptr noundef %1000, ptr noundef %1001)
          to label %1002 unwind label %990

1002:                                             ; preds = %997
  %1003 = call noundef i64 @_ZNK3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %72)
  %1004 = trunc i64 %1003 to i32
  %1005 = load i32, ptr %879, align 4, !tbaa !63
  %1006 = icmp slt i32 %1005, %1004
  br i1 %1006, label %1007, label %1014

1007:                                             ; preds = %1002
  %1008 = sext i32 %1005 to i64
  invoke void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %72, i64 noundef %1008)
          to label %1014 unwind label %990

1009:                                             ; preds = %992
  %1010 = landingpad { ptr, i32 }
          cleanup
  br label %1013

1011:                                             ; preds = %993
  %1012 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %92) #12
  br label %1013

1013:                                             ; preds = %1011, %1009
  %.pn1269 = phi { ptr, i32 } [ %1012, %1011 ], [ %1010, %1009 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %92) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %91) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %90) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %89) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #12
  br label %1015

1014:                                             ; preds = %1007, %1002
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %88) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %88) #12
  br label %1016

1015:                                             ; preds = %1013, %990
  %.pn1271 = phi { ptr, i32 } [ %991, %990 ], [ %.pn1269, %1013 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %88) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %88) #12
  br label %1122

1016:                                             ; preds = %945, %1014, %983, %917
  %1017 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %72)
  %1018 = xor i1 %1017, true
  br i1 %1017, label %.loopexit1365, label %1019

1019:                                             ; preds = %1016
  %1020 = call noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %72)
  %1021 = call noundef ptr @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %72)
  %.not12871479 = icmp eq ptr %1020, %1021
  br i1 %.not12871479, label %.loopexit1365, label %.lr.ph1482

.lr.ph1482:                                       ; preds = %1019
  %1022 = getelementptr inbounds i8, ptr %0, i64 344
  %1023 = getelementptr inbounds i8, ptr %94, i64 8
  %1024 = getelementptr inbounds i8, ptr %0, i64 144
  %.sroa.2549.0..sroa_idx = getelementptr inbounds i8, ptr %95, i64 8
  br label %1025

1025:                                             ; preds = %.lr.ph1482, %1119
  %.010941480 = phi ptr [ %1020, %.lr.ph1482 ], [ %1120, %1119 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %93) #12
  %1026 = load ptr, ptr %1022, align 8, !tbaa !47
  %1027 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %1026)
  %1028 = getelementptr inbounds i8, ptr %.010941480, i64 60
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %93, ptr noundef nonnull align 8 dereferenceable(16) %1027, ptr noundef nonnull align 4 dereferenceable(4) %1028)
          to label %1029 unwind label %1071

1029:                                             ; preds = %1025
  %1030 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %93)
  br i1 %1030, label %1031, label %1119

1031:                                             ; preds = %1029
  %1032 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %93)
          to label %1033 unwind label %1073

1033:                                             ; preds = %1031
  %.sroa.0571.0.copyload = load double, ptr %.010941480, align 16
  %.sroa.2572.0..sroa_idx = getelementptr inbounds i8, ptr %.010941480, i64 8
  %.sroa.2572.0.copyload = load double, ptr %.sroa.2572.0..sroa_idx, align 8, !tbaa !6
  %1034 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %7, double %.sroa.0571.0.copyload, double %.sroa.2572.0.copyload)
          to label %1035 unwind label %1075

1035:                                             ; preds = %1033
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %94) #12
  %1036 = getelementptr inbounds i8, ptr %.010941480, i64 16
  %.sroa.0569.0.copyload = load double, ptr %1036, align 16
  %.sroa.2570.0..sroa_idx = getelementptr inbounds i8, ptr %.010941480, i64 24
  %.sroa.2570.0.copyload = load double, ptr %.sroa.2570.0..sroa_idx, align 8, !tbaa !6
  %1037 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %7, double %.sroa.0569.0.copyload, double %.sroa.2570.0.copyload)
          to label %1038 unwind label %1077

1038:                                             ; preds = %1035
  %1039 = extractvalue { double, double } %1034, 1
  %1040 = extractvalue { double, double } %1034, 0
  %1041 = extractvalue { double, double } %1037, 0
  store double %1041, ptr %94, align 16
  %1042 = extractvalue { double, double } %1037, 1
  store double %1042, ptr %1023, align 8
  %1043 = load ptr, ptr %1024, align 16, !tbaa !50
  %.sroa.0566.0.copyload = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1043, double %1040, double %1039, i32 %.sroa.0566.0.copyload, float noundef 0x3FB99999A0000000)
          to label %1044 unwind label %1077

1044:                                             ; preds = %1038
  %1045 = load ptr, ptr %1024, align 16, !tbaa !50
  %.sroa.0564.0.copyload = load double, ptr %94, align 16
  %.sroa.2565.0.copyload = load double, ptr %1023, align 8, !tbaa !6
  %.sroa.0563.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1045, double %.sroa.0564.0.copyload, double %.sroa.2565.0.copyload, i32 %.sroa.0563.0.copyload, float noundef 0x3FB99999A0000000)
          to label %1046 unwind label %1077

1046:                                             ; preds = %1044
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %95) #12
  %1047 = getelementptr inbounds i8, ptr %.010941480, i64 32
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %95, ptr noundef nonnull align 16 dereferenceable(16) %1047, i64 16, i1 false), !tbaa.struct !5
  %1048 = invoke noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %95)
          to label %1049 unwind label %1079

1049:                                             ; preds = %1046
  %1050 = fcmp ogt float %1048, 0.000000e+00
  br i1 %1050, label %1051, label %1081

1051:                                             ; preds = %1049
  %1052 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3dVEf(ptr noundef nonnull align 16 dereferenceable(16) %95, float noundef %1048)
          to label %1053 unwind label %1079

1053:                                             ; preds = %1051
  %1054 = load ptr, ptr %1024, align 16, !tbaa !50
  %.sroa.0559.0.copyload = load double, ptr %94, align 16
  %.sroa.2560.0.copyload = load double, ptr %1023, align 8, !tbaa !6
  %1055 = getelementptr inbounds i8, ptr %.010941480, i64 48
  %1056 = load float, ptr %1055, align 16, !tbaa !74
  %1057 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %95, float noundef %1056)
          to label %1058 unwind label %1079

1058:                                             ; preds = %1053
  %1059 = extractvalue { double, double } %1057, 0
  %1060 = extractvalue { double, double } %1057, 1
  %1061 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %94, double %1059, double %1060)
          to label %1062 unwind label %1079

1062:                                             ; preds = %1058
  %1063 = extractvalue { double, double } %1061, 0
  %1064 = extractvalue { double, double } %1061, 1
  %.sroa.0554.0.copyload = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1054, double %.sroa.0559.0.copyload, double %.sroa.2560.0.copyload, double %1063, double %1064, i32 %.sroa.0554.0.copyload, float noundef 0x3F847AE140000000)
          to label %1065 unwind label %1079

1065:                                             ; preds = %1062
  %1066 = load ptr, ptr %1024, align 16, !tbaa !50
  %.sroa.0552.0.copyload = load double, ptr %94, align 16
  %.sroa.2553.0.copyload = load double, ptr %1023, align 8, !tbaa !6
  %.sroa.0548.0.copyload = load double, ptr %95, align 16
  %.sroa.2549.0.copyload = load double, ptr %.sroa.2549.0..sroa_idx, align 8, !tbaa !6
  %1067 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %94, double %.sroa.0548.0.copyload, double %.sroa.2549.0.copyload)
          to label %1068 unwind label %1079

1068:                                             ; preds = %1065
  %1069 = extractvalue { double, double } %1067, 0
  %1070 = extractvalue { double, double } %1067, 1
  %.sroa.0547.0.copyload = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1066, double %.sroa.0552.0.copyload, double %.sroa.2553.0.copyload, double %1069, double %1070, i32 %.sroa.0547.0.copyload, float noundef 0x3F847AE140000000)
          to label %1081 unwind label %1079

1071:                                             ; preds = %1025
  %1072 = landingpad { ptr, i32 }
          cleanup
  br label %1121

1073:                                             ; preds = %1031
  %1074 = landingpad { ptr, i32 }
          cleanup
  br label %1118

1075:                                             ; preds = %1033
  %1076 = landingpad { ptr, i32 }
          cleanup
  br label %1118

1077:                                             ; preds = %1044, %1038, %1035
  %1078 = landingpad { ptr, i32 }
          cleanup
  br label %1117

1079:                                             ; preds = %1068, %1065, %1062, %1058, %1053, %1051, %1046
  %1080 = landingpad { ptr, i32 }
          cleanup
  br label %1116

1081:                                             ; preds = %1068, %1049
  %1082 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %1032)
          to label %1083 unwind label %1108

1083:                                             ; preds = %1081
  %1084 = getelementptr inbounds i8, ptr %.010941480, i64 56
  %1085 = load ptr, ptr %1082, align 8, !tbaa !51
  %1086 = getelementptr inbounds i8, ptr %1085, i64 80
  %1087 = load ptr, ptr %1086, align 8
  %1088 = invoke noundef ptr %1087(ptr noundef nonnull align 8 dereferenceable(26) %1082, ptr noundef nonnull align 4 dereferenceable(4) %1084)
          to label %1089 unwind label %1108

1089:                                             ; preds = %1083
  %1090 = load ptr, ptr %1024, align 16, !tbaa !50
  %.sroa.0544.0.copyload = load double, ptr %94, align 16
  %.sroa.2545.0.copyload = load double, ptr %1023, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %96) #12
  %1091 = load ptr, ptr %1088, align 8, !tbaa !51
  %1092 = getelementptr inbounds i8, ptr %1091, i64 32
  %1093 = load ptr, ptr %1092, align 8
  %1094 = invoke noundef ptr %1093(ptr noundef nonnull align 8 dereferenceable(12) %1088)
          to label %1095 unwind label %1110

1095:                                             ; preds = %1089
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef %1094) #12
  %.sroa.0543.0.copyload = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !6
  %1096 = load ptr, ptr %1090, align 8, !tbaa !51
  %1097 = getelementptr inbounds i8, ptr %1096, i64 56
  %1098 = load ptr, ptr %1097, align 8
  invoke void %1098(ptr noundef nonnull align 8 dereferenceable(320) %1090, double %.sroa.0544.0.copyload, double %.sroa.2545.0.copyload, ptr noundef nonnull align 8 dereferenceable(16) %96, i32 %.sroa.0543.0.copyload, float noundef 5.000000e-01)
          to label %1099 unwind label %1110

1099:                                             ; preds = %1095
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %96) #12
  %1100 = load ptr, ptr %1024, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %97) #12
  %.sroa.0541.0.copyload = load double, ptr %7, align 16
  %.sroa.2542.0.copyload = load double, ptr %257, align 8, !tbaa !6
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %97, double %.sroa.0541.0.copyload, double %.sroa.2542.0.copyload)
          to label %1101 unwind label %1112

1101:                                             ; preds = %1099
  %1102 = getelementptr inbounds i8, ptr %.010941480, i64 64
  %.sroa.0540.0.copyload = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1100, ptr noundef nonnull align 16 dereferenceable(64) %97, ptr noundef nonnull align 16 dereferenceable(528) %1102, i32 %.sroa.0540.0.copyload, float noundef 0x3F847AE140000000)
          to label %1103 unwind label %1112

1103:                                             ; preds = %1101
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %97) #12
  %1104 = load ptr, ptr %1024, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %98) #12
  %.sroa.0538.0.copyload = load double, ptr %7, align 16
  %.sroa.2539.0.copyload = load double, ptr %257, align 8, !tbaa !6
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %98, double %.sroa.0538.0.copyload, double %.sroa.2539.0.copyload)
          to label %1105 unwind label %1114

1105:                                             ; preds = %1103
  %1106 = getelementptr inbounds i8, ptr %.010941480, i64 592
  %.sroa.0537.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1104, ptr noundef nonnull align 16 dereferenceable(64) %98, ptr noundef nonnull align 16 dereferenceable(528) %1106, i32 %.sroa.0537.0.copyload, float noundef 0x3F847AE140000000)
          to label %1107 unwind label %1114

1107:                                             ; preds = %1105
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %98) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %95) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %94) #12
  br label %1119

1108:                                             ; preds = %1083, %1081
  %1109 = landingpad { ptr, i32 }
          cleanup
  br label %1116

1110:                                             ; preds = %1095, %1089
  %1111 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %96) #12
  br label %1116

1112:                                             ; preds = %1101, %1099
  %1113 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %97) #12
  br label %1116

1114:                                             ; preds = %1105, %1103
  %1115 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %98) #12
  br label %1116

1116:                                             ; preds = %1108, %1110, %1112, %1114, %1079
  %.pn1288.pn = phi { ptr, i32 } [ %1080, %1079 ], [ %1115, %1114 ], [ %1113, %1112 ], [ %1111, %1110 ], [ %1109, %1108 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %95) #12
  br label %1117

1117:                                             ; preds = %1116, %1077
  %.pn1288.pn.pn = phi { ptr, i32 } [ %.pn1288.pn, %1116 ], [ %1078, %1077 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %94) #12
  br label %1118

1118:                                             ; preds = %1075, %1117, %1073
  %.pn1288.pn.pn.pn.pn = phi { ptr, i32 } [ %1074, %1073 ], [ %.pn1288.pn.pn, %1117 ], [ %1076, %1075 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %93) #12
  br label %1121

1119:                                             ; preds = %1107, %1029
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %93) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %93) #12
  %1120 = getelementptr inbounds i8, ptr %.010941480, i64 1120
  %.not1287 = icmp eq ptr %1120, %1021
  br i1 %.not1287, label %.loopexit1365, label %1025

1121:                                             ; preds = %1118, %1071
  %.pn1288.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1288.pn.pn.pn.pn, %1118 ], [ %1072, %1071 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %93) #12
  br label %1122

.loopexit1365:                                    ; preds = %1119, %1019, %1016
  call void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %72) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %72) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %71) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %68) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %67) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %64) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %63) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #12
  br label %2439

1122:                                             ; preds = %1121, %1015, %984, %947, %919
  %.pn1288.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1288.pn.pn.pn.pn.pn, %1121 ], [ %.pn1284.pn, %919 ], [ %.pn1279.pn, %947 ], [ %.pn1275, %984 ], [ %.pn1271, %1015 ]
  call void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %72) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %72) #12
  br label %1123

1123:                                             ; preds = %1122, %898
  %.pn1288.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1288.pn.pn.pn.pn.pn.pn, %1122 ], [ %899, %898 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %71) #12
  br label %1124

1124:                                             ; preds = %1123, %896
  %.pn1288.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1288.pn.pn.pn.pn.pn.pn.pn, %1123 ], [ %897, %896 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %68) #12
  br label %1125

1125:                                             ; preds = %1124, %894
  %.pn1288.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1288.pn.pn.pn.pn.pn.pn.pn.pn, %1124 ], [ %895, %894 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %67) #12
  br label %1126

1126:                                             ; preds = %1125, %893
  %.pn1288.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1288.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1125 ], [ %.pn1267, %893 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %64) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %63) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #12
  br label %2440

1127:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %99) #12
  call void @_ZN10SamplesApp16CreateProbeShapeEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::RefConst.74") align 8 %99, ptr noundef nonnull align 16 dereferenceable(712) %0)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %100) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %101) #12
  %1128 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %1129 unwind label %1175

1129:                                             ; preds = %1127
  %1130 = extractvalue { double, double } %1128, 0
  %1131 = extractvalue { double, double } %1128, 1
  invoke void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %101, double %1130, double %1131, float noundef 0x3FD41B2F80000000)
          to label %1132 unwind label %1175

1132:                                             ; preds = %1129
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %102) #12
  %1133 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %1134 unwind label %1177

1134:                                             ; preds = %1132
  %1135 = extractvalue { double, double } %1133, 0
  %1136 = extractvalue { double, double } %1133, 1
  invoke void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %102, double %1135, double %1136, float noundef 0x3FE41B2F80000000)
          to label %1137 unwind label %1177

1137:                                             ; preds = %1134
  call void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %100, ptr noundef nonnull align 16 dereferenceable(64) %101, ptr noundef nonnull align 16 dereferenceable(64) %102)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %102) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %101) #12
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %103) #12
  %1138 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %99)
  %1139 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %1140 unwind label %1180

1140:                                             ; preds = %1137
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %104) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %105) #12
  %.sroa.0529.0.copyload = load double, ptr %6, align 16
  %.sroa.2530.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %.sroa.2530.0.copyload = load double, ptr %.sroa.2530.0..sroa_idx, align 8, !tbaa !6
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %105, double %.sroa.0529.0.copyload, double %.sroa.2530.0.copyload)
          to label %1141 unwind label %1182

1141:                                             ; preds = %1140
  %1142 = extractvalue { double, double } %1139, 1
  %1143 = extractvalue { double, double } %1139, 0
  call void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %104, ptr noundef nonnull align 16 dereferenceable(64) %105, ptr noundef nonnull align 16 dereferenceable(64) %100)
  invoke void @_ZN3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE19sFromWorldTransformEPKNS_5ShapeES1_RKS2_S1_(ptr dead_on_unwind nonnull writable sret(%"struct.JPH::RShapeCast") align 16 %103, ptr noundef %1138, double %1143, double %1142, ptr noundef nonnull align 16 dereferenceable(64) %104, double %250, double %251)
          to label %1144 unwind label %1182

1144:                                             ; preds = %1141
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %105) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %104) #12
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %106) #12
  invoke void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36) %106)
          to label %1145 unwind label %1184

1145:                                             ; preds = %1144
  %1146 = getelementptr inbounds i8, ptr %0, i64 602
  %1147 = load i8, ptr %1146, align 2, !tbaa !78, !range !54, !noundef !55
  %1148 = getelementptr inbounds i8, ptr %106, i64 34
  store i8 %1147, ptr %1148, align 2, !tbaa !79
  %1149 = getelementptr inbounds i8, ptr %0, i64 594
  %1150 = load i8, ptr %1149, align 2, !tbaa !65
  store i8 %1150, ptr %106, align 16, !tbaa !66
  %1151 = getelementptr inbounds i8, ptr %0, i64 592
  %1152 = load i8, ptr %1151, align 16, !tbaa !56
  %1153 = getelementptr inbounds i8, ptr %106, i64 32
  store i8 %1152, ptr %1153, align 16, !tbaa !81
  %1154 = getelementptr inbounds i8, ptr %0, i64 593
  %1155 = load i8, ptr %1154, align 1, !tbaa !59
  %1156 = getelementptr inbounds i8, ptr %106, i64 33
  store i8 %1155, ptr %1156, align 1, !tbaa !82
  %1157 = getelementptr inbounds i8, ptr %0, i64 601
  %1158 = load i8, ptr %1157, align 1, !tbaa !83, !range !54, !noundef !55
  %1159 = getelementptr inbounds i8, ptr %106, i64 35
  store i8 %1158, ptr %1159, align 1, !tbaa !84
  %1160 = getelementptr inbounds i8, ptr %0, i64 595
  %1161 = load i8, ptr %1160, align 1, !tbaa !70
  %1162 = getelementptr inbounds i8, ptr %106, i64 1
  store i8 %1161, ptr %1162, align 1, !tbaa !71
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %107) #12
  call void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #12
  %1163 = getelementptr inbounds i8, ptr %0, i64 604
  %1164 = load i32, ptr %1163, align 4, !tbaa !63
  switch i32 %1164, label %1220 [
    i32 0, label %1165
    i32 1, label %1198
  ]

1165:                                             ; preds = %1145
  call void @llvm.lifetime.start.p0(i64 1184, ptr nonnull %108) #12
  invoke void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %108)
          to label %1166 unwind label %1186

1166:                                             ; preds = %1165
  %1167 = getelementptr inbounds i8, ptr %0, i64 344
  %1168 = load ptr, ptr %1167, align 8, !tbaa !47
  %1169 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1168)
  %.sroa.0525.0.copyload = load double, ptr %7, align 16
  %.sroa.2526.0.copyload = load double, ptr %257, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %109) #12
  store i64 0, ptr %109, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %109) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %110) #12
  store i64 0, ptr %110, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %110) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %111) #12
  store i64 0, ptr %111, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %111) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %112) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %112, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %112)
          to label %1170 unwind label %1190

1170:                                             ; preds = %1166
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1169, ptr noundef nonnull align 16 dereferenceable(144) %103, ptr noundef nonnull align 16 dereferenceable(36) %106, double %.sroa.0525.0.copyload, double %.sroa.2526.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %108, ptr noundef nonnull align 8 dereferenceable(8) %109, ptr noundef nonnull align 8 dereferenceable(8) %110, ptr noundef nonnull align 8 dereferenceable(8) %111, ptr noundef nonnull align 8 dereferenceable(12) %112)
          to label %1171 unwind label %1192

1171:                                             ; preds = %1170
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %112) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %112) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %111) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %111) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %110) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %110) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %109) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #12
  %1172 = call noundef zeroext i1 @_ZNK3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1169) %108)
  br i1 %1172, label %1173, label %1195

1173:                                             ; preds = %1171
  %1174 = getelementptr inbounds i8, ptr %108, i64 32
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 16 dereferenceable(1125) %1174)
          to label %1195 unwind label %1188

1175:                                             ; preds = %1129, %1127
  %1176 = landingpad { ptr, i32 }
          cleanup
  br label %1179

1177:                                             ; preds = %1134, %1132
  %1178 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %102) #12
  br label %1179

1179:                                             ; preds = %1177, %1175
  %.pn1226 = phi { ptr, i32 } [ %1178, %1177 ], [ %1176, %1175 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %101) #12
  br label %1487

1180:                                             ; preds = %1137
  %1181 = landingpad { ptr, i32 }
          cleanup
  br label %1486

1182:                                             ; preds = %1141, %1140
  %1183 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %105) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %104) #12
  br label %1486

1184:                                             ; preds = %1144
  %1185 = landingpad { ptr, i32 }
          cleanup
  br label %1485

1186:                                             ; preds = %1165
  %1187 = landingpad { ptr, i32 }
          cleanup
  br label %1197

1188:                                             ; preds = %1173
  %1189 = landingpad { ptr, i32 }
          cleanup
  br label %1196

1190:                                             ; preds = %1166
  %1191 = landingpad { ptr, i32 }
          cleanup
  br label %1194

1192:                                             ; preds = %1170
  %1193 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %112) #12
  br label %1194

1194:                                             ; preds = %1192, %1190
  %.pn1241 = phi { ptr, i32 } [ %1193, %1192 ], [ %1191, %1190 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %112) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %111) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %111) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %110) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %110) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %109) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #12
  br label %1196

1195:                                             ; preds = %1173, %1171
  call void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %108) #12
  call void @llvm.lifetime.end.p0(i64 1184, ptr nonnull %108) #12
  br label %1277

1196:                                             ; preds = %1194, %1188
  %.pn1243 = phi { ptr, i32 } [ %1189, %1188 ], [ %.pn1241, %1194 ]
  call void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %108) #12
  br label %1197

1197:                                             ; preds = %1196, %1186
  %.pn1243.pn = phi { ptr, i32 } [ %.pn1243, %1196 ], [ %1187, %1186 ]
  call void @llvm.lifetime.end.p0(i64 1184, ptr nonnull %108) #12
  br label %1484

1198:                                             ; preds = %1145
  call void @llvm.lifetime.start.p0(i64 1184, ptr nonnull %113) #12
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %113)
          to label %1199 unwind label %1208

1199:                                             ; preds = %1198
  %1200 = getelementptr inbounds i8, ptr %0, i64 344
  %1201 = load ptr, ptr %1200, align 8, !tbaa !47
  %1202 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1201)
  %.sroa.0523.0.copyload = load double, ptr %7, align 16
  %.sroa.2524.0.copyload = load double, ptr %257, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %114) #12
  store i64 0, ptr %114, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %115) #12
  store i64 0, ptr %115, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %115) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %116) #12
  store i64 0, ptr %116, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %117) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %117, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %117)
          to label %1203 unwind label %1212

1203:                                             ; preds = %1199
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1202, ptr noundef nonnull align 16 dereferenceable(144) %103, ptr noundef nonnull align 16 dereferenceable(36) %106, double %.sroa.0523.0.copyload, double %.sroa.2524.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %113, ptr noundef nonnull align 8 dereferenceable(8) %114, ptr noundef nonnull align 8 dereferenceable(8) %115, ptr noundef nonnull align 8 dereferenceable(8) %116, ptr noundef nonnull align 8 dereferenceable(12) %117)
          to label %1204 unwind label %1214

1204:                                             ; preds = %1203
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %117) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %117) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %115) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %115) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #12
  %1205 = call noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1169) %113)
  br i1 %1205, label %1206, label %1217

1206:                                             ; preds = %1204
  %1207 = getelementptr inbounds i8, ptr %113, i64 32
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 16 dereferenceable(1125) %1207)
          to label %1217 unwind label %1210

1208:                                             ; preds = %1198
  %1209 = landingpad { ptr, i32 }
          cleanup
  br label %1219

1210:                                             ; preds = %1206
  %1211 = landingpad { ptr, i32 }
          cleanup
  br label %1218

1212:                                             ; preds = %1199
  %1213 = landingpad { ptr, i32 }
          cleanup
  br label %1216

1214:                                             ; preds = %1203
  %1215 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %117) #12
  br label %1216

1216:                                             ; preds = %1214, %1212
  %.pn1236 = phi { ptr, i32 } [ %1215, %1214 ], [ %1213, %1212 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %117) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %115) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %115) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #12
  br label %1218

1217:                                             ; preds = %1206, %1204
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %113) #12
  call void @llvm.lifetime.end.p0(i64 1184, ptr nonnull %113) #12
  br label %1277

1218:                                             ; preds = %1216, %1210
  %.pn1238 = phi { ptr, i32 } [ %1211, %1210 ], [ %.pn1236, %1216 ]
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %113) #12
  br label %1219

1219:                                             ; preds = %1218, %1208
  %.pn1238.pn = phi { ptr, i32 } [ %.pn1238, %1218 ], [ %1209, %1208 ]
  call void @llvm.lifetime.end.p0(i64 1184, ptr nonnull %113) #12
  br label %1484

1220:                                             ; preds = %1145
  %1221 = getelementptr inbounds i8, ptr %0, i64 608
  %1222 = load i8, ptr %1221, align 16, !tbaa !64, !range !54, !noundef !55
  %1223 = trunc nuw i8 %1222 to i1
  %1224 = getelementptr inbounds i8, ptr %0, i64 344
  br i1 %1223, label %1225, label %1251

1225:                                             ; preds = %1220
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %118) #12
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(53) %118) #12
  %1226 = load ptr, ptr %1224, align 8, !tbaa !47
  %1227 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1226)
  %.sroa.0521.0.copyload = load double, ptr %7, align 16
  %.sroa.2522.0.copyload = load double, ptr %257, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %119) #12
  store i64 0, ptr %119, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %119) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %120) #12
  store i64 0, ptr %120, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %120) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %121) #12
  store i64 0, ptr %121, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %121) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %122) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %122, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %122)
          to label %1228 unwind label %1244

1228:                                             ; preds = %1225
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1227, ptr noundef nonnull align 16 dereferenceable(144) %103, ptr noundef nonnull align 16 dereferenceable(36) %106, double %.sroa.0521.0.copyload, double %.sroa.2522.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %118, ptr noundef nonnull align 8 dereferenceable(8) %119, ptr noundef nonnull align 8 dereferenceable(8) %120, ptr noundef nonnull align 8 dereferenceable(8) %121, ptr noundef nonnull align 8 dereferenceable(12) %122)
          to label %1229 unwind label %1246

1229:                                             ; preds = %1228
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %122) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %122) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %121) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %121) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %120) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %120) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %119) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #12
  invoke void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53) %118)
          to label %1230 unwind label %1242

1230:                                             ; preds = %1229
  %1231 = call noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
  %1232 = getelementptr inbounds i8, ptr %118, i64 24
  %1233 = call noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1232)
  %1234 = call noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1232)
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef %1231, ptr noundef %1233, ptr noundef %1234)
          to label %1235 unwind label %1242

1235:                                             ; preds = %1230
  %1236 = call noundef i64 @_ZNK3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
  %1237 = trunc i64 %1236 to i32
  %1238 = load i32, ptr %1163, align 4, !tbaa !63
  %1239 = icmp slt i32 %1238, %1237
  br i1 %1239, label %1240, label %1249

1240:                                             ; preds = %1235
  %1241 = sext i32 %1238 to i64
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %1241)
          to label %1249 unwind label %1242

1242:                                             ; preds = %1240, %1230, %1229
  %1243 = landingpad { ptr, i32 }
          cleanup
  br label %1250

1244:                                             ; preds = %1225
  %1245 = landingpad { ptr, i32 }
          cleanup
  br label %1248

1246:                                             ; preds = %1228
  %1247 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %122) #12
  br label %1248

1248:                                             ; preds = %1246, %1244
  %.pn1232 = phi { ptr, i32 } [ %1247, %1246 ], [ %1245, %1244 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %122) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %121) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %121) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %120) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %120) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %119) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #12
  br label %1250

1249:                                             ; preds = %1240, %1235
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %118) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %118) #12
  br label %1277

1250:                                             ; preds = %1248, %1242
  %.pn1234 = phi { ptr, i32 } [ %1243, %1242 ], [ %.pn1232, %1248 ]
  call void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(53) %118) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %118) #12
  br label %1484

1251:                                             ; preds = %1220
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %123) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %123) #12
  %1252 = load ptr, ptr %1224, align 8, !tbaa !47
  %1253 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1252)
  %.sroa.0519.0.copyload = load double, ptr %7, align 16
  %.sroa.2520.0.copyload = load double, ptr %257, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %124) #12
  store i64 0, ptr %124, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %124) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %125) #12
  store i64 0, ptr %125, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %125) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %126) #12
  store i64 0, ptr %126, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %126) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %127) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %127, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %127)
          to label %1254 unwind label %1270

1254:                                             ; preds = %1251
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1253, ptr noundef nonnull align 16 dereferenceable(144) %103, ptr noundef nonnull align 16 dereferenceable(36) %106, double %.sroa.0519.0.copyload, double %.sroa.2520.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %123, ptr noundef nonnull align 8 dereferenceable(8) %124, ptr noundef nonnull align 8 dereferenceable(8) %125, ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef nonnull align 8 dereferenceable(12) %127)
          to label %1255 unwind label %1272

1255:                                             ; preds = %1254
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %127) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %127) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %126) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %125) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %124) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %124) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %123)
          to label %1256 unwind label %1268

1256:                                             ; preds = %1255
  %1257 = call noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
  %1258 = getelementptr inbounds i8, ptr %123, i64 24
  %1259 = call noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1258)
  %1260 = call noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1258)
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE6insertIPS1_EEvPKS1_T_S9_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef %1257, ptr noundef %1259, ptr noundef %1260)
          to label %1261 unwind label %1268

1261:                                             ; preds = %1256
  %1262 = call noundef i64 @_ZNK3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
  %1263 = trunc i64 %1262 to i32
  %1264 = load i32, ptr %1163, align 4, !tbaa !63
  %1265 = icmp slt i32 %1264, %1263
  br i1 %1265, label %1266, label %1275

1266:                                             ; preds = %1261
  %1267 = sext i32 %1264 to i64
  invoke void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %1267)
          to label %1275 unwind label %1268

1268:                                             ; preds = %1266, %1256, %1255
  %1269 = landingpad { ptr, i32 }
          cleanup
  br label %1276

1270:                                             ; preds = %1251
  %1271 = landingpad { ptr, i32 }
          cleanup
  br label %1274

1272:                                             ; preds = %1254
  %1273 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %127) #12
  br label %1274

1274:                                             ; preds = %1272, %1270
  %.pn1228 = phi { ptr, i32 } [ %1273, %1272 ], [ %1271, %1270 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %127) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %126) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %125) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %124) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %124) #12
  br label %1276

1275:                                             ; preds = %1266, %1261
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %123) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %123) #12
  br label %1277

1276:                                             ; preds = %1274, %1268
  %.pn1230 = phi { ptr, i32 } [ %1269, %1268 ], [ %.pn1228, %1274 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %123) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %123) #12
  br label %1484

1277:                                             ; preds = %1217, %1275, %1249, %1195
  %1278 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
  %1279 = xor i1 %1278, true
  br i1 %1278, label %1473, label %1280

1280:                                             ; preds = %1277
  %1281 = invoke noundef nonnull align 16 dereferenceable(1125) ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
          to label %1282 unwind label %1303

1282:                                             ; preds = %1280
  %1283 = getelementptr inbounds i8, ptr %1281, i64 1120
  %1284 = load float, ptr %1283, align 16, !tbaa !85
  %1285 = invoke { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144) %103, float noundef %1284)
          to label %1286 unwind label %1305

1286:                                             ; preds = %1282
  %1287 = extractvalue { double, double } %1285, 0
  %1288 = extractvalue { double, double } %1285, 1
  store double %1287, ptr %3, align 16
  store double %1288, ptr %.sroa.4899.0..sroa_idx, align 8, !tbaa !6
  %1289 = load float, ptr %1283, align 16, !tbaa !85
  store float %1289, ptr %2, align 4, !tbaa !9
  %1290 = getelementptr inbounds i8, ptr %1281, i64 60
  %1291 = load i32, ptr %1290, align 4, !tbaa !11
  store i32 %1291, ptr %4, align 4, !tbaa !11
  %.sroa.0512.0.copyload = load double, ptr %6, align 16
  %.sroa.6513.0.copyload = load double, ptr %.sroa.2530.0..sroa_idx, align 8, !tbaa !6
  %1292 = call noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
  %1293 = call noundef ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
  %.not12461471 = icmp eq ptr %1292, %1293
  br i1 %.not12461471, label %._crit_edge1478, label %.lr.ph1477

.lr.ph1477:                                       ; preds = %1286
  %1294 = getelementptr inbounds i8, ptr %0, i64 144
  %1295 = getelementptr inbounds i8, ptr %0, i64 344
  %1296 = getelementptr inbounds i8, ptr %129, i64 8
  %1297 = getelementptr inbounds i8, ptr %130, i64 8
  br label %1307

._crit_edge1478:                                  ; preds = %1454, %1286
  %1298 = getelementptr inbounds i8, ptr %0, i64 144
  %1299 = load ptr, ptr %1298, align 16, !tbaa !50
  %1300 = invoke noundef nonnull align 16 dereferenceable(1125) ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
          to label %1457 unwind label %1471

1301:                                             ; preds = %1477, %1473
  %1302 = landingpad { ptr, i32 }
          cleanup
  br label %1484

1303:                                             ; preds = %1280
  %1304 = landingpad { ptr, i32 }
          cleanup
  br label %1484

1305:                                             ; preds = %1282
  %1306 = landingpad { ptr, i32 }
          cleanup
  br label %1484

1307:                                             ; preds = %.lr.ph1477, %1454
  %.sroa.6513.01475 = phi double [ %.sroa.6513.0.copyload, %.lr.ph1477 ], [ %1313, %1454 ]
  %.sroa.0512.01474 = phi double [ %.sroa.0512.0.copyload, %.lr.ph1477 ], [ %1312, %1454 ]
  %.010951473 = phi i1 [ false, %.lr.ph1477 ], [ %1319, %1454 ]
  %.010961472 = phi ptr [ %1292, %.lr.ph1477 ], [ %1455, %1454 ]
  %1308 = getelementptr inbounds i8, ptr %.010961472, i64 1120
  %1309 = load float, ptr %1308, align 16, !tbaa !85
  %1310 = invoke { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144) %103, float noundef %1309)
          to label %1311 unwind label %1427

1311:                                             ; preds = %1307
  %1312 = extractvalue { double, double } %1310, 0
  %1313 = extractvalue { double, double } %1310, 1
  %1314 = load ptr, ptr %1294, align 16, !tbaa !50
  %_ZN3JPH5Color5sGreyE.val1247 = load i32, ptr @_ZN3JPH5Color5sGreyE, align 4
  %_ZN3JPH5Color6sWhiteE.val1248 = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4
  %.sroa.0489.0.copyload = select i1 %.010951473, i32 %_ZN3JPH5Color5sGreyE.val1247, i32 %_ZN3JPH5Color6sWhiteE.val1248
  %1315 = load ptr, ptr %1314, align 8, !tbaa !51
  %1316 = getelementptr inbounds i8, ptr %1315, i64 16
  %1317 = load ptr, ptr %1316, align 8
  invoke void %1317(ptr noundef nonnull align 8 dereferenceable(320) %1314, double %.sroa.0512.01474, double %.sroa.6513.01475, double %1312, double %1313, i32 %.sroa.0489.0.copyload)
          to label %1318 unwind label %1427

1318:                                             ; preds = %1311
  %1319 = xor i1 %.010951473, true
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %128) #12
  %1320 = load ptr, ptr %1295, align 8, !tbaa !47
  %1321 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %1320)
  %1322 = getelementptr inbounds i8, ptr %.010961472, i64 60
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %128, ptr noundef nonnull align 8 dereferenceable(16) %1321, ptr noundef nonnull align 4 dereferenceable(4) %1322)
          to label %1323 unwind label %1429

1323:                                             ; preds = %1318
  %1324 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %128)
  br i1 %1324, label %1325, label %1454

1325:                                             ; preds = %1323
  %1326 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %128)
          to label %1327 unwind label %1431

1327:                                             ; preds = %1325
  %1328 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %1326)
  %_ZN3JPH5Color7sYellowE.val1249 = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val1250 = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.0484.0.copyload = select i1 %1328, i32 %_ZN3JPH5Color7sYellowE.val1249, i32 %_ZN3JPH5Color7sOrangeE.val1250
  %.sroa.0480.0.copyload = load double, ptr %.010961472, align 16
  %.sroa.2481.0..sroa_idx = getelementptr inbounds i8, ptr %.010961472, i64 8
  %.sroa.2481.0.copyload = load double, ptr %.sroa.2481.0..sroa_idx, align 8, !tbaa !6
  %1329 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %7, double %.sroa.0480.0.copyload, double %.sroa.2481.0.copyload)
          to label %1330 unwind label %1433

1330:                                             ; preds = %1327
  %1331 = extractvalue { double, double } %1329, 0
  %1332 = extractvalue { double, double } %1329, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %129) #12
  %1333 = getelementptr inbounds i8, ptr %.010961472, i64 16
  %.sroa.0478.0.copyload = load double, ptr %1333, align 16
  %.sroa.2479.0..sroa_idx = getelementptr inbounds i8, ptr %.010961472, i64 24
  %.sroa.2479.0.copyload = load double, ptr %.sroa.2479.0..sroa_idx, align 8, !tbaa !6
  %1334 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %7, double %.sroa.0478.0.copyload, double %.sroa.2479.0.copyload)
          to label %1335 unwind label %1435

1335:                                             ; preds = %1330
  %1336 = extractvalue { double, double } %1334, 0
  store double %1336, ptr %129, align 16
  %1337 = extractvalue { double, double } %1334, 1
  store double %1337, ptr %1296, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %130) #12
  %1338 = getelementptr inbounds i8, ptr %.010961472, i64 32
  %1339 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %1338)
          to label %1340 unwind label %1437

1340:                                             ; preds = %1335
  %1341 = extractvalue { double, double } %1339, 0
  store double %1341, ptr %130, align 16
  %1342 = extractvalue { double, double } %1339, 1
  store double %1342, ptr %1297, align 8
  %1343 = load ptr, ptr %1294, align 16, !tbaa !50
  %.sroa.0476.0.copyload = load double, ptr %129, align 16
  %.sroa.2477.0.copyload = load double, ptr %1296, align 8, !tbaa !6
  %1344 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %129, double %1341, double %1342)
          to label %1345 unwind label %1437

1345:                                             ; preds = %1340
  %1346 = extractvalue { double, double } %1344, 0
  %1347 = extractvalue { double, double } %1344, 1
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1343, double %.sroa.0476.0.copyload, double %.sroa.2477.0.copyload, double %1346, double %1347, i32 %.sroa.0484.0.copyload, float noundef 0x3F847AE140000000)
          to label %1348 unwind label %1437

1348:                                             ; preds = %1345
  %1349 = load ptr, ptr %1294, align 16, !tbaa !50
  %.sroa.0468.0.copyload = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1349, double %1331, double %1332, i32 %.sroa.0468.0.copyload, float noundef 0x3FB99999A0000000)
          to label %1350 unwind label %1437

1350:                                             ; preds = %1348
  %1351 = invoke { double, double } @_ZNK3JPH4Vec326GetNormalizedPerpendicularEv(ptr noundef nonnull align 16 dereferenceable(16) %130)
          to label %1352 unwind label %1439

1352:                                             ; preds = %1350
  %1353 = extractvalue { double, double } %1351, 0
  %1354 = extractvalue { double, double } %1351, 1
  %1355 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %130, double %1353, double %1354)
          to label %1356 unwind label %1441

1356:                                             ; preds = %1352
  %1357 = extractvalue { double, double } %1355, 0
  %1358 = extractvalue { double, double } %1355, 1
  %1359 = load ptr, ptr %1294, align 16, !tbaa !50
  %1360 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1353, double %1354)
          to label %1361 unwind label %1441

1361:                                             ; preds = %1356
  %1362 = extractvalue { double, double } %1360, 0
  %1363 = extractvalue { double, double } %1360, 1
  %1364 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %129, double %1362, double %1363)
          to label %1365 unwind label %1441

1365:                                             ; preds = %1361
  %1366 = extractvalue { double, double } %1364, 0
  %1367 = extractvalue { double, double } %1364, 1
  %1368 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1353, double %1354)
          to label %1369 unwind label %1441

1369:                                             ; preds = %1365
  %1370 = extractvalue { double, double } %1368, 0
  %1371 = extractvalue { double, double } %1368, 1
  %1372 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %129, double %1370, double %1371)
          to label %1373 unwind label %1441

1373:                                             ; preds = %1369
  %1374 = extractvalue { double, double } %1372, 0
  %1375 = extractvalue { double, double } %1372, 1
  %1376 = load ptr, ptr %1359, align 8, !tbaa !51
  %1377 = getelementptr inbounds i8, ptr %1376, i64 16
  %1378 = load ptr, ptr %1377, align 8
  invoke void %1378(ptr noundef nonnull align 8 dereferenceable(320) %1359, double %1366, double %1367, double %1374, double %1375, i32 %.sroa.0484.0.copyload)
          to label %1379 unwind label %1441

1379:                                             ; preds = %1373
  %1380 = load ptr, ptr %1294, align 16, !tbaa !50
  %1381 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1357, double %1358)
          to label %1382 unwind label %1441

1382:                                             ; preds = %1379
  %1383 = extractvalue { double, double } %1381, 0
  %1384 = extractvalue { double, double } %1381, 1
  %1385 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %129, double %1383, double %1384)
          to label %1386 unwind label %1441

1386:                                             ; preds = %1382
  %1387 = extractvalue { double, double } %1385, 0
  %1388 = extractvalue { double, double } %1385, 1
  %1389 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %1357, double %1358)
          to label %1390 unwind label %1441

1390:                                             ; preds = %1386
  %1391 = extractvalue { double, double } %1389, 0
  %1392 = extractvalue { double, double } %1389, 1
  %1393 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %129, double %1391, double %1392)
          to label %1394 unwind label %1441

1394:                                             ; preds = %1390
  %1395 = extractvalue { double, double } %1393, 0
  %1396 = extractvalue { double, double } %1393, 1
  %1397 = load ptr, ptr %1380, align 8, !tbaa !51
  %1398 = getelementptr inbounds i8, ptr %1397, i64 16
  %1399 = load ptr, ptr %1398, align 8
  invoke void %1399(ptr noundef nonnull align 8 dereferenceable(320) %1380, double %1387, double %1388, double %1395, double %1396, i32 %.sroa.0484.0.copyload)
          to label %1400 unwind label %1441

1400:                                             ; preds = %1394
  %1401 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %1326)
          to label %1402 unwind label %1443

1402:                                             ; preds = %1400
  %1403 = getelementptr inbounds i8, ptr %.010961472, i64 56
  %1404 = load ptr, ptr %1401, align 8, !tbaa !51
  %1405 = getelementptr inbounds i8, ptr %1404, i64 80
  %1406 = load ptr, ptr %1405, align 8
  %1407 = invoke noundef ptr %1406(ptr noundef nonnull align 8 dereferenceable(26) %1401, ptr noundef nonnull align 4 dereferenceable(4) %1403)
          to label %1408 unwind label %1443

1408:                                             ; preds = %1402
  %1409 = load ptr, ptr %1294, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %131) #12
  %1410 = load ptr, ptr %1407, align 8, !tbaa !51
  %1411 = getelementptr inbounds i8, ptr %1410, i64 32
  %1412 = load ptr, ptr %1411, align 8
  %1413 = invoke noundef ptr %1412(ptr noundef nonnull align 8 dereferenceable(12) %1407)
          to label %1414 unwind label %1445

1414:                                             ; preds = %1408
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %131, ptr noundef %1413) #12
  %.sroa.0432.0.copyload = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !6
  %1415 = load ptr, ptr %1409, align 8, !tbaa !51
  %1416 = getelementptr inbounds i8, ptr %1415, i64 56
  %1417 = load ptr, ptr %1416, align 8
  invoke void %1417(ptr noundef nonnull align 8 dereferenceable(320) %1409, double %1312, double %1313, ptr noundef nonnull align 8 dereferenceable(16) %131, i32 %.sroa.0432.0.copyload, float noundef 5.000000e-01)
          to label %1418 unwind label %1445

1418:                                             ; preds = %1414
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %131) #12
  %1419 = load ptr, ptr %1294, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %132) #12
  %.sroa.0430.0.copyload = load double, ptr %7, align 16
  %.sroa.2431.0.copyload = load double, ptr %257, align 8, !tbaa !6
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %132, double %.sroa.0430.0.copyload, double %.sroa.2431.0.copyload)
          to label %1420 unwind label %1447

1420:                                             ; preds = %1418
  %1421 = getelementptr inbounds i8, ptr %.010961472, i64 64
  %.sroa.0429.0.copyload = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1419, ptr noundef nonnull align 16 dereferenceable(64) %132, ptr noundef nonnull align 16 dereferenceable(528) %1421, i32 %.sroa.0429.0.copyload, float noundef 0x3F847AE140000000)
          to label %1422 unwind label %1447

1422:                                             ; preds = %1420
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %132) #12
  %1423 = load ptr, ptr %1294, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %133) #12
  %.sroa.0427.0.copyload = load double, ptr %7, align 16
  %.sroa.2428.0.copyload = load double, ptr %257, align 8, !tbaa !6
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %133, double %.sroa.0427.0.copyload, double %.sroa.2428.0.copyload)
          to label %1424 unwind label %1449

1424:                                             ; preds = %1422
  %1425 = getelementptr inbounds i8, ptr %.010961472, i64 592
  %.sroa.0426.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1423, ptr noundef nonnull align 16 dereferenceable(64) %133, ptr noundef nonnull align 16 dereferenceable(528) %1425, i32 %.sroa.0426.0.copyload, float noundef 0x3F847AE140000000)
          to label %1426 unwind label %1449

1426:                                             ; preds = %1424
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %133) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %130) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %129) #12
  br label %1454

1427:                                             ; preds = %1311, %1307
  %1428 = landingpad { ptr, i32 }
          cleanup
  br label %1484

1429:                                             ; preds = %1318
  %1430 = landingpad { ptr, i32 }
          cleanup
  br label %1456

1431:                                             ; preds = %1325
  %1432 = landingpad { ptr, i32 }
          cleanup
  br label %1453

1433:                                             ; preds = %1327
  %1434 = landingpad { ptr, i32 }
          cleanup
  br label %1453

1435:                                             ; preds = %1330
  %1436 = landingpad { ptr, i32 }
          cleanup
  br label %1452

1437:                                             ; preds = %1348, %1345, %1340, %1335
  %1438 = landingpad { ptr, i32 }
          cleanup
  br label %1451

1439:                                             ; preds = %1350
  %1440 = landingpad { ptr, i32 }
          cleanup
  br label %1451

1441:                                             ; preds = %1394, %1390, %1386, %1382, %1379, %1373, %1369, %1365, %1361, %1356, %1352
  %1442 = landingpad { ptr, i32 }
          cleanup
  br label %1451

1443:                                             ; preds = %1402, %1400
  %1444 = landingpad { ptr, i32 }
          cleanup
  br label %1451

1445:                                             ; preds = %1414, %1408
  %1446 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %131) #12
  br label %1451

1447:                                             ; preds = %1420, %1418
  %1448 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %132) #12
  br label %1451

1449:                                             ; preds = %1424, %1422
  %1450 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %133) #12
  br label %1451

1451:                                             ; preds = %1439, %1443, %1445, %1447, %1449, %1441, %1437
  %.pn1251.pn.pn.pn = phi { ptr, i32 } [ %1438, %1437 ], [ %1440, %1439 ], [ %1442, %1441 ], [ %1450, %1449 ], [ %1448, %1447 ], [ %1446, %1445 ], [ %1444, %1443 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %130) #12
  br label %1452

1452:                                             ; preds = %1451, %1435
  %.pn1251.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1251.pn.pn.pn, %1451 ], [ %1436, %1435 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %129) #12
  br label %1453

1453:                                             ; preds = %1433, %1452, %1431
  %.pn1251.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %1432, %1431 ], [ %.pn1251.pn.pn.pn.pn, %1452 ], [ %1434, %1433 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %128) #12
  br label %1456

1454:                                             ; preds = %1426, %1323
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %128) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %128) #12
  %1455 = getelementptr inbounds i8, ptr %.010961472, i64 1136
  %.not1246 = icmp eq ptr %1455, %1293
  br i1 %.not1246, label %._crit_edge1478, label %1307

1456:                                             ; preds = %1453, %1429
  %.pn1251.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1251.pn.pn.pn.pn.pn.pn, %1453 ], [ %1430, %1429 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %128) #12
  br label %1484

1457:                                             ; preds = %._crit_edge1478
  %1458 = getelementptr inbounds i8, ptr %1300, i64 1120
  %1459 = load float, ptr %1458, align 16, !tbaa !85
  %1460 = invoke { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144) %103, float noundef %1459)
          to label %1461 unwind label %1471

1461:                                             ; preds = %1457
  %1462 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %1463 unwind label %1471

1463:                                             ; preds = %1461
  %1464 = extractvalue { double, double } %1460, 1
  %1465 = extractvalue { double, double } %1460, 0
  %1466 = extractvalue { double, double } %1462, 0
  %1467 = extractvalue { double, double } %1462, 1
  %.sroa.0419.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  %1468 = load ptr, ptr %1299, align 8, !tbaa !51
  %1469 = getelementptr inbounds i8, ptr %1468, i64 16
  %1470 = load ptr, ptr %1469, align 8
  invoke void %1470(ptr noundef nonnull align 8 dereferenceable(320) %1299, double %1465, double %1464, double %1466, double %1467, i32 %.sroa.0419.0.copyload)
          to label %1483 unwind label %1471

1471:                                             ; preds = %1463, %1461, %1457, %._crit_edge1478
  %1472 = landingpad { ptr, i32 }
          cleanup
  br label %1484

1473:                                             ; preds = %1277
  %1474 = getelementptr inbounds i8, ptr %0, i64 144
  %1475 = load ptr, ptr %1474, align 16, !tbaa !50
  %.sroa.0417.0.copyload = load double, ptr %6, align 16
  %.sroa.2418.0.copyload = load double, ptr %.sroa.2530.0..sroa_idx, align 8, !tbaa !6
  %1476 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %1477 unwind label %1301

1477:                                             ; preds = %1473
  %1478 = extractvalue { double, double } %1476, 0
  %1479 = extractvalue { double, double } %1476, 1
  %.sroa.0412.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  %1480 = load ptr, ptr %1475, align 8, !tbaa !51
  %1481 = getelementptr inbounds i8, ptr %1480, i64 16
  %1482 = load ptr, ptr %1481, align 8
  invoke void %1482(ptr noundef nonnull align 8 dereferenceable(320) %1475, double %.sroa.0417.0.copyload, double %.sroa.2418.0.copyload, double %1478, double %1479, i32 %.sroa.0412.0.copyload)
          to label %1483 unwind label %1301

1483:                                             ; preds = %1463, %1477
  call void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %107) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %106) #12
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %103) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %100) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %99) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %99) #12
  br label %2439

1484:                                             ; preds = %1303, %1305, %1427, %1456, %1471, %1301, %1276, %1250, %1219, %1197
  %.pn1251.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %1302, %1301 ], [ %.pn1243.pn, %1197 ], [ %.pn1238.pn, %1219 ], [ %.pn1234, %1250 ], [ %.pn1230, %1276 ], [ %1306, %1305 ], [ %1304, %1303 ], [ %1472, %1471 ], [ %.pn1251.pn.pn.pn.pn.pn.pn.pn, %1456 ], [ %1428, %1427 ]
  call void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %107) #12
  br label %1485

1485:                                             ; preds = %1484, %1184
  %.pn1251.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1251.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1484 ], [ %1185, %1184 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %106) #12
  br label %1486

1486:                                             ; preds = %1485, %1182, %1180
  %.pn1251.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1251.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1485 ], [ %1183, %1182 ], [ %1181, %1180 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %103) #12
  br label %1487

1487:                                             ; preds = %1486, %1179
  %.pn1251.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1251.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1486 ], [ %.pn1226, %1179 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %100) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %99) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %99) #12
  br label %2440

1488:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %134) #12
  store float 1.000000e+00, ptr %134, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %135) #12
  %1489 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %250, double %251)
  %1490 = extractvalue { double, double } %1489, 0
  store double %1490, ptr %135, align 16
  %1491 = getelementptr inbounds i8, ptr %135, i64 8
  %1492 = extractvalue { double, double } %1489, 1
  store double %1492, ptr %1491, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %136) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %137) #12
  store float 0xC7EFFFFFE0000000, ptr %137, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %138) #12
  store i32 -1, ptr %138, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %139) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %140) #12
  call void @_ZN3JPH10StridedPtrIKNS_4Vec3EEC2EPS2_i(ptr noundef nonnull align 8 dereferenceable(12) %140, ptr noundef nonnull %135, i32 noundef 16)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %141) #12
  call void @_ZN3JPH10StridedPtrIKfEC2EPS1_i(ptr noundef nonnull align 8 dereferenceable(12) %141, ptr noundef nonnull %134, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %142) #12
  call void @_ZN3JPH10StridedPtrINS_5PlaneEEC2EPS1_i(ptr noundef nonnull align 8 dereferenceable(12) %142, ptr noundef nonnull %136, i32 noundef 16)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %143) #12
  call void @_ZN3JPH10StridedPtrIfEC2EPfi(ptr noundef nonnull align 8 dereferenceable(12) %143, ptr noundef nonnull %137, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %144) #12
  call void @_ZN3JPH10StridedPtrIiEC2EPii(ptr noundef nonnull align 8 dereferenceable(12) %144, ptr noundef nonnull %138, i32 noundef 4)
  call void @_ZN3JPH29CollideSoftBodyVertexIteratorC2ERKNS_10StridedPtrIKNS_4Vec3EEERKNS1_IKfEERKNS1_INS_5PlaneEEERKNS1_IfEERKNS1_IiEE(ptr noundef nonnull align 8 dereferenceable(80) %139, ptr noundef nonnull align 8 dereferenceable(12) %140, ptr noundef nonnull align 8 dereferenceable(12) %141, ptr noundef nonnull align 8 dereferenceable(12) %142, ptr noundef nonnull align 8 dereferenceable(12) %143, ptr noundef nonnull align 8 dereferenceable(12) %144)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %144) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %143) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %142) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %141) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %140) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %145) #12
  %.sroa.0406.0.copyload = load double, ptr %135, align 16
  %.sroa.2407.0.copyload = load double, ptr %1491, align 8, !tbaa !6
  %1493 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %.sroa.0406.0.copyload, double %.sroa.2407.0.copyload)
  %1494 = extractvalue { double, double } %1493, 0
  %1495 = extractvalue { double, double } %1493, 1
  call void @_ZN3JPH5AABoxC2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(32) %145, double %1494, double %1495, float noundef 1.000000e+01)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %146) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %146) #12
  %1496 = getelementptr inbounds i8, ptr %0, i64 344
  %1497 = load ptr, ptr %1496, align 8, !tbaa !47
  %1498 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1497)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %147) #12
  store i64 0, ptr %147, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %147) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %148) #12
  store i64 0, ptr %148, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %148) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %149) #12
  store i64 0, ptr %149, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %149) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %150) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %150, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %150)
          to label %1499 unwind label %1513

1499:                                             ; preds = %1488
  invoke void @_ZNK3JPH16NarrowPhaseQuery24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1498, ptr noundef nonnull align 16 dereferenceable(32) %145, ptr noundef nonnull align 8 dereferenceable(24) %146, ptr noundef nonnull align 8 dereferenceable(8) %147, ptr noundef nonnull align 8 dereferenceable(8) %148, ptr noundef nonnull align 8 dereferenceable(8) %149, ptr noundef nonnull align 8 dereferenceable(12) %150)
          to label %1500 unwind label %1515

1500:                                             ; preds = %1499
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %150) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %150) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %149) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %149) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %148) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %148) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %147) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %147) #12
  %1501 = load <2 x double>, ptr %135, align 16
  %1502 = getelementptr inbounds i8, ptr %146, i64 24
  %1503 = call noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1502)
  %1504 = call noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1502)
  %.not12041460 = icmp eq ptr %1503, %1504
  br i1 %.not12041460, label %._crit_edge1467, label %.lr.ph1466

.lr.ph1466:                                       ; preds = %1500
  %1505 = getelementptr inbounds i8, ptr %155, i64 8
  %1506 = getelementptr inbounds i8, ptr %156, i64 32
  %.sroa.2375.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %1507 = getelementptr inbounds i8, ptr %157, i64 48
  %1508 = getelementptr inbounds i8, ptr %157, i64 80
  br label %1518

._crit_edge1467:                                  ; preds = %1596, %1500
  %.01097.lcssa = phi float [ 0.000000e+00, %1500 ], [ %.21099, %1596 ]
  %1509 = phi <2 x double> [ %1501, %1500 ], [ %1597, %1596 ]
  %1510 = getelementptr inbounds i8, ptr %0, i64 144
  %1511 = load ptr, ptr %1510, align 16, !tbaa !50
  %.sroa.0370.0.copyload = load double, ptr %135, align 16
  %.sroa.2371.0.copyload = load double, ptr %1491, align 8, !tbaa !6
  %1512 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %.sroa.0370.0.copyload, double %.sroa.2371.0.copyload)
          to label %1599 unwind label %1657

1513:                                             ; preds = %1488
  %1514 = landingpad { ptr, i32 }
          cleanup
  br label %1517

1515:                                             ; preds = %1499
  %1516 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %150) #12
  br label %1517

1517:                                             ; preds = %1515, %1513
  %.pn1202 = phi { ptr, i32 } [ %1516, %1515 ], [ %1514, %1513 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %150) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %149) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %149) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %148) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %148) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %147) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %147) #12
  br label %1689

1518:                                             ; preds = %.lr.ph1466, %1596
  %.010971462 = phi float [ 0.000000e+00, %.lr.ph1466 ], [ %.21099, %1596 ]
  %.011001461 = phi ptr [ %1503, %.lr.ph1466 ], [ %1598, %1596 ]
  %1519 = phi <2 x double> [ %1501, %.lr.ph1466 ], [ %1597, %1596 ]
  %1520 = call noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %1502)
  %1521 = ptrtoint ptr %.011001461 to i64
  %1522 = ptrtoint ptr %1520 to i64
  %1523 = sub i64 %1521, %1522
  %1524 = lshr exact i64 %1523, 6
  %1525 = trunc i64 %1524 to i32
  %1526 = getelementptr inbounds i8, ptr %.011001461, i64 32
  %1527 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1526)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %151) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %152) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %153) #12
  %1528 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %6)
          to label %1529 unwind label %1568

1529:                                             ; preds = %1518
  %1530 = extractvalue { double, double } %1528, 0
  %1531 = extractvalue { double, double } %1528, 1
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %153, double %1530, double %1531)
          to label %1532 unwind label %1568

1532:                                             ; preds = %1529
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %154) #12
  invoke void @_ZNK3JPH16TransformedShape24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %154, ptr noundef nonnull align 16 dereferenceable(64) %.011001461)
          to label %1533 unwind label %1570

1533:                                             ; preds = %1532
  call void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %152, ptr noundef nonnull align 16 dereferenceable(64) %153, ptr noundef nonnull align 16 dereferenceable(64) %154)
  call void @_ZNK3JPH5Mat447ToMat44Ev(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %151, ptr noundef nonnull align 16 dereferenceable(64) %152)
  %1534 = invoke { double, double } @_ZNK3JPH16TransformedShape13GetShapeScaleEv(ptr noundef nonnull align 16 dereferenceable(64) %.011001461)
          to label %1535 unwind label %1570

1535:                                             ; preds = %1533
  %1536 = extractvalue { double, double } %1534, 0
  %1537 = extractvalue { double, double } %1534, 1
  %1538 = load ptr, ptr %1527, align 8, !tbaa !51
  %1539 = getelementptr inbounds i8, ptr %1538, i64 152
  %1540 = load ptr, ptr %1539, align 8
  invoke void %1540(ptr noundef nonnull align 8 dereferenceable(26) %1527, ptr noundef nonnull align 16 dereferenceable(64) %151, double %1536, double %1537, ptr noundef nonnull align 8 dereferenceable(80) %139, i32 noundef 1, i32 noundef %1525)
          to label %1541 unwind label %1570

1541:                                             ; preds = %1535
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %154) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %153) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %152) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %151) #12
  %1542 = load i32, ptr %138, align 4, !tbaa !11
  %1543 = icmp eq i32 %1542, %1525
  br i1 %1543, label %1544, label %1596

1544:                                             ; preds = %1541
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %155) #12
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %155, float noundef 0x3EB0C6F7A0000000, ptr noundef null)
          to label %1545 unwind label %1573

1545:                                             ; preds = %1544
  invoke void @_ZNK3JPH9RefTargetINS_5ShapeEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %1505)
          to label %1546 unwind label %1575

1546:                                             ; preds = %1545
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %156) #12
  invoke void @_ZN3JPH20CollideShapeSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(37) %156)
          to label %1547 unwind label %1577

1547:                                             ; preds = %1546
  %1548 = call noundef float @_ZSt4sqrtf(float noundef 3.000000e+00)
  %1549 = fmul float %1548, 1.000000e+01
  store float %1549, ptr %1506, align 16, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 1168, ptr nonnull %157) #12
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %157)
          to label %1550 unwind label %1579

1550:                                             ; preds = %1547
  %1551 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %1552 unwind label %1581

1552:                                             ; preds = %1550
  %1553 = extractvalue { double, double } %1551, 0
  %1554 = extractvalue { double, double } %1551, 1
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %158) #12
  %.sroa.0376.0.copyload = load double, ptr %135, align 16
  %.sroa.2377.0.copyload = load double, ptr %1491, align 8, !tbaa !6
  %1555 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %.sroa.0376.0.copyload, double %.sroa.2377.0.copyload)
          to label %1556 unwind label %1583

1556:                                             ; preds = %1552
  %1557 = extractvalue { double, double } %1555, 0
  %1558 = extractvalue { double, double } %1555, 1
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %158, double %1557, double %1558)
          to label %1559 unwind label %1583

1559:                                             ; preds = %1556
  %.sroa.0374.0.copyload = load double, ptr %6, align 16
  %.sroa.2375.0.copyload = load double, ptr %.sroa.2375.0..sroa_idx, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %159) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %159, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %159)
          to label %1560 unwind label %1585

1560:                                             ; preds = %1559
  invoke void @_ZNK3JPH16TransformedShape12CollideShapeEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(64) %.011001461, ptr noundef nonnull %155, double %1553, double %1554, ptr noundef nonnull align 16 dereferenceable(64) %158, ptr noundef nonnull align 16 dereferenceable(37) %156, double %.sroa.0374.0.copyload, double %.sroa.2375.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %157, ptr noundef nonnull align 8 dereferenceable(12) %159)
          to label %1561 unwind label %1587

1561:                                             ; preds = %1560
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %159) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %159) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %158) #12
  %1562 = call noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1153) %157)
  %1563 = load <2 x double>, ptr %1507, align 16
  %1564 = load float, ptr %1508, align 16
  %.11098 = select i1 %1562, float %1564, float %.010971462
  %1565 = insertelement <2 x i1> poison, i1 %1562, i64 0
  %1566 = shufflevector <2 x i1> %1565, <2 x i1> poison, <2 x i32> zeroinitializer
  %1567 = select <2 x i1> %1566, <2 x double> %1563, <2 x double> %1519
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %157) #12
  call void @llvm.lifetime.end.p0(i64 1168, ptr nonnull %157) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %156) #12
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %155) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %155) #12
  br label %1596

1568:                                             ; preds = %1529, %1518
  %1569 = landingpad { ptr, i32 }
          cleanup
  br label %1572

1570:                                             ; preds = %1535, %1533, %1532
  %1571 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %154) #12
  br label %1572

1572:                                             ; preds = %1570, %1568
  %.pn1213 = phi { ptr, i32 } [ %1571, %1570 ], [ %1569, %1568 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %153) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %152) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %151) #12
  br label %1689

1573:                                             ; preds = %1544
  %1574 = landingpad { ptr, i32 }
          cleanup
  br label %1595

1575:                                             ; preds = %1545
  %1576 = landingpad { ptr, i32 }
          cleanup
  br label %1594

1577:                                             ; preds = %1546
  %1578 = landingpad { ptr, i32 }
          cleanup
  br label %1593

1579:                                             ; preds = %1547
  %1580 = landingpad { ptr, i32 }
          cleanup
  br label %1592

1581:                                             ; preds = %1550
  %1582 = landingpad { ptr, i32 }
          cleanup
  br label %1591

1583:                                             ; preds = %1556, %1552
  %1584 = landingpad { ptr, i32 }
          cleanup
  br label %1590

1585:                                             ; preds = %1559
  %1586 = landingpad { ptr, i32 }
          cleanup
  br label %1589

1587:                                             ; preds = %1560
  %1588 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %159) #12
  br label %1589

1589:                                             ; preds = %1587, %1585
  %.pn1215 = phi { ptr, i32 } [ %1588, %1587 ], [ %1586, %1585 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %159) #12
  br label %1590

1590:                                             ; preds = %1589, %1583
  %.pn1215.pn = phi { ptr, i32 } [ %.pn1215, %1589 ], [ %1584, %1583 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %158) #12
  br label %1591

1591:                                             ; preds = %1590, %1581
  %.pn1215.pn.pn = phi { ptr, i32 } [ %.pn1215.pn, %1590 ], [ %1582, %1581 ]
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1153) %157) #12
  br label %1592

1592:                                             ; preds = %1591, %1579
  %.pn1215.pn.pn.pn = phi { ptr, i32 } [ %.pn1215.pn.pn, %1591 ], [ %1580, %1579 ]
  call void @llvm.lifetime.end.p0(i64 1168, ptr nonnull %157) #12
  br label %1593

1593:                                             ; preds = %1592, %1577
  %.pn1215.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1215.pn.pn.pn, %1592 ], [ %1578, %1577 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %156) #12
  br label %1594

1594:                                             ; preds = %1593, %1575
  %.pn1215.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1215.pn.pn.pn.pn, %1593 ], [ %1576, %1575 ]
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %155) #12
  br label %1595

1595:                                             ; preds = %1594, %1573
  %.pn1215.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1215.pn.pn.pn.pn.pn, %1594 ], [ %1574, %1573 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %155) #12
  br label %1689

1596:                                             ; preds = %1561, %1541
  %.21099 = phi float [ %.11098, %1561 ], [ %.010971462, %1541 ]
  %1597 = phi <2 x double> [ %1567, %1561 ], [ %1519, %1541 ]
  %1598 = getelementptr inbounds i8, ptr %.011001461, i64 64
  %.not1204 = icmp eq ptr %1598, %1504
  br i1 %.not1204, label %._crit_edge1467, label %1518

1599:                                             ; preds = %._crit_edge1467
  %1600 = extractvalue { double, double } %1512, 0
  %1601 = extractvalue { double, double } %1512, 1
  %.sroa.0369.0.copyload = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1511, double %1600, double %1601, i32 %.sroa.0369.0.copyload, float noundef 0x3FB99999A0000000)
          to label %1602 unwind label %1657

1602:                                             ; preds = %1599
  %1603 = load ptr, ptr %1510, align 16, !tbaa !50
  %1604 = extractelement <2 x double> %1509, i64 0
  %1605 = extractelement <2 x double> %1509, i64 1
  %1606 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %1604, double %1605)
          to label %1607 unwind label %1657

1607:                                             ; preds = %1602
  %1608 = extractvalue { double, double } %1606, 0
  %1609 = extractvalue { double, double } %1606, 1
  %.sroa.0364.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1603, double %1608, double %1609, i32 %.sroa.0364.0.copyload, float noundef 0x3FB99999A0000000)
          to label %1610 unwind label %1657

1610:                                             ; preds = %1607
  %1611 = load i32, ptr %138, align 4, !tbaa !11
  %.not1205 = icmp eq i32 %1611, -1
  br i1 %.not1205, label %1688, label %1612

1612:                                             ; preds = %1610
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %160) #12
  %.sroa.0360.0.copyload = load double, ptr %135, align 16
  %.sroa.2361.0.copyload = load double, ptr %1491, align 8, !tbaa !6
  %1613 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %.sroa.0360.0.copyload, double %.sroa.2361.0.copyload)
          to label %1614 unwind label %1659

1614:                                             ; preds = %1612
  %1615 = extractvalue { double, double } %1613, 0
  store double %1615, ptr %160, align 16
  %1616 = getelementptr inbounds i8, ptr %160, i64 8
  %1617 = extractvalue { double, double } %1613, 1
  store double %1617, ptr %1616, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %161) #12
  %1618 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %136)
          to label %1619 unwind label %1661

1619:                                             ; preds = %1614
  %1620 = extractvalue { double, double } %1618, 0
  store double %1620, ptr %161, align 16
  %1621 = getelementptr inbounds i8, ptr %161, i64 8
  %1622 = extractvalue { double, double } %1618, 1
  store double %1622, ptr %1621, align 8
  %.sroa.0356.0.copyload = load double, ptr %135, align 16
  %.sroa.2357.0.copyload = load double, ptr %1491, align 8, !tbaa !6
  %1623 = invoke noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %136, double %.sroa.0356.0.copyload, double %.sroa.2357.0.copyload)
          to label %1624 unwind label %1661

1624:                                             ; preds = %1619
  %1625 = invoke { double, double } @_ZNK3JPH4Vec3mlEf(ptr noundef nonnull align 16 dereferenceable(16) %161, float noundef %1623)
          to label %1626 unwind label %1661

1626:                                             ; preds = %1624
  %1627 = extractvalue { double, double } %1625, 0
  %1628 = extractvalue { double, double } %1625, 1
  %1629 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %160, double %1627, double %1628)
          to label %1630 unwind label %1661

1630:                                             ; preds = %1626
  %1631 = extractvalue { double, double } %1629, 0
  %1632 = extractvalue { double, double } %1629, 1
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %161) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %160) #12
  %1633 = load ptr, ptr %1510, align 16, !tbaa !50
  %1634 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %136)
          to label %1635 unwind label %1664

1635:                                             ; preds = %1630
  %1636 = extractvalue { double, double } %1634, 0
  %1637 = extractvalue { double, double } %1634, 1
  %.sroa.0351.0.copyload = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer9DrawPlaneENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1633, double %1631, double %1632, double %1636, double %1637, i32 %.sroa.0351.0.copyload, float noundef 2.000000e+00)
          to label %1638 unwind label %1664

1638:                                             ; preds = %1635
  %1639 = load float, ptr %137, align 4, !tbaa !9
  %1640 = fsub float %.01097.lcssa, %1639
  %1641 = call noundef float @_ZSt3absf(float noundef %1640)
  %1642 = fcmp ogt float %1641, 0x3F50624DE0000000
  %1643 = load ptr, ptr %1510, align 16, !tbaa !50
  br i1 %1642, label %1644, label %1671

1644:                                             ; preds = %1638
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %162) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %163) #12
  %1645 = load float, ptr %137, align 4, !tbaa !9
  %1646 = fpext float %1645 to double
  %1647 = fpext float %.01097.lcssa to double
  invoke void (ptr, ptr, ...) @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %163, ptr noundef nonnull @.str.150, double noundef %1646, double noundef %1647)
          to label %1648 unwind label %1666

1648:                                             ; preds = %1644
  %1649 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %163) #12
  %1650 = extractvalue { i64, ptr } %1649, 0
  store i64 %1650, ptr %162, align 8
  %1651 = getelementptr inbounds i8, ptr %162, i64 8
  %1652 = extractvalue { i64, ptr } %1649, 1
  store ptr %1652, ptr %1651, align 8
  %.sroa.0348.0.copyload = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !6
  %1653 = load ptr, ptr %1643, align 8, !tbaa !51
  %1654 = getelementptr inbounds i8, ptr %1653, i64 56
  %1655 = load ptr, ptr %1654, align 8
  invoke void %1655(ptr noundef nonnull align 8 dereferenceable(320) %1643, double %1631, double %1632, ptr noundef nonnull align 8 dereferenceable(16) %162, i32 %.sroa.0348.0.copyload, float noundef 5.000000e-01)
          to label %1656 unwind label %1668

1656:                                             ; preds = %1648
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %163) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %162) #12
  br label %1688

1657:                                             ; preds = %1607, %1602, %1599, %._crit_edge1467
  %1658 = landingpad { ptr, i32 }
          cleanup
  br label %1689

1659:                                             ; preds = %1612
  %1660 = landingpad { ptr, i32 }
          cleanup
  br label %1663

1661:                                             ; preds = %1626, %1624, %1619, %1614
  %1662 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %161) #12
  br label %1663

1663:                                             ; preds = %1661, %1659
  %.pn1206 = phi { ptr, i32 } [ %1662, %1661 ], [ %1660, %1659 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %160) #12
  br label %1689

1664:                                             ; preds = %1635, %1630
  %1665 = landingpad { ptr, i32 }
          cleanup
  br label %1689

1666:                                             ; preds = %1644
  %1667 = landingpad { ptr, i32 }
          cleanup
  br label %1670

1668:                                             ; preds = %1648
  %1669 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #12
  br label %1670

1670:                                             ; preds = %1668, %1666
  %.pn1210 = phi { ptr, i32 } [ %1669, %1668 ], [ %1667, %1666 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %163) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %162) #12
  br label %1689

1671:                                             ; preds = %1638
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %164) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %165) #12
  %1672 = load float, ptr %137, align 4, !tbaa !9
  %1673 = fpext float %1672 to double
  invoke void (ptr, ptr, ...) @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %165, ptr noundef nonnull @.str.151, double noundef %1673)
          to label %1674 unwind label %1683

1674:                                             ; preds = %1671
  %1675 = call { i64, ptr } @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEcvSt17basic_string_viewIcS2_EEv(ptr noundef nonnull align 8 dereferenceable(32) %165) #12
  %1676 = extractvalue { i64, ptr } %1675, 0
  store i64 %1676, ptr %164, align 8
  %1677 = getelementptr inbounds i8, ptr %164, i64 8
  %1678 = extractvalue { i64, ptr } %1675, 1
  store ptr %1678, ptr %1677, align 8
  %.sroa.0345.0.copyload = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !6
  %1679 = load ptr, ptr %1643, align 8, !tbaa !51
  %1680 = getelementptr inbounds i8, ptr %1679, i64 56
  %1681 = load ptr, ptr %1680, align 8
  invoke void %1681(ptr noundef nonnull align 8 dereferenceable(320) %1643, double %1631, double %1632, ptr noundef nonnull align 8 dereferenceable(16) %164, i32 %.sroa.0345.0.copyload, float noundef 5.000000e-01)
          to label %1682 unwind label %1685

1682:                                             ; preds = %1674
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %165) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %164) #12
  br label %1688

1683:                                             ; preds = %1671
  %1684 = landingpad { ptr, i32 }
          cleanup
  br label %1687

1685:                                             ; preds = %1674
  %1686 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #12
  br label %1687

1687:                                             ; preds = %1685, %1683
  %.pn1208 = phi { ptr, i32 } [ %1686, %1685 ], [ %1684, %1683 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %165) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %164) #12
  br label %1689

1688:                                             ; preds = %1656, %1682, %1610
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %146) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %146) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %145) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %139) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %138) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %137) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %136) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %135) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %134) #12
  br label %2439

1689:                                             ; preds = %1657, %1595, %1572, %1687, %1670, %1664, %1663, %1517
  %.pn1215.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1202, %1517 ], [ %1658, %1657 ], [ %.pn1215.pn.pn.pn.pn.pn.pn, %1595 ], [ %.pn1213, %1572 ], [ %.pn1210, %1670 ], [ %.pn1208, %1687 ], [ %1665, %1664 ], [ %.pn1206, %1663 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %146) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %146) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %145) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %139) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %138) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %137) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %136) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %135) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %134) #12
  br label %2440

1690:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %166) #12
  %1691 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %250, double %251)
  %1692 = extractvalue { double, double } %1691, 0
  %1693 = extractvalue { double, double } %1691, 1
  %1694 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %1692, double %1693)
  %1695 = extractvalue { double, double } %1694, 0
  store double %1695, ptr %166, align 16
  %1696 = getelementptr inbounds i8, ptr %166, i64 8
  %1697 = extractvalue { double, double } %1694, 1
  store double %1697, ptr %1696, align 8
  %1698 = getelementptr inbounds i8, ptr %0, i64 576
  %.sroa.0337.0.copyload = load double, ptr %1698, align 16
  %.sroa.2338.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 584
  %.sroa.2338.0.copyload = load double, ptr %.sroa.2338.0..sroa_idx, align 8, !tbaa !6
  %1699 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 5.000000e-01, double %.sroa.0337.0.copyload, double %.sroa.2338.0.copyload)
  %1700 = extractvalue { double, double } %1699, 0
  %1701 = extractvalue { double, double } %1699, 1
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %167) #12
  %1702 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %166, double %1700, double %1701)
  %1703 = extractvalue { double, double } %1702, 0
  %1704 = extractvalue { double, double } %1702, 1
  %1705 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %166, double %1700, double %1701)
  %1706 = extractvalue { double, double } %1705, 0
  %1707 = extractvalue { double, double } %1705, 1
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %167, double %1703, double %1704, double %1706, double %1707)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %168) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %168) #12
  %1708 = getelementptr inbounds i8, ptr %0, i64 344
  %1709 = load ptr, ptr %1708, align 8, !tbaa !47
  %1710 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1709)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %169) #12
  store i64 0, ptr %169, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %169) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %170) #12
  store i64 0, ptr %170, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %170) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %171) #12
  store i64 0, ptr %171, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %171) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %172) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %172, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %172)
          to label %1711 unwind label %1722

1711:                                             ; preds = %1690
  invoke void @_ZNK3JPH16NarrowPhaseQuery24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1710, ptr noundef nonnull align 16 dereferenceable(32) %167, ptr noundef nonnull align 8 dereferenceable(24) %168, ptr noundef nonnull align 8 dereferenceable(8) %169, ptr noundef nonnull align 8 dereferenceable(8) %170, ptr noundef nonnull align 8 dereferenceable(8) %171, ptr noundef nonnull align 8 dereferenceable(12) %172)
          to label %1712 unwind label %1724

1712:                                             ; preds = %1711
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %172) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %172) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %171) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %171) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %170) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %170) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %169) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %169) #12
  %1713 = getelementptr inbounds i8, ptr %168, i64 24
  %1714 = call noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1713)
  %1715 = call noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1713)
  %.not11951455 = icmp eq ptr %1714, %1715
  br i1 %.not11951455, label %._crit_edge1459, label %.lr.ph1458

.lr.ph1458:                                       ; preds = %1712
  %1716 = getelementptr inbounds i8, ptr %0, i64 144
  br label %1727

._crit_edge1459:                                  ; preds = %1742, %1712
  %1717 = getelementptr inbounds i8, ptr %0, i64 144
  %1718 = load ptr, ptr %1717, align 16, !tbaa !50
  %1719 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %1713)
  %_ZN3JPH5Color4sRedE.val1196 = load i32, ptr @_ZN3JPH5Color4sRedE, align 4
  %_ZN3JPH5Color6sGreenE.val1197 = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4
  %.sroa.0311.0.copyload = select i1 %1719, i32 %_ZN3JPH5Color4sRedE.val1196, i32 %_ZN3JPH5Color6sGreenE.val1197
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %1718, ptr noundef nonnull align 16 dereferenceable(32) %167, i32 %.sroa.0311.0.copyload)
          to label %1752 unwind label %1720

1720:                                             ; preds = %._crit_edge1459
  %1721 = landingpad { ptr, i32 }
          cleanup
  br label %1753

1722:                                             ; preds = %1690
  %1723 = landingpad { ptr, i32 }
          cleanup
  br label %1726

1724:                                             ; preds = %1711
  %1725 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %172) #12
  br label %1726

1726:                                             ; preds = %1724, %1722
  %.pn1193 = phi { ptr, i32 } [ %1725, %1724 ], [ %1723, %1722 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %172) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %171) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %171) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %170) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %170) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %169) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %169) #12
  br label %1753

1727:                                             ; preds = %.lr.ph1458, %1742
  %.011011456 = phi ptr [ %1714, %.lr.ph1458 ], [ %1743, %1742 ]
  %1728 = load ptr, ptr %1716, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %173) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %174) #12
  %1729 = getelementptr inbounds i8, ptr %.011011456, i64 16
  %.sroa.0317.0.copyload = load double, ptr %1729, align 16
  %.sroa.2318.0..sroa_idx = getelementptr inbounds i8, ptr %.011011456, i64 24
  %.sroa.2318.0.copyload = load double, ptr %.sroa.2318.0..sroa_idx, align 8, !tbaa !6
  %.sroa.0315.0.copyload = load double, ptr %.011011456, align 16
  %.sroa.2316.0..sroa_idx = getelementptr inbounds i8, ptr %.011011456, i64 8
  %.sroa.2316.0.copyload = load double, ptr %.sroa.2316.0..sroa_idx, align 8, !tbaa !6
  invoke void @_ZN3JPH5Mat4420sRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %174, double %.sroa.0317.0.copyload, double %.sroa.2318.0.copyload, double %.sroa.0315.0.copyload, double %.sroa.2316.0.copyload)
          to label %1730 unwind label %1744

1730:                                             ; preds = %1727
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %175) #12
  %1731 = invoke { double, double } @_ZNK3JPH16TransformedShape13GetShapeScaleEv(ptr noundef nonnull align 16 dereferenceable(64) %.011011456)
          to label %1732 unwind label %1746

1732:                                             ; preds = %1730
  %1733 = extractvalue { double, double } %1731, 0
  %1734 = extractvalue { double, double } %1731, 1
  invoke void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %175, double %1733, double %1734)
          to label %1735 unwind label %1746

1735:                                             ; preds = %1732
  call void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %173, ptr noundef nonnull align 16 dereferenceable(64) %174, ptr noundef nonnull align 16 dereferenceable(64) %175)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %176) #12
  %1736 = getelementptr inbounds i8, ptr %.011011456, i64 32
  %1737 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1736)
  %1738 = load ptr, ptr %1737, align 8, !tbaa !51
  %1739 = getelementptr inbounds i8, ptr %1738, i64 32
  %1740 = load ptr, ptr %1739, align 8
  invoke void %1740(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %176, ptr noundef nonnull align 8 dereferenceable(26) %1737)
          to label %1741 unwind label %1748

1741:                                             ; preds = %1735
  %.sroa.0312.0.copyload = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %1728, ptr noundef nonnull align 16 dereferenceable(64) %173, ptr noundef nonnull align 16 dereferenceable(32) %176, i32 %.sroa.0312.0.copyload)
          to label %1742 unwind label %1748

1742:                                             ; preds = %1741
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %176) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %175) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %174) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %173) #12
  %1743 = getelementptr inbounds i8, ptr %.011011456, i64 64
  %.not1195 = icmp eq ptr %1743, %1715
  br i1 %.not1195, label %._crit_edge1459, label %1727

1744:                                             ; preds = %1727
  %1745 = landingpad { ptr, i32 }
          cleanup
  br label %1751

1746:                                             ; preds = %1732, %1730
  %1747 = landingpad { ptr, i32 }
          cleanup
  br label %1750

1748:                                             ; preds = %1741, %1735
  %1749 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %176) #12
  br label %1750

1750:                                             ; preds = %1748, %1746
  %.pn1198 = phi { ptr, i32 } [ %1749, %1748 ], [ %1747, %1746 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %175) #12
  br label %1751

1751:                                             ; preds = %1750, %1744
  %.pn1198.pn = phi { ptr, i32 } [ %.pn1198, %1750 ], [ %1745, %1744 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %174) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %173) #12
  br label %1753

1752:                                             ; preds = %._crit_edge1459
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %168) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %168) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %167) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %166) #12
  br label %2439

1753:                                             ; preds = %1751, %1726, %1720
  %.pn1198.pn.pn = phi { ptr, i32 } [ %.pn1198.pn, %1751 ], [ %1721, %1720 ], [ %.pn1193, %1726 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %168) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %168) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %167) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %166) #12
  br label %2440

1754:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %177) #12
  %1755 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %250, double %251)
  %1756 = extractvalue { double, double } %1755, 0
  %1757 = extractvalue { double, double } %1755, 1
  %1758 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %1756, double %1757)
  %1759 = extractvalue { double, double } %1758, 0
  store double %1759, ptr %177, align 16
  %1760 = getelementptr inbounds i8, ptr %177, i64 8
  %1761 = extractvalue { double, double } %1758, 1
  store double %1761, ptr %1760, align 8
  %1762 = getelementptr inbounds i8, ptr %0, i64 576
  %.sroa.0303.0.copyload = load double, ptr %1762, align 16
  %.sroa.2304.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 584
  %.sroa.2304.0.copyload = load double, ptr %.sroa.2304.0..sroa_idx, align 8, !tbaa !6
  %1763 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+00, double %.sroa.0303.0.copyload, double %.sroa.2304.0.copyload)
  %1764 = extractvalue { double, double } %1763, 0
  %1765 = extractvalue { double, double } %1763, 1
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %178) #12
  %1766 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %177, double %1764, double %1765)
  %1767 = extractvalue { double, double } %1766, 0
  %1768 = extractvalue { double, double } %1766, 1
  %1769 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %177, double %1764, double %1765)
  %1770 = extractvalue { double, double } %1769, 0
  %1771 = extractvalue { double, double } %1769, 1
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %178, double %1767, double %1768, double %1770, double %1771)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %179) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %179) #12
  %1772 = getelementptr inbounds i8, ptr %0, i64 344
  %1773 = load ptr, ptr %1772, align 8, !tbaa !47
  %1774 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1773)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %180) #12
  store i64 0, ptr %180, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %180) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %181) #12
  store i64 0, ptr %181, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %181) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %182) #12
  store i64 0, ptr %182, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %182) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %183) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %183, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %183)
          to label %1775 unwind label %1797

1775:                                             ; preds = %1754
  invoke void @_ZNK3JPH16NarrowPhaseQuery24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %1774, ptr noundef nonnull align 16 dereferenceable(32) %178, ptr noundef nonnull align 8 dereferenceable(24) %179, ptr noundef nonnull align 8 dereferenceable(8) %180, ptr noundef nonnull align 8 dereferenceable(8) %181, ptr noundef nonnull align 8 dereferenceable(8) %182, ptr noundef nonnull align 8 dereferenceable(12) %183)
          to label %1776 unwind label %1799

1776:                                             ; preds = %1775
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %183) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %183) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %182) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %182) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %181) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %181) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %180) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %180) #12
  %1777 = getelementptr inbounds i8, ptr %179, i64 24
  %1778 = call noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1777)
  %1779 = call noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1777)
  %.not11831449 = icmp eq ptr %1778, %1779
  br i1 %.not11831449, label %._crit_edge1454.thread, label %.lr.ph1453

._crit_edge1454.thread:                           ; preds = %1776
  %_ZN3JPH5Color4sRedE.val1504 = load i32, ptr @_ZN3JPH5Color4sRedE, align 4
  br label %1792

.lr.ph1453:                                       ; preds = %1776
  %1780 = getelementptr inbounds i8, ptr %188, i64 8
  %1781 = getelementptr inbounds i8, ptr %187, i64 8
  %1782 = getelementptr inbounds i8, ptr %190, i64 8
  %1783 = getelementptr inbounds i8, ptr %189, i64 8
  %1784 = getelementptr inbounds i8, ptr %192, i64 8
  %1785 = getelementptr inbounds i8, ptr %191, i64 8
  %1786 = getelementptr inbounds i8, ptr %195, i64 8
  %1787 = getelementptr inbounds i8, ptr %194, i64 8
  %1788 = getelementptr inbounds i8, ptr %193, i64 8
  %1789 = getelementptr inbounds i8, ptr %197, i64 8
  %1790 = getelementptr inbounds i8, ptr %196, i64 8
  %1791 = getelementptr inbounds i8, ptr %0, i64 144
  br label %1802

._crit_edge1454:                                  ; preds = %1899
  %_ZN3JPH5Color6sGreenE.val = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4
  %_ZN3JPH5Color4sRedE.val = load i32, ptr @_ZN3JPH5Color4sRedE, align 4
  %spec.select = select i1 %.1, i32 %_ZN3JPH5Color6sGreenE.val, i32 %_ZN3JPH5Color4sRedE.val
  br label %1792

1792:                                             ; preds = %._crit_edge1454, %._crit_edge1454.thread
  %.0.lcssa1506 = phi i1 [ false, %._crit_edge1454.thread ], [ %.1, %._crit_edge1454 ]
  %1793 = phi i32 [ %_ZN3JPH5Color4sRedE.val1504, %._crit_edge1454.thread ], [ %spec.select, %._crit_edge1454 ]
  %.in = getelementptr inbounds i8, ptr %0, i64 144
  %1794 = load ptr, ptr %.in, align 16, !tbaa !50
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %1794, ptr noundef nonnull align 16 dereferenceable(32) %178, i32 %1793)
          to label %1902 unwind label %1795

1795:                                             ; preds = %1792
  %1796 = landingpad { ptr, i32 }
          cleanup
  br label %1903

1797:                                             ; preds = %1754
  %1798 = landingpad { ptr, i32 }
          cleanup
  br label %1801

1799:                                             ; preds = %1775
  %1800 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %183) #12
  br label %1801

1801:                                             ; preds = %1799, %1797
  %.pn1181 = phi { ptr, i32 } [ %1800, %1799 ], [ %1798, %1797 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %183) #12
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %182) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %182) #12
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %181) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %181) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %180) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %180) #12
  br label %1903

1802:                                             ; preds = %.lr.ph1453, %1899
  %.01451 = phi i1 [ false, %.lr.ph1453 ], [ %.1, %1899 ]
  %.011021450 = phi ptr [ %1778, %.lr.ph1453 ], [ %1900, %1899 ]
  call void @llvm.lifetime.start.p0(i64 1152, ptr nonnull %184) #12
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %185) #12
  call void @llvm.lifetime.start.p0(i64 4288, ptr nonnull %186) #12
  %.sroa.0284.0.copyload = load double, ptr %7, align 16
  %.sroa.2285.0.copyload = load double, ptr %257, align 8, !tbaa !6
  invoke void @_ZNK3JPH16TransformedShape17GetTrianglesStartERNS_5Shape19GetTrianglesContextERKNS_5AABoxENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %.011021450, ptr noundef nonnull align 16 dereferenceable(4288) %186, ptr noundef nonnull align 16 dereferenceable(32) %178, double %.sroa.0284.0.copyload, double %.sroa.2285.0.copyload)
          to label %.preheader unwind label %1806

.preheader:                                       ; preds = %1802, %.preheader.backedge
  %.1 = phi i1 [ true, %.preheader.backedge ], [ %.01451, %1802 ]
  %1803 = invoke noundef i32 @_ZNK3JPH16TransformedShape16GetTrianglesNextERNS_5Shape19GetTrianglesContextEiPNS_6Float3EPPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(64) %.011021450, ptr noundef nonnull align 16 dereferenceable(4288) %186, i32 noundef 32, ptr noundef nonnull %184, ptr noundef nonnull %185)
          to label %1804 unwind label %1808

1804:                                             ; preds = %.preheader
  %1805 = icmp eq i32 %1803, 0
  br i1 %1805, label %1899, label %1810

1806:                                             ; preds = %1802
  %1807 = landingpad { ptr, i32 }
          cleanup
  br label %1901

1808:                                             ; preds = %.preheader
  %1809 = landingpad { ptr, i32 }
          cleanup
  br label %1901

1810:                                             ; preds = %1804
  %1811 = mul nsw i32 %1803, 3
  %1812 = sext i32 %1811 to i64
  %1813 = getelementptr inbounds %"class.JPH::Float3", ptr %184, i64 %1812
  %1814 = icmp sgt i32 %1803, 0
  br i1 %1814, label %.lr.ph1448, label %.preheader.backedge

.preheader.backedge:                              ; preds = %1879, %1810
  br label %.preheader

.lr.ph1448:                                       ; preds = %1810, %1879
  %.011041446 = phi ptr [ %1881, %1879 ], [ %185, %1810 ]
  %.011051445 = phi ptr [ %1880, %1879 ], [ %184, %1810 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %187) #12
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %188, ptr noundef nonnull align 4 dereferenceable(12) %.011051445)
          to label %1815 unwind label %1883

1815:                                             ; preds = %.lr.ph1448
  %1816 = load double, ptr %188, align 16
  %1817 = load double, ptr %1780, align 8
  %1818 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %7, double %1816, double %1817)
          to label %1819 unwind label %1883

1819:                                             ; preds = %1815
  %1820 = extractvalue { double, double } %1818, 0
  store double %1820, ptr %187, align 16
  %1821 = extractvalue { double, double } %1818, 1
  store double %1821, ptr %1781, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %189) #12
  %1822 = getelementptr inbounds i8, ptr %.011051445, i64 12
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %190, ptr noundef nonnull align 4 dereferenceable(12) %1822)
          to label %1823 unwind label %1885

1823:                                             ; preds = %1819
  %1824 = load double, ptr %190, align 16
  %1825 = load double, ptr %1782, align 8
  %1826 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %7, double %1824, double %1825)
          to label %1827 unwind label %1885

1827:                                             ; preds = %1823
  %1828 = extractvalue { double, double } %1826, 0
  store double %1828, ptr %189, align 16
  %1829 = extractvalue { double, double } %1826, 1
  store double %1829, ptr %1783, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %191) #12
  %1830 = getelementptr inbounds i8, ptr %.011051445, i64 24
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %192, ptr noundef nonnull align 4 dereferenceable(12) %1830)
          to label %1831 unwind label %1887

1831:                                             ; preds = %1827
  %1832 = load double, ptr %192, align 16
  %1833 = load double, ptr %1784, align 8
  %1834 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %7, double %1832, double %1833)
          to label %1835 unwind label %1887

1835:                                             ; preds = %1831
  %1836 = extractvalue { double, double } %1834, 0
  store double %1836, ptr %191, align 16
  %1837 = extractvalue { double, double } %1834, 1
  store double %1837, ptr %1785, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %193) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %194) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %195) #12
  %.sroa.0272.0.copyload = load double, ptr %189, align 16
  %.sroa.2273.0.copyload = load double, ptr %1783, align 8, !tbaa !6
  %1838 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %187, double %.sroa.0272.0.copyload, double %.sroa.2273.0.copyload)
          to label %1839 unwind label %1889

1839:                                             ; preds = %1835
  %1840 = extractvalue { double, double } %1838, 0
  store double %1840, ptr %195, align 16
  %1841 = extractvalue { double, double } %1838, 1
  store double %1841, ptr %1786, align 8
  %.sroa.0270.0.copyload = load double, ptr %191, align 16
  %.sroa.2271.0.copyload = load double, ptr %1785, align 8, !tbaa !6
  %1842 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %195, double %.sroa.0270.0.copyload, double %.sroa.2271.0.copyload)
          to label %1843 unwind label %1889

1843:                                             ; preds = %1839
  %1844 = extractvalue { double, double } %1842, 0
  store double %1844, ptr %194, align 16
  %1845 = extractvalue { double, double } %1842, 1
  store double %1845, ptr %1787, align 8
  %1846 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %194, float noundef 3.000000e+00)
          to label %1847 unwind label %1889

1847:                                             ; preds = %1843
  %1848 = extractvalue { double, double } %1846, 0
  store double %1848, ptr %193, align 16
  %1849 = extractvalue { double, double } %1846, 1
  store double %1849, ptr %1788, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %195) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %194) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %196) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %197) #12
  %.sroa.0266.0.copyload = load double, ptr %187, align 16
  %.sroa.2267.0.copyload = load double, ptr %1781, align 8, !tbaa !6
  %1850 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %189, double %.sroa.0266.0.copyload, double %.sroa.2267.0.copyload)
          to label %1851 unwind label %1891

1851:                                             ; preds = %1847
  %1852 = extractvalue { double, double } %1850, 0
  store double %1852, ptr %197, align 16
  %1853 = extractvalue { double, double } %1850, 1
  store double %1853, ptr %1789, align 8
  %.sroa.0262.0.copyload = load double, ptr %187, align 16
  %.sroa.2263.0.copyload = load double, ptr %1781, align 8, !tbaa !6
  %1854 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %191, double %.sroa.0262.0.copyload, double %.sroa.2263.0.copyload)
          to label %1855 unwind label %1891

1855:                                             ; preds = %1851
  %1856 = extractvalue { double, double } %1854, 0
  %1857 = extractvalue { double, double } %1854, 1
  %1858 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %197, double %1856, double %1857)
          to label %1859 unwind label %1891

1859:                                             ; preds = %1855
  %1860 = extractvalue { double, double } %1858, 0
  store double %1860, ptr %196, align 16
  %1861 = extractvalue { double, double } %1858, 1
  store double %1861, ptr %1790, align 8
  %1862 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %196)
          to label %1863 unwind label %1891

1863:                                             ; preds = %1859
  %1864 = extractvalue { double, double } %1862, 0
  %1865 = extractvalue { double, double } %1862, 1
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %197) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %196) #12
  %1866 = load ptr, ptr %1791, align 16, !tbaa !50
  %.sroa.0260.0.copyload = load double, ptr %187, align 16
  %.sroa.2261.0.copyload = load double, ptr %1781, align 8, !tbaa !6
  %.sroa.0258.0.copyload = load double, ptr %189, align 16
  %.sroa.2259.0.copyload = load double, ptr %1783, align 8, !tbaa !6
  %.sroa.0256.0.copyload = load double, ptr %191, align 16
  %.sroa.2257.0.copyload = load double, ptr %1785, align 8, !tbaa !6
  %1867 = load ptr, ptr %.011041446, align 8, !tbaa !87
  %1868 = load ptr, ptr %1867, align 8, !tbaa !51
  %1869 = getelementptr inbounds i8, ptr %1868, i64 40
  %1870 = load ptr, ptr %1869, align 8
  %1871 = invoke i32 %1870(ptr noundef nonnull align 8 dereferenceable(12) %1867)
          to label %1872 unwind label %1893

1872:                                             ; preds = %1863
  invoke void @_ZN3JPH13DebugRenderer16DrawWireTriangleENS_4Vec3ES1_S1_NS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %1866, double %.sroa.0260.0.copyload, double %.sroa.2261.0.copyload, double %.sroa.0258.0.copyload, double %.sroa.2259.0.copyload, double %.sroa.0256.0.copyload, double %.sroa.2257.0.copyload, i32 %1871)
          to label %1873 unwind label %1893

1873:                                             ; preds = %1872
  %1874 = load ptr, ptr %1791, align 16, !tbaa !50
  %.sroa.0253.0.copyload = load double, ptr %193, align 16
  %.sroa.2254.0.copyload = load double, ptr %1788, align 8, !tbaa !6
  %1875 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %193, double %1864, double %1865)
          to label %1876 unwind label %1893

1876:                                             ; preds = %1873
  %1877 = extractvalue { double, double } %1875, 0
  %1878 = extractvalue { double, double } %1875, 1
  %.sroa.0248.0.copyload = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1874, double %.sroa.0253.0.copyload, double %.sroa.2254.0.copyload, double %1877, double %1878, i32 %.sroa.0248.0.copyload, float noundef 0x3F847AE140000000)
          to label %1879 unwind label %1893

1879:                                             ; preds = %1876
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %193) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %191) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %189) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %187) #12
  %1880 = getelementptr inbounds i8, ptr %.011051445, i64 36
  %1881 = getelementptr inbounds i8, ptr %.011041446, i64 8
  %1882 = icmp ult ptr %1880, %1813
  br i1 %1882, label %.lr.ph1448, label %.preheader.backedge, !llvm.loop !88

1883:                                             ; preds = %1815, %.lr.ph1448
  %1884 = landingpad { ptr, i32 }
          cleanup
  br label %1898

1885:                                             ; preds = %1823, %1819
  %1886 = landingpad { ptr, i32 }
          cleanup
  br label %1897

1887:                                             ; preds = %1831, %1827
  %1888 = landingpad { ptr, i32 }
          cleanup
  br label %1896

1889:                                             ; preds = %1843, %1839, %1835
  %1890 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %195) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %194) #12
  br label %1895

1891:                                             ; preds = %1859, %1855, %1851, %1847
  %1892 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %197) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %196) #12
  br label %1895

1893:                                             ; preds = %1876, %1873, %1872, %1863
  %1894 = landingpad { ptr, i32 }
          cleanup
  br label %1895

1895:                                             ; preds = %1891, %1893, %1889
  %.pn1184.pn = phi { ptr, i32 } [ %1890, %1889 ], [ %1894, %1893 ], [ %1892, %1891 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %193) #12
  br label %1896

1896:                                             ; preds = %1895, %1887
  %.pn1184.pn.pn = phi { ptr, i32 } [ %.pn1184.pn, %1895 ], [ %1888, %1887 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %191) #12
  br label %1897

1897:                                             ; preds = %1896, %1885
  %.pn1184.pn.pn.pn = phi { ptr, i32 } [ %.pn1184.pn.pn, %1896 ], [ %1886, %1885 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %189) #12
  br label %1898

1898:                                             ; preds = %1897, %1883
  %.pn1184.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1184.pn.pn.pn, %1897 ], [ %1884, %1883 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %187) #12
  br label %1901

1899:                                             ; preds = %1804
  call void @llvm.lifetime.end.p0(i64 4288, ptr nonnull %186) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %185) #12
  call void @llvm.lifetime.end.p0(i64 1152, ptr nonnull %184) #12
  %1900 = getelementptr inbounds i8, ptr %.011021450, i64 64
  %.not1183 = icmp eq ptr %1900, %1779
  br i1 %.not1183, label %._crit_edge1454, label %1802

1901:                                             ; preds = %1808, %1898, %1806
  %.pn1184.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %1807, %1806 ], [ %.pn1184.pn.pn.pn.pn, %1898 ], [ %1809, %1808 ]
  call void @llvm.lifetime.end.p0(i64 4288, ptr nonnull %186) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %185) #12
  call void @llvm.lifetime.end.p0(i64 1152, ptr nonnull %184) #12
  br label %1903

1902:                                             ; preds = %1792
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %179) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %179) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %178) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %177) #12
  br label %2439

1903:                                             ; preds = %1901, %1801, %1795
  %.pn1184.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1184.pn.pn.pn.pn.pn.pn, %1901 ], [ %1796, %1795 ], [ %.pn1181, %1801 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %179) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %179) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %178) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %177) #12
  br label %2440

1904:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %198) #12
  %.sroa.0245.0.copyload = load double, ptr %6, align 16
  %.sroa.2246.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %.sroa.2246.0.copyload = load double, ptr %.sroa.2246.0..sroa_idx, align 8, !tbaa !6
  call void @_ZN3JPH7RayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %198, double %.sroa.0245.0.copyload, double %.sroa.2246.0.copyload, double %250, double %251)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %199) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %199) #12
  %1905 = getelementptr inbounds i8, ptr %0, i64 344
  %1906 = load ptr, ptr %1905, align 8, !tbaa !47
  %1907 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %1906)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %200) #12
  store i64 0, ptr %200, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %200) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %201) #12
  store i64 0, ptr %201, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %201) #12
  %1908 = load ptr, ptr %1907, align 8, !tbaa !51
  %1909 = getelementptr inbounds i8, ptr %1908, i64 16
  %1910 = load ptr, ptr %1909, align 8
  invoke void %1910(ptr noundef nonnull align 8 dereferenceable(8) %1907, ptr noundef nonnull align 16 dereferenceable(32) %198, ptr noundef nonnull align 8 dereferenceable(24) %199, ptr noundef nonnull align 8 dereferenceable(8) %200, ptr noundef nonnull align 8 dereferenceable(8) %201)
          to label %1911 unwind label %1925

1911:                                             ; preds = %1904
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %201) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %201) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %200) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %200) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %199)
          to label %1912 unwind label %1923

1912:                                             ; preds = %1911
  %1913 = getelementptr inbounds i8, ptr %199, i64 24
  %1914 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %1913)
  %1915 = xor i1 %1914, true
  br i1 %1914, label %2000, label %1916

1916:                                             ; preds = %1912
  %.sroa.0241.0.copyload = load double, ptr %6, align 16
  %.sroa.6242.0.copyload = load double, ptr %.sroa.2246.0..sroa_idx, align 8, !tbaa !6
  %1917 = call noundef ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1913)
  %1918 = call noundef ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1913)
  %.not11681437 = icmp eq ptr %1917, %1918
  br i1 %.not11681437, label %._crit_edge1444, label %.lr.ph1443

.lr.ph1443:                                       ; preds = %1916
  %1919 = getelementptr inbounds i8, ptr %0, i64 144
  br label %1927

._crit_edge1444:                                  ; preds = %1977, %1916
  %1920 = getelementptr inbounds i8, ptr %0, i64 144
  %1921 = load ptr, ptr %1920, align 16, !tbaa !50
  %1922 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %1913)
          to label %1980 unwind label %1998

1923:                                             ; preds = %2013, %2010, %2004, %2000, %1911
  %1924 = landingpad { ptr, i32 }
          cleanup
  br label %2017

1925:                                             ; preds = %1904
  %1926 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %201) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %201) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %200) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %200) #12
  br label %2017

1927:                                             ; preds = %.lr.ph1443, %1977
  %.sroa.6242.01441 = phi double [ %.sroa.6242.0.copyload, %.lr.ph1443 ], [ %1937, %1977 ]
  %.sroa.0241.01440 = phi double [ %.sroa.0241.0.copyload, %.lr.ph1443 ], [ %1936, %1977 ]
  %.011061439 = phi i1 [ false, %.lr.ph1443 ], [ %1945, %1977 ]
  %.011071438 = phi ptr [ %1917, %.lr.ph1443 ], [ %1978, %1977 ]
  %1928 = getelementptr inbounds i8, ptr %.011071438, i64 4
  %1929 = load float, ptr %1928, align 4, !tbaa !48
  %1930 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %1929, double %250, double %251)
          to label %1931 unwind label %1963

1931:                                             ; preds = %1927
  %1932 = extractvalue { double, double } %1930, 0
  %1933 = extractvalue { double, double } %1930, 1
  %1934 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %1932, double %1933)
          to label %1935 unwind label %1963

1935:                                             ; preds = %1931
  %1936 = extractvalue { double, double } %1934, 0
  %1937 = extractvalue { double, double } %1934, 1
  %_ZN3JPH5Color5sGreyE.val1169 = load i32, ptr @_ZN3JPH5Color5sGreyE, align 4
  %_ZN3JPH5Color6sWhiteE.val1170 = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4
  %.sroa.0223.0.copyload = select i1 %.011061439, i32 %_ZN3JPH5Color5sGreyE.val1169, i32 %_ZN3JPH5Color6sWhiteE.val1170
  %1938 = load ptr, ptr %1919, align 16, !tbaa !50
  %1939 = load ptr, ptr %1938, align 8, !tbaa !51
  %1940 = getelementptr inbounds i8, ptr %1939, i64 16
  %1941 = load ptr, ptr %1940, align 8
  invoke void %1941(ptr noundef nonnull align 8 dereferenceable(320) %1938, double %.sroa.0241.01440, double %.sroa.6242.01441, double %1936, double %1937, i32 %.sroa.0223.0.copyload)
          to label %1942 unwind label %1965

1942:                                             ; preds = %1935
  %1943 = load ptr, ptr %1919, align 16, !tbaa !50
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %1943, double %1936, double %1937, i32 %.sroa.0223.0.copyload, float noundef 0x3FB99999A0000000)
          to label %1944 unwind label %1965

1944:                                             ; preds = %1942
  %1945 = xor i1 %.011061439, true
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %202) #12
  %1946 = load ptr, ptr %1905, align 8, !tbaa !47
  %1947 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %1946)
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %202, ptr noundef nonnull align 8 dereferenceable(16) %1947, ptr noundef nonnull align 4 dereferenceable(4) %.011071438)
          to label %1948 unwind label %1967

1948:                                             ; preds = %1944
  %1949 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %202)
  br i1 %1949, label %1950, label %1977

1950:                                             ; preds = %1948
  %1951 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %202)
          to label %1952 unwind label %1969

1952:                                             ; preds = %1950
  %1953 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %1951)
  %_ZN3JPH5Color7sYellowE.val1171 = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val1172 = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.0211.0.copyload = select i1 %1953, i32 %_ZN3JPH5Color7sYellowE.val1171, i32 %_ZN3JPH5Color7sOrangeE.val1172
  %1954 = load ptr, ptr %1919, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %203) #12
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %203, ptr noundef nonnull align 16 dereferenceable(122) %1951)
          to label %1955 unwind label %1971

1955:                                             ; preds = %1952
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %204) #12
  %1956 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %1951)
          to label %1957 unwind label %1973

1957:                                             ; preds = %1955
  %1958 = load ptr, ptr %1956, align 8, !tbaa !51
  %1959 = getelementptr inbounds i8, ptr %1958, i64 32
  %1960 = load ptr, ptr %1959, align 8
  invoke void %1960(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %204, ptr noundef nonnull align 8 dereferenceable(26) %1956)
          to label %1961 unwind label %1973

1961:                                             ; preds = %1957
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %1954, ptr noundef nonnull align 16 dereferenceable(64) %203, ptr noundef nonnull align 16 dereferenceable(32) %204, i32 %.sroa.0211.0.copyload)
          to label %1962 unwind label %1973

1962:                                             ; preds = %1961
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %204) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %203) #12
  br label %1977

1963:                                             ; preds = %1931, %1927
  %1964 = landingpad { ptr, i32 }
          cleanup
  br label %2017

1965:                                             ; preds = %1942, %1935
  %1966 = landingpad { ptr, i32 }
          cleanup
  br label %2017

1967:                                             ; preds = %1944
  %1968 = landingpad { ptr, i32 }
          cleanup
  br label %1979

1969:                                             ; preds = %1950
  %1970 = landingpad { ptr, i32 }
          cleanup
  br label %1976

1971:                                             ; preds = %1952
  %1972 = landingpad { ptr, i32 }
          cleanup
  br label %1975

1973:                                             ; preds = %1961, %1957, %1955
  %1974 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %204) #12
  br label %1975

1975:                                             ; preds = %1973, %1971
  %.pn1173 = phi { ptr, i32 } [ %1974, %1973 ], [ %1972, %1971 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %203) #12
  br label %1976

1976:                                             ; preds = %1975, %1969
  %.pn1173.pn = phi { ptr, i32 } [ %.pn1173, %1975 ], [ %1970, %1969 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %202) #12
  br label %1979

1977:                                             ; preds = %1962, %1948
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %202) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %202) #12
  %1978 = getelementptr inbounds i8, ptr %.011071438, i64 8
  %.not1168 = icmp eq ptr %1978, %1918
  br i1 %.not1168, label %._crit_edge1444, label %1927

1979:                                             ; preds = %1976, %1967
  %.pn1173.pn.pn = phi { ptr, i32 } [ %.pn1173.pn, %1976 ], [ %1968, %1967 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %202) #12
  br label %2017

1980:                                             ; preds = %._crit_edge1444
  %1981 = getelementptr inbounds i8, ptr %1922, i64 4
  %1982 = load float, ptr %1981, align 4, !tbaa !48
  %1983 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %1982, double %250, double %251)
          to label %1984 unwind label %1998

1984:                                             ; preds = %1980
  %1985 = extractvalue { double, double } %1983, 0
  %1986 = extractvalue { double, double } %1983, 1
  %1987 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %1985, double %1986)
          to label %1988 unwind label %1998

1988:                                             ; preds = %1984
  %1989 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %1990 unwind label %1998

1990:                                             ; preds = %1988
  %1991 = extractvalue { double, double } %1987, 1
  %1992 = extractvalue { double, double } %1987, 0
  %1993 = extractvalue { double, double } %1989, 0
  %1994 = extractvalue { double, double } %1989, 1
  %.sroa.0199.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  %1995 = load ptr, ptr %1921, align 8, !tbaa !51
  %1996 = getelementptr inbounds i8, ptr %1995, i64 16
  %1997 = load ptr, ptr %1996, align 8
  invoke void %1997(ptr noundef nonnull align 8 dereferenceable(320) %1921, double %1992, double %1991, double %1993, double %1994, i32 %.sroa.0199.0.copyload)
          to label %2016 unwind label %1998

1998:                                             ; preds = %1990, %1988, %1984, %1980, %._crit_edge1444
  %1999 = landingpad { ptr, i32 }
          cleanup
  br label %2017

2000:                                             ; preds = %1912
  %2001 = getelementptr inbounds i8, ptr %0, i64 144
  %2002 = load ptr, ptr %2001, align 16, !tbaa !50
  %.sroa.0197.0.copyload = load double, ptr %6, align 16
  %.sroa.2198.0.copyload = load double, ptr %.sroa.2246.0..sroa_idx, align 8, !tbaa !6
  %2003 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %2004 unwind label %1923

2004:                                             ; preds = %2000
  %2005 = extractvalue { double, double } %2003, 0
  %2006 = extractvalue { double, double } %2003, 1
  %.sroa.0192.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  %2007 = load ptr, ptr %2002, align 8, !tbaa !51
  %2008 = getelementptr inbounds i8, ptr %2007, i64 16
  %2009 = load ptr, ptr %2008, align 8
  invoke void %2009(ptr noundef nonnull align 8 dereferenceable(320) %2002, double %.sroa.0197.0.copyload, double %.sroa.2198.0.copyload, double %2005, double %2006, i32 %.sroa.0192.0.copyload)
          to label %2010 unwind label %1923

2010:                                             ; preds = %2004
  %2011 = load ptr, ptr %2001, align 16, !tbaa !50
  %2012 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %2013 unwind label %1923

2013:                                             ; preds = %2010
  %2014 = extractvalue { double, double } %2012, 0
  %2015 = extractvalue { double, double } %2012, 1
  %.sroa.0187.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2011, double %2014, double %2015, i32 %.sroa.0187.0.copyload, float noundef 0x3FB99999A0000000)
          to label %2016 unwind label %1923

2016:                                             ; preds = %1990, %2013
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %199) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %199) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %198) #12
  br label %2439

2017:                                             ; preds = %1998, %1965, %1979, %1963, %1925, %1923
  %.pn1173.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %1924, %1923 ], [ %1926, %1925 ], [ %1999, %1998 ], [ %1964, %1963 ], [ %.pn1173.pn.pn, %1979 ], [ %1966, %1965 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %199) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %199) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %198) #12
  br label %2440

2018:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %205) #12
  %2019 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %250, double %251)
  %2020 = extractvalue { double, double } %2019, 0
  %2021 = extractvalue { double, double } %2019, 1
  %2022 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %2020, double %2021)
  %2023 = extractvalue { double, double } %2022, 0
  store double %2023, ptr %205, align 16
  %2024 = getelementptr inbounds i8, ptr %205, i64 8
  %2025 = extractvalue { double, double } %2022, 1
  store double %2025, ptr %2024, align 8
  %2026 = getelementptr inbounds i8, ptr %0, i64 576
  %.sroa.0179.0.copyload = load double, ptr %2026, align 16
  %.sroa.2180.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 584
  %.sroa.2180.0.copyload = load double, ptr %.sroa.2180.0..sroa_idx, align 8, !tbaa !6
  %2027 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+00, double %.sroa.0179.0.copyload, double %.sroa.2180.0.copyload)
  %2028 = extractvalue { double, double } %2027, 0
  %2029 = extractvalue { double, double } %2027, 1
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %206) #12
  %2030 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %205, double %2028, double %2029)
  %2031 = extractvalue { double, double } %2030, 0
  %2032 = extractvalue { double, double } %2030, 1
  %2033 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %205, double %2028, double %2029)
  %2034 = extractvalue { double, double } %2033, 0
  %2035 = extractvalue { double, double } %2033, 1
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %206, double %2031, double %2032, double %2034, double %2035)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %207) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %207) #12
  %2036 = getelementptr inbounds i8, ptr %0, i64 344
  %2037 = load ptr, ptr %2036, align 8, !tbaa !47
  %2038 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2037)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %208) #12
  store i64 0, ptr %208, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %208) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %209) #12
  store i64 0, ptr %209, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %209) #12
  %2039 = load ptr, ptr %2038, align 8, !tbaa !51
  %2040 = getelementptr inbounds i8, ptr %2039, i64 24
  %2041 = load ptr, ptr %2040, align 8
  invoke void %2041(ptr noundef nonnull align 8 dereferenceable(8) %2038, ptr noundef nonnull align 16 dereferenceable(32) %206, ptr noundef nonnull align 8 dereferenceable(24) %207, ptr noundef nonnull align 8 dereferenceable(8) %208, ptr noundef nonnull align 8 dereferenceable(8) %209)
          to label %2042 unwind label %2052

2042:                                             ; preds = %2018
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %209) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %209) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %208) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %208) #12
  %2043 = getelementptr inbounds i8, ptr %207, i64 24
  %2044 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2043)
  %2045 = xor i1 %2044, true
  br i1 %2044, label %.loopexit1367, label %2046

2046:                                             ; preds = %2042
  %2047 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2043)
  %2048 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2043)
  %.not11601433 = icmp eq ptr %2047, %2048
  br i1 %.not11601433, label %.loopexit1367, label %.lr.ph1436

.lr.ph1436:                                       ; preds = %2046
  %2049 = getelementptr inbounds i8, ptr %0, i64 144
  br label %2054

2050:                                             ; preds = %.loopexit1367
  %2051 = landingpad { ptr, i32 }
          cleanup
  br label %2088

2052:                                             ; preds = %2018
  %2053 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %209) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %209) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %208) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %208) #12
  br label %2088

2054:                                             ; preds = %.lr.ph1436, %2082
  %.011081434 = phi ptr [ %2047, %.lr.ph1436 ], [ %2083, %2082 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %210) #12
  %2055 = load ptr, ptr %2036, align 8, !tbaa !47
  %2056 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %2055)
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %210, ptr noundef nonnull align 8 dereferenceable(16) %2056, ptr noundef nonnull align 4 dereferenceable(4) %.011081434)
          to label %2057 unwind label %2072

2057:                                             ; preds = %2054
  %2058 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %210)
  br i1 %2058, label %2059, label %2082

2059:                                             ; preds = %2057
  %2060 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %210)
          to label %2061 unwind label %2074

2061:                                             ; preds = %2059
  %2062 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %2060)
  %_ZN3JPH5Color7sYellowE.val1161 = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val1162 = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.0160.0.copyload = select i1 %2062, i32 %_ZN3JPH5Color7sYellowE.val1161, i32 %_ZN3JPH5Color7sOrangeE.val1162
  %2063 = load ptr, ptr %2049, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %211) #12
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %211, ptr noundef nonnull align 16 dereferenceable(122) %2060)
          to label %2064 unwind label %2076

2064:                                             ; preds = %2061
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %212) #12
  %2065 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %2060)
          to label %2066 unwind label %2078

2066:                                             ; preds = %2064
  %2067 = load ptr, ptr %2065, align 8, !tbaa !51
  %2068 = getelementptr inbounds i8, ptr %2067, i64 32
  %2069 = load ptr, ptr %2068, align 8
  invoke void %2069(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %212, ptr noundef nonnull align 8 dereferenceable(26) %2065)
          to label %2070 unwind label %2078

2070:                                             ; preds = %2066
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2063, ptr noundef nonnull align 16 dereferenceable(64) %211, ptr noundef nonnull align 16 dereferenceable(32) %212, i32 %.sroa.0160.0.copyload)
          to label %2071 unwind label %2078

2071:                                             ; preds = %2070
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %212) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %211) #12
  br label %2082

2072:                                             ; preds = %2054
  %2073 = landingpad { ptr, i32 }
          cleanup
  br label %2084

2074:                                             ; preds = %2059
  %2075 = landingpad { ptr, i32 }
          cleanup
  br label %2081

2076:                                             ; preds = %2061
  %2077 = landingpad { ptr, i32 }
          cleanup
  br label %2080

2078:                                             ; preds = %2070, %2066, %2064
  %2079 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %212) #12
  br label %2080

2080:                                             ; preds = %2078, %2076
  %.pn1163 = phi { ptr, i32 } [ %2079, %2078 ], [ %2077, %2076 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %211) #12
  br label %2081

2081:                                             ; preds = %2080, %2074
  %.pn1163.pn = phi { ptr, i32 } [ %.pn1163, %2080 ], [ %2075, %2074 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %210) #12
  br label %2084

2082:                                             ; preds = %2071, %2057
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %210) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %210) #12
  %2083 = getelementptr inbounds i8, ptr %.011081434, i64 4
  %.not1160 = icmp eq ptr %2083, %2048
  br i1 %.not1160, label %.loopexit1367, label %2054

2084:                                             ; preds = %2081, %2072
  %.pn1163.pn.pn = phi { ptr, i32 } [ %.pn1163.pn, %2081 ], [ %2073, %2072 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %210) #12
  br label %2088

.loopexit1367:                                    ; preds = %2082, %2046, %2042
  %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE3 = phi ptr [ @_ZN3JPH5Color4sRedE, %2042 ], [ @_ZN3JPH5Color6sGreenE, %2046 ], [ @_ZN3JPH5Color6sGreenE, %2082 ]
  %2085 = getelementptr inbounds i8, ptr %0, i64 144
  %2086 = load ptr, ptr %2085, align 16, !tbaa !50
  %.sroa.0158.0.copyload = load i32, ptr %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE3, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2086, ptr noundef nonnull align 16 dereferenceable(32) %206, i32 %.sroa.0158.0.copyload)
          to label %2087 unwind label %2050

2087:                                             ; preds = %.loopexit1367
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %207) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %207) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %206) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %205) #12
  br label %2439

2088:                                             ; preds = %2084, %2052, %2050
  %.pn1163.pn.pn.pn = phi { ptr, i32 } [ %.pn1163.pn.pn, %2084 ], [ %2051, %2050 ], [ %2053, %2052 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %207) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %207) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %206) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %205) #12
  br label %2440

2089:                                             ; preds = %5
  %2090 = getelementptr inbounds i8, ptr %0, i64 576
  %2091 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %2090)
  %2092 = fmul float %2091, 2.000000e+00
  %2093 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %250, double %251)
  %2094 = extractvalue { double, double } %2093, 0
  %2095 = extractvalue { double, double } %2093, 1
  %2096 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %2094, double %2095)
  %2097 = extractvalue { double, double } %2096, 0
  %2098 = extractvalue { double, double } %2096, 1
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %213) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %213) #12
  %2099 = getelementptr inbounds i8, ptr %0, i64 344
  %2100 = load ptr, ptr %2099, align 8, !tbaa !47
  %2101 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2100)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %214) #12
  store i64 0, ptr %214, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %214) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %215) #12
  store i64 0, ptr %215, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %215) #12
  %2102 = load ptr, ptr %2101, align 8, !tbaa !51
  %2103 = getelementptr inbounds i8, ptr %2102, i64 32
  %2104 = load ptr, ptr %2103, align 8
  invoke void %2104(ptr noundef nonnull align 8 dereferenceable(8) %2101, double %2097, double %2098, float noundef %2092, ptr noundef nonnull align 8 dereferenceable(24) %213, ptr noundef nonnull align 8 dereferenceable(8) %214, ptr noundef nonnull align 8 dereferenceable(8) %215)
          to label %2105 unwind label %2115

2105:                                             ; preds = %2089
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %215) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %215) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %214) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %214) #12
  %2106 = getelementptr inbounds i8, ptr %213, i64 24
  %2107 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2106)
  %2108 = xor i1 %2107, true
  br i1 %2107, label %.loopexit1368, label %2109

2109:                                             ; preds = %2105
  %2110 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2106)
  %2111 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2106)
  %.not11521429 = icmp eq ptr %2110, %2111
  br i1 %.not11521429, label %.loopexit1368, label %.lr.ph1432

.lr.ph1432:                                       ; preds = %2109
  %2112 = getelementptr inbounds i8, ptr %0, i64 144
  br label %2117

2113:                                             ; preds = %.loopexit1368
  %2114 = landingpad { ptr, i32 }
          cleanup
  br label %2151

2115:                                             ; preds = %2089
  %2116 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %215) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %215) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %214) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %214) #12
  br label %2151

2117:                                             ; preds = %.lr.ph1432, %2145
  %.011091430 = phi ptr [ %2110, %.lr.ph1432 ], [ %2146, %2145 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %216) #12
  %2118 = load ptr, ptr %2099, align 8, !tbaa !47
  %2119 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %2118)
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %216, ptr noundef nonnull align 8 dereferenceable(16) %2119, ptr noundef nonnull align 4 dereferenceable(4) %.011091430)
          to label %2120 unwind label %2135

2120:                                             ; preds = %2117
  %2121 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %216)
  br i1 %2121, label %2122, label %2145

2122:                                             ; preds = %2120
  %2123 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %216)
          to label %2124 unwind label %2137

2124:                                             ; preds = %2122
  %2125 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %2123)
  %_ZN3JPH5Color7sYellowE.val1153 = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val1154 = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.0137.0.copyload = select i1 %2125, i32 %_ZN3JPH5Color7sYellowE.val1153, i32 %_ZN3JPH5Color7sOrangeE.val1154
  %2126 = load ptr, ptr %2112, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %217) #12
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %217, ptr noundef nonnull align 16 dereferenceable(122) %2123)
          to label %2127 unwind label %2139

2127:                                             ; preds = %2124
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %218) #12
  %2128 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %2123)
          to label %2129 unwind label %2141

2129:                                             ; preds = %2127
  %2130 = load ptr, ptr %2128, align 8, !tbaa !51
  %2131 = getelementptr inbounds i8, ptr %2130, i64 32
  %2132 = load ptr, ptr %2131, align 8
  invoke void %2132(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %218, ptr noundef nonnull align 8 dereferenceable(26) %2128)
          to label %2133 unwind label %2141

2133:                                             ; preds = %2129
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2126, ptr noundef nonnull align 16 dereferenceable(64) %217, ptr noundef nonnull align 16 dereferenceable(32) %218, i32 %.sroa.0137.0.copyload)
          to label %2134 unwind label %2141

2134:                                             ; preds = %2133
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %218) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %217) #12
  br label %2145

2135:                                             ; preds = %2117
  %2136 = landingpad { ptr, i32 }
          cleanup
  br label %2147

2137:                                             ; preds = %2122
  %2138 = landingpad { ptr, i32 }
          cleanup
  br label %2144

2139:                                             ; preds = %2124
  %2140 = landingpad { ptr, i32 }
          cleanup
  br label %2143

2141:                                             ; preds = %2133, %2129, %2127
  %2142 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %218) #12
  br label %2143

2143:                                             ; preds = %2141, %2139
  %.pn1155 = phi { ptr, i32 } [ %2142, %2141 ], [ %2140, %2139 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %217) #12
  br label %2144

2144:                                             ; preds = %2143, %2137
  %.pn1155.pn = phi { ptr, i32 } [ %.pn1155, %2143 ], [ %2138, %2137 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %216) #12
  br label %2147

2145:                                             ; preds = %2134, %2120
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %216) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %216) #12
  %2146 = getelementptr inbounds i8, ptr %.011091430, i64 4
  %.not1152 = icmp eq ptr %2146, %2111
  br i1 %.not1152, label %.loopexit1368, label %2117

2147:                                             ; preds = %2144, %2135
  %.pn1155.pn.pn = phi { ptr, i32 } [ %.pn1155.pn, %2144 ], [ %2136, %2135 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %216) #12
  br label %2151

.loopexit1368:                                    ; preds = %2145, %2109, %2105
  %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE4 = phi ptr [ @_ZN3JPH5Color4sRedE, %2105 ], [ @_ZN3JPH5Color6sGreenE, %2109 ], [ @_ZN3JPH5Color6sGreenE, %2145 ]
  %2148 = getelementptr inbounds i8, ptr %0, i64 144
  %2149 = load ptr, ptr %2148, align 16, !tbaa !50
  %.sroa.0133.0.copyload = load i32, ptr %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE4, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer14DrawWireSphereENS_4Vec3EfNS_5ColorEi(ptr noundef nonnull align 8 dereferenceable(320) %2149, double %2097, double %2098, float noundef %2092, i32 %.sroa.0133.0.copyload, i32 noundef 3)
          to label %2150 unwind label %2113

2150:                                             ; preds = %.loopexit1368
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %213) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %213) #12
  br label %2439

2151:                                             ; preds = %2147, %2115, %2113
  %.pn1155.pn.pn.pn = phi { ptr, i32 } [ %.pn1155.pn.pn, %2147 ], [ %2114, %2113 ], [ %2116, %2115 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %213) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %213) #12
  br label %2440

2152:                                             ; preds = %5
  %2153 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FB99999A0000000, double %250, double %251)
  %2154 = extractvalue { double, double } %2153, 0
  %2155 = extractvalue { double, double } %2153, 1
  %2156 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %2154, double %2155)
  %2157 = extractvalue { double, double } %2156, 0
  %2158 = extractvalue { double, double } %2156, 1
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %219) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %219) #12
  %2159 = getelementptr inbounds i8, ptr %0, i64 344
  %2160 = load ptr, ptr %2159, align 8, !tbaa !47
  %2161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2160)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %220) #12
  store i64 0, ptr %220, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %220) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %221) #12
  store i64 0, ptr %221, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %221) #12
  %2162 = load ptr, ptr %2161, align 8, !tbaa !51
  %2163 = getelementptr inbounds i8, ptr %2162, i64 40
  %2164 = load ptr, ptr %2163, align 8
  invoke void %2164(ptr noundef nonnull align 8 dereferenceable(8) %2161, double %2157, double %2158, ptr noundef nonnull align 8 dereferenceable(24) %219, ptr noundef nonnull align 8 dereferenceable(8) %220, ptr noundef nonnull align 8 dereferenceable(8) %221)
          to label %2165 unwind label %2175

2165:                                             ; preds = %2152
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %221) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %221) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %220) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %220) #12
  %2166 = getelementptr inbounds i8, ptr %219, i64 24
  %2167 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2166)
  %2168 = xor i1 %2167, true
  br i1 %2167, label %.loopexit1369, label %2169

2169:                                             ; preds = %2165
  %2170 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2166)
  %2171 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2166)
  %.not11441425 = icmp eq ptr %2170, %2171
  br i1 %.not11441425, label %.loopexit1369, label %.lr.ph1428

.lr.ph1428:                                       ; preds = %2169
  %2172 = getelementptr inbounds i8, ptr %0, i64 144
  br label %2177

2173:                                             ; preds = %.loopexit1369
  %2174 = landingpad { ptr, i32 }
          cleanup
  br label %2211

2175:                                             ; preds = %2152
  %2176 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %221) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %221) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %220) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %220) #12
  br label %2211

2177:                                             ; preds = %.lr.ph1428, %2205
  %.011101426 = phi ptr [ %2170, %.lr.ph1428 ], [ %2206, %2205 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %222) #12
  %2178 = load ptr, ptr %2159, align 8, !tbaa !47
  %2179 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %2178)
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %222, ptr noundef nonnull align 8 dereferenceable(16) %2179, ptr noundef nonnull align 4 dereferenceable(4) %.011101426)
          to label %2180 unwind label %2195

2180:                                             ; preds = %2177
  %2181 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %222)
  br i1 %2181, label %2182, label %2205

2182:                                             ; preds = %2180
  %2183 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %222)
          to label %2184 unwind label %2197

2184:                                             ; preds = %2182
  %2185 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %2183)
  %_ZN3JPH5Color7sYellowE.val1145 = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val1146 = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.0114.0.copyload = select i1 %2185, i32 %_ZN3JPH5Color7sYellowE.val1145, i32 %_ZN3JPH5Color7sOrangeE.val1146
  %2186 = load ptr, ptr %2172, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %223) #12
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %223, ptr noundef nonnull align 16 dereferenceable(122) %2183)
          to label %2187 unwind label %2199

2187:                                             ; preds = %2184
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %224) #12
  %2188 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %2183)
          to label %2189 unwind label %2201

2189:                                             ; preds = %2187
  %2190 = load ptr, ptr %2188, align 8, !tbaa !51
  %2191 = getelementptr inbounds i8, ptr %2190, i64 32
  %2192 = load ptr, ptr %2191, align 8
  invoke void %2192(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %224, ptr noundef nonnull align 8 dereferenceable(26) %2188)
          to label %2193 unwind label %2201

2193:                                             ; preds = %2189
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2186, ptr noundef nonnull align 16 dereferenceable(64) %223, ptr noundef nonnull align 16 dereferenceable(32) %224, i32 %.sroa.0114.0.copyload)
          to label %2194 unwind label %2201

2194:                                             ; preds = %2193
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %224) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %223) #12
  br label %2205

2195:                                             ; preds = %2177
  %2196 = landingpad { ptr, i32 }
          cleanup
  br label %2207

2197:                                             ; preds = %2182
  %2198 = landingpad { ptr, i32 }
          cleanup
  br label %2204

2199:                                             ; preds = %2184
  %2200 = landingpad { ptr, i32 }
          cleanup
  br label %2203

2201:                                             ; preds = %2193, %2189, %2187
  %2202 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %224) #12
  br label %2203

2203:                                             ; preds = %2201, %2199
  %.pn1147 = phi { ptr, i32 } [ %2202, %2201 ], [ %2200, %2199 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %223) #12
  br label %2204

2204:                                             ; preds = %2203, %2197
  %.pn1147.pn = phi { ptr, i32 } [ %.pn1147, %2203 ], [ %2198, %2197 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %222) #12
  br label %2207

2205:                                             ; preds = %2194, %2180
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %222) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %222) #12
  %2206 = getelementptr inbounds i8, ptr %.011101426, i64 4
  %.not1144 = icmp eq ptr %2206, %2171
  br i1 %.not1144, label %.loopexit1369, label %2177

2207:                                             ; preds = %2204, %2195
  %.pn1147.pn.pn = phi { ptr, i32 } [ %.pn1147.pn, %2204 ], [ %2196, %2195 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %222) #12
  br label %2211

.loopexit1369:                                    ; preds = %2205, %2169, %2165
  %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE5 = phi ptr [ @_ZN3JPH5Color4sRedE, %2165 ], [ @_ZN3JPH5Color6sGreenE, %2169 ], [ @_ZN3JPH5Color6sGreenE, %2205 ]
  %2208 = getelementptr inbounds i8, ptr %0, i64 144
  %2209 = load ptr, ptr %2208, align 16, !tbaa !50
  %.sroa.0110.0.copyload = load i32, ptr %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE5, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320) %2209, double %2157, double %2158, i32 %.sroa.0110.0.copyload, float noundef 0x3FB99999A0000000)
          to label %2210 unwind label %2173

2210:                                             ; preds = %.loopexit1369
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %219) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %219) #12
  br label %2439

2211:                                             ; preds = %2207, %2175, %2173
  %.pn1147.pn.pn.pn = phi { ptr, i32 } [ %.pn1147.pn.pn, %2207 ], [ %2174, %2173 ], [ %2176, %2175 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %219) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %219) #12
  br label %2440

2212:                                             ; preds = %5
  %2213 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x3FC99999A0000000, double %250, double %251)
  %2214 = extractvalue { double, double } %2213, 0
  %2215 = extractvalue { double, double } %2213, 1
  %2216 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %2214, double %2215)
  %2217 = extractvalue { double, double } %2216, 0
  %2218 = extractvalue { double, double } %2216, 1
  %2219 = getelementptr inbounds i8, ptr %0, i64 576
  %.sroa.0101.0.copyload = load double, ptr %2219, align 16
  %.sroa.2102.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 584
  %.sroa.2102.0.copyload = load double, ptr %.sroa.2102.0..sroa_idx, align 8, !tbaa !6
  %2220 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+00, double %.sroa.0101.0.copyload, double %.sroa.2102.0.copyload)
  %2221 = extractvalue { double, double } %2220, 0
  %2222 = extractvalue { double, double } %2220, 1
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %225) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %226) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %227) #12
  %2223 = call { double, double } @_ZN3JPH4Vec36sAxisZEv()
  %2224 = extractvalue { double, double } %2223, 0
  %2225 = extractvalue { double, double } %2223, 1
  %2226 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %2224, double %2225, float noundef 0x3FE41B2F80000000)
  %2227 = extractvalue { double, double } %2226, 0
  store double %2227, ptr %227, align 16
  %2228 = getelementptr inbounds i8, ptr %227, i64 8
  %2229 = extractvalue { double, double } %2226, 1
  store double %2229, ptr %2228, align 8
  %2230 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %2231 = extractvalue { double, double } %2230, 0
  %2232 = extractvalue { double, double } %2230, 1
  %2233 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %2231, double %2232, float noundef 0x3FD41B2F80000000)
  %2234 = extractvalue { double, double } %2233, 0
  %2235 = extractvalue { double, double } %2233, 1
  %2236 = call { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %227, double %2234, double %2235)
  %2237 = extractvalue { double, double } %2236, 0
  %2238 = extractvalue { double, double } %2236, 1
  call void @_ZN3JPH5Mat4420sRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %226, double %2237, double %2238, double %2217, double %2218)
  call void @_ZN3JPH11OrientedBoxC2ERKNS_5Mat44ENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(80) %225, ptr noundef nonnull align 16 dereferenceable(64) %226, double %2221, double %2222)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %227) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %226) #12
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %228) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %228) #12
  %2239 = getelementptr inbounds i8, ptr %0, i64 344
  %2240 = load ptr, ptr %2239, align 8, !tbaa !47
  %2241 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2240)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %229) #12
  store i64 0, ptr %229, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %229) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %230) #12
  store i64 0, ptr %230, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %230) #12
  %2242 = load ptr, ptr %2241, align 8, !tbaa !51
  %2243 = getelementptr inbounds i8, ptr %2242, i64 48
  %2244 = load ptr, ptr %2243, align 8
  invoke void %2244(ptr noundef nonnull align 8 dereferenceable(8) %2241, ptr noundef nonnull align 16 dereferenceable(80) %225, ptr noundef nonnull align 8 dereferenceable(24) %228, ptr noundef nonnull align 8 dereferenceable(8) %229, ptr noundef nonnull align 8 dereferenceable(8) %230)
          to label %2245 unwind label %2255

2245:                                             ; preds = %2212
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %230) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %230) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %229) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %229) #12
  %2246 = getelementptr inbounds i8, ptr %228, i64 24
  %2247 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2246)
  %2248 = xor i1 %2247, true
  br i1 %2247, label %.loopexit1370, label %2249

2249:                                             ; preds = %2245
  %2250 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2246)
  %2251 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2246)
  %.not11361421 = icmp eq ptr %2250, %2251
  br i1 %.not11361421, label %.loopexit1370, label %.lr.ph1424

.lr.ph1424:                                       ; preds = %2249
  %2252 = getelementptr inbounds i8, ptr %0, i64 144
  br label %2257

2253:                                             ; preds = %.loopexit1370
  %2254 = landingpad { ptr, i32 }
          cleanup
  br label %2291

2255:                                             ; preds = %2212
  %2256 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %230) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %230) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %229) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %229) #12
  br label %2291

2257:                                             ; preds = %.lr.ph1424, %2285
  %.011111422 = phi ptr [ %2250, %.lr.ph1424 ], [ %2286, %2285 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %231) #12
  %2258 = load ptr, ptr %2239, align 8, !tbaa !47
  %2259 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %2258)
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %231, ptr noundef nonnull align 8 dereferenceable(16) %2259, ptr noundef nonnull align 4 dereferenceable(4) %.011111422)
          to label %2260 unwind label %2275

2260:                                             ; preds = %2257
  %2261 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %231)
  br i1 %2261, label %2262, label %2285

2262:                                             ; preds = %2260
  %2263 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %231)
          to label %2264 unwind label %2277

2264:                                             ; preds = %2262
  %2265 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %2263)
  %_ZN3JPH5Color7sYellowE.val1137 = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val1138 = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.078.0.copyload = select i1 %2265, i32 %_ZN3JPH5Color7sYellowE.val1137, i32 %_ZN3JPH5Color7sOrangeE.val1138
  %2266 = load ptr, ptr %2252, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %232) #12
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %232, ptr noundef nonnull align 16 dereferenceable(122) %2263)
          to label %2267 unwind label %2279

2267:                                             ; preds = %2264
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %233) #12
  %2268 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %2263)
          to label %2269 unwind label %2281

2269:                                             ; preds = %2267
  %2270 = load ptr, ptr %2268, align 8, !tbaa !51
  %2271 = getelementptr inbounds i8, ptr %2270, i64 32
  %2272 = load ptr, ptr %2271, align 8
  invoke void %2272(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %233, ptr noundef nonnull align 8 dereferenceable(26) %2268)
          to label %2273 unwind label %2281

2273:                                             ; preds = %2269
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2266, ptr noundef nonnull align 16 dereferenceable(64) %232, ptr noundef nonnull align 16 dereferenceable(32) %233, i32 %.sroa.078.0.copyload)
          to label %2274 unwind label %2281

2274:                                             ; preds = %2273
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %233) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %232) #12
  br label %2285

2275:                                             ; preds = %2257
  %2276 = landingpad { ptr, i32 }
          cleanup
  br label %2287

2277:                                             ; preds = %2262
  %2278 = landingpad { ptr, i32 }
          cleanup
  br label %2284

2279:                                             ; preds = %2264
  %2280 = landingpad { ptr, i32 }
          cleanup
  br label %2283

2281:                                             ; preds = %2273, %2269, %2267
  %2282 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %233) #12
  br label %2283

2283:                                             ; preds = %2281, %2279
  %.pn1139 = phi { ptr, i32 } [ %2282, %2281 ], [ %2280, %2279 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %232) #12
  br label %2284

2284:                                             ; preds = %2283, %2277
  %.pn1139.pn = phi { ptr, i32 } [ %.pn1139, %2283 ], [ %2278, %2277 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %231) #12
  br label %2287

2285:                                             ; preds = %2274, %2260
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %231) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %231) #12
  %2286 = getelementptr inbounds i8, ptr %.011111422, i64 4
  %.not1136 = icmp eq ptr %2286, %2251
  br i1 %.not1136, label %.loopexit1370, label %2257

2287:                                             ; preds = %2284, %2275
  %.pn1139.pn.pn = phi { ptr, i32 } [ %.pn1139.pn, %2284 ], [ %2276, %2275 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %231) #12
  br label %2291

.loopexit1370:                                    ; preds = %2285, %2249, %2245
  %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE6 = phi ptr [ @_ZN3JPH5Color4sRedE, %2245 ], [ @_ZN3JPH5Color6sGreenE, %2249 ], [ @_ZN3JPH5Color6sGreenE, %2285 ]
  %2288 = getelementptr inbounds i8, ptr %0, i64 144
  %2289 = load ptr, ptr %2288, align 16, !tbaa !50
  %.sroa.076.0.copyload = load i32, ptr %_ZN3JPH5Color6sGreenE._ZN3JPH5Color4sRedE6, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_11OrientedBoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2289, ptr noundef nonnull align 16 dereferenceable(80) %225, i32 %.sroa.076.0.copyload)
          to label %2290 unwind label %2253

2290:                                             ; preds = %.loopexit1370
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %228) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %228) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %225) #12
  br label %2439

2291:                                             ; preds = %2287, %2255, %2253
  %.pn1139.pn.pn.pn = phi { ptr, i32 } [ %.pn1139.pn.pn, %2287 ], [ %2254, %2253 ], [ %2256, %2255 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_6BodyIDENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %228) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %228) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %225) #12
  br label %2440

2292:                                             ; preds = %5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %234) #12
  %2293 = getelementptr inbounds i8, ptr %0, i64 576
  %.sroa.074.0.copyload = load double, ptr %2293, align 16
  %.sroa.275.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 584
  %.sroa.275.0.copyload = load double, ptr %.sroa.275.0..sroa_idx, align 8, !tbaa !6
  %2294 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+00, double %.sroa.074.0.copyload, double %.sroa.275.0.copyload)
  %2295 = extractvalue { double, double } %2294, 0
  store double %2295, ptr %234, align 16
  %2296 = getelementptr inbounds i8, ptr %234, i64 8
  %2297 = extractvalue { double, double } %2294, 1
  store double %2297, ptr %2296, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %235) #12
  %2298 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %2295, double %2297)
  %2299 = extractvalue { double, double } %2298, 0
  %2300 = extractvalue { double, double } %2298, 1
  %.sroa.066.0.copyload = load double, ptr %234, align 16
  %.sroa.267.0.copyload = load double, ptr %2296, align 8, !tbaa !6
  %2301 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %.sroa.066.0.copyload, double %.sroa.267.0.copyload)
  %2302 = extractvalue { double, double } %2301, 0
  %2303 = extractvalue { double, double } %2301, 1
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %235, double %2299, double %2300, double %2302, double %2303)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %236) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %236, ptr noundef nonnull align 16 dereferenceable(32) %235, i64 32, i1 false), !tbaa.struct !90
  %2304 = getelementptr inbounds i8, ptr %236, i64 32
  store double %250, ptr %2304, align 16
  %.sroa.36.0..sroa_idx = getelementptr inbounds i8, ptr %236, i64 40
  store double %251, ptr %.sroa.36.0..sroa_idx, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %237) #12
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %237) #12
  %2305 = getelementptr inbounds i8, ptr %0, i64 344
  %2306 = load ptr, ptr %2305, align 8, !tbaa !47
  %2307 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %2306)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %238) #12
  store i64 0, ptr %238, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %238) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %239) #12
  store i64 0, ptr %239, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %239) #12
  %2308 = load ptr, ptr %2307, align 8, !tbaa !51
  %2309 = getelementptr inbounds i8, ptr %2308, i64 56
  %2310 = load ptr, ptr %2309, align 8
  invoke void %2310(ptr noundef nonnull align 8 dereferenceable(8) %2307, ptr noundef nonnull align 16 dereferenceable(48) %236, ptr noundef nonnull align 8 dereferenceable(24) %237, ptr noundef nonnull align 8 dereferenceable(8) %238, ptr noundef nonnull align 8 dereferenceable(8) %239)
          to label %2311 unwind label %2325

2311:                                             ; preds = %2292
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %239) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %239) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %238) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %238) #12
  invoke void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48) %237)
          to label %2312 unwind label %2323

2312:                                             ; preds = %2311
  %2313 = getelementptr inbounds i8, ptr %237, i64 24
  %2314 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2313)
  %2315 = xor i1 %2314, true
  br i1 %2314, label %2410, label %2316

2316:                                             ; preds = %2312
  %.sroa.065.0.copyload = load double, ptr %6, align 16
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %.sroa.6.0.copyload = load double, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !6
  %2317 = call noundef ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2313)
  %2318 = call noundef ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2313)
  %.not1416 = icmp eq ptr %2317, %2318
  br i1 %.not1416, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %2316
  %2319 = getelementptr inbounds i8, ptr %0, i64 144
  br label %2327

._crit_edge:                                      ; preds = %2387, %2316
  %2320 = getelementptr inbounds i8, ptr %0, i64 144
  %2321 = load ptr, ptr %2320, align 16, !tbaa !50
  %2322 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %2313)
          to label %2390 unwind label %2408

2323:                                             ; preds = %2414, %2410, %2311
  %2324 = landingpad { ptr, i32 }
          cleanup
  br label %2438

2325:                                             ; preds = %2292
  %2326 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %239) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %239) #12
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %238) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %238) #12
  br label %2438

2327:                                             ; preds = %.lr.ph, %2387
  %.sroa.6.01420 = phi double [ %.sroa.6.0.copyload, %.lr.ph ], [ %2337, %2387 ]
  %.sroa.065.01419 = phi double [ %.sroa.065.0.copyload, %.lr.ph ], [ %2336, %2387 ]
  %.011121418 = phi i1 [ false, %.lr.ph ], [ %2350, %2387 ]
  %.011131417 = phi ptr [ %2317, %.lr.ph ], [ %2388, %2387 ]
  %2328 = getelementptr inbounds i8, ptr %.011131417, i64 4
  %2329 = load float, ptr %2328, align 4, !tbaa !48
  %2330 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %2329, double %250, double %251)
          to label %2331 unwind label %2368

2331:                                             ; preds = %2327
  %2332 = extractvalue { double, double } %2330, 0
  %2333 = extractvalue { double, double } %2330, 1
  %2334 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %2332, double %2333)
          to label %2335 unwind label %2368

2335:                                             ; preds = %2331
  %2336 = extractvalue { double, double } %2334, 0
  %2337 = extractvalue { double, double } %2334, 1
  %_ZN3JPH5Color5sGreyE.val = load i32, ptr @_ZN3JPH5Color5sGreyE, align 4
  %_ZN3JPH5Color6sWhiteE.val = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4
  %.sroa.049.0.copyload = select i1 %.011121418, i32 %_ZN3JPH5Color5sGreyE.val, i32 %_ZN3JPH5Color6sWhiteE.val
  %2338 = load ptr, ptr %2319, align 16, !tbaa !50
  %2339 = load ptr, ptr %2338, align 8, !tbaa !51
  %2340 = getelementptr inbounds i8, ptr %2339, i64 16
  %2341 = load ptr, ptr %2340, align 8
  invoke void %2341(ptr noundef nonnull align 8 dereferenceable(320) %2338, double %.sroa.065.01419, double %.sroa.6.01420, double %2336, double %2337, i32 %.sroa.049.0.copyload)
          to label %2342 unwind label %2370

2342:                                             ; preds = %2335
  %2343 = load ptr, ptr %2319, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %240) #12
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %240, double %2336, double %2337)
          to label %2344 unwind label %2372

2344:                                             ; preds = %2342
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %241) #12
  %2345 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %234)
          to label %2346 unwind label %2374

2346:                                             ; preds = %2344
  %2347 = extractvalue { double, double } %2345, 0
  %2348 = extractvalue { double, double } %2345, 1
  %.sroa.038.0.copyload = load double, ptr %234, align 16
  %.sroa.239.0.copyload = load double, ptr %2296, align 8, !tbaa !6
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %241, double %2347, double %2348, double %.sroa.038.0.copyload, double %.sroa.239.0.copyload)
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2343, ptr noundef nonnull align 16 dereferenceable(64) %240, ptr noundef nonnull align 16 dereferenceable(32) %241, i32 %.sroa.049.0.copyload)
          to label %2349 unwind label %2374

2349:                                             ; preds = %2346
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %241) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %240) #12
  %2350 = xor i1 %.011121418, true
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %242) #12
  %2351 = load ptr, ptr %2305, align 8, !tbaa !47
  %2352 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %2351)
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %242, ptr noundef nonnull align 8 dereferenceable(16) %2352, ptr noundef nonnull align 4 dereferenceable(4) %.011131417)
          to label %2353 unwind label %2377

2353:                                             ; preds = %2349
  %2354 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %242)
  br i1 %2354, label %2355, label %2387

2355:                                             ; preds = %2353
  %2356 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %242)
          to label %2357 unwind label %2379

2357:                                             ; preds = %2355
  %2358 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %2356)
  %_ZN3JPH5Color7sYellowE.val = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4
  %_ZN3JPH5Color7sOrangeE.val = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4
  %.sroa.034.0.copyload = select i1 %2358, i32 %_ZN3JPH5Color7sYellowE.val, i32 %_ZN3JPH5Color7sOrangeE.val
  %2359 = load ptr, ptr %2319, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %243) #12
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %243, ptr noundef nonnull align 16 dereferenceable(122) %2356)
          to label %2360 unwind label %2381

2360:                                             ; preds = %2357
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %244) #12
  %2361 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %2356)
          to label %2362 unwind label %2383

2362:                                             ; preds = %2360
  %2363 = load ptr, ptr %2361, align 8, !tbaa !51
  %2364 = getelementptr inbounds i8, ptr %2363, i64 32
  %2365 = load ptr, ptr %2364, align 8
  invoke void %2365(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %244, ptr noundef nonnull align 8 dereferenceable(26) %2361)
          to label %2366 unwind label %2383

2366:                                             ; preds = %2362
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2359, ptr noundef nonnull align 16 dereferenceable(64) %243, ptr noundef nonnull align 16 dereferenceable(32) %244, i32 %.sroa.034.0.copyload)
          to label %2367 unwind label %2383

2367:                                             ; preds = %2366
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %244) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %243) #12
  br label %2387

2368:                                             ; preds = %2331, %2327
  %2369 = landingpad { ptr, i32 }
          cleanup
  br label %2438

2370:                                             ; preds = %2335
  %2371 = landingpad { ptr, i32 }
          cleanup
  br label %2438

2372:                                             ; preds = %2342
  %2373 = landingpad { ptr, i32 }
          cleanup
  br label %2376

2374:                                             ; preds = %2346, %2344
  %2375 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %241) #12
  br label %2376

2376:                                             ; preds = %2374, %2372
  %.pn1126 = phi { ptr, i32 } [ %2375, %2374 ], [ %2373, %2372 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %240) #12
  br label %2438

2377:                                             ; preds = %2349
  %2378 = landingpad { ptr, i32 }
          cleanup
  br label %2389

2379:                                             ; preds = %2355
  %2380 = landingpad { ptr, i32 }
          cleanup
  br label %2386

2381:                                             ; preds = %2357
  %2382 = landingpad { ptr, i32 }
          cleanup
  br label %2385

2383:                                             ; preds = %2366, %2362, %2360
  %2384 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %244) #12
  br label %2385

2385:                                             ; preds = %2383, %2381
  %.pn1128 = phi { ptr, i32 } [ %2384, %2383 ], [ %2382, %2381 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %243) #12
  br label %2386

2386:                                             ; preds = %2385, %2379
  %.pn1128.pn = phi { ptr, i32 } [ %.pn1128, %2385 ], [ %2380, %2379 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %242) #12
  br label %2389

2387:                                             ; preds = %2367, %2353
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %242) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %242) #12
  %2388 = getelementptr inbounds i8, ptr %.011131417, i64 8
  %.not = icmp eq ptr %2388, %2318
  br i1 %.not, label %._crit_edge, label %2327

2389:                                             ; preds = %2386, %2377
  %.pn1128.pn.pn = phi { ptr, i32 } [ %.pn1128.pn, %2386 ], [ %2378, %2377 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %242) #12
  br label %2438

2390:                                             ; preds = %._crit_edge
  %2391 = getelementptr inbounds i8, ptr %2322, i64 4
  %2392 = load float, ptr %2391, align 4, !tbaa !48
  %2393 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %2392, double %250, double %251)
          to label %2394 unwind label %2408

2394:                                             ; preds = %2390
  %2395 = extractvalue { double, double } %2393, 0
  %2396 = extractvalue { double, double } %2393, 1
  %2397 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %2395, double %2396)
          to label %2398 unwind label %2408

2398:                                             ; preds = %2394
  %2399 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %2400 unwind label %2408

2400:                                             ; preds = %2398
  %2401 = extractvalue { double, double } %2397, 1
  %2402 = extractvalue { double, double } %2397, 0
  %2403 = extractvalue { double, double } %2399, 0
  %2404 = extractvalue { double, double } %2399, 1
  %.sroa.022.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  %2405 = load ptr, ptr %2321, align 8, !tbaa !51
  %2406 = getelementptr inbounds i8, ptr %2405, i64 16
  %2407 = load ptr, ptr %2406, align 8
  invoke void %2407(ptr noundef nonnull align 8 dereferenceable(320) %2321, double %2402, double %2401, double %2403, double %2404, i32 %.sroa.022.0.copyload)
          to label %2437 unwind label %2408

2408:                                             ; preds = %2400, %2398, %2394, %2390, %._crit_edge
  %2409 = landingpad { ptr, i32 }
          cleanup
  br label %2438

2410:                                             ; preds = %2312
  %2411 = getelementptr inbounds i8, ptr %0, i64 144
  %2412 = load ptr, ptr %2411, align 16, !tbaa !50
  %.sroa.020.0.copyload = load double, ptr %6, align 16
  %.sroa.221.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %.sroa.221.0.copyload = load double, ptr %.sroa.221.0..sroa_idx, align 8, !tbaa !6
  %2413 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %2414 unwind label %2323

2414:                                             ; preds = %2410
  %2415 = extractvalue { double, double } %2413, 0
  %2416 = extractvalue { double, double } %2413, 1
  %.sroa.015.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  %2417 = load ptr, ptr %2412, align 8, !tbaa !51
  %2418 = getelementptr inbounds i8, ptr %2417, i64 16
  %2419 = load ptr, ptr %2418, align 8
  invoke void %2419(ptr noundef nonnull align 8 dereferenceable(320) %2412, double %.sroa.020.0.copyload, double %.sroa.221.0.copyload, double %2415, double %2416, i32 %.sroa.015.0.copyload)
          to label %2420 unwind label %2323

2420:                                             ; preds = %2414
  %2421 = load ptr, ptr %2411, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %245) #12
  %2422 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %250, double %251)
          to label %2423 unwind label %2432

2423:                                             ; preds = %2420
  %2424 = extractvalue { double, double } %2422, 0
  %2425 = extractvalue { double, double } %2422, 1
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %245, double %2424, double %2425)
          to label %2426 unwind label %2432

2426:                                             ; preds = %2423
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %246) #12
  %2427 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %234)
          to label %2428 unwind label %2434

2428:                                             ; preds = %2426
  %2429 = extractvalue { double, double } %2427, 0
  %2430 = extractvalue { double, double } %2427, 1
  %.sroa.08.0.copyload = load double, ptr %234, align 16
  %.sroa.2.0.copyload = load double, ptr %2296, align 8, !tbaa !6
  call void @_ZN3JPH5AABoxC2ENS_4Vec3ES1_(ptr noundef nonnull align 16 dereferenceable(32) %246, double %2429, double %2430, double %.sroa.08.0.copyload, double %.sroa.2.0.copyload)
  %.sroa.0.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !6
  invoke void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320) %2421, ptr noundef nonnull align 16 dereferenceable(64) %245, ptr noundef nonnull align 16 dereferenceable(32) %246, i32 %.sroa.0.0.copyload)
          to label %2431 unwind label %2434

2431:                                             ; preds = %2428
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %246) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %245) #12
  br label %2437

2432:                                             ; preds = %2423, %2420
  %2433 = landingpad { ptr, i32 }
          cleanup
  br label %2436

2434:                                             ; preds = %2428, %2426
  %2435 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %246) #12
  br label %2436

2436:                                             ; preds = %2434, %2432
  %.pn = phi { ptr, i32 } [ %2435, %2434 ], [ %2433, %2432 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %245) #12
  br label %2438

2437:                                             ; preds = %2400, %2431
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %237) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %237) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %236) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %235) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %234) #12
  br label %2439

2438:                                             ; preds = %2408, %2370, %2376, %2389, %2368, %2436, %2325, %2323
  %.pn1128.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn, %2436 ], [ %2324, %2323 ], [ %2326, %2325 ], [ %2409, %2408 ], [ %2369, %2368 ], [ %.pn1128.pn.pn, %2389 ], [ %.pn1126, %2376 ], [ %2371, %2370 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %237) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %237) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %236) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %235) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %234) #12
  br label %2440

2439:                                             ; preds = %2437, %2290, %2210, %2150, %2087, %2016, %1902, %1752, %1688, %1483, %.loopexit1365, %834, %773, %450, %290, %5
  %.3 = phi i1 [ false, %5 ], [ %2315, %2437 ], [ %2248, %2290 ], [ %2168, %2210 ], [ %2108, %2150 ], [ %2045, %2087 ], [ %1915, %2016 ], [ %.0.lcssa1506, %1902 ], [ false, %1752 ], [ false, %1688 ], [ %1279, %1483 ], [ %1018, %.loopexit1365 ], [ %789, %834 ], [ %566, %773 ], [ %295, %450 ], [ %269, %290 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #12
  ret i1 %.3

2440:                                             ; preds = %2438, %2291, %2211, %2151, %2088, %2017, %1903, %1753, %1689, %1487, %1126, %835, %774, %451, %281
  %.pn1128.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1128.pn.pn.pn.pn.pn.pn, %2438 ], [ %.pn1139.pn.pn.pn, %2291 ], [ %.pn1147.pn.pn.pn, %2211 ], [ %.pn1155.pn.pn.pn, %2151 ], [ %.pn1163.pn.pn.pn, %2088 ], [ %.pn1173.pn.pn.pn.pn.pn.pn, %2017 ], [ %.pn1184.pn.pn.pn.pn.pn.pn.pn, %1903 ], [ %.pn1198.pn.pn, %1753 ], [ %.pn1215.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1689 ], [ %.pn1251.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1487 ], [ %.pn1288.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1126 ], [ %.pn1305.pn.pn.pn, %835 ], [ %.pn1335.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %774 ], [ %.pn1351.pn.pn.pn.pn.pn.pn.pn, %451 ], [ %282, %281 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #12
  resume { ptr, i32 } %.pn1128.pn.pn.pn.pn.pn.pn.pn
}

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172)) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9), i8) unnamed_addr #2 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32), float noundef) local_unnamed_addr #9 align 2

declare void @_ZN3JPH13DebugRenderer10DrawMarkerENS_4Vec3ENS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320), double, double, i32, float noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZN3JPH13DebugRenderer9DrawArrowENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320), double, double, double, double, i32, float noundef) local_unnamed_addr #4

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EEC2Ev(ptr noundef nonnull align 16 dereferenceable(528)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(4), double, double, double, double, ptr noundef nonnull align 16 dereferenceable(528)) local_unnamed_addr #6 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13DebugRenderer15DrawWirePolygonINS_11StaticArrayINS_4Vec3ELj32EEEEEvRKNS_5Mat44ERKT_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(528), i32, float noundef) local_unnamed_addr #6 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528)) unnamed_addr #2 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH24AnyHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(37)) unnamed_addr #9 align 2

declare void @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERKNS_15RayCastSettingsERNS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #9 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(37)) unnamed_addr #9 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53)) local_unnamed_addr #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_13RayCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #6 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN3JPH5ArrayINS_13RayCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #9 align 2

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

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

declare void @_ZNK3JPH16NarrowPhaseQuery12CollidePointENS_4Vec3ERNS_18CollisionCollectorINS_18CollidePointResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #4

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

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

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

declare void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5Mat44ERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(32), i32) local_unnamed_addr #4

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat449sRotationENS_4Vec3Ef(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double, float noundef) local_unnamed_addr #1 align 2

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

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

declare void @_ZNK3JPH16NarrowPhaseQuery12CollideShapeEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(37), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #4

declare void @_ZNK3JPH16NarrowPhaseQuery35CollideShapeWithInternalEdgeRemovalEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(37), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #4

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_18CollideShapeResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(1120)) local_unnamed_addr #9 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53)) local_unnamed_addr #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #6 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE19sFromWorldTransformEPKNS_5ShapeES1_RKS2_S1_(ptr dead_on_unwind noalias writable sret(%"struct.JPH::RShapeCast") align 16, ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), double, double) local_unnamed_addr #9 align 2

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

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

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

declare void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(1125)) local_unnamed_addr #9 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH35ClosestHitPerBodyCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(53)) local_unnamed_addr #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #6 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(1125) ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144), float noundef) local_unnamed_addr #9 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(1125) ptr @_ZN3JPH5ArrayINS_15ShapeCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #9 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrIKNS_4Vec3EEC2EPS2_i(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrIKfEC2EPS1_i(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrINS_5PlaneEEC2EPS1_i(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrIfEC2EPfi(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10StridedPtrIiEC2EPii(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH29CollideSoftBodyVertexIteratorC2ERKNS_10StridedPtrIKNS_4Vec3EEERKNS1_IKfEERKNS1_INS_5PlaneEEERKNS1_IfEERKNS1_IiEE(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #2 align 2

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

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

declare void @_ZNK3JPH16NarrowPhaseQuery24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #4

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

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

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

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

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

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

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

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

declare void @_ZNK3JPH16TransformedShape12CollideShapeEPKNS_5ShapeENS_4Vec3ERKNS_5Mat44ERKNS_20CollideShapeSettingsES4_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(37), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #4

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

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

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

declare void @_ZN3JPH13DebugRenderer9DrawPlaneENS_4Vec3ES1_NS_5ColorEf(ptr noundef nonnull align 8 dereferenceable(320), double, double, double, double, i32, float noundef) local_unnamed_addr #4

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4420sRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double, double, double) local_unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double) local_unnamed_addr #1 align 2

declare void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_5AABoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(32), i32) local_unnamed_addr #4

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

declare void @_ZNK3JPH16TransformedShape17GetTrianglesStartERNS_5Shape19GetTrianglesContextERKNS_5AABoxENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(4288), ptr noundef nonnull align 16 dereferenceable(32), double, double) local_unnamed_addr #4

declare noundef i32 @_ZNK3JPH16TransformedShape16GetTrianglesNextERNS_5Shape19GetTrianglesContextEiPNS_6Float3EPPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(4288), i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #8 align 2

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

declare void @_ZN3JPH13DebugRenderer16DrawWireTriangleENS_4Vec3ES1_S1_NS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320), double, double, double, double, double, double, i32) local_unnamed_addr #4

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH13PhysicsSystem18GetBroadPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_31CollisionCollectorTraitsCastRayEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #6 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_20BroadPhaseCastResultENS_12STLAllocatorIS1_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #9 align 2

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

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

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

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

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

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

declare void @_ZN3JPH13DebugRenderer14DrawWireSphereENS_4Vec3EfNS_5ColorEi(ptr noundef nonnull align 8 dereferenceable(320), double, double, float noundef, i32, i32 noundef) local_unnamed_addr #4

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

declare void @_ZN3JPH13DebugRenderer11DrawWireBoxERKNS_11OrientedBoxENS_5ColorE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(80), i32) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_20BroadPhaseCastResultENS_33CollisionCollectorTraitsCastShapeEEEE4SortEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #6 align 2

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { "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 nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { 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 #10 = { 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 #11 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #12 = { 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 = !{i64 0, i64 16, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !37, i64 552}
!14 = !{!"_ZTS10SamplesApp", !15, i64 0, !12, i64 272, !10, i64 276, !12, i64 280, !18, i64 288, !18, i64 296, !18, i64 304, !26, i64 312, !28, i64 328, !30, i64 336, !18, i64 344, !18, i64 352, !32, i64 360, !33, i64 448, !18, i64 480, !18, i64 488, !18, i64 496, !12, i64 504, !25, i64 508, !10, i64 512, !25, i64 516, !25, i64 517, !25, i64 518, !25, i64 519, !35, i64 520, !36, i64 544, !12, i64 548, !37, i64 552, !38, i64 556, !25, i64 560, !17, i64 576, !39, i64 592, !39, i64 593, !40, i64 594, !41, i64 595, !10, i64 596, !25, i64 600, !25, i64 601, !25, i64 602, !25, i64 603, !12, i64 604, !25, i64 608, !42, i64 612, !10, i64 616, !43, i64 620, !10, i64 624, !10, i64 628, !25, i64 632, !17, i64 640, !25, i64 656, !18, i64 664, !44, i64 672, !45, i64 680, !12, i64 688, !10, i64 692, !10, i64 696, !12, i64 700, !46, i64 704}
!15 = !{!"_ZTS11Application", !16, i64 16, !16, i64 80, !18, i64 144, !18, i64 152, !18, i64 160, !19, i64 168, !18, i64 176, !18, i64 184, !18, i64 192, !18, i64 200, !20, i64 208, !23, i64 240, !25, i64 248, !25, i64 249, !25, i64 250, !25, i64 251, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !12, i64 268}
!16 = !{!"_ZTS11CameraState", !17, i64 0, !17, i64 16, !17, i64 32, !10, i64 48}
!17 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!18 = !{!"any pointer", !7, i64 0}
!19 = !{!"_ZTSN3JPH8RefConstI4FontEE", !18, i64 0}
!20 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !21, i64 0, !22, i64 8, !7, i64 16}
!21 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !18, i64 0}
!22 = !{!"long", !7, i64 0}
!23 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !24, i64 0}
!24 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !22, i64 0}
!25 = !{!"bool", !7, i64 0}
!26 = !{!"_ZTS20BPLayerInterfaceImpl", !27, i64 0, !7, i64 8}
!27 = !{!"_ZTSN3JPH24BroadPhaseLayerInterfaceE"}
!28 = !{!"_ZTS33ObjectVsBroadPhaseLayerFilterImpl", !29, i64 0}
!29 = !{!"_ZTSN3JPH29ObjectVsBroadPhaseLayerFilterE"}
!30 = !{!"_ZTS25ObjectLayerPairFilterImpl", !31, i64 0}
!31 = !{!"_ZTSN3JPH21ObjectLayerPairFilterE"}
!32 = !{!"_ZTSN3JPH15PhysicsSettingsE", !12, i64 0, !12, i64 4, !12, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !12, i64 56, !12, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !25, i64 76, !25, i64 77, !25, i64 78, !25, i64 79, !25, i64 80, !25, i64 81, !25, i64 82}
!33 = !{!"_ZTSN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEE", !34, i64 0}
!34 = !{!"_ZTSN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EEE", !18, i64 0, !18, i64 8, !12, i64 16, !12, i64 20, !12, i64 24}
!35 = !{!"_ZTSN3JPH5ArrayIN10SamplesApp13PlayBackFrameENS_12STLAllocatorIS2_EEEE", !22, i64 0, !22, i64 8, !18, i64 16}
!36 = !{!"_ZTSN10SamplesApp13EPlaybackModeE", !7, i64 0}
!37 = !{!"_ZTSN10SamplesApp10EProbeModeE", !7, i64 0}
!38 = !{!"_ZTSN10SamplesApp11EProbeShapeE", !7, i64 0}
!39 = !{!"_ZTSN3JPH13EBackFaceModeE", !7, i64 0}
!40 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !7, i64 0}
!41 = !{!"_ZTSN3JPH17ECollectFacesModeE", !7, i64 0}
!42 = !{!"_ZTSN10SamplesApp17EShootObjectShapeE", !7, i64 0}
!43 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!44 = !{!"_ZTSN3JPH6BodyIDE", !12, i64 0}
!45 = !{!"_ZTSN3JPH3RefINS_10ConstraintEEE", !18, i64 0}
!46 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000EEEE", !22, i64 0}
!47 = !{!14, !18, i64 344}
!48 = !{!49, !10, i64 4}
!49 = !{!"_ZTSN3JPH20BroadPhaseCastResultE", !44, i64 0, !10, i64 4}
!50 = !{!15, !18, i64 144}
!51 = !{!52, !52, i64 0}
!52 = !{!"vtable pointer", !8, i64 0}
!53 = !{!14, !25, i64 603}
!54 = !{i8 0, i8 2}
!55 = !{}
!56 = !{!14, !39, i64 592}
!57 = !{!58, !39, i64 0}
!58 = !{!"_ZTSN3JPH15RayCastSettingsE", !39, i64 0, !39, i64 1, !25, i64 2}
!59 = !{!14, !39, i64 593}
!60 = !{!58, !39, i64 1}
!61 = !{!14, !25, i64 600}
!62 = !{!58, !25, i64 2}
!63 = !{!14, !12, i64 604}
!64 = !{!14, !25, i64 608}
!65 = !{!14, !40, i64 594}
!66 = !{!67, !40, i64 0}
!67 = !{!"_ZTSN3JPH19CollideSettingsBaseE", !40, i64 0, !41, i64 1, !10, i64 4, !10, i64 8, !17, i64 16}
!68 = !{!69, !39, i64 36}
!69 = !{!"_ZTSN3JPH20CollideShapeSettingsE", !67, i64 0, !10, i64 32, !39, i64 36}
!70 = !{!14, !41, i64 595}
!71 = !{!67, !41, i64 1}
!72 = !{!14, !10, i64 596}
!73 = !{!69, !10, i64 32}
!74 = !{!75, !10, i64 48}
!75 = !{!"_ZTSN3JPH18CollideShapeResultE", !17, i64 0, !17, i64 16, !17, i64 32, !10, i64 48, !76, i64 52, !76, i64 56, !44, i64 60, !77, i64 64, !77, i64 592}
!76 = !{!"_ZTSN3JPH10SubShapeIDE", !12, i64 0}
!77 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj32EEE", !12, i64 0, !7, i64 16}
!78 = !{!14, !25, i64 602}
!79 = !{!80, !25, i64 34}
!80 = !{!"_ZTSN3JPH17ShapeCastSettingsE", !67, i64 0, !39, i64 32, !39, i64 33, !25, i64 34, !25, i64 35}
!81 = !{!80, !39, i64 32}
!82 = !{!80, !39, i64 33}
!83 = !{!14, !25, i64 601}
!84 = !{!80, !25, i64 35}
!85 = !{!86, !10, i64 1120}
!86 = !{!"_ZTSN3JPH15ShapeCastResultE", !75, i64 0, !10, i64 1120, !25, i64 1124}
!87 = !{!18, !18, i64 0}
!88 = distinct !{!88, !89}
!89 = !{!"llvm.loop.mustprogress"}
!90 = !{i64 0, i64 16, !6, i64 16, i64 16, !6}


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