; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Shapes (DeformedHeightFieldShapeTest)

; 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::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::HeightFieldShapeSettings" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::Vec3", %"class.JPH::Vec3", i32, float, float, i32, i32, i32, %"class.JPH::Array", %"class.JPH::Array.9", %"class.JPH::Array.12", float, [12 x i8] }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.4, i8, [7 x i8] }>
%union.anon.4 = 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.8 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.8 = type { i64, [8 x i8] }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Array.9" = type { i64, i64, ptr }
%"class.JPH::Array.12" = type { i64, i64, ptr }
%"class.JPH::BodyID" = type { i32 }
%"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.16", %"class.JPH::RefConst.17" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.15 }
%union.anon.15 = 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.16" = type { ptr }
%"class.JPH::RefConst.17" = type { ptr }
%"struct.JPH::RShapeCast" = type { %"struct.JPH::ShapeCastT" }
%"struct.JPH::ShapeCastT" = type { ptr, %"class.JPH::Vec3", %"class.JPH::Mat44", %"class.JPH::Vec3", %"class.JPH::AABox" }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::ClosestHitCollisionCollector" = type <{ %"class.JPH::CollisionCollector", [8 x i8], %"class.JPH::ShapeCastResult", i8, [15 x i8] }>
%"class.JPH::CollisionCollector" = type { ptr, float, ptr }
%"class.JPH::ShapeCastResult" = type <{ %"class.JPH::CollideShapeResult", float, i8, [11 x i8] }>
%"class.JPH::CollideShapeResult" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::SubShapeID", %"class.JPH::SubShapeID", %"class.JPH::BodyID", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20" }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::StaticArray.20" = type { i32, [12 x i8], [32 x %"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage" = type { [16 x i8] }
%"class.JPH::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::BodyFilter" = type { ptr }
%"class.JPH::ShapeFilter" = type <{ ptr, %"class.JPH::BodyID", [4 x i8] }>
%class.DeformedHeightFieldShapeTest = type { %class.Test, %"class.JPH::Array", %"class.JPH::Ref", %"class.JPH::BodyID", float }
%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 }
%"class.JPH::Ref" = type { ptr }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN28DeformedHeightFieldShapeTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(152) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca float, align 4
  %4 = alloca float, align 4
  %5 = alloca float, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::HeightFieldShapeSettings", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Array.12", align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca %"class.JPH::Result", align 8
  %18 = alloca %"class.JPH::BodyID", align 4
  %19 = alloca %"class.JPH::BodyCreationSettings", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Quat", align 16
  %22 = alloca %"class.JPH::RefConst.17", align 8
  %23 = alloca float, align 4
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"struct.JPH::RShapeCast", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Mat44", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::ClosestHitCollisionCollector", align 16
  %34 = alloca %"class.JPH::ShapeCastSettings", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %37 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %38 = alloca %"class.JPH::BodyFilter", align 8
  %39 = alloca %"class.JPH::ShapeFilter", align 8
  %40 = alloca %"class.JPH::BodyCreationSettings", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Quat", align 16
  %43 = alloca %"class.JPH::BodyID", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %44 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #11
  store float 1.000000e+00, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #11
  store float 2.500000e+00, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #11
  store float 2.000000e+00, ptr %5, align 4, !tbaa !9
  %45 = getelementptr inbounds %class.DeformedHeightFieldShapeTest, ptr %44, i32 0, i32 1
  call void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %45, i64 noundef 16384)
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #11
  store i32 0, ptr %6, align 4, !tbaa !11
  br label %46

46:                                               ; preds = %77, %1
  %47 = load i32, ptr %6, align 4, !tbaa !11
  %48 = icmp slt i32 %47, 128
  br i1 %48, label %50, label %49

49:                                               ; preds = %46
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #11
  br label %80

50:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  store i32 0, ptr %8, align 4, !tbaa !11
  br label %51

51:                                               ; preds = %73, %50
  %52 = load i32, ptr %8, align 4, !tbaa !11
  %53 = icmp slt i32 %52, 128
  br i1 %53, label %55, label %54

54:                                               ; preds = %51
  store i32 5, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  br label %76

55:                                               ; preds = %51
  %56 = load i32, ptr %8, align 4, !tbaa !11
  %57 = sitofp i32 %56 to float
  %58 = fmul float %57, 8.000000e+00
  %59 = fdiv float %58, 1.280000e+02
  %60 = load i32, ptr %6, align 4, !tbaa !11
  %61 = sitofp i32 %60 to float
  %62 = fmul float %61, 8.000000e+00
  %63 = fdiv float %62, 1.280000e+02
  %64 = call noundef float @_Z12PerlinNoise3fffiii(float noundef %59, float noundef 0.000000e+00, float noundef %63, i32 noundef 256, i32 noundef 256, i32 noundef 256)
  %65 = fmul float 2.500000e+00, %64
  %66 = getelementptr inbounds %class.DeformedHeightFieldShapeTest, ptr %44, i32 0, i32 1
  %67 = load i32, ptr %6, align 4, !tbaa !11
  %68 = mul nsw i32 %67, 128
  %69 = load i32, ptr %8, align 4, !tbaa !11
  %70 = add nsw i32 %68, %69
  %71 = sext i32 %70 to i64
  %72 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %66, i64 noundef %71)
  store float %65, ptr %72, align 4, !tbaa !9
  br label %73

73:                                               ; preds = %55
  %74 = load i32, ptr %8, align 4, !tbaa !11
  %75 = add nsw i32 %74, 1
  store i32 %75, ptr %8, align 4, !tbaa !11
  br label %51, !llvm.loop !13

76:                                               ; preds = %54
  br label %77

77:                                               ; preds = %76
  %78 = load i32, ptr %6, align 4, !tbaa !11
  %79 = add nsw i32 %78, 1
  store i32 %79, ptr %6, align 4, !tbaa !11
  br label %46, !llvm.loop !15

80:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef -6.400000e+01, float noundef 0.000000e+00, float noundef -6.400000e+01)
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 208, ptr %11) #11
  %81 = getelementptr inbounds %class.DeformedHeightFieldShapeTest, ptr %44, i32 0, i32 1
  %82 = call noundef ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %81)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %12, ptr align 16 %9, i64 16, i1 false), !tbaa.struct !16
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %13, ptr align 16 %10, i64 16, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #11
  call void @llvm.memset.p0.i64(ptr align 8 %14, i8 0, i64 24, i1 false)
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  %83 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %84 = load double, ptr %83, align 16
  %85 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %86 = load double, ptr %85, align 8
  %87 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %88 = load double, ptr %87, align 16
  %89 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %90 = load double, ptr %89, align 8
  invoke void @_ZN3JPH24HeightFieldShapeSettingsC1EPKfNS_4Vec3ES3_jPKhRKNS_5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS9_EEEE(ptr noundef nonnull align 16 dereferenceable(208) %11, ptr noundef %82, double %84, double %86, double %88, double %90, i32 noundef 128, ptr noundef null, ptr noundef nonnull align 8 dereferenceable(24) %14)
          to label %91 unwind label %146

91:                                               ; preds = %80
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #11
  %92 = getelementptr inbounds %"class.JPH::HeightFieldShapeSettings", ptr %11, i32 0, i32 7
  store i32 4, ptr %92, align 16, !tbaa !18
  %93 = getelementptr inbounds %"class.JPH::HeightFieldShapeSettings", ptr %11, i32 0, i32 8
  store i32 8, ptr %93, align 4, !tbaa !32
  %94 = getelementptr inbounds %"class.JPH::HeightFieldShapeSettings", ptr %11, i32 0, i32 4
  store float -1.500000e+01, ptr %94, align 4, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 40, ptr %17) #11
  invoke void @_ZNK3JPH24HeightFieldShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %17, ptr noundef nonnull align 16 dereferenceable(208) %11)
          to label %95 unwind label %150

95:                                               ; preds = %91
  %96 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %17)
          to label %97 unwind label %154

97:                                               ; preds = %95
  %98 = invoke noundef ptr @_ZN3JPH10StaticCastINS_16HeightFieldShapeENS_5ShapeETnNSt9enable_ifIXoosr3stdE12is_base_of_vIT_T0_Esr3stdE12is_base_of_vIS5_S4_EEbE4typeELb1EEEPS4_RKNS_3RefIS5_EE(ptr noundef nonnull align 8 dereferenceable(8) %96)
          to label %99 unwind label %154

99:                                               ; preds = %97
  %100 = getelementptr inbounds %class.DeformedHeightFieldShapeTest, ptr %44, i32 0, i32 2
  %101 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_16HeightFieldShapeEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %100, ptr noundef %98)
          to label %102 unwind label %154

102:                                              ; preds = %99
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %17) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #11
  %103 = getelementptr inbounds %class.Test, ptr %44, i32 0, i32 3
  %104 = load ptr, ptr %103, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 256, ptr %19) #11
  %105 = getelementptr inbounds %class.DeformedHeightFieldShapeTest, ptr %44, i32 0, i32 2
  %106 = invoke noundef ptr @_ZNK3JPH3RefINS_16HeightFieldShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %105)
          to label %107 unwind label %159

107:                                              ; preds = %102
  %108 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %109 unwind label %159

109:                                              ; preds = %107
  %110 = getelementptr inbounds %"class.JPH::Vec3", ptr %20, i32 0, i32 0
  %111 = getelementptr inbounds %union.anon, ptr %110, i32 0, i32 0
  %112 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 0
  %113 = extractvalue { double, double } %108, 0
  store double %113, ptr %112, align 16
  %114 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 1
  %115 = extractvalue { double, double } %108, 1
  store double %115, ptr %114, align 8
  %116 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %117 unwind label %159

117:                                              ; preds = %109
  %118 = getelementptr inbounds %"class.JPH::Quat", ptr %21, i32 0, i32 0
  %119 = getelementptr inbounds %"class.JPH::Vec4", ptr %118, i32 0, i32 0
  %120 = getelementptr inbounds %union.anon.15, ptr %119, i32 0, i32 0
  %121 = getelementptr inbounds { double, double }, ptr %120, i32 0, i32 0
  %122 = extractvalue { double, double } %116, 0
  store double %122, ptr %121, align 16
  %123 = getelementptr inbounds { double, double }, ptr %120, i32 0, i32 1
  %124 = extractvalue { double, double } %116, 1
  store double %124, ptr %123, align 8
  %125 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %126 = load double, ptr %125, align 16
  %127 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %128 = load double, ptr %127, align 8
  %129 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %130 = load double, ptr %129, align 16
  %131 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %132 = load double, ptr %131, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %19, ptr noundef %106, double %126, double %128, double %130, double %132, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %133 unwind label %159

133:                                              ; preds = %117
  %134 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %104, ptr noundef nonnull align 16 dereferenceable(256) %19, i32 noundef 1)
          to label %135 unwind label %163

135:                                              ; preds = %133
  %136 = getelementptr inbounds %"class.JPH::BodyID", ptr %18, i32 0, i32 0
  store i32 %134, ptr %136, align 4
  %137 = getelementptr inbounds %class.DeformedHeightFieldShapeTest, ptr %44, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %137, ptr align 4 %18, i64 4, i1 false), !tbaa.struct !41
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  %138 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %139 unwind label %168

139:                                              ; preds = %135
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %138, float noundef 2.000000e+00, ptr noundef null)
          to label %140 unwind label %172

140:                                              ; preds = %139
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef %138)
          to label %141 unwind label %168

141:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #11
  store float 0x3FC99999A0000000, ptr %23, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %358, %141
  %143 = load float, ptr %23, align 4, !tbaa !9
  %144 = fcmp olt float %143, 0x4028CCCCC0000000
  br i1 %144, label %176, label %145

145:                                              ; preds = %142
  store i32 8, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #11
  br label %365

146:                                              ; preds = %80
  %147 = landingpad { ptr, i32 }
          cleanup
  %148 = extractvalue { ptr, i32 } %147, 0
  store ptr %148, ptr %15, align 8
  %149 = extractvalue { ptr, i32 } %147, 1
  store i32 %149, ptr %16, align 4
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #11
  br label %368

150:                                              ; preds = %91
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %15, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %16, align 4
  br label %158

154:                                              ; preds = %99, %97, %95
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %15, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %16, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %17) #11
  br label %158

158:                                              ; preds = %154, %150
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #11
  br label %367

159:                                              ; preds = %117, %109, %107, %102
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %15, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %16, align 4
  br label %167

163:                                              ; preds = %133
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %15, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %16, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #11
  br label %167

167:                                              ; preds = %163, %159
  call void @llvm.lifetime.end.p0(i64 256, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  br label %367

168:                                              ; preds = %140, %135
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %15, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %16, align 4
  br label %366

172:                                              ; preds = %139
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %15, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %16, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %138) #11
  br label %366

176:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #11
  %177 = load float, ptr %23, align 4, !tbaa !9
  %178 = invoke { double, double } @_ZNK28DeformedHeightFieldShapeTest13GetPathCenterEf(ptr noundef nonnull align 8 dereferenceable(152) %44, float noundef %177)
          to label %179 unwind label %314

179:                                              ; preds = %176
  %180 = getelementptr inbounds %"class.JPH::Vec3", ptr %25, i32 0, i32 0
  %181 = getelementptr inbounds %union.anon, ptr %180, i32 0, i32 0
  %182 = getelementptr inbounds { double, double }, ptr %181, i32 0, i32 0
  %183 = extractvalue { double, double } %178, 0
  store double %183, ptr %182, align 16
  %184 = getelementptr inbounds { double, double }, ptr %181, i32 0, i32 1
  %185 = extractvalue { double, double } %178, 1
  store double %185, ptr %184, align 8
  %186 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %187 = load double, ptr %186, align 16
  %188 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %189 = load double, ptr %188, align 8
  %190 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %9, double %187, double %189)
          to label %191 unwind label %314

191:                                              ; preds = %179
  %192 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i32 0, i32 0
  %193 = getelementptr inbounds %union.anon, ptr %192, i32 0, i32 0
  %194 = getelementptr inbounds { double, double }, ptr %193, i32 0, i32 0
  %195 = extractvalue { double, double } %190, 0
  store double %195, ptr %194, align 16
  %196 = getelementptr inbounds { double, double }, ptr %193, i32 0, i32 1
  %197 = extractvalue { double, double } %190, 1
  store double %197, ptr %196, align 8
  call void @llvm.lifetime.start.p0(i64 144, ptr %26) #11
  %198 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %199 unwind label %318

199:                                              ; preds = %191
  %200 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %201 unwind label %318

201:                                              ; preds = %199
  %202 = getelementptr inbounds %"class.JPH::Vec3", ptr %27, i32 0, i32 0
  %203 = getelementptr inbounds %union.anon, ptr %202, i32 0, i32 0
  %204 = getelementptr inbounds { double, double }, ptr %203, i32 0, i32 0
  %205 = extractvalue { double, double } %200, 0
  store double %205, ptr %204, align 16
  %206 = getelementptr inbounds { double, double }, ptr %203, i32 0, i32 1
  %207 = extractvalue { double, double } %200, 1
  store double %207, ptr %206, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %28) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %30, float noundef 0.000000e+00, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %208 unwind label %322

208:                                              ; preds = %201
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %24, i64 16, i1 false), !tbaa.struct !16
  %209 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %210 = load double, ptr %209, align 16
  %211 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %212 = load double, ptr %211, align 8
  %213 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %210, double %212)
          to label %214 unwind label %322

214:                                              ; preds = %208
  %215 = getelementptr inbounds %"class.JPH::Vec3", ptr %29, i32 0, i32 0
  %216 = getelementptr inbounds %union.anon, ptr %215, i32 0, i32 0
  %217 = getelementptr inbounds { double, double }, ptr %216, i32 0, i32 0
  %218 = extractvalue { double, double } %213, 0
  store double %218, ptr %217, align 16
  %219 = getelementptr inbounds { double, double }, ptr %216, i32 0, i32 1
  %220 = extractvalue { double, double } %213, 1
  store double %220, ptr %219, align 8
  %221 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %222 = load double, ptr %221, align 16
  %223 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %224 = load double, ptr %223, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %28, double %222, double %224)
          to label %225 unwind label %322

225:                                              ; preds = %214
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef 0.000000e+00, float noundef -2.000000e+01, float noundef 0.000000e+00)
          to label %226 unwind label %322

226:                                              ; preds = %225
  %227 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %228 = load double, ptr %227, align 16
  %229 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %230 = load double, ptr %229, align 8
  %231 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %232 = load double, ptr %231, align 16
  %233 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %234 = load double, ptr %233, align 8
  invoke void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144) %26, ptr noundef %198, double %228, double %230, ptr noundef nonnull align 16 dereferenceable(64) %28, double %232, double %234)
          to label %235 unwind label %322

235:                                              ; preds = %226
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %28) #11
  call void @llvm.lifetime.start.p0(i64 1184, ptr %33) #11
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %33)
          to label %236 unwind label %326

236:                                              ; preds = %235
  %237 = getelementptr inbounds %class.Test, ptr %44, i32 0, i32 2
  %238 = load ptr, ptr %237, align 8, !tbaa !42
  %239 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %238)
          to label %240 unwind label %330

240:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 48, ptr %34) #11
  %241 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %34, i32 0, i32 0
  store i8 0, ptr %241, align 16, !tbaa !43
  %242 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %34, i32 0, i32 1
  store i8 1, ptr %242, align 1, !tbaa !47
  %243 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %34, i32 0, i32 2
  store float 0x3F1A36E2E0000000, ptr %243, align 4, !tbaa !48
  %244 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %34, i32 0, i32 3
  store float 0x3F1A36E2E0000000, ptr %244, align 8, !tbaa !49
  %245 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %34, i32 0, i32 4
  %246 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %247 unwind label %334

247:                                              ; preds = %240
  %248 = getelementptr inbounds %"class.JPH::Vec3", ptr %245, i32 0, i32 0
  %249 = getelementptr inbounds %union.anon, ptr %248, i32 0, i32 0
  %250 = getelementptr inbounds { double, double }, ptr %249, i32 0, i32 0
  %251 = extractvalue { double, double } %246, 0
  store double %251, ptr %250, align 16
  %252 = getelementptr inbounds { double, double }, ptr %249, i32 0, i32 1
  %253 = extractvalue { double, double } %246, 1
  store double %253, ptr %252, align 8
  %254 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %34, i32 0, i32 1
  store i8 0, ptr %254, align 16, !tbaa !50
  %255 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %34, i32 0, i32 2
  store i8 0, ptr %255, align 1, !tbaa !53
  %256 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %34, i32 0, i32 3
  store i8 0, ptr %256, align 2, !tbaa !54
  %257 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %34, i32 0, i32 4
  store i8 0, ptr %257, align 1, !tbaa !55
  %258 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %259 unwind label %334

259:                                              ; preds = %247
  %260 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %261 = getelementptr inbounds %union.anon, ptr %260, i32 0, i32 0
  %262 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 0
  %263 = extractvalue { double, double } %258, 0
  store double %263, ptr %262, align 16
  %264 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 1
  %265 = extractvalue { double, double } %258, 1
  store double %265, ptr %264, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #11
  call void @llvm.memset.p0.i64(ptr align 8 %36, i8 0, i64 8, i1 false)
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #11
  call void @llvm.memset.p0.i64(ptr align 8 %37, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #11
  call void @llvm.memset.p0.i64(ptr align 8 %38, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #11
  call void @llvm.memset.p0.i64(ptr align 8 %39, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %39)
          to label %266 unwind label %338

266:                                              ; preds = %259
  %267 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %268 = load double, ptr %267, align 16
  %269 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %270 = load double, ptr %269, align 8
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %239, ptr noundef nonnull align 16 dereferenceable(144) %26, ptr noundef nonnull align 16 dereferenceable(36) %34, double %268, double %270, ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38, ptr noundef nonnull align 8 dereferenceable(12) %39)
          to label %271 unwind label %342

271:                                              ; preds = %266
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %39) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #11
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %34) #11
  %272 = getelementptr inbounds %"class.JPH::ClosestHitCollisionCollector", ptr %33, i32 0, i32 2
  %273 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %272, i32 0, i32 6
  %274 = getelementptr inbounds %class.DeformedHeightFieldShapeTest, ptr %44, i32 0, i32 3
  %275 = invoke noundef zeroext i1 @_ZNK3JPH6BodyIDeqERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %273, ptr noundef nonnull align 4 dereferenceable(4) %274)
          to label %276 unwind label %330

276:                                              ; preds = %271
  br i1 %275, label %277, label %357

277:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 256, ptr %40) #11
  %278 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %279 unwind label %348

279:                                              ; preds = %277
  %280 = getelementptr inbounds %"class.JPH::ClosestHitCollisionCollector", ptr %33, i32 0, i32 2
  %281 = getelementptr inbounds %"class.JPH::ShapeCastResult", ptr %280, i32 0, i32 1
  %282 = load float, ptr %281, align 16, !tbaa !56
  %283 = invoke { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144) %26, float noundef %282)
          to label %284 unwind label %348

284:                                              ; preds = %279
  %285 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %286 = getelementptr inbounds %union.anon, ptr %285, i32 0, i32 0
  %287 = getelementptr inbounds { double, double }, ptr %286, i32 0, i32 0
  %288 = extractvalue { double, double } %283, 0
  store double %288, ptr %287, align 16
  %289 = getelementptr inbounds { double, double }, ptr %286, i32 0, i32 1
  %290 = extractvalue { double, double } %283, 1
  store double %290, ptr %289, align 8
  %291 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %292 unwind label %348

292:                                              ; preds = %284
  %293 = getelementptr inbounds %"class.JPH::Quat", ptr %42, i32 0, i32 0
  %294 = getelementptr inbounds %"class.JPH::Vec4", ptr %293, i32 0, i32 0
  %295 = getelementptr inbounds %union.anon.15, ptr %294, i32 0, i32 0
  %296 = getelementptr inbounds { double, double }, ptr %295, i32 0, i32 0
  %297 = extractvalue { double, double } %291, 0
  store double %297, ptr %296, align 16
  %298 = getelementptr inbounds { double, double }, ptr %295, i32 0, i32 1
  %299 = extractvalue { double, double } %291, 1
  store double %299, ptr %298, align 8
  %300 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %301 = load double, ptr %300, align 16
  %302 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %303 = load double, ptr %302, align 8
  %304 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %305 = load double, ptr %304, align 16
  %306 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %307 = load double, ptr %306, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %40, ptr noundef %278, double %301, double %303, double %305, double %307, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %308 unwind label %348

308:                                              ; preds = %292
  %309 = getelementptr inbounds %class.Test, ptr %44, i32 0, i32 3
  %310 = load ptr, ptr %309, align 8, !tbaa !34
  %311 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %310, ptr noundef nonnull align 16 dereferenceable(256) %40, i32 noundef 1)
          to label %312 unwind label %352

312:                                              ; preds = %308
  %313 = getelementptr inbounds %"class.JPH::BodyID", ptr %43, i32 0, i32 0
  store i32 %311, ptr %313, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %40) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %40) #11
  br label %357

314:                                              ; preds = %179, %176
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %15, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %16, align 4
  br label %364

318:                                              ; preds = %199, %191
  %319 = landingpad { ptr, i32 }
          cleanup
  %320 = extractvalue { ptr, i32 } %319, 0
  store ptr %320, ptr %15, align 8
  %321 = extractvalue { ptr, i32 } %319, 1
  store i32 %321, ptr %16, align 4
  br label %363

322:                                              ; preds = %226, %225, %214, %208, %201
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %15, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %28) #11
  br label %363

326:                                              ; preds = %235
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %15, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %16, align 4
  br label %362

330:                                              ; preds = %271, %236
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %15, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %16, align 4
  br label %361

334:                                              ; preds = %247, %240
  %335 = landingpad { ptr, i32 }
          cleanup
  %336 = extractvalue { ptr, i32 } %335, 0
  store ptr %336, ptr %15, align 8
  %337 = extractvalue { ptr, i32 } %335, 1
  store i32 %337, ptr %16, align 4
  br label %347

338:                                              ; preds = %259
  %339 = landingpad { ptr, i32 }
          cleanup
  %340 = extractvalue { ptr, i32 } %339, 0
  store ptr %340, ptr %15, align 8
  %341 = extractvalue { ptr, i32 } %339, 1
  store i32 %341, ptr %16, align 4
  br label %346

342:                                              ; preds = %266
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %15, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %16, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %39) #11
  br label %346

346:                                              ; preds = %342, %338
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #11
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  br label %347

347:                                              ; preds = %346, %334
  call void @llvm.lifetime.end.p0(i64 48, ptr %34) #11
  br label %361

348:                                              ; preds = %292, %284, %279, %277
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %15, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %16, align 4
  br label %356

352:                                              ; preds = %308
  %353 = landingpad { ptr, i32 }
          cleanup
  %354 = extractvalue { ptr, i32 } %353, 0
  store ptr %354, ptr %15, align 8
  %355 = extractvalue { ptr, i32 } %353, 1
  store i32 %355, ptr %16, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %40) #11
  br label %356

356:                                              ; preds = %352, %348
  call void @llvm.lifetime.end.p0(i64 256, ptr %40) #11
  br label %361

357:                                              ; preds = %312, %276
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %33) #11
  call void @llvm.lifetime.end.p0(i64 1184, ptr %33) #11
  call void @llvm.lifetime.end.p0(i64 144, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #11
  br label %358

358:                                              ; preds = %357
  %359 = load float, ptr %23, align 4, !tbaa !9
  %360 = fadd float %359, 0x3FB99999A0000000
  store float %360, ptr %23, align 4, !tbaa !9
  br label %142, !llvm.loop !64

361:                                              ; preds = %356, %347, %330
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %33) #11
  br label %362

362:                                              ; preds = %361, %326
  call void @llvm.lifetime.end.p0(i64 1184, ptr %33) #11
  br label %363

363:                                              ; preds = %362, %322, %318
  call void @llvm.lifetime.end.p0(i64 144, ptr %26) #11
  br label %364

364:                                              ; preds = %363, %314
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  br label %366

365:                                              ; preds = %145
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @_ZN3JPH24HeightFieldShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %11) #11
  call void @llvm.lifetime.end.p0(i64 208, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #11
  ret void

366:                                              ; preds = %364, %172, %168
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  br label %367

367:                                              ; preds = %366, %167, %158
  call void @_ZN3JPH24HeightFieldShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %11) #11
  br label %368

368:                                              ; preds = %367, %146
  call void @llvm.lifetime.end.p0(i64 208, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #11
  br label %369

369:                                              ; preds = %368
  %370 = load ptr, ptr %15, align 8
  %371 = load i32, ptr %16, align 4
  %372 = insertvalue { ptr, i32 } poison, ptr %370, 0
  %373 = insertvalue { ptr, i32 } %372, i32 %371, 1
  resume { ptr, i32 } %373
}

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

declare noundef float @_Z12PerlinNoise3fffiii(float noundef, float noundef, float noundef, i32 noundef, i32 noundef, i32 noundef) #3

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

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

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

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

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

declare void @_ZN3JPH24HeightFieldShapeSettingsC1EPKfNS_4Vec3ES3_jPKhRKNS_5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS9_EEEE(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef, double, double, double, double, i32 noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3

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

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

declare void @_ZNK3JPH24HeightFieldShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 16 dereferenceable(208)) unnamed_addr #3

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) 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 #5 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK28DeformedHeightFieldShapeTest13GetPathCenterEf(ptr noundef nonnull align 8 dereferenceable(152), float noundef) #1 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169)) unnamed_addr #2 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)) #8 align 2

declare void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #3

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH6BodyIDeqERKS0_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #5 align 2

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = !{i64 0, i64 16, !17}
!17 = !{!7, !7, i64 0}
!18 = !{!19, !12, i64 112}
!19 = !{!"_ZTSN3JPH24HeightFieldShapeSettingsE", !20, i64 0, !28, i64 64, !28, i64 80, !12, i64 96, !10, i64 100, !10, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !29, i64 120, !30, i64 144, !31, i64 168, !10, i64 192}
!20 = !{!"_ZTSN3JPH13ShapeSettingsE", !21, i64 0, !22, i64 8, !25, i64 16, !26, i64 24}
!21 = !{!"_ZTSN3JPH18SerializableObjectE"}
!22 = !{!"_ZTSN3JPH9RefTargetINS_13ShapeSettingsEEE", !23, i64 0}
!23 = !{!"_ZTSSt6atomicIjE", !24, i64 0}
!24 = !{!"_ZTSSt13__atomic_baseIjE", !12, i64 0}
!25 = !{!"long", !7, i64 0}
!26 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEEE", !7, i64 0, !27, i64 32}
!27 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEE6EStateE", !7, i64 0}
!28 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!29 = !{!"_ZTSN3JPH5ArrayIfNS_12STLAllocatorIfEEEE", !25, i64 0, !25, i64 8, !6, i64 16}
!30 = !{!"_ZTSN3JPH5ArrayIhNS_12STLAllocatorIhEEEE", !25, i64 0, !25, i64 8, !6, i64 16}
!31 = !{!"_ZTSN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEE", !25, i64 0, !25, i64 8, !6, i64 16}
!32 = !{!19, !12, i64 116}
!33 = !{!19, !10, i64 100}
!34 = !{!35, !6, i64 24}
!35 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !36, i64 48, !37, i64 56}
!36 = !{!"bool", !7, i64 0}
!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, !25, i64 8, !39, i64 16, !25, i64 24, !40, i64 32, !6, i64 48}
!39 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!40 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !10, i64 0, !25, i64 8}
!41 = !{i64 0, i64 4, !11}
!42 = !{!35, !6, i64 16}
!43 = !{!44, !45, i64 0}
!44 = !{!"_ZTSN3JPH19CollideSettingsBaseE", !45, i64 0, !46, i64 1, !10, i64 4, !10, i64 8, !28, i64 16}
!45 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !7, i64 0}
!46 = !{!"_ZTSN3JPH17ECollectFacesModeE", !7, i64 0}
!47 = !{!44, !46, i64 1}
!48 = !{!44, !10, i64 4}
!49 = !{!44, !10, i64 8}
!50 = !{!51, !52, i64 32}
!51 = !{!"_ZTSN3JPH17ShapeCastSettingsE", !44, i64 0, !52, i64 32, !52, i64 33, !36, i64 34, !36, i64 35}
!52 = !{!"_ZTSN3JPH13EBackFaceModeE", !7, i64 0}
!53 = !{!51, !52, i64 33}
!54 = !{!51, !36, i64 34}
!55 = !{!51, !36, i64 35}
!56 = !{!57, !10, i64 1152}
!57 = !{!"_ZTSN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEE", !58, i64 0, !59, i64 32, !36, i64 1168}
!58 = !{!"_ZTSN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEE", !10, i64 8, !6, i64 16}
!59 = !{!"_ZTSN3JPH15ShapeCastResultE", !60, i64 0, !10, i64 1120, !36, i64 1124}
!60 = !{!"_ZTSN3JPH18CollideShapeResultE", !28, i64 0, !28, i64 16, !28, i64 32, !10, i64 48, !61, i64 52, !61, i64 56, !62, i64 60, !63, i64 64, !63, i64 592}
!61 = !{!"_ZTSN3JPH10SubShapeIDE", !12, i64 0}
!62 = !{!"_ZTSN3JPH6BodyIDE", !12, i64 0}
!63 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj32EEE", !12, i64 0, !7, i64 16}
!64 = distinct !{!64, !14}


; 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::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::HeightFieldShapeSettings" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::Vec3", %"class.JPH::Vec3", i32, float, float, i32, i32, i32, %"class.JPH::Array", %"class.JPH::Array.9", %"class.JPH::Array.12", float, [12 x i8] }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.4, i8, [7 x i8] }>
%union.anon.4 = 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.8 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.8 = type { i64, [8 x i8] }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Array.9" = type { i64, i64, ptr }
%"class.JPH::Array.12" = type { i64, i64, 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.16", %"class.JPH::RefConst.17" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.15 }
%union.anon.15 = 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.16" = type { ptr }
%"class.JPH::RefConst.17" = type { ptr }
%"struct.JPH::RShapeCast" = type { %"struct.JPH::ShapeCastT" }
%"struct.JPH::ShapeCastT" = type { ptr, %"class.JPH::Vec3", %"class.JPH::Mat44", %"class.JPH::Vec3", %"class.JPH::AABox" }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::ClosestHitCollisionCollector" = type <{ %"class.JPH::CollisionCollector", [8 x i8], %"class.JPH::ShapeCastResult", i8, [15 x i8] }>
%"class.JPH::CollisionCollector" = type { ptr, float, ptr }
%"class.JPH::ShapeCastResult" = type <{ %"class.JPH::CollideShapeResult", float, i8, [11 x i8] }>
%"class.JPH::CollideShapeResult" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::SubShapeID", %"class.JPH::SubShapeID", %"class.JPH::BodyID", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20" }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::StaticArray.20" = type { i32, [12 x i8], [32 x %"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage" = type { [16 x i8] }
%"class.JPH::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::BodyFilter" = type { ptr }
%"class.JPH::ShapeFilter" = type <{ ptr, %"class.JPH::BodyID", [4 x i8] }>

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN28DeformedHeightFieldShapeTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(152) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::Vec3", align 16
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::HeightFieldShapeSettings", align 16
  %5 = alloca %"class.JPH::Array.12", align 8
  %6 = alloca %"class.JPH::Result", align 8
  %7 = alloca %"class.JPH::BodyCreationSettings", align 16
  %8 = alloca %"class.JPH::RefConst.17", align 8
  %9 = alloca %"struct.JPH::RShapeCast", align 16
  %10 = alloca %"class.JPH::Mat44", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::ClosestHitCollisionCollector", align 16
  %14 = alloca %"class.JPH::ShapeCastSettings", align 16
  %15 = alloca %"class.JPH::BroadPhaseLayerFilter", align 8
  %16 = alloca %"class.JPH::ObjectLayerFilter", align 8
  %17 = alloca %"class.JPH::BodyFilter", align 8
  %18 = alloca %"class.JPH::ShapeFilter", align 8
  %19 = alloca %"class.JPH::BodyCreationSettings", align 16
  %20 = getelementptr inbounds i8, ptr %0, i64 112
  tail call void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef 16384)
  br label %.preheader66

.preheader66:                                     ; preds = %1, %28
  %indvars.iv71 = phi i64 [ 0, %1 ], [ %indvars.iv.next72, %28 ]
  %21 = trunc nuw nsw i64 %indvars.iv71 to i32
  %22 = uitofp nneg i32 %21 to float
  %23 = fmul float %22, 8.000000e+00
  %24 = fmul float %23, 7.812500e-03
  %25 = shl nuw nsw i64 %indvars.iv71, 7
  br label %29

26:                                               ; preds = %28
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #10
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %2, float noundef -6.400000e+01, float noundef 0.000000e+00, float noundef -6.400000e+01)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #10
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %4) #10
  %27 = call noundef ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %20)
  %.sroa.025.0.copyload = load double, ptr %2, align 16
  %.sroa.226.0..sroa_idx = getelementptr inbounds i8, ptr %2, i64 8
  %.sroa.226.0.copyload = load double, ptr %.sroa.226.0..sroa_idx, align 8, !tbaa !5
  %.sroa.023.0.copyload = load double, ptr %3, align 16
  %.sroa.224.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 8
  %.sroa.224.0.copyload = load double, ptr %.sroa.224.0..sroa_idx, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %5, i8 0, i64 24, i1 false)
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  invoke void @_ZN3JPH24HeightFieldShapeSettingsC1EPKfNS_4Vec3ES3_jPKhRKNS_5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS9_EEEE(ptr noundef nonnull align 16 dereferenceable(208) %4, ptr noundef %27, double %.sroa.025.0.copyload, double %.sroa.226.0.copyload, double %.sroa.023.0.copyload, double %.sroa.224.0.copyload, i32 noundef 128, ptr noundef null, ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %38 unwind label %78

28:                                               ; preds = %29
  %indvars.iv.next72 = add nuw nsw i64 %indvars.iv71, 1
  %exitcond74.not = icmp eq i64 %indvars.iv.next72, 128
  br i1 %exitcond74.not, label %26, label %.preheader66, !llvm.loop !8

29:                                               ; preds = %.preheader66, %29
  %indvars.iv = phi i64 [ 0, %.preheader66 ], [ %indvars.iv.next, %29 ]
  %30 = trunc nuw nsw i64 %indvars.iv to i32
  %31 = uitofp nneg i32 %30 to float
  %32 = fmul float %31, 8.000000e+00
  %33 = fmul float %32, 7.812500e-03
  %34 = tail call noundef float @_Z12PerlinNoise3fffiii(float noundef %33, float noundef 0.000000e+00, float noundef %24, i32 noundef 256, i32 noundef 256, i32 noundef 256)
  %35 = fmul float %34, 2.500000e+00
  %36 = add nuw nsw i64 %indvars.iv, %25
  %37 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef %36)
  store float %35, ptr %37, align 4, !tbaa !10
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 128
  br i1 %exitcond.not, label %28, label %29, !llvm.loop !12

38:                                               ; preds = %26
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #10
  %39 = getelementptr inbounds i8, ptr %4, i64 112
  store i32 4, ptr %39, align 16, !tbaa !13
  %40 = getelementptr inbounds i8, ptr %4, i64 116
  store i32 8, ptr %40, align 4, !tbaa !29
  %41 = getelementptr inbounds i8, ptr %4, i64 100
  store float -1.500000e+01, ptr %41, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %6) #10
  invoke void @_ZNK3JPH24HeightFieldShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %6, ptr noundef nonnull align 16 dereferenceable(208) %4)
          to label %42 unwind label %80

42:                                               ; preds = %38
  %43 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %6)
          to label %44 unwind label %82

44:                                               ; preds = %42
  %45 = invoke noundef ptr @_ZN3JPH10StaticCastINS_16HeightFieldShapeENS_5ShapeETnNSt9enable_ifIXoosr3stdE12is_base_of_vIT_T0_Esr3stdE12is_base_of_vIS5_S4_EEbE4typeELb1EEEPS4_RKNS_3RefIS5_EE(ptr noundef nonnull align 8 dereferenceable(8) %43)
          to label %46 unwind label %82

46:                                               ; preds = %44
  %47 = getelementptr inbounds i8, ptr %0, i64 136
  %48 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_16HeightFieldShapeEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %47, ptr noundef %45)
          to label %49 unwind label %82

49:                                               ; preds = %46
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %6) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #10
  %50 = getelementptr inbounds i8, ptr %0, i64 24
  %51 = load ptr, ptr %50, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %7) #10
  %52 = call noundef ptr @_ZNK3JPH3RefINS_16HeightFieldShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %47)
  %53 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %54 unwind label %85

54:                                               ; preds = %49
  %55 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %56 unwind label %85

56:                                               ; preds = %54
  %57 = extractvalue { double, double } %53, 1
  %58 = extractvalue { double, double } %53, 0
  %59 = extractvalue { double, double } %55, 0
  %60 = extractvalue { double, double } %55, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %7, ptr noundef %52, double %58, double %57, double %59, double %60, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %61 unwind label %85

61:                                               ; preds = %56
  %62 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %51, ptr noundef nonnull align 16 dereferenceable(256) %7, i32 noundef 1)
          to label %63 unwind label %87

63:                                               ; preds = %61
  %64 = getelementptr inbounds i8, ptr %0, i64 144
  store i32 %62, ptr %64, align 8, !tbaa !38
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %7) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %7) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #10
  %65 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %66 unwind label %90

66:                                               ; preds = %63
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %65, float noundef 2.000000e+00, ptr noundef null)
          to label %67 unwind label %92

67:                                               ; preds = %66
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull %65)
          to label %.preheader unwind label %90

.preheader:                                       ; preds = %67
  %68 = getelementptr inbounds i8, ptr %12, i64 8
  %69 = getelementptr inbounds i8, ptr %0, i64 16
  %70 = getelementptr inbounds i8, ptr %14, i64 1
  %71 = getelementptr inbounds i8, ptr %14, i64 4
  %72 = getelementptr inbounds i8, ptr %14, i64 16
  %73 = getelementptr inbounds i8, ptr %14, i64 24
  %74 = getelementptr inbounds i8, ptr %14, i64 32
  %75 = getelementptr inbounds i8, ptr %13, i64 92
  %76 = getelementptr inbounds i8, ptr %13, i64 1152
  br label %94

77:                                               ; preds = %168
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @_ZN3JPH24HeightFieldShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %4) #10
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #10
  ret void

78:                                               ; preds = %26
  %79 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #10
  br label %177

80:                                               ; preds = %38
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %84

82:                                               ; preds = %46, %44, %42
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %6) #10
  br label %84

84:                                               ; preds = %82, %80
  %.pn = phi { ptr, i32 } [ %83, %82 ], [ %81, %80 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #10
  br label %176

85:                                               ; preds = %56, %54, %49
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %89

87:                                               ; preds = %61
  %88 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %7) #10
  br label %89

89:                                               ; preds = %87, %85
  %.pn52 = phi { ptr, i32 } [ %88, %87 ], [ %86, %85 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %7) #10
  br label %176

90:                                               ; preds = %67, %63
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %175

92:                                               ; preds = %66
  %93 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %65) #10
  br label %175

94:                                               ; preds = %.preheader, %168
  %.05069 = phi float [ 0x3FC99999A0000000, %.preheader ], [ %169, %168 ]
  %95 = invoke { double, double } @_ZNK28DeformedHeightFieldShapeTest13GetPathCenterEf(ptr noundef nonnull align 8 dereferenceable(152) %0, float noundef %.05069)
          to label %96 unwind label %147

96:                                               ; preds = %94
  %97 = extractvalue { double, double } %95, 0
  %98 = extractvalue { double, double } %95, 1
  %99 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %2, double %97, double %98)
          to label %100 unwind label %147

100:                                              ; preds = %96
  %101 = extractvalue { double, double } %99, 0
  %102 = extractvalue { double, double } %99, 1
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %9) #10
  %103 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %8)
  %104 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %105 unwind label %149

105:                                              ; preds = %100
  %106 = extractvalue { double, double } %104, 0
  %107 = extractvalue { double, double } %104, 1
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef 0.000000e+00, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %108 unwind label %151

108:                                              ; preds = %105
  %109 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %101, double %102)
          to label %110 unwind label %151

110:                                              ; preds = %108
  %111 = extractvalue { double, double } %109, 0
  %112 = extractvalue { double, double } %109, 1
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %10, double %111, double %112)
          to label %113 unwind label %151

113:                                              ; preds = %110
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 0.000000e+00, float noundef -2.000000e+01, float noundef 0.000000e+00)
          to label %114 unwind label %151

114:                                              ; preds = %113
  %115 = load double, ptr %12, align 16
  %116 = load double, ptr %68, align 8
  invoke void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144) %9, ptr noundef %103, double %106, double %107, ptr noundef nonnull align 16 dereferenceable(64) %10, double %115, double %116)
          to label %117 unwind label %151

117:                                              ; preds = %114
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 1184, ptr nonnull %13) #10
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %13)
          to label %118 unwind label %153

118:                                              ; preds = %117
  %119 = load ptr, ptr %69, align 8, !tbaa !39
  %120 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %119)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %14) #10
  store i8 0, ptr %14, align 16, !tbaa !40
  store i8 1, ptr %70, align 1, !tbaa !44
  store <2 x float> <float 0x3F1A36E2E0000000, float 0x3F1A36E2E0000000>, ptr %71, align 4, !tbaa !10
  %121 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %122 unwind label %155

122:                                              ; preds = %118
  %123 = extractvalue { double, double } %121, 0
  store double %123, ptr %72, align 16
  %124 = extractvalue { double, double } %121, 1
  store double %124, ptr %73, align 8
  store i32 0, ptr %74, align 16
  %125 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %126 unwind label %155

126:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  store i64 0, ptr %15, align 8
  call void @_ZN3JPH21BroadPhaseLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #10
  store i64 0, ptr %16, align 8
  call void @_ZN3JPH17ObjectLayerFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #10
  store i64 0, ptr %17, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %18, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %18)
          to label %127 unwind label %157

127:                                              ; preds = %126
  %128 = extractvalue { double, double } %125, 1
  %129 = extractvalue { double, double } %125, 0
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %120, ptr noundef nonnull align 16 dereferenceable(144) %9, ptr noundef nonnull align 16 dereferenceable(36) %14, double %129, double %128, ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(12) %18)
          to label %130 unwind label %159

130:                                              ; preds = %127
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %18) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #10
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %14) #10
  %131 = call noundef zeroext i1 @_ZNK3JPH6BodyIDeqERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %75, ptr noundef nonnull align 4 dereferenceable(4) %64)
  br i1 %131, label %132, label %168

132:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %19) #10
  %133 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %8)
  %134 = load float, ptr %76, align 16, !tbaa !45
  %135 = invoke { double, double } @_ZNK3JPH10ShapeCastTINS_4Vec3ENS_5Mat44ENS_10RShapeCastEE13GetPointOnRayEf(ptr noundef nonnull align 16 dereferenceable(144) %9, float noundef %134)
          to label %136 unwind label %163

136:                                              ; preds = %132
  %137 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %138 unwind label %163

138:                                              ; preds = %136
  %139 = extractvalue { double, double } %135, 1
  %140 = extractvalue { double, double } %135, 0
  %141 = extractvalue { double, double } %137, 0
  %142 = extractvalue { double, double } %137, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %19, ptr noundef %133, double %140, double %139, double %141, double %142, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %143 unwind label %163

143:                                              ; preds = %138
  %144 = load ptr, ptr %50, align 8, !tbaa !31
  %145 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %144, ptr noundef nonnull align 16 dereferenceable(256) %19, i32 noundef 1)
          to label %146 unwind label %165

146:                                              ; preds = %143
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %19) #10
  br label %168

147:                                              ; preds = %96, %94
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %174

149:                                              ; preds = %100
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %173

151:                                              ; preds = %114, %113, %110, %108, %105
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #10
  br label %173

153:                                              ; preds = %117
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %172

155:                                              ; preds = %122, %118
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %162

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

159:                                              ; preds = %127
  %160 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %18) #10
  br label %161

161:                                              ; preds = %159, %157
  %.pn54 = phi { ptr, i32 } [ %160, %159 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #10
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  br label %162

162:                                              ; preds = %161, %155
  %.pn54.pn = phi { ptr, i32 } [ %.pn54, %161 ], [ %156, %155 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %14) #10
  br label %171

163:                                              ; preds = %138, %136, %132
  %164 = landingpad { ptr, i32 }
          cleanup
  br label %167

165:                                              ; preds = %143
  %166 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #10
  br label %167

167:                                              ; preds = %165, %163
  %.pn57 = phi { ptr, i32 } [ %166, %165 ], [ %164, %163 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %19) #10
  br label %171

168:                                              ; preds = %146, %130
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %13) #10
  call void @llvm.lifetime.end.p0(i64 1184, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %9) #10
  %169 = fadd float %.05069, 0x3FB99999A0000000
  %170 = fcmp olt float %169, 0x4028CCCCC0000000
  br i1 %170, label %94, label %77, !llvm.loop !53

171:                                              ; preds = %167, %162
  %.pn57.pn = phi { ptr, i32 } [ %.pn57, %167 ], [ %.pn54.pn, %162 ]
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %13) #10
  br label %172

172:                                              ; preds = %171, %153
  %.pn57.pn.pn = phi { ptr, i32 } [ %.pn57.pn, %171 ], [ %154, %153 ]
  call void @llvm.lifetime.end.p0(i64 1184, ptr nonnull %13) #10
  br label %173

173:                                              ; preds = %172, %151, %149
  %.pn57.pn.pn.pn = phi { ptr, i32 } [ %.pn57.pn.pn, %172 ], [ %152, %151 ], [ %150, %149 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %9) #10
  br label %174

174:                                              ; preds = %173, %147
  %.pn57.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn57.pn.pn.pn, %173 ], [ %148, %147 ]
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #10
  br label %175

175:                                              ; preds = %174, %92, %90
  %.pn57.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn57.pn.pn.pn.pn, %174 ], [ %91, %90 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  br label %176

176:                                              ; preds = %175, %89, %84
  %.pn57.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn57.pn.pn.pn.pn.pn, %175 ], [ %.pn52, %89 ], [ %.pn, %84 ]
  call void @_ZN3JPH24HeightFieldShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %4) #10
  br label %177

177:                                              ; preds = %176, %78
  %.pn57.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn57.pn.pn.pn.pn.pn.pn, %176 ], [ %79, %78 ]
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn57.pn.pn.pn.pn.pn.pn.pn
}

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

declare noundef float @_Z12PerlinNoise3fffiii(float noundef, float noundef, float noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

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

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

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

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

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

declare void @_ZN3JPH24HeightFieldShapeSettingsC1EPKfNS_4Vec3ES3_jPKhRKNS_5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS9_EEEE(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef, double, double, double, double, i32 noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3

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

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

declare void @_ZNK3JPH24HeightFieldShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 16 dereferenceable(208)) unnamed_addr #3

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) 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 #5 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #2 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 #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK28DeformedHeightFieldShapeTest13GetPathCenterEf(ptr noundef nonnull align 8 dereferenceable(152), float noundef) local_unnamed_addr #1 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169)) unnamed_addr #2 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 void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #3

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #7 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH6BodyIDeqERKS0_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH24HeightFieldShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208)) unnamed_addr #5 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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!11, !11, i64 0}
!11 = !{!"float", !6, i64 0}
!12 = distinct !{!12, !9}
!13 = !{!14, !20, i64 112}
!14 = !{!"_ZTSN3JPH24HeightFieldShapeSettingsE", !15, i64 0, !24, i64 64, !24, i64 80, !20, i64 96, !11, i64 100, !11, i64 104, !20, i64 108, !20, i64 112, !20, i64 116, !25, i64 120, !27, i64 144, !28, i64 168, !11, i64 192}
!15 = !{!"_ZTSN3JPH13ShapeSettingsE", !16, i64 0, !17, i64 8, !21, i64 16, !22, i64 24}
!16 = !{!"_ZTSN3JPH18SerializableObjectE"}
!17 = !{!"_ZTSN3JPH9RefTargetINS_13ShapeSettingsEEE", !18, i64 0}
!18 = !{!"_ZTSSt6atomicIjE", !19, i64 0}
!19 = !{!"_ZTSSt13__atomic_baseIjE", !20, i64 0}
!20 = !{!"int", !6, i64 0}
!21 = !{!"long", !6, i64 0}
!22 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEEE", !6, i64 0, !23, i64 32}
!23 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEE6EStateE", !6, i64 0}
!24 = !{!"_ZTSN3JPH4Vec3E", !6, i64 0}
!25 = !{!"_ZTSN3JPH5ArrayIfNS_12STLAllocatorIfEEEE", !21, i64 0, !21, i64 8, !26, i64 16}
!26 = !{!"any pointer", !6, i64 0}
!27 = !{!"_ZTSN3JPH5ArrayIhNS_12STLAllocatorIhEEEE", !21, i64 0, !21, i64 8, !26, i64 16}
!28 = !{!"_ZTSN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEE", !21, i64 0, !21, i64 8, !26, i64 16}
!29 = !{!14, !20, i64 116}
!30 = !{!14, !11, i64 100}
!31 = !{!32, !26, i64 24}
!32 = !{!"_ZTS4Test", !26, i64 8, !26, i64 16, !26, i64 24, !26, i64 32, !26, i64 40, !33, i64 48, !34, i64 56}
!33 = !{!"bool", !6, i64 0}
!34 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !35, i64 0}
!35 = !{!"_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", !26, i64 0, !21, i64 8, !36, i64 16, !21, i64 24, !37, i64 32, !26, i64 48}
!36 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !26, i64 0}
!37 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !11, i64 0, !21, i64 8}
!38 = !{!20, !20, i64 0}
!39 = !{!32, !26, i64 16}
!40 = !{!41, !42, i64 0}
!41 = !{!"_ZTSN3JPH19CollideSettingsBaseE", !42, i64 0, !43, i64 1, !11, i64 4, !11, i64 8, !24, i64 16}
!42 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !6, i64 0}
!43 = !{!"_ZTSN3JPH17ECollectFacesModeE", !6, i64 0}
!44 = !{!41, !43, i64 1}
!45 = !{!46, !11, i64 1152}
!46 = !{!"_ZTSN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEE", !47, i64 0, !48, i64 32, !33, i64 1168}
!47 = !{!"_ZTSN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEE", !11, i64 8, !26, i64 16}
!48 = !{!"_ZTSN3JPH15ShapeCastResultE", !49, i64 0, !11, i64 1120, !33, i64 1124}
!49 = !{!"_ZTSN3JPH18CollideShapeResultE", !24, i64 0, !24, i64 16, !24, i64 32, !11, i64 48, !50, i64 52, !50, i64 56, !51, i64 60, !52, i64 64, !52, i64 592}
!50 = !{!"_ZTSN3JPH10SubShapeIDE", !20, i64 0}
!51 = !{!"_ZTSN3JPH6BodyIDE", !20, i64 0}
!52 = !{!"_ZTSN3JPH11StaticArrayINS_4Vec3ELj32EEE", !20, i64 0, !6, i64 16}
!53 = distinct !{!53, !9}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,LoopSimplifyPass,MemCpyOptPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass