; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/General/HighSpeedTest.ll (ZN13HighSpeedTest28CreateFastSmallConvexObjectsEv)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.JPH::BroadPhaseLayer" = type { i8 }
%"class.JPH::Array.46" = type { i64, i64, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::STLAllocator.47" = type { i8 }
%"class.JPH::ConvexHullShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Array.46", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShapeSettings.base" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::RefConst.7", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.10", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.10" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.11, i8, [7 x i8] }>
%union.anon.11 = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.15 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.15 = type { i64, [8 x i8] }
%"class.JPH::RefConst.7" = type { ptr }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.5", %"class.JPH::RefConst.6" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst", i32, i32 }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::RefConst.6" = type { ptr }
%"class.std::linear_congruential_engine" = type { i64 }
%"class.std::uniform_real_distribution" = type { %"struct.std::uniform_real_distribution<float>::param_type" }
%"struct.std::uniform_real_distribution<float>::param_type" = type { float, float }
%"struct.JPH::RRayCast" = type { %"struct.JPH::RayCastT" }
%"struct.JPH::RayCastT" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::RayCastResult" = type { %"class.JPH::BroadPhaseCastResult", %"class.JPH::SubShapeID" }
%"class.JPH::BroadPhaseCastResult" = type { %"class.JPH::BodyID", float }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::SpecifiedBroadPhaseLayerFilter" = type <{ %"class.JPH::BroadPhaseLayerFilter", %"class.JPH::BroadPhaseLayer", [7 x i8] }>
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::SpecifiedObjectLayerFilter" = type <{ %"class.JPH::ObjectLayerFilter", i16, [6 x i8] }>
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::BodyFilter" = type { ptr }
%class.Test = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

@_ZN16BroadPhaseLayersL10NON_MOVINGE = external hidden constant %"class.JPH::BroadPhaseLayer", align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16), float noundef, float noundef, float noundef) unnamed_addr #1 align 2

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

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

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) #4

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

declare void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #4

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) #8 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172)) #9 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13HighSpeedTest28CreateFastSmallConvexObjectsEv(ptr noundef nonnull align 8 dereferenceable(112) %0) #5 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.JPH::Array.46", align 8
  %4 = alloca %"class.std::initializer_list", align 8
  %5 = alloca [23 x %"class.JPH::Vec3"], align 16
  %6 = alloca %"class.JPH::STLAllocator.47", align 1
  %7 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca %"class.JPH::BodyCreationSettings", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Quat", align 16
  %13 = alloca %"class.std::linear_congruential_engine", align 8
  %14 = alloca %"class.std::uniform_real_distribution", align 4
  %15 = alloca %"class.std::uniform_real_distribution", align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"struct.JPH::RRayCast", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::RayCastResult", align 4
  %25 = alloca %"class.JPH::SpecifiedBroadPhaseLayerFilter", align 8
  %26 = alloca %"class.JPH::BroadPhaseLayer", align 1
  %27 = alloca %"class.JPH::SpecifiedObjectLayerFilter", align 8
  %28 = alloca %"class.JPH::BodyFilter", align 8
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Quat", align 16
  %33 = alloca ptr, align 8
  %34 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  %35 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr %3) #10
  call void @llvm.lifetime.start.p0(i64 368, ptr %5) #10
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %5, float noundef 0xBFA6DDCE80000000, float noundef 0x3F5426FE80000000, float noundef 0x3F6FC2A880000000)
  %36 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 1
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %36, float noundef 0xBF99563AA0000000, float noundef 0xBFA5CAAFC0000000, float noundef 0x3F6FC2A880000000)
  %37 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 2
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %37, float noundef 0xBF89439DE0000000, float noundef 0xBF95942920000000, float noundef 0x3FA8D2E520000000)
  %38 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 3
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %38, float noundef 0x3F90739B00000000, float noundef 0x3F9CCBC060000000, float noundef 0xBFA98D0460000000)
  %39 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 4
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %39, float noundef 0xBF984DB9C0000000, float noundef 0x3FA6282400000000, float noundef 0xBF98BB9060000000)
  %40 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 5
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %40, float noundef 0x3F954FBDA0000000, float noundef 0x3FA29B49A0000000, float noundef 0xBF93FFAC20000000)
  %41 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 6
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %41, float noundef 0x3F8996FA80000000, float noundef 0x3F96766400000000, float noundef 0x3FA72FFD20000000)
  %42 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 7
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %42, float noundef 0x3F9B645A20000000, float noundef 0x3F5426FE80000000, float noundef 0x3FA93A4F80000000)
  %43 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 8
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %43, float noundef 0x3FA74B1EE0000000, float noundef 0x3F5426FE80000000, float noundef 0xBF969B5A60000000)
  %44 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 9
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %44, float noundef 0x3F96B9C300000000, float noundef 0xBFA2928180000000, float noundef 0xBF95A20DE0000000)
  %45 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 10
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %45, float noundef 0x3F9753E700000000, float noundef 0xBFA317CE60000000, float noundef 0x3F9E4473C0000000)
  %46 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %46, float noundef 0x3F8E1650A0000000, float noundef 0xBF97D6B660000000, float noundef 0x3FAB1550C0000000)
  %47 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 12
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %47, float noundef 0xBF88F57F80000000, float noundef 0xBF95508700000000, float noundef 0xBFA496EDE0000000)
  %48 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 13
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %48, float noundef 0x3F41BA3CA0000000, float noundef 0x3F5426FE80000000, float noundef 0xBFACC96460000000)
  %49 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 14
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %49, float noundef 0xBFA46B69E0000000, float noundef 0x3F5426FE80000000, float noundef 0xBF93ED95A0000000)
  %50 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 15
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %50, float noundef 0x3F41BA3CA0000000, float noundef 0x3F5426FE80000000, float noundef 0x3FACAEEA60000000)
  %51 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 16
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %51, float noundef 0xBF951BD620000000, float noundef 0xBFA2216400000000, float noundef 0xBF950B5240000000)
  %52 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 17
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %52, float noundef 0xBF93F3E040000000, float noundef 0x3FA2639500000000, float noundef 0x3F9BA62660000000)
  %53 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 18
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %53, float noundef 0xBF988B1140000000, float noundef 0x3FA65D39A0000000, float noundef 0x3F6FC2A880000000)
  %54 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 19
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %54, float noundef 0xBF94883FE0000000, float noundef 0x3F5426FE80000000, float noundef 0x3FA43EFAE0000000)
  %55 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 20
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %55, float noundef 0x3F9AD794A0000000, float noundef 0x3F5426FE80000000, float noundef 0xBFA4C814E0000000)
  %56 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 21
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %56, float noundef 0xBF861CBCC0000000, float noundef 0x3F955E6BC0000000, float noundef 0x3FA61804E0000000)
  %57 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i64 22
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %57, float noundef 0xBF8959A300000000, float noundef 0x3F982C6F00000000, float noundef 0xBFA4EDB300000000)
  %58 = getelementptr inbounds %"class.std::initializer_list", ptr %4, i32 0, i32 0
  store ptr %5, ptr %58, align 8, !tbaa !9
  %59 = getelementptr inbounds %"class.std::initializer_list", ptr %4, i32 0, i32 1
  store i64 23, ptr %59, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #10
  %60 = getelementptr inbounds { ptr, i64 }, ptr %4, i32 0, i32 0
  %61 = load ptr, ptr %60, align 8
  %62 = getelementptr inbounds { ptr, i64 }, ptr %4, i32 0, i32 1
  %63 = load i64, ptr %62, align 8
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr %61, i64 %63, ptr noundef nonnull align 1 dereferenceable(1) %6)
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 368, ptr %5) #10
  call void @llvm.lifetime.start.p0(i64 120, ptr %7) #10
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %7, ptr noundef nonnull align 8 dereferenceable(24) %3, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %64 unwind label %101

64:                                               ; preds = %1
  %65 = getelementptr inbounds i8, ptr %7, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %65)
          to label %66 unwind label %105

66:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 256, ptr %10) #10
  %67 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %68 unwind label %109

68:                                               ; preds = %66
  %69 = getelementptr inbounds %"class.JPH::Vec3", ptr %11, i32 0, i32 0
  %70 = getelementptr inbounds %union.anon, ptr %69, i32 0, i32 0
  %71 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 0
  %72 = extractvalue { double, double } %67, 0
  store double %72, ptr %71, align 16
  %73 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 1
  %74 = extractvalue { double, double } %67, 1
  store double %74, ptr %73, align 8
  %75 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %76 unwind label %109

76:                                               ; preds = %68
  %77 = getelementptr inbounds %"class.JPH::Quat", ptr %12, i32 0, i32 0
  %78 = getelementptr inbounds %"class.JPH::Vec4", ptr %77, i32 0, i32 0
  %79 = getelementptr inbounds %union.anon.4, ptr %78, i32 0, i32 0
  %80 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 0
  %81 = extractvalue { double, double } %75, 0
  store double %81, ptr %80, align 16
  %82 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 1
  %83 = extractvalue { double, double } %75, 1
  store double %83, ptr %82, align 8
  %84 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %85 = load double, ptr %84, align 16
  %86 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %87 = load double, ptr %86, align 8
  %88 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %89 = load double, ptr %88, align 16
  %90 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %91 = load double, ptr %90, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %10, ptr noundef %7, double %85, double %87, double %89, double %91, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %92 unwind label %109

92:                                               ; preds = %76
  %93 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %10, i32 0, i32 14
  store i8 1, ptr %93, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  invoke void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %94 unwind label %113

94:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #10
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %14, float noundef 0.000000e+00, float noundef 0x3FB99999A0000000)
          to label %95 unwind label %117

95:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %15, float noundef -1.000000e+01, float noundef 1.000000e+01)
          to label %96 unwind label %121

96:                                               ; preds = %95
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  store i32 -25, ptr %16, align 4, !tbaa !32
  br label %97

97:                                               ; preds = %273, %96
  %98 = load i32, ptr %16, align 4, !tbaa !32
  %99 = icmp slt i32 %98, 25
  br i1 %99, label %125, label %100

100:                                              ; preds = %97
  store i32 2, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  br label %276

101:                                              ; preds = %1
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %8, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %9, align 4
  br label %282

105:                                              ; preds = %64
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %8, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %9, align 4
  br label %281

109:                                              ; preds = %76, %68, %66
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %8, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %9, align 4
  br label %280

113:                                              ; preds = %92
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %8, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %9, align 4
  br label %279

117:                                              ; preds = %94
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %8, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %9, align 4
  br label %278

121:                                              ; preds = %95
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %8, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %9, align 4
  br label %277

125:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  store i32 -25, ptr %18, align 4, !tbaa !32
  br label %126

126:                                              ; preds = %265, %125
  %127 = load i32, ptr %18, align 4, !tbaa !32
  %128 = icmp slt i32 %127, 25
  br i1 %128, label %130, label %129

129:                                              ; preds = %126
  store i32 5, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  br label %272

130:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #10
  %131 = load i32, ptr %16, align 4, !tbaa !32
  %132 = sitofp i32 %131 to float
  %133 = invoke noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef 0xK4005C800000000000000)
          to label %134 unwind label %222

134:                                              ; preds = %130
  %135 = load i32, ptr %18, align 4, !tbaa !32
  %136 = sitofp i32 %135 to float
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %19, float noundef %132, float noundef %133, float noundef %136)
          to label %137 unwind label %222

137:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef 0.000000e+00, float noundef -1.000000e+02, float noundef 0.000000e+00)
          to label %138 unwind label %226

138:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %22, ptr align 16 %19, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %23, ptr align 16 %20, i64 16, i1 false), !tbaa.struct !33
  %139 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %140 = load double, ptr %139, align 16
  %141 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %142 = load double, ptr %141, align 8
  %143 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %144 = load double, ptr %143, align 16
  %145 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %146 = load double, ptr %145, align 8
  invoke void @_ZN3JPH8RRayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %21, double %140, double %142, double %144, double %146)
          to label %147 unwind label %230

147:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 12, ptr %24) #10
  invoke void @_ZN3JPH13RayCastResultC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %24)
          to label %148 unwind label %234

148:                                              ; preds = %147
  %149 = getelementptr inbounds %class.Test, ptr %35, i32 0, i32 2
  %150 = load ptr, ptr %149, align 8, !tbaa !35
  %151 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %150)
          to label %152 unwind label %234

152:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %26, ptr align 1 @_ZN16BroadPhaseLayersL10NON_MOVINGE, i64 1, i1 false), !tbaa.struct !41
  %153 = getelementptr inbounds %"class.JPH::BroadPhaseLayer", ptr %26, i32 0, i32 0
  %154 = load i8, ptr %153, align 1
  invoke void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9) %25, i8 %154)
          to label %155 unwind label %238

155:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #10
  invoke void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10) %27, i16 noundef zeroext 0)
          to label %156 unwind label %242

156:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  call void @llvm.memset.p0.i64(ptr align 8 %28, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  %157 = invoke noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16) %151, ptr noundef nonnull align 16 dereferenceable(32) %21, ptr noundef nonnull align 4 dereferenceable(12) %24, ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %158 unwind label %246

158:                                              ; preds = %156
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %27) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %25) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #10
  br i1 %157, label %159, label %264

159:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #10
  %160 = getelementptr inbounds %"class.JPH::BroadPhaseCastResult", ptr %24, i32 0, i32 1
  %161 = load float, ptr %160, align 4, !tbaa !42
  %162 = invoke { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %21, float noundef %161)
          to label %163 unwind label %252

163:                                              ; preds = %159
  %164 = getelementptr inbounds %"class.JPH::Vec3", ptr %30, i32 0, i32 0
  %165 = getelementptr inbounds %union.anon, ptr %164, i32 0, i32 0
  %166 = getelementptr inbounds { double, double }, ptr %165, i32 0, i32 0
  %167 = extractvalue { double, double } %162, 0
  store double %167, ptr %166, align 16
  %168 = getelementptr inbounds { double, double }, ptr %165, i32 0, i32 1
  %169 = extractvalue { double, double } %162, 1
  store double %169, ptr %168, align 8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %31, float noundef 0.000000e+00, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %170 unwind label %252

170:                                              ; preds = %163
  %171 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %172 = load double, ptr %171, align 16
  %173 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %174 = load double, ptr %173, align 8
  %175 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %172, double %174)
          to label %176 unwind label %252

176:                                              ; preds = %170
  %177 = getelementptr inbounds %"class.JPH::Vec3", ptr %29, i32 0, i32 0
  %178 = getelementptr inbounds %union.anon, ptr %177, i32 0, i32 0
  %179 = getelementptr inbounds { double, double }, ptr %178, i32 0, i32 0
  %180 = extractvalue { double, double } %175, 0
  store double %180, ptr %179, align 16
  %181 = getelementptr inbounds { double, double }, ptr %178, i32 0, i32 1
  %182 = extractvalue { double, double } %175, 1
  store double %182, ptr %181, align 8
  %183 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %10, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %183, ptr align 16 %29, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #10
  %184 = invoke { double, double } @_ZN3JPH4Quat7sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %185 unwind label %256

185:                                              ; preds = %176
  %186 = getelementptr inbounds %"class.JPH::Quat", ptr %32, i32 0, i32 0
  %187 = getelementptr inbounds %"class.JPH::Vec4", ptr %186, i32 0, i32 0
  %188 = getelementptr inbounds %union.anon.4, ptr %187, i32 0, i32 0
  %189 = getelementptr inbounds { double, double }, ptr %188, i32 0, i32 0
  %190 = extractvalue { double, double } %184, 0
  store double %190, ptr %189, align 16
  %191 = getelementptr inbounds { double, double }, ptr %188, i32 0, i32 1
  %192 = extractvalue { double, double } %184, 1
  store double %192, ptr %191, align 8
  %193 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %10, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %193, ptr align 16 %32, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #10
  %194 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %195 unwind label %234

195:                                              ; preds = %185
  %196 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %10, i32 0, i32 18
  store float %194, ptr %196, align 16, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %197 = getelementptr inbounds %class.Test, ptr %35, i32 0, i32 2
  %198 = load ptr, ptr %197, align 8, !tbaa !35
  %199 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %198)
          to label %200 unwind label %260

200:                                              ; preds = %195
  %201 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %199, ptr noundef nonnull align 16 dereferenceable(256) %10)
          to label %202 unwind label %260

202:                                              ; preds = %200
  store ptr %201, ptr %33, align 8, !tbaa !5
  %203 = load ptr, ptr %33, align 8, !tbaa !5
  %204 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %205 unwind label %260

205:                                              ; preds = %202
  %206 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %207 unwind label %260

207:                                              ; preds = %205
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %34, float noundef %204, float noundef -1.000000e+02, float noundef %206)
          to label %208 unwind label %260

208:                                              ; preds = %207
  %209 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %210 = load double, ptr %209, align 16
  %211 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %212 = load double, ptr %211, align 8
  invoke void @_ZN3JPH4Body17SetLinearVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %203, double %210, double %212)
          to label %213 unwind label %260

213:                                              ; preds = %208
  %214 = getelementptr inbounds %class.Test, ptr %35, i32 0, i32 2
  %215 = load ptr, ptr %214, align 8, !tbaa !35
  %216 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %215)
          to label %217 unwind label %260

217:                                              ; preds = %213
  %218 = load ptr, ptr %33, align 8, !tbaa !5
  %219 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %218)
          to label %220 unwind label %260

220:                                              ; preds = %217
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %216, ptr noundef nonnull align 4 dereferenceable(4) %219, i32 noundef 0)
          to label %221 unwind label %260

221:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %264

222:                                              ; preds = %134, %130
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %8, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %9, align 4
  br label %271

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

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

234:                                              ; preds = %185, %148, %147
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %8, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %9, align 4
  br label %268

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

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

246:                                              ; preds = %156
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %8, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %9, align 4
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %27) #10
  br label %250

250:                                              ; preds = %246, %242
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %25) #10
  br label %251

251:                                              ; preds = %250, %238
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #10
  br label %268

252:                                              ; preds = %170, %163, %159
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %8, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #10
  br label %268

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

260:                                              ; preds = %220, %217, %213, %208, %207, %205, %202, %200, %195
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %8, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %268

264:                                              ; preds = %221, %158
  call void @llvm.lifetime.end.p0(i64 12, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #10
  br label %265

265:                                              ; preds = %264
  %266 = load i32, ptr %18, align 4, !tbaa !32
  %267 = add nsw i32 %266, 1
  store i32 %267, ptr %18, align 4, !tbaa !32
  br label %126, !llvm.loop !46

268:                                              ; preds = %260, %256, %252, %251, %234
  call void @llvm.lifetime.end.p0(i64 12, ptr %24) #10
  br label %269

269:                                              ; preds = %268, %230
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #10
  br label %270

270:                                              ; preds = %269, %226
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #10
  br label %271

271:                                              ; preds = %270, %222
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  br label %277

272:                                              ; preds = %129
  br label %273

273:                                              ; preds = %272
  %274 = load i32, ptr %16, align 4, !tbaa !32
  %275 = add nsw i32 %274, 1
  store i32 %275, ptr %16, align 4, !tbaa !32
  br label %97, !llvm.loop !48

276:                                              ; preds = %100
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %10) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %10) #10
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #10
  call void @llvm.lifetime.end.p0(i64 120, ptr %7) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #10
  ret void

277:                                              ; preds = %271, %121
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  br label %278

278:                                              ; preds = %277, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  br label %279

279:                                              ; preds = %278, %113
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %10) #10
  br label %280

280:                                              ; preds = %279, %109
  call void @llvm.lifetime.end.p0(i64 256, ptr %10) #10
  br label %281

281:                                              ; preds = %280, %105
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #10
  br label %282

282:                                              ; preds = %281, %101
  call void @llvm.lifetime.end.p0(i64 120, ptr %7) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #10
  br label %283

283:                                              ; preds = %282
  %284 = load ptr, ptr %8, align 8
  %285 = load i32, ptr %9, align 4
  %286 = insertvalue { ptr, i32 } poison, ptr %284, 0
  %287 = insertvalue { ptr, i32 } %286, i32 %285, 1
  resume { ptr, i32 } %287
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(24), float noundef, ptr noundef) unnamed_addr #5 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef) #9

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172)) #9 align 2

declare noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10), i16 noundef zeroext) unnamed_addr #9 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32), float noundef) #8 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat7sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8)) #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTSSt16initializer_listIN3JPH4Vec3EE", !6, i64 0, !11, i64 8}
!11 = !{!"long", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!14, !25, i64 103}
!14 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !15, i64 0, !16, i64 16, !15, i64 32, !15, i64 48, !11, i64 64, !18, i64 72, !19, i64 80, !22, i64 96, !23, i64 97, !24, i64 98, !24, i64 99, !24, i64 100, !24, i64 101, !24, i64 102, !25, i64 103, !24, i64 104, !24, i64 105, !26, i64 108, !26, i64 112, !26, i64 116, !26, i64 120, !26, i64 124, !26, i64 128, !26, i64 132, !21, i64 136, !21, i64 140, !27, i64 144, !26, i64 148, !28, i64 160, !30, i64 240, !31, i64 248}
!15 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!16 = !{!"_ZTSN3JPH4QuatE", !17, i64 0}
!17 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!18 = !{!"short", !7, i64 0}
!19 = !{!"_ZTSN3JPH14CollisionGroupE", !20, i64 0, !21, i64 8, !21, i64 12}
!20 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!21 = !{!"int", !7, i64 0}
!22 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!23 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!24 = !{!"bool", !7, i64 0}
!25 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!26 = !{!"float", !7, i64 0}
!27 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!28 = !{!"_ZTSN3JPH14MassPropertiesE", !26, i64 0, !29, i64 16}
!29 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!30 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!31 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!32 = !{!21, !21, i64 0}
!33 = !{i64 0, i64 16, !34}
!34 = !{!7, !7, i64 0}
!35 = !{!36, !6, i64 16}
!36 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !24, i64 48, !37, i64 56}
!37 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !38, i64 0}
!38 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !11, i64 8, !39, i64 16, !11, i64 24, !40, i64 32, !6, i64 48}
!39 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!40 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !26, i64 0, !11, i64 8}
!41 = !{i64 0, i64 1, !34}
!42 = !{!43, !26, i64 4}
!43 = !{!"_ZTSN3JPH20BroadPhaseCastResultE", !44, i64 0, !26, i64 4}
!44 = !{!"_ZTSN3JPH6BodyIDE", !21, i64 0}
!45 = !{!14, !26, i64 112}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}
!48 = distinct !{!48, !47}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.JPH::BroadPhaseLayer" = type { i8 }
%"class.JPH::Array.46" = type { i64, i64, ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::STLAllocator.47" = type { i8 }
%"class.JPH::ConvexHullShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Array.46", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShapeSettings.base" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::RefConst.7", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.10", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.10" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.11, i8, [7 x i8] }>
%union.anon.11 = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.15 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.15 = type { i64, [8 x i8] }
%"class.JPH::RefConst.7" = type { ptr }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.5", %"class.JPH::RefConst.6" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst", i32, i32 }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::RefConst.6" = type { ptr }
%"class.std::linear_congruential_engine" = type { i64 }
%"class.std::uniform_real_distribution" = type { %"struct.std::uniform_real_distribution<float>::param_type" }
%"struct.std::uniform_real_distribution<float>::param_type" = type { float, float }
%"struct.JPH::RRayCast" = type { %"struct.JPH::RayCastT" }
%"struct.JPH::RayCastT" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::RayCastResult" = type { %"class.JPH::BroadPhaseCastResult", %"class.JPH::SubShapeID" }
%"class.JPH::BroadPhaseCastResult" = type { %"class.JPH::BodyID", float }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::SpecifiedBroadPhaseLayerFilter" = type <{ %"class.JPH::BroadPhaseLayerFilter", %"class.JPH::BroadPhaseLayer", [7 x i8] }>
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::SpecifiedObjectLayerFilter" = type <{ %"class.JPH::ObjectLayerFilter", i16, [6 x i8] }>
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::BodyFilter" = type { ptr }

@_ZN16BroadPhaseLayersL10NON_MOVINGE = external hidden local_unnamed_addr constant %"class.JPH::BroadPhaseLayer", align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16), float noundef, float noundef, float noundef) unnamed_addr #1 align 2

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

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

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #3

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

declare void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13HighSpeedTest28CreateFastSmallConvexObjectsEv(ptr nocapture noundef nonnull readonly align 8 dereferenceable(112) %0) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::Array.46", align 8
  %3 = alloca [23 x %"class.JPH::Vec3"], align 16
  %4 = alloca %"class.JPH::STLAllocator.47", align 1
  %5 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %6 = alloca %"class.JPH::BodyCreationSettings", align 16
  %7 = alloca %"class.std::linear_congruential_engine", align 8
  %8 = alloca %"class.std::uniform_real_distribution", align 4
  %9 = alloca %"class.std::uniform_real_distribution", align 4
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"struct.JPH::RRayCast", align 16
  %13 = alloca %"class.JPH::RayCastResult", align 4
  %14 = alloca %"class.JPH::SpecifiedBroadPhaseLayerFilter", align 8
  %15 = alloca %"class.JPH::SpecifiedObjectLayerFilter", align 8
  %16 = alloca %"class.JPH::BodyFilter", align 8
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #8
  call void @llvm.lifetime.start.p0(i64 368, ptr nonnull %3) #8
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 0xBFA6DDCE80000000, float noundef 0x3F5426FE80000000, float noundef 0x3F6FC2A880000000)
  %20 = getelementptr inbounds i8, ptr %3, i64 16
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef 0xBF99563AA0000000, float noundef 0xBFA5CAAFC0000000, float noundef 0x3F6FC2A880000000)
  %21 = getelementptr inbounds i8, ptr %3, i64 32
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 0xBF89439DE0000000, float noundef 0xBF95942920000000, float noundef 0x3FA8D2E520000000)
  %22 = getelementptr inbounds i8, ptr %3, i64 48
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %22, float noundef 0x3F90739B00000000, float noundef 0x3F9CCBC060000000, float noundef 0xBFA98D0460000000)
  %23 = getelementptr inbounds i8, ptr %3, i64 64
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %23, float noundef 0xBF984DB9C0000000, float noundef 0x3FA6282400000000, float noundef 0xBF98BB9060000000)
  %24 = getelementptr inbounds i8, ptr %3, i64 80
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %24, float noundef 0x3F954FBDA0000000, float noundef 0x3FA29B49A0000000, float noundef 0xBF93FFAC20000000)
  %25 = getelementptr inbounds i8, ptr %3, i64 96
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %25, float noundef 0x3F8996FA80000000, float noundef 0x3F96766400000000, float noundef 0x3FA72FFD20000000)
  %26 = getelementptr inbounds i8, ptr %3, i64 112
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %26, float noundef 0x3F9B645A20000000, float noundef 0x3F5426FE80000000, float noundef 0x3FA93A4F80000000)
  %27 = getelementptr inbounds i8, ptr %3, i64 128
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef 0x3FA74B1EE0000000, float noundef 0x3F5426FE80000000, float noundef 0xBF969B5A60000000)
  %28 = getelementptr inbounds i8, ptr %3, i64 144
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 0x3F96B9C300000000, float noundef 0xBFA2928180000000, float noundef 0xBF95A20DE0000000)
  %29 = getelementptr inbounds i8, ptr %3, i64 160
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %29, float noundef 0x3F9753E700000000, float noundef 0xBFA317CE60000000, float noundef 0x3F9E4473C0000000)
  %30 = getelementptr inbounds i8, ptr %3, i64 176
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %30, float noundef 0x3F8E1650A0000000, float noundef 0xBF97D6B660000000, float noundef 0x3FAB1550C0000000)
  %31 = getelementptr inbounds i8, ptr %3, i64 192
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %31, float noundef 0xBF88F57F80000000, float noundef 0xBF95508700000000, float noundef 0xBFA496EDE0000000)
  %32 = getelementptr inbounds i8, ptr %3, i64 208
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef 0x3F41BA3CA0000000, float noundef 0x3F5426FE80000000, float noundef 0xBFACC96460000000)
  %33 = getelementptr inbounds i8, ptr %3, i64 224
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %33, float noundef 0xBFA46B69E0000000, float noundef 0x3F5426FE80000000, float noundef 0xBF93ED95A0000000)
  %34 = getelementptr inbounds i8, ptr %3, i64 240
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %34, float noundef 0x3F41BA3CA0000000, float noundef 0x3F5426FE80000000, float noundef 0x3FACAEEA60000000)
  %35 = getelementptr inbounds i8, ptr %3, i64 256
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %35, float noundef 0xBF951BD620000000, float noundef 0xBFA2216400000000, float noundef 0xBF950B5240000000)
  %36 = getelementptr inbounds i8, ptr %3, i64 272
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %36, float noundef 0xBF93F3E040000000, float noundef 0x3FA2639500000000, float noundef 0x3F9BA62660000000)
  %37 = getelementptr inbounds i8, ptr %3, i64 288
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %37, float noundef 0xBF988B1140000000, float noundef 0x3FA65D39A0000000, float noundef 0x3F6FC2A880000000)
  %38 = getelementptr inbounds i8, ptr %3, i64 304
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %38, float noundef 0xBF94883FE0000000, float noundef 0x3F5426FE80000000, float noundef 0x3FA43EFAE0000000)
  %39 = getelementptr inbounds i8, ptr %3, i64 320
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %39, float noundef 0x3F9AD794A0000000, float noundef 0x3F5426FE80000000, float noundef 0xBFA4C814E0000000)
  %40 = getelementptr inbounds i8, ptr %3, i64 336
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %40, float noundef 0xBF861CBCC0000000, float noundef 0x3F955E6BC0000000, float noundef 0x3FA61804E0000000)
  %41 = getelementptr inbounds i8, ptr %3, i64 352
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %41, float noundef 0xBF8959A300000000, float noundef 0x3F982C6F00000000, float noundef 0xBFA4EDB300000000)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #8
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr nonnull %3, i64 23, ptr noundef nonnull align 1 dereferenceable(1) %4)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 368, ptr nonnull %3) #8
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %5) #8
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %5, ptr noundef nonnull align 8 dereferenceable(24) %2, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %42 unwind label %66

42:                                               ; preds = %1
  %43 = getelementptr inbounds i8, ptr %5, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %43)
          to label %44 unwind label %68

44:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %6) #8
  %45 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %46 unwind label %70

46:                                               ; preds = %44
  %47 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %48 unwind label %70

48:                                               ; preds = %46
  %49 = extractvalue { double, double } %45, 1
  %50 = extractvalue { double, double } %45, 0
  %51 = extractvalue { double, double } %47, 0
  %52 = extractvalue { double, double } %47, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %6, ptr noundef nonnull %5, double %50, double %49, double %51, double %52, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %53 unwind label %70

53:                                               ; preds = %48
  %54 = getelementptr inbounds i8, ptr %6, i64 103
  store i8 1, ptr %54, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  invoke void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %55 unwind label %72

55:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %8, float noundef 0.000000e+00, float noundef 0x3FB99999A0000000)
          to label %56 unwind label %74

56:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %9, float noundef -1.000000e+01, float noundef 1.000000e+01)
          to label %.preheader44 unwind label %76

.preheader44:                                     ; preds = %56
  %.sroa.27.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %11, i64 8
  %57 = getelementptr inbounds i8, ptr %0, i64 16
  %.sroa.04.0.copyload = load i8, ptr @_ZN16BroadPhaseLayersL10NON_MOVINGE, align 1
  %58 = getelementptr inbounds i8, ptr %13, i64 4
  %59 = getelementptr inbounds i8, ptr %17, i64 8
  %60 = getelementptr inbounds i8, ptr %18, i64 8
  %.sroa.53.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %61 = getelementptr inbounds i8, ptr %6, i64 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 24
  %62 = getelementptr inbounds i8, ptr %6, i64 112
  %63 = getelementptr inbounds i8, ptr %19, i64 8
  br label %.preheader

.preheader:                                       ; preds = %.preheader44, %78
  %.03246 = phi i32 [ -25, %.preheader44 ], [ %79, %78 ]
  %64 = sitofp i32 %.03246 to float
  br label %80

65:                                               ; preds = %78
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %6) #8
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %6) #8
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #8
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #8
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #8
  ret void

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

68:                                               ; preds = %42
  %69 = landingpad { ptr, i32 }
          cleanup
  br label %151

70:                                               ; preds = %48, %46, %44
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %150

72:                                               ; preds = %53
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %149

74:                                               ; preds = %55
  %75 = landingpad { ptr, i32 }
          cleanup
  br label %148

76:                                               ; preds = %56
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %147

78:                                               ; preds = %141
  %79 = add nsw i32 %.03246, 1
  %exitcond47.not = icmp eq i32 %79, 25
  br i1 %exitcond47.not, label %65, label %.preheader, !llvm.loop !28

80:                                               ; preds = %.preheader, %141
  %.03345 = phi i32 [ -25, %.preheader ], [ %142, %141 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #8
  %81 = call noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef 0xK4005C800000000000000)
  %82 = sitofp i32 %.03345 to float
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef %64, float noundef %81, float noundef %82)
          to label %83 unwind label %125

83:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef 0.000000e+00, float noundef -1.000000e+02, float noundef 0.000000e+00)
          to label %84 unwind label %127

84:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #8
  %.sroa.06.0.copyload = load double, ptr %10, align 16
  %.sroa.27.0.copyload = load double, ptr %.sroa.27.0..sroa_idx, align 8, !tbaa !30
  %.sroa.05.0.copyload = load double, ptr %11, align 16
  %.sroa.2.0.copyload = load double, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !30
  invoke void @_ZN3JPH8RRayCastCI2NS_8RayCastTINS_4Vec3ENS_5Mat44ES0_EEES2_S2_(ptr noundef nonnull align 16 dereferenceable(32) %12, double %.sroa.06.0.copyload, double %.sroa.27.0.copyload, double %.sroa.05.0.copyload, double %.sroa.2.0.copyload)
          to label %85 unwind label %129

85:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %13) #8
  invoke void @_ZN3JPH13RayCastResultC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %13)
          to label %86 unwind label %131

86:                                               ; preds = %85
  %87 = load ptr, ptr %57, align 8, !tbaa !31
  %88 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %87)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #8
  call void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9) %14, i8 %.sroa.04.0.copyload)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #8
  call void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10) %15, i16 noundef zeroext 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  store i64 0, ptr %16, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  %89 = invoke noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16) %88, ptr noundef nonnull align 16 dereferenceable(32) %12, ptr noundef nonnull align 4 dereferenceable(12) %13, ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %90 unwind label %133

90:                                               ; preds = %86
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %15) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %14) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #8
  br i1 %89, label %91, label %141

91:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #8
  %92 = load float, ptr %58, align 4, !tbaa !37
  %93 = invoke { double, double } @_ZNK3JPH8RayCastTINS_4Vec3ENS_5Mat44ENS_8RRayCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(32) %12, float noundef %92)
          to label %94 unwind label %135

94:                                               ; preds = %91
  %95 = extractvalue { double, double } %93, 0
  store double %95, ptr %17, align 16
  %96 = extractvalue { double, double } %93, 1
  store double %96, ptr %59, align 8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %18, float noundef 0.000000e+00, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %97 unwind label %135

97:                                               ; preds = %94
  %98 = load double, ptr %18, align 16
  %99 = load double, ptr %60, align 8
  %100 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %17, double %98, double %99)
          to label %101 unwind label %135

101:                                              ; preds = %97
  %102 = extractvalue { double, double } %100, 0
  %103 = extractvalue { double, double } %100, 1
  store double %102, ptr %6, align 16
  store double %103, ptr %.sroa.53.0..sroa_idx, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  %104 = invoke { double, double } @_ZN3JPH4Quat7sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %105 unwind label %137

105:                                              ; preds = %101
  %106 = extractvalue { double, double } %104, 0
  %107 = extractvalue { double, double } %104, 1
  store double %106, ptr %61, align 16
  store double %107, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !30
  %108 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %109 unwind label %131

109:                                              ; preds = %105
  store float %108, ptr %62, align 16, !tbaa !40
  %110 = load ptr, ptr %57, align 8, !tbaa !31
  %111 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %110)
  %112 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %111, ptr noundef nonnull align 16 dereferenceable(256) %6)
          to label %113 unwind label %139

113:                                              ; preds = %109
  %114 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %115 unwind label %139

115:                                              ; preds = %113
  %116 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %117 unwind label %139

117:                                              ; preds = %115
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %19, float noundef %114, float noundef -1.000000e+02, float noundef %116)
          to label %118 unwind label %139

118:                                              ; preds = %117
  %119 = load double, ptr %19, align 16
  %120 = load double, ptr %63, align 8
  invoke void @_ZN3JPH4Body17SetLinearVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %112, double %119, double %120)
          to label %121 unwind label %139

121:                                              ; preds = %118
  %122 = load ptr, ptr %57, align 8, !tbaa !31
  %123 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %122)
  %124 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %112)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %123, ptr noundef nonnull align 4 dereferenceable(4) %124, i32 noundef 0)
          to label %141 unwind label %139

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

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

129:                                              ; preds = %84
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %144

131:                                              ; preds = %105, %85
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %143

133:                                              ; preds = %86
  %134 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %15) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %14) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #8
  br label %143

135:                                              ; preds = %97, %94, %91
  %136 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  br label %143

137:                                              ; preds = %101
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %143

139:                                              ; preds = %121, %118, %117, %115, %113, %109
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %143

141:                                              ; preds = %121, %90
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  %142 = add nsw i32 %.03345, 1
  %exitcond.not = icmp eq i32 %142, 25
  br i1 %exitcond.not, label %78, label %80, !llvm.loop !41

143:                                              ; preds = %139, %137, %135, %133, %131
  %.pn = phi { ptr, i32 } [ %140, %139 ], [ %132, %131 ], [ %138, %137 ], [ %136, %135 ], [ %134, %133 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %13) #8
  br label %144

144:                                              ; preds = %143, %129
  %.pn.pn = phi { ptr, i32 } [ %.pn, %143 ], [ %130, %129 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  br label %145

145:                                              ; preds = %144, %127
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %144 ], [ %128, %127 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #8
  br label %146

146:                                              ; preds = %145, %125
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %145 ], [ %126, %125 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  br label %147

147:                                              ; preds = %146, %76
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %146 ], [ %77, %76 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br label %148

148:                                              ; preds = %147, %74
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %147 ], [ %75, %74 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %149

149:                                              ; preds = %148, %72
  %.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn, %148 ], [ %73, %72 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %6) #8
  br label %150

150:                                              ; preds = %149, %70
  %.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn, %149 ], [ %71, %70 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %6) #8
  br label %151

151:                                              ; preds = %150, %68
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn, %150 ], [ %69, %68 ]
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #8
  br label %152

152:                                              ; preds = %151, %66
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn, %151 ], [ %67, %66 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #8
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #8
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef) local_unnamed_addr #7

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH13RayCastResultC2Ev(ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172)) local_unnamed_addr #7 align 2

declare noundef zeroext i1 @_ZNK3JPH16NarrowPhaseQuery7CastRayERKNS_8RRayCastERNS_13RayCastResultERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9), i8) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10), i16 noundef zeroext) unnamed_addr #7 align 2

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { 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 #7 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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, !21, i64 103}
!6 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !7, i64 0, !10, i64 16, !7, i64 32, !7, i64 48, !12, i64 64, !13, i64 72, !14, i64 80, !18, i64 96, !19, i64 97, !20, i64 98, !20, i64 99, !20, i64 100, !20, i64 101, !20, i64 102, !21, i64 103, !20, i64 104, !20, i64 105, !22, i64 108, !22, i64 112, !22, i64 116, !22, i64 120, !22, i64 124, !22, i64 128, !22, i64 132, !17, i64 136, !17, i64 140, !23, i64 144, !22, i64 148, !24, i64 160, !26, i64 240, !27, i64 248}
!7 = !{!"_ZTSN3JPH4Vec3E", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN3JPH4QuatE", !11, i64 0}
!11 = !{!"_ZTSN3JPH4Vec4E", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!"short", !8, i64 0}
!14 = !{!"_ZTSN3JPH14CollisionGroupE", !15, i64 0, !17, i64 8, !17, i64 12}
!15 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !16, i64 0}
!16 = !{!"any pointer", !8, i64 0}
!17 = !{!"int", !8, i64 0}
!18 = !{!"_ZTSN3JPH11EMotionTypeE", !8, i64 0}
!19 = !{!"_ZTSN3JPH12EAllowedDOFsE", !8, i64 0}
!20 = !{!"bool", !8, i64 0}
!21 = !{!"_ZTSN3JPH14EMotionQualityE", !8, i64 0}
!22 = !{!"float", !8, i64 0}
!23 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !8, i64 0}
!24 = !{!"_ZTSN3JPH14MassPropertiesE", !22, i64 0, !25, i64 16}
!25 = !{!"_ZTSN3JPH5Mat44E", !8, i64 0}
!26 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !16, i64 0}
!27 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !16, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!8, !8, i64 0}
!31 = !{!32, !16, i64 16}
!32 = !{!"_ZTS4Test", !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !20, i64 48, !33, i64 56}
!33 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !34, i64 0}
!34 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !12, i64 8, !35, i64 16, !12, i64 24, !36, i64 32, !16, i64 48}
!35 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !16, i64 0}
!36 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !22, i64 0, !12, i64 8}
!37 = !{!38, !22, i64 4}
!38 = !{!"_ZTSN3JPH20BroadPhaseCastResultE", !39, i64 0, !22, i64 4}
!39 = !{!"_ZTSN3JPH6BodyIDE", !17, i64 0}
!40 = !{!6, !22, i64 112}
!41 = distinct !{!41, !29}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass