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

; 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::Color" = type { %union.anon.62 }
%union.anon.62 = type { i32 }
%"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::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.55 }
%union.anon.55 = type { <4 x float> }
%"class.JPH::RefConst.74" = type { ptr }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::SubShapeIDCreator" = type { %"class.JPH::SubShapeID", i32 }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::UnorderedMap" = type { %"class.JPH::HashTable.base", [4 x i8] }
%"class.JPH::HashTable.base" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::Array.43" = type { i64, i64, ptr }
%"class.JPH::BodyLockRead" = type { %"class.JPH::BodyLockBase" }
%"class.JPH::BodyLockBase" = type { ptr, ptr, ptr }
%"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::ShapeFilter" = type <{ ptr, %"class.JPH::BodyID", [4 x i8] }>
%"class.JPH::Ref.129" = type { ptr }
%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator" = type { %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::IteratorBase.base", [4 x i8] }
%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::IteratorBase.base" = type <{ ptr, i32 }>
%"class.JPH::Array.224" = type { i64, i64, ptr }
%"struct.JPH::Shape::GetTrianglesContext" = type { [4288 x i8] }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::Float2" = type { float, float }
%"class.JPH::Ref.231" = type { ptr }
%"struct.JPH::AssertLastParam" = type { 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 }
%struct.CameraState = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::RefConst" = type { ptr }
%"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.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.JPH::BroadPhaseLayer" = type { i8 }
%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::Array" = type { i64, i64, ptr }
%"class.JPH::Ref" = type { ptr }
%"class.std::chrono::duration.3" = type { i64 }
%"struct.std::pair" = type { %"class.JPH::RefConst.74", %"class.JPH::Ref.129" }
%"class.JPH::DebugRenderer::Triangle" = type { [3 x %"class.JPH::DebugRenderer::Vertex"] }
%"class.JPH::DebugRenderer::Vertex" = type { %"class.JPH::Float3", %"class.JPH::Float3", %"class.JPH::Float2", %"class.JPH::Color" }

@.str.147 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.149 = external hidden unnamed_addr constant [6 x i8], align 1
@_ZN3JPH5Color6sWhiteE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color5sGreyE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color6sGreenE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color6sBlackE = external global %"class.JPH::Color", align 4

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #3 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) #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: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec35sZeroEv() #6 align 2

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef) #6 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)) #1 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 #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)) #7 align 2

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 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)) #7 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10SamplesApp11DrawPhysicsEv(ptr noundef nonnull align 16 dereferenceable(712) %0) #8 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.JPH::UnorderedMap", align 8
  %4 = alloca %"class.JPH::Array.43", align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.JPH::BodyID", align 4
  %13 = alloca %"class.JPH::BodyLockRead", align 8
  %14 = alloca ptr, align 8
  %15 = alloca %"class.JPH::AllHitCollisionCollector.188", align 8
  %16 = alloca %"class.JPH::TransformedShape", align 16
  %17 = alloca %"class.JPH::ShapeFilter", align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"class.JPH::Ref.129", align 8
  %23 = alloca %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator", align 8
  %24 = alloca %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator", align 8
  %25 = alloca %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator", align 8
  %26 = alloca %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator", align 8
  %27 = alloca %"class.JPH::Array.224", align 8
  %28 = alloca %"struct.JPH::Shape::GetTrianglesContext", align 16
  %29 = alloca %"class.JPH::AABox", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Quat", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca i32, align 4
  %34 = alloca [3000 x %"class.JPH::Float3"], align 16
  %35 = alloca i32, align 4
  %36 = alloca i64, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Float3", align 4
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::Vec3", align 16
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::Vec3", align 16
  %50 = alloca %"class.JPH::Vec3", align 16
  %51 = alloca %"class.JPH::Float2", align 4
  %52 = alloca %"class.JPH::Float2", align 4
  %53 = alloca %"class.JPH::Float2", align 4
  %54 = alloca %"class.JPH::Ref.231", align 8
  %55 = alloca %"class.JPH::AABox", align 16
  %56 = alloca i1, align 1
  %57 = alloca %"class.JPH::Color", align 4
  %58 = alloca %"class.JPH::Color", align 4
  %59 = alloca %"struct.JPH::AssertLastParam", align 1
  %60 = alloca %"class.JPH::Vec3", align 16
  %61 = alloca i8, align 1
  %62 = alloca %"class.JPH::Vec3", align 16
  %63 = alloca %"class.JPH::Mat44", align 16
  %64 = alloca %"class.JPH::Mat44", align 16
  %65 = alloca %"class.JPH::Vec3", align 16
  %66 = alloca %"class.JPH::Color", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %67 = load ptr, ptr %2, align 8
  %68 = getelementptr inbounds %class.SamplesApp, ptr %67, i32 0, i32 17
  %69 = load ptr, ptr %68, align 8, !tbaa !9
  call void @_ZN4Test14DrawBodyLabelsEv(ptr noundef nonnull align 8 dereferenceable(112) %69)
  call void @llvm.lifetime.start.p0(i64 32, ptr %3) #11
  call void @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %3) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %4) #11
  call void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  %70 = getelementptr inbounds %class.SamplesApp, ptr %67, i32 0, i32 11
  %71 = load ptr, ptr %70, align 8, !tbaa !44
  invoke void @_ZNK3JPH13PhysicsSystem9GetBodiesERNS_5ArrayINS_6BodyIDENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 16 dereferenceable(1172) %71, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %72 unwind label %88

72:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #11
  %73 = getelementptr inbounds %class.SamplesApp, ptr %67, i32 0, i32 11
  %74 = load ptr, ptr %73, align 8, !tbaa !44
  %75 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %74)
          to label %76 unwind label %92

76:                                               ; preds = %72
  store ptr %75, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #11
  store ptr %4, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #11
  %77 = load ptr, ptr %8, align 8, !tbaa !5
  %78 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %77)
          to label %79 unwind label %96

79:                                               ; preds = %76
  store ptr %78, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #11
  %80 = load ptr, ptr %8, align 8, !tbaa !5
  %81 = invoke noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %80)
          to label %82 unwind label %100

82:                                               ; preds = %79
  store ptr %81, ptr %10, align 8, !tbaa !5
  br label %83

83:                                               ; preds = %648, %82
  %84 = load ptr, ptr %9, align 8, !tbaa !5
  %85 = load ptr, ptr %10, align 8, !tbaa !5
  %86 = icmp ne ptr %84, %85
  br i1 %86, label %104, label %87

87:                                               ; preds = %83
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #11
  br label %655

88:                                               ; preds = %1
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %5, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %6, align 4
  br label %659

92:                                               ; preds = %72
  %93 = landingpad { ptr, i32 }
          cleanup
  %94 = extractvalue { ptr, i32 } %93, 0
  store ptr %94, ptr %5, align 8
  %95 = extractvalue { ptr, i32 } %93, 1
  store i32 %95, ptr %6, align 4
  br label %658

96:                                               ; preds = %76
  %97 = landingpad { ptr, i32 }
          cleanup
  %98 = extractvalue { ptr, i32 } %97, 0
  store ptr %98, ptr %5, align 8
  %99 = extractvalue { ptr, i32 } %97, 1
  store i32 %99, ptr %6, align 4
  br label %654

100:                                              ; preds = %79
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %5, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %6, align 4
  br label %653

104:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #11
  %105 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %12, ptr align 4 %105, i64 4, i1 false), !tbaa.struct !45
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #11
  %106 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(16) %106, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %107 unwind label %132

107:                                              ; preds = %104
  %108 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE26SucceededAndIsInBroadPhaseEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %109 unwind label %136

109:                                              ; preds = %107
  br i1 %108, label %110, label %647

110:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #11
  %111 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %112 unwind label %140

112:                                              ; preds = %110
  store ptr %111, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %15) #11
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %16) #11
  %113 = load ptr, ptr %14, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body19GetTransformedShapeEv(ptr dead_on_unwind writable sret(%"class.JPH::TransformedShape") align 16 %16, ptr noundef nonnull align 16 dereferenceable(122) %113)
          to label %114 unwind label %144

114:                                              ; preds = %112
  %115 = load ptr, ptr %14, align 8, !tbaa !5
  %116 = invoke noundef nonnull align 16 dereferenceable(32) ptr @_ZNK3JPH4Body19GetWorldSpaceBoundsEv(ptr noundef nonnull align 16 dereferenceable(122) %115)
          to label %117 unwind label %148

117:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #11
  call void @llvm.memset.p0.i64(ptr align 8 %17, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %17)
          to label %118 unwind label %152

118:                                              ; preds = %117
  invoke void @_ZNK3JPH16TransformedShape24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorIS0_NS_36CollisionCollectorTraitsCollideShapeEEERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(64) %16, ptr noundef nonnull align 16 dereferenceable(32) %116, ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(12) %17)
          to label %119 unwind label %156

119:                                              ; preds = %118
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %17) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #11
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %16) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #11
  %120 = getelementptr inbounds %"class.JPH::AllHitCollisionCollector.188", ptr %15, i32 0, i32 1
  store ptr %120, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  %121 = load ptr, ptr %18, align 8, !tbaa !5
  %122 = invoke noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %121)
          to label %123 unwind label %163

123:                                              ; preds = %119
  store ptr %122, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #11
  %124 = load ptr, ptr %18, align 8, !tbaa !5
  %125 = invoke noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %124)
          to label %126 unwind label %167

126:                                              ; preds = %123
  store ptr %125, ptr %20, align 8, !tbaa !5
  br label %127

127:                                              ; preds = %617, %126
  %128 = load ptr, ptr %19, align 8, !tbaa !5
  %129 = load ptr, ptr %20, align 8, !tbaa !5
  %130 = icmp ne ptr %128, %129
  br i1 %130, label %171, label %131

131:                                              ; preds = %127
  store i32 4, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  br label %644

132:                                              ; preds = %104
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %5, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %6, align 4
  br label %652

136:                                              ; preds = %107
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %5, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %6, align 4
  br label %651

140:                                              ; preds = %110
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %5, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %6, align 4
  br label %646

144:                                              ; preds = %112
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %5, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %6, align 4
  br label %162

148:                                              ; preds = %114
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %5, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %6, align 4
  br label %161

152:                                              ; preds = %117
  %153 = landingpad { ptr, i32 }
          cleanup
  %154 = extractvalue { ptr, i32 } %153, 0
  store ptr %154, ptr %5, align 8
  %155 = extractvalue { ptr, i32 } %153, 1
  store i32 %155, ptr %6, align 4
  br label %160

156:                                              ; preds = %118
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %5, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %6, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %17) #11
  br label %160

160:                                              ; preds = %156, %152
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #11
  br label %161

161:                                              ; preds = %160, %148
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %16) #11
  br label %162

162:                                              ; preds = %161, %144
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #11
  br label %645

163:                                              ; preds = %119
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %5, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %6, align 4
  br label %643

167:                                              ; preds = %123
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %5, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %6, align 4
  br label %642

171:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #11
  %172 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %172, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  invoke void @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %173 unwind label %188

173:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #11
  %174 = getelementptr inbounds %class.SamplesApp, ptr %67, i32 0, i32 15
  %175 = load ptr, ptr %21, align 8, !tbaa !5
  %176 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %175, i32 0, i32 2
  invoke void @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EE4findERKS3_(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8 %23, ptr noundef nonnull align 8 dereferenceable(28) %174, ptr noundef nonnull align 8 dereferenceable(8) %176)
          to label %177 unwind label %192

177:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #11
  %178 = getelementptr inbounds %class.SamplesApp, ptr %67, i32 0, i32 15
  invoke void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE3endEv(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8 %24, ptr noundef nonnull align 8 dereferenceable(28) %178)
          to label %179 unwind label %196

179:                                              ; preds = %177
  %180 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE12IteratorBaseISG_NSG_8iteratorEEneERKSI_(ptr noundef nonnull align 8 dereferenceable(12) %23, ptr noundef nonnull align 8 dereferenceable(12) %24)
          to label %181 unwind label %196

181:                                              ; preds = %179
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #11
  br i1 %180, label %182, label %200

182:                                              ; preds = %181
  %183 = invoke noundef ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12) %23)
          to label %184 unwind label %192

184:                                              ; preds = %182
  %185 = getelementptr inbounds %"struct.std::pair", ptr %183, i32 0, i32 1
  %186 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %185)
          to label %187 unwind label %192

187:                                              ; preds = %184
  br label %200

188:                                              ; preds = %171
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %5, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %6, align 4
  br label %641

192:                                              ; preds = %543, %539, %535, %227, %214, %212, %200, %184, %182, %173
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %5, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %6, align 4
  br label %640

196:                                              ; preds = %179, %177
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %5, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #11
  br label %640

200:                                              ; preds = %187, %181
  %201 = invoke noundef zeroext i1 @_ZNK3JPH3RefINS_13DebugRenderer8GeometryEEeqEPKS2_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef null)
          to label %202 unwind label %192

202:                                              ; preds = %200
  br i1 %201, label %203, label %227

203:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #11
  %204 = load ptr, ptr %21, align 8, !tbaa !5
  %205 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %204, i32 0, i32 2
  invoke void @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EE4findERKS3_(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8 %25, ptr noundef nonnull align 8 dereferenceable(28) %3, ptr noundef nonnull align 8 dereferenceable(8) %205)
          to label %206 unwind label %218

206:                                              ; preds = %203
  %207 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratoraSERKSH_(ptr noundef nonnull align 8 dereferenceable(12) %23, ptr noundef nonnull align 8 dereferenceable(12) %25)
          to label %208 unwind label %218

208:                                              ; preds = %206
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #11
  invoke void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE3endEv(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8 %26, ptr noundef nonnull align 8 dereferenceable(28) %3)
          to label %209 unwind label %222

209:                                              ; preds = %208
  %210 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE12IteratorBaseISG_NSG_8iteratorEEneERKSI_(ptr noundef nonnull align 8 dereferenceable(12) %23, ptr noundef nonnull align 8 dereferenceable(12) %26)
          to label %211 unwind label %222

211:                                              ; preds = %209
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #11
  br i1 %210, label %212, label %226

212:                                              ; preds = %211
  %213 = invoke noundef ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12) %23)
          to label %214 unwind label %192

214:                                              ; preds = %212
  %215 = getelementptr inbounds %"struct.std::pair", ptr %213, i32 0, i32 1
  %216 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %215)
          to label %217 unwind label %192

217:                                              ; preds = %214
  br label %226

218:                                              ; preds = %206, %203
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %5, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #11
  br label %640

222:                                              ; preds = %209, %208
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %5, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #11
  br label %640

226:                                              ; preds = %217, %211
  br label %227

227:                                              ; preds = %226, %202
  %228 = invoke noundef zeroext i1 @_ZNK3JPH3RefINS_13DebugRenderer8GeometryEEeqEPKS2_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef null)
          to label %229 unwind label %192

229:                                              ; preds = %227
  br i1 %228, label %230, label %535

230:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #11
  call void @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #11
  call void @llvm.lifetime.start.p0(i64 4288, ptr %28) #11
  %231 = load ptr, ptr %21, align 8, !tbaa !5
  %232 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %231, i32 0, i32 2
  %233 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %232)
          to label %234 unwind label %291

234:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #11
  invoke void @_ZN3JPH5AABox8sBiggestEv(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %29)
          to label %235 unwind label %295

235:                                              ; preds = %234
  %236 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %237 unwind label %295

237:                                              ; preds = %235
  %238 = getelementptr inbounds %"class.JPH::Vec3", ptr %30, i32 0, i32 0
  %239 = getelementptr inbounds %union.anon, ptr %238, i32 0, i32 0
  %240 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 0
  %241 = extractvalue { double, double } %236, 0
  store double %241, ptr %240, align 16
  %242 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 1
  %243 = extractvalue { double, double } %236, 1
  store double %243, ptr %242, align 8
  %244 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %245 unwind label %295

245:                                              ; preds = %237
  %246 = getelementptr inbounds %"class.JPH::Quat", ptr %31, i32 0, i32 0
  %247 = getelementptr inbounds %"class.JPH::Vec4", ptr %246, i32 0, i32 0
  %248 = getelementptr inbounds %union.anon.55, ptr %247, i32 0, i32 0
  %249 = getelementptr inbounds { double, double }, ptr %248, i32 0, i32 0
  %250 = extractvalue { double, double } %244, 0
  store double %250, ptr %249, align 16
  %251 = getelementptr inbounds { double, double }, ptr %248, i32 0, i32 1
  %252 = extractvalue { double, double } %244, 1
  store double %252, ptr %251, align 8
  %253 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %254 unwind label %295

254:                                              ; preds = %245
  %255 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i32 0, i32 0
  %256 = getelementptr inbounds %union.anon, ptr %255, i32 0, i32 0
  %257 = getelementptr inbounds { double, double }, ptr %256, i32 0, i32 0
  %258 = extractvalue { double, double } %253, 0
  store double %258, ptr %257, align 16
  %259 = getelementptr inbounds { double, double }, ptr %256, i32 0, i32 1
  %260 = extractvalue { double, double } %253, 1
  store double %260, ptr %259, align 8
  %261 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %262 = load double, ptr %261, align 16
  %263 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %264 = load double, ptr %263, align 8
  %265 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %266 = load double, ptr %265, align 16
  %267 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %268 = load double, ptr %267, align 8
  %269 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %270 = load double, ptr %269, align 16
  %271 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %272 = load double, ptr %271, align 8
  %273 = load ptr, ptr %233, align 8, !tbaa !47
  %274 = getelementptr inbounds ptr, ptr %273, i64 22
  %275 = load ptr, ptr %274, align 8
  invoke void %275(ptr noundef nonnull align 8 dereferenceable(26) %233, ptr noundef nonnull align 16 dereferenceable(4288) %28, ptr noundef nonnull align 16 dereferenceable(32) %29, double %262, double %264, double %266, double %268, double %270, double %272)
          to label %276 unwind label %295

276:                                              ; preds = %254
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #11
  br label %277

277:                                              ; preds = %501, %276
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #11
  store i32 1000, ptr %33, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 36000, ptr %34) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #11
  %278 = load ptr, ptr %21, align 8, !tbaa !5
  %279 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %278, i32 0, i32 2
  %280 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %279)
          to label %281 unwind label %299

281:                                              ; preds = %277
  %282 = getelementptr inbounds [3000 x %"class.JPH::Float3"], ptr %34, i64 0, i64 0
  %283 = load ptr, ptr %280, align 8, !tbaa !47
  %284 = getelementptr inbounds ptr, ptr %283, i64 23
  %285 = load ptr, ptr %284, align 8
  %286 = invoke noundef i32 %285(ptr noundef nonnull align 8 dereferenceable(26) %280, ptr noundef nonnull align 16 dereferenceable(4288) %28, i32 noundef 1000, ptr noundef %282, ptr noundef null)
          to label %287 unwind label %299

287:                                              ; preds = %281
  store i32 %286, ptr %35, align 4, !tbaa !46
  %288 = load i32, ptr %35, align 4, !tbaa !46
  %289 = icmp eq i32 %288, 0
  br i1 %289, label %290, label %303

290:                                              ; preds = %287
  store i32 6, ptr %11, align 4
  br label %499

291:                                              ; preds = %505, %230
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %5, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %6, align 4
  br label %534

295:                                              ; preds = %254, %245, %237, %235, %234
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %5, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #11
  br label %534

299:                                              ; preds = %281, %277
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %5, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %6, align 4
  br label %504

303:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #11
  %304 = invoke noundef i64 @_ZNK3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
          to label %305 unwind label %322

305:                                              ; preds = %303
  store i64 %304, ptr %36, align 8, !tbaa !49
  %306 = invoke noundef i64 @_ZNK3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
          to label %307 unwind label %322

307:                                              ; preds = %305
  %308 = load i32, ptr %35, align 4, !tbaa !46
  %309 = sext i32 %308 to i64
  %310 = add i64 %306, %309
  invoke void @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %310)
          to label %311 unwind label %322

311:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #11
  %312 = load i64, ptr %36, align 8, !tbaa !49
  %313 = invoke noundef nonnull align 4 dereferenceable(108) ptr @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %312)
          to label %314 unwind label %326

314:                                              ; preds = %311
  store ptr %313, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #11
  store i32 0, ptr %38, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #11
  %315 = load i32, ptr %35, align 4, !tbaa !46
  %316 = mul nsw i32 3, %315
  store i32 %316, ptr %39, align 4, !tbaa !46
  br label %317

317:                                              ; preds = %457, %314
  %318 = load i32, ptr %38, align 4, !tbaa !46
  %319 = load i32, ptr %39, align 4, !tbaa !46
  %320 = icmp slt i32 %318, %319
  br i1 %320, label %330, label %321

321:                                              ; preds = %317
  store i32 8, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #11
  br label %498

322:                                              ; preds = %307, %305, %303
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %5, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %6, align 4
  br label %503

326:                                              ; preds = %311
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %5, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %6, align 4
  br label %502

330:                                              ; preds = %317
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #11
  %331 = load i32, ptr %38, align 4, !tbaa !46
  %332 = add nsw i32 %331, 0
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds [3000 x %"class.JPH::Float3"], ptr %34, i64 0, i64 %333
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %40, ptr noundef nonnull align 4 dereferenceable(12) %334)
          to label %335 unwind label %462

335:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #11
  %336 = load i32, ptr %38, align 4, !tbaa !46
  %337 = add nsw i32 %336, 1
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds [3000 x %"class.JPH::Float3"], ptr %34, i64 0, i64 %338
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %41, ptr noundef nonnull align 4 dereferenceable(12) %339)
          to label %340 unwind label %466

340:                                              ; preds = %335
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #11
  %341 = load i32, ptr %38, align 4, !tbaa !46
  %342 = add nsw i32 %341, 2
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds [3000 x %"class.JPH::Float3"], ptr %34, i64 0, i64 %343
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(12) %344)
          to label %345 unwind label %470

345:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 12, ptr %43) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %47, ptr align 16 %40, i64 16, i1 false), !tbaa.struct !50
  %346 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 0
  %347 = load double, ptr %346, align 16
  %348 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 1
  %349 = load double, ptr %348, align 8
  %350 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %41, double %347, double %349)
          to label %351 unwind label %474

351:                                              ; preds = %345
  %352 = getelementptr inbounds %"class.JPH::Vec3", ptr %46, i32 0, i32 0
  %353 = getelementptr inbounds %union.anon, ptr %352, i32 0, i32 0
  %354 = getelementptr inbounds { double, double }, ptr %353, i32 0, i32 0
  %355 = extractvalue { double, double } %350, 0
  store double %355, ptr %354, align 16
  %356 = getelementptr inbounds { double, double }, ptr %353, i32 0, i32 1
  %357 = extractvalue { double, double } %350, 1
  store double %357, ptr %356, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %49, ptr align 16 %40, i64 16, i1 false), !tbaa.struct !50
  %358 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %359 = load double, ptr %358, align 16
  %360 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %361 = load double, ptr %360, align 8
  %362 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %42, double %359, double %361)
          to label %363 unwind label %474

363:                                              ; preds = %351
  %364 = getelementptr inbounds %"class.JPH::Vec3", ptr %48, i32 0, i32 0
  %365 = getelementptr inbounds %union.anon, ptr %364, i32 0, i32 0
  %366 = getelementptr inbounds { double, double }, ptr %365, i32 0, i32 0
  %367 = extractvalue { double, double } %362, 0
  store double %367, ptr %366, align 16
  %368 = getelementptr inbounds { double, double }, ptr %365, i32 0, i32 1
  %369 = extractvalue { double, double } %362, 1
  store double %369, ptr %368, align 8
  %370 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 0
  %371 = load double, ptr %370, align 16
  %372 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 1
  %373 = load double, ptr %372, align 8
  %374 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %46, double %371, double %373)
          to label %375 unwind label %474

375:                                              ; preds = %363
  %376 = getelementptr inbounds %"class.JPH::Vec3", ptr %45, i32 0, i32 0
  %377 = getelementptr inbounds %union.anon, ptr %376, i32 0, i32 0
  %378 = getelementptr inbounds { double, double }, ptr %377, i32 0, i32 0
  %379 = extractvalue { double, double } %374, 0
  store double %379, ptr %378, align 16
  %380 = getelementptr inbounds { double, double }, ptr %377, i32 0, i32 1
  %381 = extractvalue { double, double } %374, 1
  store double %381, ptr %380, align 8
  %382 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %383 unwind label %474

383:                                              ; preds = %375
  %384 = getelementptr inbounds %"class.JPH::Vec3", ptr %50, i32 0, i32 0
  %385 = getelementptr inbounds %union.anon, ptr %384, i32 0, i32 0
  %386 = getelementptr inbounds { double, double }, ptr %385, i32 0, i32 0
  %387 = extractvalue { double, double } %382, 0
  store double %387, ptr %386, align 16
  %388 = getelementptr inbounds { double, double }, ptr %385, i32 0, i32 1
  %389 = extractvalue { double, double } %382, 1
  store double %389, ptr %388, align 8
  %390 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 0
  %391 = load double, ptr %390, align 16
  %392 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 1
  %393 = load double, ptr %392, align 8
  %394 = invoke { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %45, double %391, double %393)
          to label %395 unwind label %474

395:                                              ; preds = %383
  %396 = getelementptr inbounds %"class.JPH::Vec3", ptr %44, i32 0, i32 0
  %397 = getelementptr inbounds %union.anon, ptr %396, i32 0, i32 0
  %398 = getelementptr inbounds { double, double }, ptr %397, i32 0, i32 0
  %399 = extractvalue { double, double } %394, 0
  store double %399, ptr %398, align 16
  %400 = getelementptr inbounds { double, double }, ptr %397, i32 0, i32 1
  %401 = extractvalue { double, double } %394, 1
  store double %401, ptr %400, align 8
  invoke void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %44, ptr noundef %43)
          to label %402 unwind label %474

402:                                              ; preds = %395
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #11
  %403 = load ptr, ptr %37, align 8, !tbaa !5
  %404 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %403, i32 0, i32 0
  %405 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %404, i64 0, i64 0
  %406 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %405, i32 0, i32 0
  invoke void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %40, ptr noundef %406)
          to label %407 unwind label %478

407:                                              ; preds = %402
  %408 = load ptr, ptr %37, align 8, !tbaa !5
  %409 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %408, i32 0, i32 0
  %410 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %409, i64 0, i64 0
  %411 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %410, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %411, ptr align 4 %43, i64 12, i1 false), !tbaa.struct !52
  %412 = load ptr, ptr %37, align 8, !tbaa !5
  %413 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %412, i32 0, i32 0
  %414 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %413, i64 0, i64 0
  %415 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %414, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %415, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !54
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #11
  invoke void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %51, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %416 unwind label %482

416:                                              ; preds = %407
  %417 = load ptr, ptr %37, align 8, !tbaa !5
  %418 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %417, i32 0, i32 0
  %419 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %418, i64 0, i64 0
  %420 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %419, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %420, ptr align 4 %51, i64 8, i1 false), !tbaa.struct !55
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  %421 = load ptr, ptr %37, align 8, !tbaa !5
  %422 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %421, i32 0, i32 0
  %423 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %422, i64 0, i64 1
  %424 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %423, i32 0, i32 0
  invoke void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %41, ptr noundef %424)
          to label %425 unwind label %478

425:                                              ; preds = %416
  %426 = load ptr, ptr %37, align 8, !tbaa !5
  %427 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %426, i32 0, i32 0
  %428 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %427, i64 0, i64 1
  %429 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %428, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %429, ptr align 4 %43, i64 12, i1 false), !tbaa.struct !52
  %430 = load ptr, ptr %37, align 8, !tbaa !5
  %431 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %430, i32 0, i32 0
  %432 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %431, i64 0, i64 1
  %433 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %432, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %433, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !54
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #11
  invoke void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %52, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %434 unwind label %486

434:                                              ; preds = %425
  %435 = load ptr, ptr %37, align 8, !tbaa !5
  %436 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %435, i32 0, i32 0
  %437 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %436, i64 0, i64 1
  %438 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %437, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %438, ptr align 4 %52, i64 8, i1 false), !tbaa.struct !55
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  %439 = load ptr, ptr %37, align 8, !tbaa !5
  %440 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %439, i32 0, i32 0
  %441 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %440, i64 0, i64 2
  %442 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %441, i32 0, i32 0
  invoke void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %42, ptr noundef %442)
          to label %443 unwind label %478

443:                                              ; preds = %434
  %444 = load ptr, ptr %37, align 8, !tbaa !5
  %445 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %444, i32 0, i32 0
  %446 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %445, i64 0, i64 2
  %447 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %446, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %447, ptr align 4 %43, i64 12, i1 false), !tbaa.struct !52
  %448 = load ptr, ptr %37, align 8, !tbaa !5
  %449 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %448, i32 0, i32 0
  %450 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %449, i64 0, i64 2
  %451 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %450, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %451, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !54
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #11
  invoke void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %53, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %452 unwind label %490

452:                                              ; preds = %443
  %453 = load ptr, ptr %37, align 8, !tbaa !5
  %454 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %453, i32 0, i32 0
  %455 = getelementptr inbounds [3 x %"class.JPH::DebugRenderer::Vertex"], ptr %454, i64 0, i64 2
  %456 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %455, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %456, ptr align 4 %53, i64 8, i1 false), !tbaa.struct !55
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #11
  br label %457

457:                                              ; preds = %452
  %458 = load i32, ptr %38, align 4, !tbaa !46
  %459 = add nsw i32 %458, 3
  store i32 %459, ptr %38, align 4, !tbaa !46
  %460 = load ptr, ptr %37, align 8, !tbaa !5
  %461 = getelementptr inbounds %"class.JPH::DebugRenderer::Triangle", ptr %460, i32 1
  store ptr %461, ptr %37, align 8, !tbaa !5
  br label %317, !llvm.loop !56

462:                                              ; preds = %330
  %463 = landingpad { ptr, i32 }
          cleanup
  %464 = extractvalue { ptr, i32 } %463, 0
  store ptr %464, ptr %5, align 8
  %465 = extractvalue { ptr, i32 } %463, 1
  store i32 %465, ptr %6, align 4
  br label %497

466:                                              ; preds = %335
  %467 = landingpad { ptr, i32 }
          cleanup
  %468 = extractvalue { ptr, i32 } %467, 0
  store ptr %468, ptr %5, align 8
  %469 = extractvalue { ptr, i32 } %467, 1
  store i32 %469, ptr %6, align 4
  br label %496

470:                                              ; preds = %340
  %471 = landingpad { ptr, i32 }
          cleanup
  %472 = extractvalue { ptr, i32 } %471, 0
  store ptr %472, ptr %5, align 8
  %473 = extractvalue { ptr, i32 } %471, 1
  store i32 %473, ptr %6, align 4
  br label %495

474:                                              ; preds = %395, %383, %375, %363, %351, %345
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %5, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #11
  br label %494

478:                                              ; preds = %434, %416, %402
  %479 = landingpad { ptr, i32 }
          cleanup
  %480 = extractvalue { ptr, i32 } %479, 0
  store ptr %480, ptr %5, align 8
  %481 = extractvalue { ptr, i32 } %479, 1
  store i32 %481, ptr %6, align 4
  br label %494

482:                                              ; preds = %407
  %483 = landingpad { ptr, i32 }
          cleanup
  %484 = extractvalue { ptr, i32 } %483, 0
  store ptr %484, ptr %5, align 8
  %485 = extractvalue { ptr, i32 } %483, 1
  store i32 %485, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  br label %494

486:                                              ; preds = %425
  %487 = landingpad { ptr, i32 }
          cleanup
  %488 = extractvalue { ptr, i32 } %487, 0
  store ptr %488, ptr %5, align 8
  %489 = extractvalue { ptr, i32 } %487, 1
  store i32 %489, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  br label %494

490:                                              ; preds = %443
  %491 = landingpad { ptr, i32 }
          cleanup
  %492 = extractvalue { ptr, i32 } %491, 0
  store ptr %492, ptr %5, align 8
  %493 = extractvalue { ptr, i32 } %491, 1
  store i32 %493, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #11
  br label %494

494:                                              ; preds = %490, %486, %482, %478, %474
  call void @llvm.lifetime.end.p0(i64 12, ptr %43) #11
  br label %495

495:                                              ; preds = %494, %470
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #11
  br label %496

496:                                              ; preds = %495, %466
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #11
  br label %497

497:                                              ; preds = %496, %462
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #11
  br label %502

498:                                              ; preds = %321
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  store i32 0, ptr %11, align 4
  br label %499

499:                                              ; preds = %498, %290
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 36000, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #11
  %500 = load i32, ptr %11, align 4
  switch i32 %500, label %665 [
    i32 0, label %501
    i32 6, label %505
  ]

501:                                              ; preds = %499
  br label %277, !llvm.loop !58

502:                                              ; preds = %497, %326
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  br label %503

503:                                              ; preds = %502, %322
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  br label %504

504:                                              ; preds = %503, %299
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 36000, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #11
  br label %534

505:                                              ; preds = %499
  %506 = invoke noundef ptr @_ZN3JPH13DebugRenderer8GeometrynwEm(i64 noundef 64)
          to label %507 unwind label %291

507:                                              ; preds = %505
  store i1 true, ptr %56, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #11
  %508 = getelementptr inbounds %class.Application, ptr %67, i32 0, i32 4
  %509 = load ptr, ptr %508, align 16, !tbaa !59
  invoke void @_ZN3JPH13DebugRenderer19CreateTriangleBatchERKNS_5ArrayINS0_8TriangleENS_12STLAllocatorIS2_EEEE(ptr dead_on_unwind writable sret(%"class.JPH::Ref.231") align 8 %54, ptr noundef nonnull align 8 dereferenceable(320) %509, ptr noundef nonnull align 8 dereferenceable(24) %27)
          to label %510 unwind label %522

510:                                              ; preds = %507
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #11
  %511 = load ptr, ptr %21, align 8, !tbaa !5
  %512 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %511, i32 0, i32 2
  %513 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %512)
          to label %514 unwind label %526

514:                                              ; preds = %510
  %515 = load ptr, ptr %513, align 8, !tbaa !47
  %516 = getelementptr inbounds ptr, ptr %515, i64 4
  %517 = load ptr, ptr %516, align 8
  invoke void %517(ptr dead_on_unwind writable sret(%"class.JPH::AABox") align 16 %55, ptr noundef nonnull align 8 dereferenceable(26) %513)
          to label %518 unwind label %526

518:                                              ; preds = %514
  invoke void @_ZN3JPH13DebugRenderer8GeometryC2ERKNS_3RefINS_16RefTargetVirtualEEERKNS_5AABoxE(ptr noundef nonnull align 16 dereferenceable(64) %506, ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 16 dereferenceable(32) %55)
          to label %519 unwind label %526

519:                                              ; preds = %518
  store i1 false, ptr %56, align 1
  %520 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEaSEPS2_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef %506)
          to label %521 unwind label %526

521:                                              ; preds = %519
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #11
  call void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  call void @llvm.lifetime.end.p0(i64 4288, ptr %28) #11
  call void @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #11
  br label %535

522:                                              ; preds = %507
  %523 = landingpad { ptr, i32 }
          cleanup
  %524 = extractvalue { ptr, i32 } %523, 0
  store ptr %524, ptr %5, align 8
  %525 = extractvalue { ptr, i32 } %523, 1
  store i32 %525, ptr %6, align 4
  br label %530

526:                                              ; preds = %519, %518, %514, %510
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %5, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #11
  call void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #11
  br label %530

530:                                              ; preds = %526, %522
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  %531 = load i1, ptr %56, align 1
  br i1 %531, label %532, label %533

532:                                              ; preds = %530
  call void @_ZN3JPH13DebugRenderer8GeometrydlEPv(ptr noundef %506) #11
  br label %533

533:                                              ; preds = %532, %530
  br label %534

534:                                              ; preds = %533, %504, %295, %291
  call void @llvm.lifetime.end.p0(i64 4288, ptr %28) #11
  call void @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #11
  br label %640

535:                                              ; preds = %521, %229
  %536 = load ptr, ptr %14, align 8, !tbaa !5
  %537 = invoke noundef zeroext i1 @_ZNK3JPH4Body10IsSoftBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %536)
          to label %538 unwind label %192

538:                                              ; preds = %535
  br i1 %537, label %546, label %539

539:                                              ; preds = %538
  %540 = load ptr, ptr %21, align 8, !tbaa !5
  %541 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %540, i32 0, i32 2
  %542 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEixERKS3_(ptr noundef nonnull align 8 dereferenceable(28) %3, ptr noundef nonnull align 8 dereferenceable(8) %541)
          to label %543 unwind label %192

543:                                              ; preds = %539
  %544 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(8) %542, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %545 unwind label %192

545:                                              ; preds = %543
  br label %546

546:                                              ; preds = %545, %538
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #11
  %547 = load ptr, ptr %14, align 8, !tbaa !5
  %548 = invoke noundef zeroext i8 @_ZNK3JPH4Body13GetMotionTypeEv(ptr noundef nonnull align 16 dereferenceable(122) %547)
          to label %549 unwind label %550

549:                                              ; preds = %546
  switch i8 %548, label %570 [
    i8 0, label %554
    i8 1, label %555
    i8 2, label %556
  ]

550:                                              ; preds = %571, %546
  %551 = landingpad { ptr, i32 }
          cleanup
  %552 = extractvalue { ptr, i32 } %551, 0
  store ptr %552, ptr %5, align 8
  %553 = extractvalue { ptr, i32 } %551, 1
  store i32 %553, ptr %6, align 4
  br label %639

554:                                              ; preds = %549
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %57, ptr align 4 @_ZN3JPH5Color5sGreyE, i64 4, i1 false), !tbaa.struct !54
  br label %578

555:                                              ; preds = %549
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %57, ptr align 4 @_ZN3JPH5Color6sGreenE, i64 4, i1 false), !tbaa.struct !54
  br label %578

556:                                              ; preds = %549
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #11
  %557 = load ptr, ptr %14, align 8, !tbaa !5
  %558 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %557)
          to label %559 unwind label %566

559:                                              ; preds = %556
  %560 = invoke noundef i32 @_ZNK3JPH6BodyID8GetIndexEv(ptr noundef nonnull align 4 dereferenceable(4) %558)
          to label %561 unwind label %566

561:                                              ; preds = %559
  %562 = invoke i32 @_ZN3JPH5Color17sGetDistinctColorEi(i32 noundef %560)
          to label %563 unwind label %566

563:                                              ; preds = %561
  %564 = getelementptr inbounds %"class.JPH::Color", ptr %58, i32 0, i32 0
  %565 = getelementptr inbounds %union.anon.62, ptr %564, i32 0, i32 0
  store i32 %562, ptr %565, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %57, ptr align 4 %58, i64 4, i1 false), !tbaa.struct !54
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #11
  br label %578

566:                                              ; preds = %561, %559, %556
  %567 = landingpad { ptr, i32 }
          cleanup
  %568 = extractvalue { ptr, i32 } %567, 0
  store ptr %568, ptr %5, align 8
  %569 = extractvalue { ptr, i32 } %567, 1
  store i32 %569, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #11
  br label %639

570:                                              ; preds = %549
  br label %571

571:                                              ; preds = %570
  %572 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.149, ptr noundef @.str.147, i32 noundef 2472)
          to label %573 unwind label %550

573:                                              ; preds = %571
  br i1 %572, label %574, label %575

574:                                              ; preds = %573
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !60
  br label %575

575:                                              ; preds = %574, %573
  br label %576

576:                                              ; preds = %575
  br label %577

577:                                              ; preds = %576
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %57, ptr align 4 @_ZN3JPH5Color6sBlackE, i64 4, i1 false), !tbaa.struct !54
  br label %578

578:                                              ; preds = %577, %563, %555, %554
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #11
  %579 = load ptr, ptr %21, align 8, !tbaa !5
  %580 = invoke { double, double } @_ZNK3JPH16TransformedShape13GetShapeScaleEv(ptr noundef nonnull align 16 dereferenceable(64) %579)
          to label %581 unwind label %620

581:                                              ; preds = %578
  %582 = getelementptr inbounds %"class.JPH::Vec3", ptr %60, i32 0, i32 0
  %583 = getelementptr inbounds %union.anon, ptr %582, i32 0, i32 0
  %584 = getelementptr inbounds { double, double }, ptr %583, i32 0, i32 0
  %585 = extractvalue { double, double } %580, 0
  store double %585, ptr %584, align 16
  %586 = getelementptr inbounds { double, double }, ptr %583, i32 0, i32 1
  %587 = extractvalue { double, double } %580, 1
  store double %587, ptr %586, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %62, ptr align 16 %60, i64 16, i1 false), !tbaa.struct !50
  %588 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 0
  %589 = load double, ptr %588, align 16
  %590 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 1
  %591 = load double, ptr %590, align 8
  %592 = invoke noundef zeroext i1 @_ZN3JPH12ScaleHelpers11IsInsideOutENS_4Vec3E(double %589, double %591)
          to label %593 unwind label %624

593:                                              ; preds = %581
  %594 = zext i1 %592 to i8
  store i8 %594, ptr %61, align 1, !tbaa !61
  call void @llvm.lifetime.start.p0(i64 64, ptr %63) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %64) #11
  %595 = load ptr, ptr %21, align 8, !tbaa !5
  invoke void @_ZNK3JPH16TransformedShape24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %64, ptr noundef nonnull align 16 dereferenceable(64) %595)
          to label %596 unwind label %628

596:                                              ; preds = %593
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %65, ptr align 16 %60, i64 16, i1 false), !tbaa.struct !50
  %597 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 0
  %598 = load double, ptr %597, align 16
  %599 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 1
  %600 = load double, ptr %599, align 8
  invoke void @_ZNK3JPH5Mat449PreScaledENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %63, ptr noundef nonnull align 16 dereferenceable(64) %64, double %598, double %600)
          to label %601 unwind label %628

601:                                              ; preds = %596
  call void @llvm.lifetime.end.p0(i64 64, ptr %64) #11
  %602 = getelementptr inbounds %class.Application, ptr %67, i32 0, i32 4
  %603 = load ptr, ptr %602, align 16, !tbaa !59
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %66, ptr align 4 %57, i64 4, i1 false), !tbaa.struct !54
  %604 = load i8, ptr %61, align 1, !tbaa !61, !range !62, !noundef !63
  %605 = trunc i8 %604 to i1
  %606 = zext i1 %605 to i64
  %607 = select i1 %605, i32 1, i32 0
  %608 = load ptr, ptr %14, align 8, !tbaa !5
  %609 = invoke noundef zeroext i1 @_ZNK3JPH4Body8IsSensorEv(ptr noundef nonnull align 16 dereferenceable(122) %608)
          to label %610 unwind label %632

610:                                              ; preds = %601
  %611 = zext i1 %609 to i64
  %612 = select i1 %609, i32 1, i32 0
  %613 = getelementptr inbounds %"class.JPH::Color", ptr %66, i32 0, i32 0
  %614 = getelementptr inbounds %union.anon.62, ptr %613, i32 0, i32 0
  %615 = load i32, ptr %614, align 4
  invoke void @_ZN3JPH13DebugRenderer12DrawGeometryERKNS_5Mat44ENS_5ColorERKNS_3RefINS0_8GeometryEEENS0_9ECullModeENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef nonnull align 8 dereferenceable(320) %603, ptr noundef nonnull align 16 dereferenceable(64) %63, i32 %615, ptr noundef nonnull align 8 dereferenceable(8) %22, i32 noundef %607, i32 noundef 0, i32 noundef %612)
          to label %616 unwind label %632

616:                                              ; preds = %610
  call void @llvm.lifetime.end.p0(i64 64, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #11
  call void @_ZN3JPH3RefINS_13DebugRenderer8GeometryEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  br label %617

617:                                              ; preds = %616
  %618 = load ptr, ptr %19, align 8, !tbaa !5
  %619 = getelementptr inbounds %"class.JPH::TransformedShape", ptr %618, i32 1
  store ptr %619, ptr %19, align 8, !tbaa !5
  br label %127

620:                                              ; preds = %578
  %621 = landingpad { ptr, i32 }
          cleanup
  %622 = extractvalue { ptr, i32 } %621, 0
  store ptr %622, ptr %5, align 8
  %623 = extractvalue { ptr, i32 } %621, 1
  store i32 %623, ptr %6, align 4
  br label %638

624:                                              ; preds = %581
  %625 = landingpad { ptr, i32 }
          cleanup
  %626 = extractvalue { ptr, i32 } %625, 0
  store ptr %626, ptr %5, align 8
  %627 = extractvalue { ptr, i32 } %625, 1
  store i32 %627, ptr %6, align 4
  br label %637

628:                                              ; preds = %596, %593
  %629 = landingpad { ptr, i32 }
          cleanup
  %630 = extractvalue { ptr, i32 } %629, 0
  store ptr %630, ptr %5, align 8
  %631 = extractvalue { ptr, i32 } %629, 1
  store i32 %631, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %64) #11
  br label %636

632:                                              ; preds = %610, %601
  %633 = landingpad { ptr, i32 }
          cleanup
  %634 = extractvalue { ptr, i32 } %633, 0
  store ptr %634, ptr %5, align 8
  %635 = extractvalue { ptr, i32 } %633, 1
  store i32 %635, ptr %6, align 4
  br label %636

636:                                              ; preds = %632, %628
  call void @llvm.lifetime.end.p0(i64 64, ptr %63) #11
  br label %637

637:                                              ; preds = %636, %624
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #11
  br label %638

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

639:                                              ; preds = %638, %566, %550
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #11
  br label %640

640:                                              ; preds = %639, %534, %222, %218, %196, %192
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #11
  call void @_ZN3JPH3RefINS_13DebugRenderer8GeometryEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  br label %641

641:                                              ; preds = %640, %188
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  br label %642

642:                                              ; preds = %641, %167
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #11
  br label %643

643:                                              ; preds = %642, %163
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  br label %645

644:                                              ; preds = %131
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  br label %647

645:                                              ; preds = %643, %162
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #11
  br label %646

646:                                              ; preds = %645, %140
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  br label %651

647:                                              ; preds = %644, %109
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  br label %648

648:                                              ; preds = %647
  %649 = load ptr, ptr %9, align 8, !tbaa !5
  %650 = getelementptr inbounds %"class.JPH::BodyID", ptr %649, i32 1
  store ptr %650, ptr %9, align 8, !tbaa !5
  br label %83

651:                                              ; preds = %646, %136
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  br label %652

652:                                              ; preds = %651, %132
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  br label %653

653:                                              ; preds = %652, %100
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #11
  br label %654

654:                                              ; preds = %653, %96
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #11
  br label %658

655:                                              ; preds = %87
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #11
  call void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #11
  %656 = getelementptr inbounds %class.SamplesApp, ptr %67, i32 0, i32 15
  %657 = call noundef nonnull align 8 dereferenceable(28) ptr @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEaSEOSC_(ptr noundef nonnull align 8 dereferenceable(28) %656, ptr noundef nonnull align 8 dereferenceable(28) %3) #11
  call void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %3) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %3) #11
  ret void

658:                                              ; preds = %654, %92
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #11
  br label %659

659:                                              ; preds = %658, %88
  call void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #11
  call void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %3) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %3) #11
  br label %660

660:                                              ; preds = %659
  %661 = load ptr, ptr %5, align 8
  %662 = load i32, ptr %6, align 4
  %663 = insertvalue { ptr, i32 } poison, ptr %661, 0
  %664 = insertvalue { ptr, i32 } %663, i32 %662, 1
  resume { ptr, i32 } %664

665:                                              ; preds = %499
  unreachable
}

declare void @_ZN4Test14DrawBodyLabelsEv(ptr noundef nonnull align 8 dereferenceable(112)) #9

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE26SucceededAndIsInBroadPhaseEv(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

declare void @_ZNK3JPH16TransformedShape24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorIS0_NS_36CollisionCollectorTraitsCollideShapeEEERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(12)) #9

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EE4findERKS3_(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(8)) #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE12IteratorBaseISG_NSG_8iteratorEEneERKSI_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE3endEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12)) #8 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH3RefINS_13DebugRenderer8GeometryEEeqEPKS2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratoraSERKSH_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH5AABox8sBiggestEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::AABox") align 16) #8 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(108) ptr @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #7 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8), float noundef, float noundef) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13DebugRenderer19CreateTriangleBatchERKNS_5ArrayINS0_8TriangleENS_12STLAllocatorIS2_EEEE(ptr dead_on_unwind noalias writable sret(%"class.JPH::Ref.231") align 8, ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 8 dereferenceable(24)) #8 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEixERKS3_(ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(8)) #8 align 2

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

declare i32 @_ZN3JPH5Color17sGetDistinctColorEi(i32 noundef) #9

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH12ScaleHelpers11IsInsideOutENS_4Vec3E(double, double) #7

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13DebugRenderer12DrawGeometryERKNS_5Mat44ENS_5ColorERKNS_3RefINS0_8GeometryEEENS0_9ECullModeENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(64), i32, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, i32 noundef, i32 noundef) #8 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(28) ptr @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEaSEOSC_(ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(28)) #1 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 488}
!10 = !{!"_ZTS10SamplesApp", !11, i64 0, !22, i64 272, !14, i64 276, !22, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !23, i64 312, !25, i64 328, !27, i64 336, !6, i64 344, !6, i64 352, !29, i64 360, !30, i64 448, !6, i64 480, !6, i64 488, !6, i64 496, !22, i64 504, !21, i64 508, !14, i64 512, !21, i64 516, !21, i64 517, !21, i64 518, !21, i64 519, !32, i64 520, !33, i64 544, !22, i64 548, !34, i64 552, !35, i64 556, !21, i64 560, !13, i64 576, !36, i64 592, !36, i64 593, !37, i64 594, !38, i64 595, !14, i64 596, !21, i64 600, !21, i64 601, !21, i64 602, !21, i64 603, !22, i64 604, !21, i64 608, !39, i64 612, !14, i64 616, !40, i64 620, !14, i64 624, !14, i64 628, !21, i64 632, !13, i64 640, !21, i64 656, !6, i64 664, !41, i64 672, !42, i64 680, !22, i64 688, !14, i64 692, !14, i64 696, !22, i64 700, !43, i64 704}
!11 = !{!"_ZTS11Application", !12, i64 16, !12, i64 80, !6, i64 144, !6, i64 152, !6, i64 160, !15, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !16, i64 208, !19, i64 240, !21, i64 248, !21, i64 249, !21, i64 250, !21, i64 251, !14, i64 252, !14, i64 256, !14, i64 260, !14, i64 264, !22, i64 268}
!12 = !{!"_ZTS11CameraState", !13, i64 0, !13, i64 16, !13, i64 32, !14, i64 48}
!13 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!"_ZTSN3JPH8RefConstI4FontEE", !6, i64 0}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !17, i64 0, !18, i64 8, !7, i64 16}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !6, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !20, i64 0}
!20 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !18, i64 0}
!21 = !{!"bool", !7, i64 0}
!22 = !{!"int", !7, i64 0}
!23 = !{!"_ZTS20BPLayerInterfaceImpl", !24, i64 0, !7, i64 8}
!24 = !{!"_ZTSN3JPH24BroadPhaseLayerInterfaceE"}
!25 = !{!"_ZTS33ObjectVsBroadPhaseLayerFilterImpl", !26, i64 0}
!26 = !{!"_ZTSN3JPH29ObjectVsBroadPhaseLayerFilterE"}
!27 = !{!"_ZTS25ObjectLayerPairFilterImpl", !28, i64 0}
!28 = !{!"_ZTSN3JPH21ObjectLayerPairFilterE"}
!29 = !{!"_ZTSN3JPH15PhysicsSettingsE", !22, i64 0, !22, i64 4, !22, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !14, i64 44, !14, i64 48, !14, i64 52, !22, i64 56, !22, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !21, i64 76, !21, i64 77, !21, i64 78, !21, i64 79, !21, i64 80, !21, i64 81, !21, i64 82}
!30 = !{!"_ZTSN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEE", !31, i64 0}
!31 = !{!"_ZTSN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EEE", !6, i64 0, !6, i64 8, !22, i64 16, !22, i64 20, !22, i64 24}
!32 = !{!"_ZTSN3JPH5ArrayIN10SamplesApp13PlayBackFrameENS_12STLAllocatorIS2_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!33 = !{!"_ZTSN10SamplesApp13EPlaybackModeE", !7, i64 0}
!34 = !{!"_ZTSN10SamplesApp10EProbeModeE", !7, i64 0}
!35 = !{!"_ZTSN10SamplesApp11EProbeShapeE", !7, i64 0}
!36 = !{!"_ZTSN3JPH13EBackFaceModeE", !7, i64 0}
!37 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !7, i64 0}
!38 = !{!"_ZTSN3JPH17ECollectFacesModeE", !7, i64 0}
!39 = !{!"_ZTSN10SamplesApp17EShootObjectShapeE", !7, i64 0}
!40 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!41 = !{!"_ZTSN3JPH6BodyIDE", !22, i64 0}
!42 = !{!"_ZTSN3JPH3RefINS_10ConstraintEEE", !6, i64 0}
!43 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000EEEE", !18, i64 0}
!44 = !{!10, !6, i64 344}
!45 = !{i64 0, i64 4, !46}
!46 = !{!22, !22, i64 0}
!47 = !{!48, !48, i64 0}
!48 = !{!"vtable pointer", !8, i64 0}
!49 = !{!18, !18, i64 0}
!50 = !{i64 0, i64 16, !51}
!51 = !{!7, !7, i64 0}
!52 = !{i64 0, i64 4, !53, i64 4, i64 4, !53, i64 8, i64 4, !53}
!53 = !{!14, !14, i64 0}
!54 = !{i64 0, i64 4, !51}
!55 = !{i64 0, i64 4, !53, i64 4, i64 4, !53}
!56 = distinct !{!56, !57}
!57 = !{!"llvm.loop.mustprogress"}
!58 = distinct !{!58, !57}
!59 = !{!11, !6, i64 144}
!60 = !{i64 2161777592}
!61 = !{!21, !21, i64 0}
!62 = !{i8 0, i8 2}
!63 = !{}


; 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::Color" = type { %union.anon.62 }
%union.anon.62 = type { i32 }
%"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::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.55 }
%union.anon.55 = type { <4 x float> }
%"class.JPH::RefConst.74" = type { ptr }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::SubShapeIDCreator" = type { %"class.JPH::SubShapeID", i32 }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::UnorderedMap" = type { %"class.JPH::HashTable.base", [4 x i8] }
%"class.JPH::HashTable.base" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::Array.43" = type { i64, i64, ptr }
%"class.JPH::BodyLockRead" = type { %"class.JPH::BodyLockBase" }
%"class.JPH::BodyLockBase" = type { ptr, ptr, ptr }
%"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::ShapeFilter" = type <{ ptr, %"class.JPH::BodyID", [4 x i8] }>
%"class.JPH::Ref.129" = type { ptr }
%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator" = type { %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::IteratorBase.base", [4 x i8] }
%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::IteratorBase.base" = type <{ ptr, i32 }>
%"class.JPH::Array.224" = type { i64, i64, ptr }
%"struct.JPH::Shape::GetTrianglesContext" = type { [4288 x i8] }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::Float2" = type { float, float }
%"class.JPH::Ref.231" = type { ptr }

@.str.147 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.149 = external hidden unnamed_addr constant [6 x i8], align 1
@_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
@_ZN3JPH5Color6sBlackE = external local_unnamed_addr global %"class.JPH::Color", align 4

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #3 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) #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: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec35sZeroEv() local_unnamed_addr #6 align 2

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef) local_unnamed_addr #6 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 #1 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 #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 #7 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10SamplesApp11DrawPhysicsEv(ptr noundef nonnull align 16 dereferenceable(712) %0) local_unnamed_addr #8 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::UnorderedMap", align 8
  %3 = alloca %"class.JPH::Array.43", align 8
  %4 = alloca %"class.JPH::BodyID", align 4
  %5 = alloca %"class.JPH::BodyLockRead", align 8
  %6 = alloca %"class.JPH::AllHitCollisionCollector.188", align 8
  %7 = alloca %"class.JPH::TransformedShape", align 16
  %8 = alloca %"class.JPH::ShapeFilter", align 8
  %9 = alloca %"class.JPH::Ref.129", align 8
  %10 = alloca %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator", align 8
  %11 = alloca %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator", align 8
  %12 = alloca %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator", align 8
  %13 = alloca %"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator", align 8
  %14 = alloca %"class.JPH::Array.224", align 8
  %15 = alloca %"struct.JPH::Shape::GetTrianglesContext", align 16
  %16 = alloca %"class.JPH::AABox", align 16
  %17 = alloca [3000 x %"class.JPH::Float3"], align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Float3", align 4
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Float2", align 8
  %26 = alloca %"class.JPH::Float2", align 8
  %27 = alloca %"class.JPH::Float2", align 8
  %28 = alloca %"class.JPH::Ref.231", align 8
  %29 = alloca %"class.JPH::AABox", align 16
  %30 = alloca %"class.JPH::Mat44", align 16
  %31 = alloca %"class.JPH::Mat44", align 16
  %32 = getelementptr inbounds i8, ptr %0, i64 488
  %33 = load ptr, ptr %32, align 8, !tbaa !5
  tail call void @_ZN4Test14DrawBodyLabelsEv(ptr noundef nonnull align 8 dereferenceable(112) %33)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2) #11
  call void @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %2) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #11
  call void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #11
  %34 = getelementptr inbounds i8, ptr %0, i64 344
  %35 = load ptr, ptr %34, align 8, !tbaa !43
  invoke void @_ZNK3JPH13PhysicsSystem9GetBodiesERNS_5ArrayINS_6BodyIDENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 16 dereferenceable(1172) %35, ptr noundef nonnull align 8 dereferenceable(24) %3)
          to label %36 unwind label %49

36:                                               ; preds = %1
  %37 = load ptr, ptr %34, align 8, !tbaa !43
  %38 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %37)
  %39 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %40 = call noundef ptr @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %.not149 = icmp eq ptr %39, %40
  br i1 %.not149, label %._crit_edge153, label %.lr.ph152

.lr.ph152:                                        ; preds = %36
  %41 = getelementptr inbounds i8, ptr %6, i64 24
  %42 = getelementptr inbounds i8, ptr %0, i64 448
  %.sroa.216.0..sroa_idx = getelementptr inbounds i8, ptr %18, i64 8
  %43 = getelementptr inbounds i8, ptr %24, i64 8
  %44 = getelementptr inbounds i8, ptr %23, i64 8
  %45 = getelementptr inbounds i8, ptr %22, i64 8
  %46 = getelementptr inbounds i8, ptr %0, i64 144
  br label %51

._crit_edge153:                                   ; preds = %292, %36
  call void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #11
  %47 = getelementptr inbounds i8, ptr %0, i64 448
  %48 = call noundef nonnull align 8 dereferenceable(28) ptr @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEaSEOSC_(ptr noundef nonnull align 8 dereferenceable(28) %47, ptr noundef nonnull align 8 dereferenceable(28) %2) #11
  call void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %2) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #11
  ret void

49:                                               ; preds = %1
  %50 = landingpad { ptr, i32 }
          cleanup
  br label %296

51:                                               ; preds = %.lr.ph152, %292
  %.098150 = phi ptr [ %39, %.lr.ph152 ], [ %293, %292 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #11
  %52 = load i32, ptr %.098150, align 4, !tbaa !44
  store i32 %52, ptr %4, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #11
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 4 dereferenceable(4) %4)
          to label %53 unwind label %65

53:                                               ; preds = %51
  %54 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE26SucceededAndIsInBroadPhaseEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %55 unwind label %67

55:                                               ; preds = %53
  br i1 %54, label %56, label %292

56:                                               ; preds = %55
  %57 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %58 unwind label %69

58:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #11
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #11
  invoke void @_ZNK3JPH4Body19GetTransformedShapeEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::TransformedShape") align 16 %7, ptr noundef nonnull align 16 dereferenceable(122) %57)
          to label %59 unwind label %71

59:                                               ; preds = %58
  %60 = call noundef nonnull align 16 dereferenceable(32) ptr @_ZNK3JPH4Body19GetWorldSpaceBoundsEv(ptr noundef nonnull align 16 dereferenceable(122) %57)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %8, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %8)
          to label %61 unwind label %73

61:                                               ; preds = %59
  invoke void @_ZNK3JPH16TransformedShape24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorIS0_NS_36CollisionCollectorTraitsCollideShapeEEERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(64) %7, ptr noundef nonnull align 16 dereferenceable(32) %60, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(12) %8)
          to label %62 unwind label %75

62:                                               ; preds = %61
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %8) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #11
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %7) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #11
  %63 = call noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %41)
  %64 = call noundef ptr @_ZN3JPH5ArrayINS_16TransformedShapeENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %41)
  %.not108144 = icmp eq ptr %63, %64
  br i1 %.not108144, label %._crit_edge148, label %.lr.ph147

._crit_edge148:                                   ; preds = %279, %62
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #11
  br label %292

65:                                               ; preds = %51
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %295

67:                                               ; preds = %53
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %294

69:                                               ; preds = %56
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %294

71:                                               ; preds = %58
  %72 = landingpad { ptr, i32 }
          cleanup
  br label %78

73:                                               ; preds = %59
  %74 = landingpad { ptr, i32 }
          cleanup
  br label %77

75:                                               ; preds = %61
  %76 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %8) #11
  br label %77

77:                                               ; preds = %75, %73
  %.pn = phi { ptr, i32 } [ %76, %75 ], [ %74, %73 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #11
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %7) #11
  br label %78

78:                                               ; preds = %77, %71
  %.pn.pn = phi { ptr, i32 } [ %.pn, %77 ], [ %72, %71 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #11
  br label %291

.lr.ph147:                                        ; preds = %62, %279
  %.0100145 = phi ptr [ %280, %279 ], [ %63, %62 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #11
  call void @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #11
  %79 = getelementptr inbounds i8, ptr %.0100145, i64 32
  invoke void @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EE4findERKS3_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8 %10, ptr noundef nonnull align 8 dereferenceable(28) %42, ptr noundef nonnull align 8 dereferenceable(8) %79)
          to label %80 unwind label %89

80:                                               ; preds = %.lr.ph147
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #11
  invoke void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE3endEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8 %11, ptr noundef nonnull align 8 dereferenceable(28) %42)
          to label %81 unwind label %91

81:                                               ; preds = %80
  %82 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE12IteratorBaseISG_NSG_8iteratorEEneERKSI_(ptr noundef nonnull align 8 dereferenceable(12) %10, ptr noundef nonnull align 8 dereferenceable(12) %11)
          to label %83 unwind label %91

83:                                               ; preds = %81
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  br i1 %82, label %84, label %93

84:                                               ; preds = %83
  %85 = invoke noundef ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12) %10)
          to label %86 unwind label %89

86:                                               ; preds = %84
  %87 = getelementptr inbounds i8, ptr %85, i64 8
  %88 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %87)
          to label %93 unwind label %89

89:                                               ; preds = %247, %245, %103, %101, %86, %84, %.lr.ph147
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %290

91:                                               ; preds = %81, %80
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  br label %290

93:                                               ; preds = %86, %83
  %94 = call noundef zeroext i1 @_ZNK3JPH3RefINS_13DebugRenderer8GeometryEEeqEPKS2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef null)
  br i1 %94, label %95, label %110

95:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #11
  invoke void @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EE4findERKS3_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8 %12, ptr noundef nonnull align 8 dereferenceable(28) %2, ptr noundef nonnull align 8 dereferenceable(8) %79)
          to label %96 unwind label %106

96:                                               ; preds = %95
  %97 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratoraSERKSH_(ptr noundef nonnull align 8 dereferenceable(12) %10, ptr noundef nonnull align 8 dereferenceable(12) %12)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #11
  invoke void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE3endEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8 %13, ptr noundef nonnull align 8 dereferenceable(28) %2)
          to label %98 unwind label %108

98:                                               ; preds = %96
  %99 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE12IteratorBaseISG_NSG_8iteratorEEneERKSI_(ptr noundef nonnull align 8 dereferenceable(12) %10, ptr noundef nonnull align 8 dereferenceable(12) %13)
          to label %100 unwind label %108

100:                                              ; preds = %98
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  br i1 %99, label %101, label %110

101:                                              ; preds = %100
  %102 = invoke noundef ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12) %10)
          to label %103 unwind label %89

103:                                              ; preds = %101
  %104 = getelementptr inbounds i8, ptr %102, i64 8
  %105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %104)
          to label %110 unwind label %89

106:                                              ; preds = %95
  %107 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #11
  br label %290

108:                                              ; preds = %98, %96
  %109 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  br label %290

110:                                              ; preds = %100, %103, %93
  %111 = call noundef zeroext i1 @_ZNK3JPH3RefINS_13DebugRenderer8GeometryEEeqEPKS2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef null)
  br i1 %111, label %112, label %243

112:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #11
  call void @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  call void @llvm.lifetime.start.p0(i64 4288, ptr nonnull %15) #11
  %113 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %79)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #11
  invoke void @_ZN3JPH5AABox8sBiggestEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %16)
          to label %114 unwind label %141

114:                                              ; preds = %112
  %115 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %116 unwind label %141

116:                                              ; preds = %114
  %117 = extractvalue { double, double } %115, 0
  %118 = extractvalue { double, double } %115, 1
  %119 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %120 unwind label %141

120:                                              ; preds = %116
  %121 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %122 unwind label %141

122:                                              ; preds = %120
  %123 = extractvalue { double, double } %119, 1
  %124 = extractvalue { double, double } %119, 0
  %125 = extractvalue { double, double } %121, 0
  %126 = extractvalue { double, double } %121, 1
  %127 = load ptr, ptr %113, align 8, !tbaa !45
  %128 = getelementptr inbounds i8, ptr %127, i64 176
  %129 = load ptr, ptr %128, align 8
  invoke void %129(ptr noundef nonnull align 8 dereferenceable(26) %113, ptr noundef nonnull align 16 dereferenceable(4288) %15, ptr noundef nonnull align 16 dereferenceable(32) %16, double %117, double %118, double %124, double %123, double %125, double %126)
          to label %130 unwind label %141

130:                                              ; preds = %122
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #11
  br label %131

131:                                              ; preds = %._crit_edge, %130
  call void @llvm.lifetime.start.p0(i64 36000, ptr nonnull %17) #11
  %132 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %79)
  %133 = load ptr, ptr %132, align 8, !tbaa !45
  %134 = getelementptr inbounds i8, ptr %133, i64 184
  %135 = load ptr, ptr %134, align 8
  %136 = invoke noundef i32 %135(ptr noundef nonnull align 8 dereferenceable(26) %132, ptr noundef nonnull align 16 dereferenceable(4288) %15, i32 noundef 1000, ptr noundef nonnull %17, ptr noundef null)
          to label %137 unwind label %143

137:                                              ; preds = %131
  %138 = icmp eq i32 %136, 0
  br i1 %138, label %226, label %145

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

141:                                              ; preds = %122, %120, %116, %114, %112
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #11
  br label %242

143:                                              ; preds = %131
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %225

145:                                              ; preds = %137
  %146 = call noundef i64 @_ZNK3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14)
  %147 = call noundef i64 @_ZNK3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14)
  %148 = sext i32 %136 to i64
  %149 = add i64 %147, %148
  invoke void @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %149)
          to label %150 unwind label %155

150:                                              ; preds = %145
  %151 = invoke noundef nonnull align 4 dereferenceable(108) ptr @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %146)
          to label %152 unwind label %157

152:                                              ; preds = %150
  %153 = mul nsw i32 %136, 3
  %154 = icmp sgt i32 %136, 0
  br i1 %154, label %.lr.ph, label %._crit_edge

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

157:                                              ; preds = %150
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %225

.lr.ph:                                           ; preds = %152, %202
  %indvars.iv = phi i64 [ %indvars.iv.next, %202 ], [ 0, %152 ]
  %.0101143 = phi ptr [ %208, %202 ], [ %151, %152 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #11
  %159 = getelementptr inbounds [3000 x %"class.JPH::Float3"], ptr %17, i64 0, i64 %indvars.iv
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %18, ptr noundef nonnull align 4 dereferenceable(12) %159)
          to label %160 unwind label %211

160:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #11
  %161 = add nuw nsw i64 %indvars.iv, 1
  %162 = getelementptr inbounds [3000 x %"class.JPH::Float3"], ptr %17, i64 0, i64 %161
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %19, ptr noundef nonnull align 4 dereferenceable(12) %162)
          to label %163 unwind label %213

163:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #11
  %164 = add nuw nsw i64 %indvars.iv, 2
  %165 = getelementptr inbounds [3000 x %"class.JPH::Float3"], ptr %17, i64 0, i64 %164
  invoke void @_ZN3JPH4Vec3C2ERKNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %20, ptr noundef nonnull align 4 dereferenceable(12) %165)
          to label %166 unwind label %215

166:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %21) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #11
  %.sroa.015.0.copyload = load double, ptr %18, align 16
  %.sroa.216.0.copyload = load double, ptr %.sroa.216.0..sroa_idx, align 8, !tbaa !47
  %167 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %19, double %.sroa.015.0.copyload, double %.sroa.216.0.copyload)
          to label %168 unwind label %217

168:                                              ; preds = %166
  %169 = extractvalue { double, double } %167, 0
  store double %169, ptr %24, align 16
  %170 = extractvalue { double, double } %167, 1
  store double %170, ptr %43, align 8
  %.sroa.011.0.copyload = load double, ptr %18, align 16
  %.sroa.212.0.copyload = load double, ptr %.sroa.216.0..sroa_idx, align 8, !tbaa !47
  %171 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %20, double %.sroa.011.0.copyload, double %.sroa.212.0.copyload)
          to label %172 unwind label %217

172:                                              ; preds = %168
  %173 = extractvalue { double, double } %171, 0
  %174 = extractvalue { double, double } %171, 1
  %175 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %24, double %173, double %174)
          to label %176 unwind label %217

176:                                              ; preds = %172
  %177 = extractvalue { double, double } %175, 0
  store double %177, ptr %23, align 16
  %178 = extractvalue { double, double } %175, 1
  store double %178, ptr %44, align 8
  %179 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %180 unwind label %217

180:                                              ; preds = %176
  %181 = extractvalue { double, double } %179, 0
  %182 = extractvalue { double, double } %179, 1
  %183 = invoke { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %23, double %181, double %182)
          to label %184 unwind label %217

184:                                              ; preds = %180
  %185 = extractvalue { double, double } %183, 0
  store double %185, ptr %22, align 16
  %186 = extractvalue { double, double } %183, 1
  store double %186, ptr %45, align 8
  invoke void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %22, ptr noundef nonnull %21)
          to label %187 unwind label %217

187:                                              ; preds = %184
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #11
  invoke void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %18, ptr noundef nonnull %.0101143)
          to label %188 unwind label %219

188:                                              ; preds = %187
  %189 = getelementptr inbounds i8, ptr %.0101143, i64 12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %189, ptr noundef nonnull align 4 dereferenceable(12) %21, i64 12, i1 false), !tbaa.struct !48
  %190 = getelementptr inbounds i8, ptr %.0101143, i64 32
  %191 = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !47
  store i32 %191, ptr %190, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #11
  call void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %25, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %192 = getelementptr inbounds i8, ptr %.0101143, i64 24
  %193 = load i64, ptr %25, align 8
  store i64 %193, ptr %192, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #11
  %194 = getelementptr inbounds i8, ptr %.0101143, i64 36
  invoke void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %19, ptr noundef nonnull %194)
          to label %195 unwind label %219

195:                                              ; preds = %188
  %196 = getelementptr inbounds i8, ptr %.0101143, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %196, ptr noundef nonnull align 4 dereferenceable(12) %21, i64 12, i1 false), !tbaa.struct !48
  %197 = getelementptr inbounds i8, ptr %.0101143, i64 68
  %198 = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !47
  store i32 %198, ptr %197, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #11
  call void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %26, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %199 = getelementptr inbounds i8, ptr %.0101143, i64 60
  %200 = load i64, ptr %26, align 8
  store i64 %200, ptr %199, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #11
  %201 = getelementptr inbounds i8, ptr %.0101143, i64 72
  invoke void @_ZNK3JPH4Vec311StoreFloat3EPNS_6Float3E(ptr noundef nonnull align 16 dereferenceable(16) %20, ptr noundef nonnull %201)
          to label %202 unwind label %219

202:                                              ; preds = %195
  %203 = getelementptr inbounds i8, ptr %.0101143, i64 84
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %203, ptr noundef nonnull align 4 dereferenceable(12) %21, i64 12, i1 false), !tbaa.struct !48
  %204 = getelementptr inbounds i8, ptr %.0101143, i64 104
  %205 = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !47
  store i32 %205, ptr %204, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #11
  call void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %27, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %206 = getelementptr inbounds i8, ptr %.0101143, i64 96
  %207 = load i64, ptr %27, align 8
  store i64 %207, ptr %206, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 3
  %208 = getelementptr inbounds i8, ptr %.0101143, i64 108
  %209 = trunc nuw i64 %indvars.iv.next to i32
  %210 = icmp sgt i32 %153, %209
  br i1 %210, label %.lr.ph, label %._crit_edge, !llvm.loop !50

211:                                              ; preds = %.lr.ph
  %212 = landingpad { ptr, i32 }
          cleanup
  br label %224

213:                                              ; preds = %160
  %214 = landingpad { ptr, i32 }
          cleanup
  br label %223

215:                                              ; preds = %163
  %216 = landingpad { ptr, i32 }
          cleanup
  br label %222

217:                                              ; preds = %184, %180, %176, %172, %168, %166
  %218 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #11
  br label %221

219:                                              ; preds = %195, %188, %187
  %220 = landingpad { ptr, i32 }
          cleanup
  br label %221

221:                                              ; preds = %219, %217
  %.pn109 = phi { ptr, i32 } [ %220, %219 ], [ %218, %217 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #11
  br label %222

222:                                              ; preds = %221, %215
  %.pn109.pn = phi { ptr, i32 } [ %.pn109, %221 ], [ %216, %215 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #11
  br label %223

223:                                              ; preds = %222, %213
  %.pn109.pn.pn = phi { ptr, i32 } [ %.pn109.pn, %222 ], [ %214, %213 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #11
  br label %224

224:                                              ; preds = %223, %211
  %.pn109.pn.pn.pn = phi { ptr, i32 } [ %.pn109.pn.pn, %223 ], [ %212, %211 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #11
  br label %225

._crit_edge:                                      ; preds = %202, %152
  call void @llvm.lifetime.end.p0(i64 36000, ptr nonnull %17) #11
  br label %131

225:                                              ; preds = %155, %224, %157, %143
  %.pn109.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %144, %143 ], [ %156, %155 ], [ %.pn109.pn.pn.pn, %224 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 36000, ptr nonnull %17) #11
  br label %242

226:                                              ; preds = %137
  call void @llvm.lifetime.end.p0(i64 36000, ptr nonnull %17) #11
  %227 = invoke noundef ptr @_ZN3JPH13DebugRenderer8GeometrynwEm(i64 noundef 64)
          to label %228 unwind label %139

228:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #11
  %229 = load ptr, ptr %46, align 16, !tbaa !52
  invoke void @_ZN3JPH13DebugRenderer19CreateTriangleBatchERKNS_5ArrayINS0_8TriangleENS_12STLAllocatorIS2_EEEE(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.231") align 8 %28, ptr noundef nonnull align 8 dereferenceable(320) %229, ptr noundef nonnull align 8 dereferenceable(24) %14)
          to label %230 unwind label %.thread133

230:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #11
  %231 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %79)
  %232 = load ptr, ptr %231, align 8, !tbaa !45
  %233 = getelementptr inbounds i8, ptr %232, i64 32
  %234 = load ptr, ptr %233, align 8
  invoke void %234(ptr dead_on_unwind nonnull writable sret(%"class.JPH::AABox") align 16 %29, ptr noundef nonnull align 8 dereferenceable(26) %231)
          to label %235 unwind label %.thread137

235:                                              ; preds = %230
  invoke void @_ZN3JPH13DebugRenderer8GeometryC2ERKNS_3RefINS_16RefTargetVirtualEEERKNS_5AABoxE(ptr noundef nonnull align 16 dereferenceable(64) %227, ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 16 dereferenceable(32) %29)
          to label %236 unwind label %.thread137

236:                                              ; preds = %235
  %237 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEaSEPS2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull %227)
          to label %238 unwind label %240

238:                                              ; preds = %236
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #11
  call void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #11
  call void @llvm.lifetime.end.p0(i64 4288, ptr nonnull %15) #11
  call void @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #11
  br label %243

.thread133:                                       ; preds = %228
  %239 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #11
  br label %241

.thread137:                                       ; preds = %235, %230
  %lpad.thr_comm = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #11
  call void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #11
  br label %241

240:                                              ; preds = %236
  %lpad.thr_comm.split-lp = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #11
  call void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #11
  br label %242

241:                                              ; preds = %.thread137, %.thread133
  %.pn117136 = phi { ptr, i32 } [ %239, %.thread133 ], [ %lpad.thr_comm, %.thread137 ]
  call void @_ZN3JPH13DebugRenderer8GeometrydlEPv(ptr noundef %227) #11
  br label %242

242:                                              ; preds = %240, %241, %225, %141, %139
  %.pn117.pn = phi { ptr, i32 } [ %.pn117136, %241 ], [ %lpad.thr_comm.split-lp, %240 ], [ %140, %139 ], [ %.pn109.pn.pn.pn.pn.pn.pn, %225 ], [ %142, %141 ]
  call void @llvm.lifetime.end.p0(i64 4288, ptr nonnull %15) #11
  call void @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #11
  br label %290

243:                                              ; preds = %238, %110
  %244 = call noundef zeroext i1 @_ZNK3JPH4Body10IsSoftBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %57)
  br i1 %244, label %249, label %245

245:                                              ; preds = %243
  %246 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEixERKS3_(ptr noundef nonnull align 8 dereferenceable(28) %2, ptr noundef nonnull align 8 dereferenceable(8) %79)
          to label %247 unwind label %89

247:                                              ; preds = %245
  %248 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_13DebugRenderer8GeometryEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(8) %246, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %249 unwind label %89

249:                                              ; preds = %247, %243
  %250 = call noundef zeroext i8 @_ZNK3JPH4Body13GetMotionTypeEv(ptr noundef nonnull align 16 dereferenceable(122) %57)
  switch i8 %250, label %261 [
    i8 0, label %253
    i8 1, label %254
    i8 2, label %255
  ]

251:                                              ; preds = %261
  %252 = landingpad { ptr, i32 }
          cleanup
  br label %290

253:                                              ; preds = %249
  %.sroa.06.0.copyload = load i32, ptr @_ZN3JPH5Color5sGreyE, align 4, !tbaa !47
  br label %266

254:                                              ; preds = %249
  %.sroa.06.0.copyload7 = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4, !tbaa !47
  br label %266

255:                                              ; preds = %249
  %256 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %57)
  %257 = call noundef i32 @_ZNK3JPH6BodyID8GetIndexEv(ptr noundef nonnull align 4 dereferenceable(4) %256)
  %258 = invoke i32 @_ZN3JPH5Color17sGetDistinctColorEi(i32 noundef %257)
          to label %266 unwind label %259

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

261:                                              ; preds = %249
  %262 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.149, ptr noundef nonnull @.str.147, i32 noundef 2472)
          to label %263 unwind label %251

263:                                              ; preds = %261
  br i1 %262, label %264, label %265

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

265:                                              ; preds = %264, %263
  %.sroa.06.0.copyload8 = load i32, ptr @_ZN3JPH5Color6sBlackE, align 4, !tbaa !47
  br label %266

266:                                              ; preds = %255, %265, %254, %253
  %.sroa.06.0 = phi i32 [ %.sroa.06.0.copyload8, %265 ], [ %.sroa.06.0.copyload7, %254 ], [ %.sroa.06.0.copyload, %253 ], [ %258, %255 ]
  %267 = invoke { double, double } @_ZNK3JPH16TransformedShape13GetShapeScaleEv(ptr noundef nonnull align 16 dereferenceable(64) %.0100145)
          to label %268 unwind label %281

268:                                              ; preds = %266
  %269 = extractvalue { double, double } %267, 0
  %270 = extractvalue { double, double } %267, 1
  %271 = invoke noundef zeroext i1 @_ZN3JPH12ScaleHelpers11IsInsideOutENS_4Vec3E(double %269, double %270)
          to label %272 unwind label %283

272:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %30) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %31) #11
  invoke void @_ZNK3JPH16TransformedShape24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %31, ptr noundef nonnull align 16 dereferenceable(64) %.0100145)
          to label %273 unwind label %285

273:                                              ; preds = %272
  invoke void @_ZNK3JPH5Mat449PreScaledENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %30, ptr noundef nonnull align 16 dereferenceable(64) %31, double %269, double %270)
          to label %274 unwind label %285

274:                                              ; preds = %273
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %31) #11
  %275 = load ptr, ptr %46, align 16, !tbaa !52
  %276 = zext i1 %271 to i32
  %277 = call noundef zeroext i1 @_ZNK3JPH4Body8IsSensorEv(ptr noundef nonnull align 16 dereferenceable(122) %57)
  %278 = zext i1 %277 to i32
  invoke void @_ZN3JPH13DebugRenderer12DrawGeometryERKNS_5Mat44ENS_5ColorERKNS_3RefINS0_8GeometryEEENS0_9ECullModeENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef nonnull align 8 dereferenceable(320) %275, ptr noundef nonnull align 16 dereferenceable(64) %30, i32 %.sroa.06.0, ptr noundef nonnull align 8 dereferenceable(8) %9, i32 noundef %276, i32 noundef 0, i32 noundef %278)
          to label %279 unwind label %287

279:                                              ; preds = %274
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %30) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #11
  call void @_ZN3JPH3RefINS_13DebugRenderer8GeometryEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  %280 = getelementptr inbounds i8, ptr %.0100145, i64 64
  %.not108 = icmp eq ptr %280, %64
  br i1 %.not108, label %._crit_edge148, label %.lr.ph147

281:                                              ; preds = %266
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %290

283:                                              ; preds = %268
  %284 = landingpad { ptr, i32 }
          cleanup
  br label %290

285:                                              ; preds = %273, %272
  %286 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %31) #11
  br label %289

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

289:                                              ; preds = %287, %285
  %.pn120 = phi { ptr, i32 } [ %288, %287 ], [ %286, %285 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %30) #11
  br label %290

290:                                              ; preds = %251, %259, %283, %289, %281, %242, %108, %106, %91, %89
  %.pn120.pn.pn.pn.pn = phi { ptr, i32 } [ %90, %89 ], [ %.pn117.pn, %242 ], [ %109, %108 ], [ %107, %106 ], [ %92, %91 ], [ %252, %251 ], [ %260, %259 ], [ %282, %281 ], [ %.pn120, %289 ], [ %284, %283 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #11
  call void @_ZN3JPH3RefINS_13DebugRenderer8GeometryEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  br label %291

291:                                              ; preds = %290, %78
  %.pn120.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn120.pn.pn.pn.pn, %290 ], [ %.pn.pn, %78 ]
  call void @_ZN3JPH24AllHitCollisionCollectorINS_18CollisionCollectorINS_16TransformedShapeENS_36CollisionCollectorTraitsCollideShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #11
  br label %294

292:                                              ; preds = %._crit_edge148, %55
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #11
  %293 = getelementptr inbounds i8, ptr %.098150, i64 4
  %.not = icmp eq ptr %293, %40
  br i1 %.not, label %._crit_edge153, label %51

294:                                              ; preds = %69, %291, %67
  %.pn120.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %68, %67 ], [ %.pn120.pn.pn.pn.pn.pn, %291 ], [ %70, %69 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #11
  br label %295

295:                                              ; preds = %294, %65
  %.pn120.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn120.pn.pn.pn.pn.pn.pn.pn, %294 ], [ %66, %65 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #11
  br label %296

296:                                              ; preds = %295, %49
  %.pn120.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn120.pn.pn.pn.pn.pn.pn.pn.pn, %295 ], [ %50, %49 ]
  call void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #11
  call void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %2) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #11
  resume { ptr, i32 } %.pn120.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare void @_ZN4Test14DrawBodyLabelsEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #9

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE26SucceededAndIsInBroadPhaseEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

declare void @_ZNK3JPH16TransformedShape24CollectTransformedShapesERKNS_5AABoxERNS_18CollisionCollectorIS0_NS_36CollisionCollectorTraitsCollideShapeEEERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #9

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EE4findERKS3_(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE12IteratorBaseISG_NSG_8iteratorEEneERKSI_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE3endEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<JPH::RefConst<JPH::Shape>, std::pair<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::UnorderedMapDetail<JPH::RefConst<JPH::Shape>, JPH::Ref<JPH::DebugRenderer::Geometry>>, JPH::Hash<JPH::RefConst<JPH::Shape>>, std::equal_to<JPH::RefConst<JPH::Shape>>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) local_unnamed_addr #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #8 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EE8iteratoraSERKSH_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH5AABox8sBiggestEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::AABox") align 16) local_unnamed_addr #8 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(108) ptr @_ZN3JPH5ArrayINS_13DebugRenderer8TriangleENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #7 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8), float noundef, float noundef) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13DebugRenderer19CreateTriangleBatchERKNS_5ArrayINS0_8TriangleENS_12STLAllocatorIS2_EEEE(ptr dead_on_unwind noalias writable sret(%"class.JPH::Ref.231") align 8, ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #8 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEixERKS3_(ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #8 align 2

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

declare i32 @_ZN3JPH5Color17sGetDistinctColorEi(i32 noundef) local_unnamed_addr #9

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH12ScaleHelpers11IsInsideOutENS_4Vec3E(double, double) local_unnamed_addr #7

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13DebugRenderer12DrawGeometryERKNS_5Mat44ENS_5ColorERKNS_3RefINS0_8GeometryEEENS0_9ECullModeENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(64), i32, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #8 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(28) ptr @_ZN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEaSEOSC_(ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(28)) local_unnamed_addr #1 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !13, i64 488}
!6 = !{!"_ZTS10SamplesApp", !7, i64 0, !21, i64 272, !12, i64 276, !21, i64 280, !13, i64 288, !13, i64 296, !13, i64 304, !22, i64 312, !24, i64 328, !26, i64 336, !13, i64 344, !13, i64 352, !28, i64 360, !29, i64 448, !13, i64 480, !13, i64 488, !13, i64 496, !21, i64 504, !20, i64 508, !12, i64 512, !20, i64 516, !20, i64 517, !20, i64 518, !20, i64 519, !31, i64 520, !32, i64 544, !21, i64 548, !33, i64 552, !34, i64 556, !20, i64 560, !9, i64 576, !35, i64 592, !35, i64 593, !36, i64 594, !37, i64 595, !12, i64 596, !20, i64 600, !20, i64 601, !20, i64 602, !20, i64 603, !21, i64 604, !20, i64 608, !38, i64 612, !12, i64 616, !39, i64 620, !12, i64 624, !12, i64 628, !20, i64 632, !9, i64 640, !20, i64 656, !13, i64 664, !40, i64 672, !41, i64 680, !21, i64 688, !12, i64 692, !12, i64 696, !21, i64 700, !42, i64 704}
!7 = !{!"_ZTS11Application", !8, i64 16, !8, i64 80, !13, i64 144, !13, i64 152, !13, i64 160, !14, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !13, i64 200, !15, i64 208, !18, i64 240, !20, i64 248, !20, i64 249, !20, i64 250, !20, i64 251, !12, i64 252, !12, i64 256, !12, i64 260, !12, i64 264, !21, i64 268}
!8 = !{!"_ZTS11CameraState", !9, i64 0, !9, i64 16, !9, i64 32, !12, i64 48}
!9 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"float", !10, i64 0}
!13 = !{!"any pointer", !10, i64 0}
!14 = !{!"_ZTSN3JPH8RefConstI4FontEE", !13, i64 0}
!15 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !16, i64 0, !17, i64 8, !10, i64 16}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !13, i64 0}
!17 = !{!"long", !10, i64 0}
!18 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !19, i64 0}
!19 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !17, i64 0}
!20 = !{!"bool", !10, i64 0}
!21 = !{!"int", !10, i64 0}
!22 = !{!"_ZTS20BPLayerInterfaceImpl", !23, i64 0, !10, i64 8}
!23 = !{!"_ZTSN3JPH24BroadPhaseLayerInterfaceE"}
!24 = !{!"_ZTS33ObjectVsBroadPhaseLayerFilterImpl", !25, i64 0}
!25 = !{!"_ZTSN3JPH29ObjectVsBroadPhaseLayerFilterE"}
!26 = !{!"_ZTS25ObjectLayerPairFilterImpl", !27, i64 0}
!27 = !{!"_ZTSN3JPH21ObjectLayerPairFilterE"}
!28 = !{!"_ZTSN3JPH15PhysicsSettingsE", !21, i64 0, !21, i64 4, !21, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !21, i64 56, !21, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !20, i64 76, !20, i64 77, !20, i64 78, !20, i64 79, !20, i64 80, !20, i64 81, !20, i64 82}
!29 = !{!"_ZTSN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEE", !30, i64 0}
!30 = !{!"_ZTSN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EEE", !13, i64 0, !13, i64 8, !21, i64 16, !21, i64 20, !21, i64 24}
!31 = !{!"_ZTSN3JPH5ArrayIN10SamplesApp13PlayBackFrameENS_12STLAllocatorIS2_EEEE", !17, i64 0, !17, i64 8, !13, i64 16}
!32 = !{!"_ZTSN10SamplesApp13EPlaybackModeE", !10, i64 0}
!33 = !{!"_ZTSN10SamplesApp10EProbeModeE", !10, i64 0}
!34 = !{!"_ZTSN10SamplesApp11EProbeShapeE", !10, i64 0}
!35 = !{!"_ZTSN3JPH13EBackFaceModeE", !10, i64 0}
!36 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !10, i64 0}
!37 = !{!"_ZTSN3JPH17ECollectFacesModeE", !10, i64 0}
!38 = !{!"_ZTSN10SamplesApp17EShootObjectShapeE", !10, i64 0}
!39 = !{!"_ZTSN3JPH14EMotionQualityE", !10, i64 0}
!40 = !{!"_ZTSN3JPH6BodyIDE", !21, i64 0}
!41 = !{!"_ZTSN3JPH3RefINS_10ConstraintEEE", !13, i64 0}
!42 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000EEEE", !17, i64 0}
!43 = !{!6, !13, i64 344}
!44 = !{!21, !21, i64 0}
!45 = !{!46, !46, i64 0}
!46 = !{!"vtable pointer", !11, i64 0}
!47 = !{!10, !10, i64 0}
!48 = !{i64 0, i64 4, !49, i64 4, i64 4, !49, i64 8, i64 4, !49}
!49 = !{!12, !12, i64 0}
!50 = distinct !{!50, !51}
!51 = !{!"llvm.loop.mustprogress"}
!52 = !{!7, !13, i64 144}
!53 = !{i64 2161777592}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass