; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/General (SimCollideBodyVsBodyTest)

; 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::Float3" = type { float, float, float }
%"class.JPH::MeshShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.7", %"class.JPH::Array.10", %"class.JPH::Array.13", i32, float, i8, i32 }
%"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, i8, [7 x i8] }>
%union.anon = 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.6 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.6 = type { i64, [8 x i8] }
%"class.JPH::Array.7" = type { i64, i64, ptr }
%"class.JPH::Array.10" = type { i64, i64, ptr }
%"class.JPH::Array.13" = type { i64, i64, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.std::initializer_list.16" = type { ptr, i64 }
%"class.JPH::IndexedTriangle" = type { %"class.JPH::IndexedTriangleNoMaterial", i32, i32 }
%"class.JPH::IndexedTriangleNoMaterial" = type { [3 x i32] }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.17" }
%"class.JPH::Array.17" = type { i64, i64, ptr }
%"class.JPH::Vec3" = type { %union.anon.20 }
%union.anon.20 = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.21 }
%union.anon.21 = type { <4 x float> }
%"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.22", %"class.JPH::RefConst.23" }
%"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.22" = type { ptr }
%"class.JPH::RefConst.23" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%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.SimCollideBodyVsBodyTest = type { %class.Test, %"class.JPH::ContactListener", i32, float, %"class.JPH::BodyID", %"class.JPH::Array" }
%"class.JPH::ContactListener" = type { ptr }
%"class.JPH::Array" = type { i64, i64, ptr }

@constinit = external hidden constant [8 x %"class.JPH::Float3"], align 4
@constinit.1 = external hidden constant [10 x { [3 x i32], i32, i32 }], align 4

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN24SimCollideBodyVsBodyTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(160) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.JPH::MeshShapeSettings", align 8
  %4 = alloca %"class.std::initializer_list", align 8
  %5 = alloca [8 x %"class.JPH::Float3"], align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %"class.std::initializer_list.16", align 8
  %9 = alloca [10 x %"class.JPH::IndexedTriangle"], align 4
  %10 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::Quat", align 16
  %16 = alloca %"class.JPH::BodyCreationSettings", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Quat", align 16
  %19 = alloca %"class.JPH::BodyID", align 4
  %20 = alloca %"class.JPH::BodyCreationSettings", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Quat", align 16
  %24 = alloca %"class.JPH::BodyID", align 4
  %25 = alloca i32, align 4
  %26 = alloca %"class.JPH::BodyID", align 4
  %27 = alloca %"class.JPH::BodyCreationSettings", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Quat", align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  %31 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 152, ptr %3) #9
  call void @_ZN3JPH17MeshShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %3)
  call void @llvm.lifetime.start.p0(i64 96, ptr %5) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %5, ptr align 4 @constinit, i64 96, i1 false), !tbaa.struct !9
  %32 = getelementptr inbounds %"class.std::initializer_list", ptr %4, i32 0, i32 0
  store ptr %5, ptr %32, align 8, !tbaa !11
  %33 = getelementptr inbounds %"class.std::initializer_list", ptr %4, i32 0, i32 1
  store i64 8, ptr %33, align 8, !tbaa !14
  %34 = getelementptr inbounds %"class.JPH::MeshShapeSettings", ptr %3, i32 0, i32 1
  %35 = getelementptr inbounds { ptr, i64 }, ptr %4, i32 0, i32 0
  %36 = load ptr, ptr %35, align 8
  %37 = getelementptr inbounds { ptr, i64 }, ptr %4, i32 0, i32 1
  %38 = load i64, ptr %37, align 8
  %39 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_6Float3ENS_12STLAllocatorIS1_EEEaSESt16initializer_listIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr %36, i64 %38)
          to label %40 unwind label %57

40:                                               ; preds = %1
  call void @llvm.lifetime.end.p0(i64 96, ptr %5) #9
  call void @llvm.lifetime.start.p0(i64 200, ptr %9) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 @constinit.1, i64 200, i1 false), !tbaa.struct !15
  %41 = getelementptr inbounds %"class.std::initializer_list.16", ptr %8, i32 0, i32 0
  store ptr %9, ptr %41, align 8, !tbaa !16
  %42 = getelementptr inbounds %"class.std::initializer_list.16", ptr %8, i32 0, i32 1
  store i64 10, ptr %42, align 8, !tbaa !18
  %43 = getelementptr inbounds %"class.JPH::MeshShapeSettings", ptr %3, i32 0, i32 2
  %44 = getelementptr inbounds { ptr, i64 }, ptr %8, i32 0, i32 0
  %45 = load ptr, ptr %44, align 8
  %46 = getelementptr inbounds { ptr, i64 }, ptr %8, i32 0, i32 1
  %47 = load i64, ptr %46, align 8
  %48 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_15IndexedTriangleENS_12STLAllocatorIS1_EEEaSESt16initializer_listIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %43, ptr %45, i64 %47)
          to label %49 unwind label %61

49:                                               ; preds = %40
  call void @llvm.lifetime.end.p0(i64 200, ptr %9) #9
  %50 = getelementptr inbounds i8, ptr %3, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %51 unwind label %65

51:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 88, ptr %10) #9
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %10)
          to label %52 unwind label %69

52:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  store i32 -10, ptr %11, align 4, !tbaa !19
  br label %53

53:                                               ; preds = %112, %52
  %54 = load i32, ptr %11, align 4, !tbaa !19
  %55 = icmp sle i32 %54, 10
  br i1 %55, label %73, label %56

56:                                               ; preds = %53
  store i32 2, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %115

57:                                               ; preds = %1
  %58 = landingpad { ptr, i32 }
          cleanup
  %59 = extractvalue { ptr, i32 } %58, 0
  store ptr %59, ptr %6, align 8
  %60 = extractvalue { ptr, i32 } %58, 1
  store i32 %60, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 96, ptr %5) #9
  br label %284

61:                                               ; preds = %40
  %62 = landingpad { ptr, i32 }
          cleanup
  %63 = extractvalue { ptr, i32 } %62, 0
  store ptr %63, ptr %6, align 8
  %64 = extractvalue { ptr, i32 } %62, 1
  store i32 %64, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 200, ptr %9) #9
  br label %284

65:                                               ; preds = %49
  %66 = landingpad { ptr, i32 }
          cleanup
  %67 = extractvalue { ptr, i32 } %66, 0
  store ptr %67, ptr %6, align 8
  %68 = extractvalue { ptr, i32 } %66, 1
  store i32 %68, ptr %7, align 4
  br label %284

69:                                               ; preds = %51
  %70 = landingpad { ptr, i32 }
          cleanup
  %71 = extractvalue { ptr, i32 } %70, 0
  store ptr %71, ptr %6, align 8
  %72 = extractvalue { ptr, i32 } %70, 1
  store i32 %72, ptr %7, align 4
  br label %283

73:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  store i32 -10, ptr %13, align 4, !tbaa !19
  br label %74

74:                                               ; preds = %104, %73
  %75 = load i32, ptr %13, align 4, !tbaa !19
  %76 = icmp sle i32 %75, 10
  br i1 %76, label %78, label %77

77:                                               ; preds = %74
  store i32 5, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %111

78:                                               ; preds = %74
  %79 = load i32, ptr %11, align 4, !tbaa !19
  %80 = sitofp i32 %79 to float
  %81 = fmul float %80, 2.000000e+00
  %82 = load i32, ptr %13, align 4, !tbaa !19
  %83 = sitofp i32 %82 to float
  %84 = fmul float %83, 2.000000e+00
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %14, float noundef %81, float noundef 0.000000e+00, float noundef %84)
          to label %85 unwind label %107

85:                                               ; preds = %78
  %86 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %87 unwind label %107

87:                                               ; preds = %85
  %88 = getelementptr inbounds %"class.JPH::Quat", ptr %15, i32 0, i32 0
  %89 = getelementptr inbounds %"class.JPH::Vec4", ptr %88, i32 0, i32 0
  %90 = getelementptr inbounds %union.anon.21, ptr %89, i32 0, i32 0
  %91 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 0
  %92 = extractvalue { double, double } %86, 0
  store double %92, ptr %91, align 16
  %93 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 1
  %94 = extractvalue { double, double } %86, 1
  store double %94, ptr %93, align 8
  %95 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %96 = load double, ptr %95, align 16
  %97 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %98 = load double, ptr %97, align 8
  %99 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 0
  %100 = load double, ptr %99, align 16
  %101 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 1
  %102 = load double, ptr %101, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %10, double %96, double %98, double %100, double %102, ptr noundef %3, i32 noundef 0)
          to label %103 unwind label %107

103:                                              ; preds = %87
  br label %104

104:                                              ; preds = %103
  %105 = load i32, ptr %13, align 4, !tbaa !19
  %106 = add nsw i32 %105, 1
  store i32 %106, ptr %13, align 4, !tbaa !19
  br label %74, !llvm.loop !21

107:                                              ; preds = %87, %85, %78
  %108 = landingpad { ptr, i32 }
          cleanup
  %109 = extractvalue { ptr, i32 } %108, 0
  store ptr %109, ptr %6, align 8
  %110 = extractvalue { ptr, i32 } %108, 1
  store i32 %110, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %282

111:                                              ; preds = %77
  br label %112

112:                                              ; preds = %111
  %113 = load i32, ptr %11, align 4, !tbaa !19
  %114 = add nsw i32 %113, 1
  store i32 %114, ptr %11, align 4, !tbaa !19
  br label %53, !llvm.loop !23

115:                                              ; preds = %56
  %116 = getelementptr inbounds i8, ptr %10, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %116)
          to label %117 unwind label %196

117:                                              ; preds = %115
  %118 = getelementptr inbounds %class.Test, ptr %31, i32 0, i32 3
  %119 = load ptr, ptr %118, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 256, ptr %16) #9
  %120 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %121 unwind label %200

121:                                              ; preds = %117
  %122 = getelementptr inbounds %"class.JPH::Vec3", ptr %17, i32 0, i32 0
  %123 = getelementptr inbounds %union.anon.20, ptr %122, i32 0, i32 0
  %124 = getelementptr inbounds { double, double }, ptr %123, i32 0, i32 0
  %125 = extractvalue { double, double } %120, 0
  store double %125, ptr %124, align 16
  %126 = getelementptr inbounds { double, double }, ptr %123, i32 0, i32 1
  %127 = extractvalue { double, double } %120, 1
  store double %127, ptr %126, align 8
  %128 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %129 unwind label %200

129:                                              ; preds = %121
  %130 = getelementptr inbounds %"class.JPH::Quat", ptr %18, i32 0, i32 0
  %131 = getelementptr inbounds %"class.JPH::Vec4", ptr %130, i32 0, i32 0
  %132 = getelementptr inbounds %union.anon.21, ptr %131, i32 0, i32 0
  %133 = getelementptr inbounds { double, double }, ptr %132, i32 0, i32 0
  %134 = extractvalue { double, double } %128, 0
  store double %134, ptr %133, align 16
  %135 = getelementptr inbounds { double, double }, ptr %132, i32 0, i32 1
  %136 = extractvalue { double, double } %128, 1
  store double %136, ptr %135, align 8
  %137 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %138 = load double, ptr %137, align 16
  %139 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %140 = load double, ptr %139, align 8
  %141 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 0
  %142 = load double, ptr %141, align 16
  %143 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 1
  %144 = load double, ptr %143, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %16, ptr noundef %10, double %138, double %140, double %142, double %144, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %145 unwind label %200

145:                                              ; preds = %129
  %146 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %119, ptr noundef nonnull align 16 dereferenceable(256) %16, i32 noundef 1)
          to label %147 unwind label %204

147:                                              ; preds = %145
  %148 = getelementptr inbounds %"class.JPH::BodyID", ptr %19, i32 0, i32 0
  store i32 %146, ptr %148, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %16) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 256, ptr %20) #9
  %149 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %150 unwind label %209

150:                                              ; preds = %147
  %151 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 1.000000e+01)
          to label %152 unwind label %213

152:                                              ; preds = %150
  %153 = getelementptr inbounds %"class.JPH::Vec3", ptr %21, i32 0, i32 0
  %154 = getelementptr inbounds %union.anon.20, ptr %153, i32 0, i32 0
  %155 = getelementptr inbounds { double, double }, ptr %154, i32 0, i32 0
  %156 = extractvalue { double, double } %151, 0
  store double %156, ptr %155, align 16
  %157 = getelementptr inbounds { double, double }, ptr %154, i32 0, i32 1
  %158 = extractvalue { double, double } %151, 1
  store double %158, ptr %157, align 8
  %159 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %160 = load double, ptr %159, align 16
  %161 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %162 = load double, ptr %161, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %149, double %160, double %162, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %163 unwind label %213

163:                                              ; preds = %152
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %22, float noundef 0.000000e+00, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %164 unwind label %209

164:                                              ; preds = %163
  %165 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %166 unwind label %209

166:                                              ; preds = %164
  %167 = getelementptr inbounds %"class.JPH::Quat", ptr %23, i32 0, i32 0
  %168 = getelementptr inbounds %"class.JPH::Vec4", ptr %167, i32 0, i32 0
  %169 = getelementptr inbounds %union.anon.21, ptr %168, i32 0, i32 0
  %170 = getelementptr inbounds { double, double }, ptr %169, i32 0, i32 0
  %171 = extractvalue { double, double } %165, 0
  store double %171, ptr %170, align 16
  %172 = getelementptr inbounds { double, double }, ptr %169, i32 0, i32 1
  %173 = extractvalue { double, double } %165, 1
  store double %173, ptr %172, align 8
  %174 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %175 = load double, ptr %174, align 16
  %176 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %177 = load double, ptr %176, align 8
  %178 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %179 = load double, ptr %178, align 16
  %180 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %181 = load double, ptr %180, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %20, ptr noundef %149, double %175, double %177, double %179, double %181, i8 noundef zeroext 1, i16 noundef zeroext 1)
          to label %182 unwind label %209

182:                                              ; preds = %166
  %183 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %20, i32 0, i32 10
  store i8 1, ptr %183, align 1, !tbaa !32
  %184 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %20, i32 0, i32 11
  store i8 1, ptr %184, align 4, !tbaa !48
  %185 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %20, i32 0, i32 12
  store i8 0, ptr %185, align 1, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %186 = getelementptr inbounds %class.Test, ptr %31, i32 0, i32 3
  %187 = load ptr, ptr %186, align 8, !tbaa !24
  %188 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %187, ptr noundef nonnull align 16 dereferenceable(256) %20, i32 noundef 0)
          to label %189 unwind label %217

189:                                              ; preds = %182
  %190 = getelementptr inbounds %"class.JPH::BodyID", ptr %24, i32 0, i32 0
  store i32 %188, ptr %190, align 4
  %191 = getelementptr inbounds %class.SimCollideBodyVsBodyTest, ptr %31, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %191, ptr align 4 %24, i64 4, i1 false), !tbaa.struct !50
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 0, ptr %25, align 4, !tbaa !19
  br label %192

192:                                              ; preds = %263, %189
  %193 = load i32, ptr %25, align 4, !tbaa !19
  %194 = icmp slt i32 %193, 10
  br i1 %194, label %221, label %195

195:                                              ; preds = %192
  store i32 8, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %279

196:                                              ; preds = %115
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %6, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %7, align 4
  br label %282

200:                                              ; preds = %129, %121, %117
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %6, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %7, align 4
  br label %208

204:                                              ; preds = %145
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %6, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %16) #9
  br label %208

208:                                              ; preds = %204, %200
  call void @llvm.lifetime.end.p0(i64 256, ptr %16) #9
  br label %282

209:                                              ; preds = %166, %164, %163, %147
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %6, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %7, align 4
  br label %281

213:                                              ; preds = %152, %150
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %6, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %149) #9
  br label %281

217:                                              ; preds = %182
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %6, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %280

221:                                              ; preds = %192
  %222 = getelementptr inbounds %class.SimCollideBodyVsBodyTest, ptr %31, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %223 = getelementptr inbounds %class.Test, ptr %31, i32 0, i32 3
  %224 = load ptr, ptr %223, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 256, ptr %27) #9
  %225 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %226 unwind label %266

226:                                              ; preds = %221
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 0x3FB99999A0000000, float noundef 5.000000e-01, float noundef 0x3FC99999A0000000)
          to label %227 unwind label %270

227:                                              ; preds = %226
  %228 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 0
  %229 = load double, ptr %228, align 16
  %230 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 1
  %231 = load double, ptr %230, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %225, double %229, double %231, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %232 unwind label %270

232:                                              ; preds = %227
  %233 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %234 unwind label %266

234:                                              ; preds = %232
  %235 = getelementptr inbounds %"class.JPH::Vec3", ptr %29, i32 0, i32 0
  %236 = getelementptr inbounds %union.anon.20, ptr %235, i32 0, i32 0
  %237 = getelementptr inbounds { double, double }, ptr %236, i32 0, i32 0
  %238 = extractvalue { double, double } %233, 0
  store double %238, ptr %237, align 16
  %239 = getelementptr inbounds { double, double }, ptr %236, i32 0, i32 1
  %240 = extractvalue { double, double } %233, 1
  store double %240, ptr %239, align 8
  %241 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %242 unwind label %266

242:                                              ; preds = %234
  %243 = getelementptr inbounds %"class.JPH::Quat", ptr %30, i32 0, i32 0
  %244 = getelementptr inbounds %"class.JPH::Vec4", ptr %243, i32 0, i32 0
  %245 = getelementptr inbounds %union.anon.21, ptr %244, i32 0, i32 0
  %246 = getelementptr inbounds { double, double }, ptr %245, i32 0, i32 0
  %247 = extractvalue { double, double } %241, 0
  store double %247, ptr %246, align 16
  %248 = getelementptr inbounds { double, double }, ptr %245, i32 0, i32 1
  %249 = extractvalue { double, double } %241, 1
  store double %249, ptr %248, align 8
  %250 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %251 = load double, ptr %250, align 16
  %252 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %253 = load double, ptr %252, align 8
  %254 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %255 = load double, ptr %254, align 16
  %256 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %257 = load double, ptr %256, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %27, ptr noundef %225, double %251, double %253, double %255, double %257, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %258 unwind label %266

258:                                              ; preds = %242
  %259 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %224, ptr noundef nonnull align 16 dereferenceable(256) %27, i32 noundef 0)
          to label %260 unwind label %274

260:                                              ; preds = %258
  %261 = getelementptr inbounds %"class.JPH::BodyID", ptr %26, i32 0, i32 0
  store i32 %259, ptr %261, align 4
  invoke void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %222, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %262 unwind label %274

262:                                              ; preds = %260
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %27) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %263

263:                                              ; preds = %262
  %264 = load i32, ptr %25, align 4, !tbaa !19
  %265 = add nsw i32 %264, 1
  store i32 %265, ptr %25, align 4, !tbaa !19
  br label %192, !llvm.loop !51

266:                                              ; preds = %242, %234, %232, %221
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %6, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %7, align 4
  br label %278

270:                                              ; preds = %227, %226
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %6, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %225) #9
  br label %278

274:                                              ; preds = %260, %258
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %6, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %27) #9
  br label %278

278:                                              ; preds = %274, %270, %266
  call void @llvm.lifetime.end.p0(i64 256, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %280

279:                                              ; preds = %195
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %20) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %20) #9
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %10) #9
  call void @llvm.lifetime.end.p0(i64 88, ptr %10) #9
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %3) #9
  call void @llvm.lifetime.end.p0(i64 152, ptr %3) #9
  ret void

280:                                              ; preds = %278, %217
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %20) #9
  br label %281

281:                                              ; preds = %280, %213, %209
  call void @llvm.lifetime.end.p0(i64 256, ptr %20) #9
  br label %282

282:                                              ; preds = %281, %208, %196, %107
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %10) #9
  br label %283

283:                                              ; preds = %282, %69
  call void @llvm.lifetime.end.p0(i64 88, ptr %10) #9
  br label %284

284:                                              ; preds = %283, %65, %61, %57
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %3) #9
  call void @llvm.lifetime.end.p0(i64 152, ptr %3) #9
  br label %285

285:                                              ; preds = %284
  %286 = load ptr, ptr %6, align 8
  %287 = load i32, ptr %7, align 4
  %288 = insertvalue { ptr, i32 } poison, ptr %286, 0
  %289 = insertvalue { ptr, i32 } %288, i32 %287, 1
  resume { ptr, i32 } %289
}

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

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

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

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

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

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

declare void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88), double, double, double, double, ptr noundef, i32 noundef) #4

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

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) #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 uwtable
declare dso_local void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #7 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { 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 #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress 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 = { 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 = !{i64 0, i64 96, !10}
!10 = !{!7, !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"_ZTSSt16initializer_listIN3JPH6Float3EE", !6, i64 0, !13, i64 8}
!13 = !{!"long", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = !{i64 0, i64 200, !10}
!16 = !{!17, !6, i64 0}
!17 = !{!"_ZTSSt16initializer_listIN3JPH15IndexedTriangleEE", !6, i64 0, !13, i64 8}
!18 = !{!17, !13, i64 8}
!19 = !{!20, !20, i64 0}
!20 = !{!"int", !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = !{!25, !6, i64 24}
!25 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !26, i64 48, !27, i64 56}
!26 = !{!"bool", !7, i64 0}
!27 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !28, i64 0}
!28 = !{!"_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, !13, i64 8, !29, i64 16, !13, i64 24, !30, i64 32, !6, i64 48}
!29 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!30 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !31, i64 0, !13, i64 8}
!31 = !{!"float", !7, i64 0}
!32 = !{!33, !26, i64 99}
!33 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !34, i64 0, !35, i64 16, !34, i64 32, !34, i64 48, !13, i64 64, !37, i64 72, !38, i64 80, !40, i64 96, !41, i64 97, !26, i64 98, !26, i64 99, !26, i64 100, !26, i64 101, !26, i64 102, !42, i64 103, !26, i64 104, !26, i64 105, !31, i64 108, !31, i64 112, !31, i64 116, !31, i64 120, !31, i64 124, !31, i64 128, !31, i64 132, !20, i64 136, !20, i64 140, !43, i64 144, !31, i64 148, !44, i64 160, !46, i64 240, !47, i64 248}
!34 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!35 = !{!"_ZTSN3JPH4QuatE", !36, i64 0}
!36 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!37 = !{!"short", !7, i64 0}
!38 = !{!"_ZTSN3JPH14CollisionGroupE", !39, i64 0, !20, i64 8, !20, i64 12}
!39 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!40 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!41 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!42 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!43 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!44 = !{!"_ZTSN3JPH14MassPropertiesE", !31, i64 0, !45, i64 16}
!45 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!46 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!47 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!48 = !{!33, !26, i64 100}
!49 = !{!33, !26, i64 101}
!50 = !{i64 0, i64 4, !19}
!51 = distinct !{!51, !22}


; 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::Float3" = type { float, float, float }
%"class.JPH::MeshShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.7", %"class.JPH::Array.10", %"class.JPH::Array.13", i32, float, i8, i32 }
%"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, i8, [7 x i8] }>
%union.anon = 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.6 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.6 = type { i64, [8 x i8] }
%"class.JPH::Array.7" = type { i64, i64, ptr }
%"class.JPH::Array.10" = type { i64, i64, ptr }
%"class.JPH::Array.13" = type { i64, i64, ptr }
%"class.JPH::IndexedTriangle" = type { %"class.JPH::IndexedTriangleNoMaterial", i32, i32 }
%"class.JPH::IndexedTriangleNoMaterial" = type { [3 x i32] }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.17" }
%"class.JPH::Array.17" = type { i64, i64, ptr }
%"class.JPH::Vec3" = type { %union.anon.20 }
%union.anon.20 = type { <4 x float> }
%"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.22", %"class.JPH::RefConst.23" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.21 }
%union.anon.21 = 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.22" = type { ptr }
%"class.JPH::RefConst.23" = type { ptr }
%"class.JPH::BodyID" = type { i32 }

@constinit = external hidden local_unnamed_addr constant [8 x %"class.JPH::Float3"], align 4
@constinit.1 = external hidden local_unnamed_addr constant [10 x { [3 x i32], i32, i32 }], align 4

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN24SimCollideBodyVsBodyTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(160) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::MeshShapeSettings", align 8
  %3 = alloca [8 x %"class.JPH::Float3"], align 4
  %4 = alloca [10 x %"class.JPH::IndexedTriangle"], align 4
  %5 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.JPH::BodyCreationSettings", align 16
  %8 = alloca %"class.JPH::BodyCreationSettings", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::BodyID", align 4
  %11 = alloca %"class.JPH::BodyCreationSettings", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %2) #9
  call void @_ZN3JPH17MeshShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %2)
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %3) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(96) %3, ptr noundef nonnull align 4 dereferenceable(96) @constinit, i64 96, i1 false), !tbaa.struct !5
  %13 = getelementptr inbounds i8, ptr %2, i64 64
  %14 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_6Float3ENS_12STLAllocatorIS1_EEEaSESt16initializer_listIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr nonnull %3, i64 8)
          to label %15 unwind label %26

15:                                               ; preds = %1
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %3) #9
  call void @llvm.lifetime.start.p0(i64 200, ptr nonnull %4) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(200) %4, ptr noundef nonnull align 4 dereferenceable(200) @constinit.1, i64 200, i1 false), !tbaa.struct !9
  %16 = getelementptr inbounds i8, ptr %2, i64 88
  %17 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_15IndexedTriangleENS_12STLAllocatorIS1_EEEaSESt16initializer_listIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr nonnull %4, i64 10)
          to label %18 unwind label %28

18:                                               ; preds = %15
  call void @llvm.lifetime.end.p0(i64 200, ptr nonnull %4) #9
  %19 = getelementptr inbounds i8, ptr %2, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %20 unwind label %30

20:                                               ; preds = %18
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %5) #9
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %5)
          to label %.preheader47 unwind label %32

.preheader47:                                     ; preds = %20
  %21 = getelementptr inbounds i8, ptr %6, i64 8
  br label %.preheader

.preheader:                                       ; preds = %.preheader47, %34
  %.03550 = phi i32 [ -10, %.preheader47 ], [ %35, %34 ]
  %22 = sitofp i32 %.03550 to float
  %23 = fmul float %22, 2.000000e+00
  br label %36

24:                                               ; preds = %34
  %25 = getelementptr inbounds i8, ptr %5, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %50 unwind label %90

26:                                               ; preds = %1
  %27 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %3) #9
  br label %135

28:                                               ; preds = %15
  %29 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 200, ptr nonnull %4) #9
  br label %135

30:                                               ; preds = %18
  %31 = landingpad { ptr, i32 }
          cleanup
  br label %135

32:                                               ; preds = %20
  %33 = landingpad { ptr, i32 }
          cleanup
  br label %134

34:                                               ; preds = %46
  %35 = add nsw i32 %.03550, 1
  %exitcond54.not = icmp eq i32 %35, 11
  br i1 %exitcond54.not, label %24, label %.preheader, !llvm.loop !10

36:                                               ; preds = %.preheader, %46
  %.03749 = phi i32 [ -10, %.preheader ], [ %47, %46 ]
  %37 = sitofp i32 %.03749 to float
  %38 = fmul float %37, 2.000000e+00
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef %23, float noundef 0.000000e+00, float noundef %38)
          to label %39 unwind label %48

39:                                               ; preds = %36
  %40 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %41 unwind label %48

41:                                               ; preds = %39
  %42 = extractvalue { double, double } %40, 0
  %43 = extractvalue { double, double } %40, 1
  %44 = load double, ptr %6, align 16
  %45 = load double, ptr %21, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %5, double %44, double %45, double %42, double %43, ptr noundef nonnull %2, i32 noundef 0)
          to label %46 unwind label %48

46:                                               ; preds = %41
  %47 = add nsw i32 %.03749, 1
  %exitcond.not = icmp eq i32 %47, 11
  br i1 %exitcond.not, label %34, label %36, !llvm.loop !12

48:                                               ; preds = %41, %39, %36
  %49 = landingpad { ptr, i32 }
          cleanup
  br label %133

50:                                               ; preds = %24
  %51 = getelementptr inbounds i8, ptr %0, i64 24
  %52 = load ptr, ptr %51, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %7) #9
  %53 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %54 unwind label %92

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

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_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %7, ptr noundef nonnull %5, double %58, double %57, double %59, double %60, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %61 unwind label %92

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

63:                                               ; preds = %61
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %7) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %7) #9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #9
  %64 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %65 unwind label %97

65:                                               ; preds = %63
  %66 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 1.000000e+01)
          to label %67 unwind label %99

67:                                               ; preds = %65
  %68 = extractvalue { double, double } %66, 0
  %69 = extractvalue { double, double } %66, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %64, double %68, double %69, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %70 unwind label %99

70:                                               ; preds = %67
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef 0.000000e+00, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %71 unwind label %97

71:                                               ; preds = %70
  %72 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %73 unwind label %97

73:                                               ; preds = %71
  %74 = extractvalue { double, double } %72, 0
  %75 = extractvalue { double, double } %72, 1
  %76 = load double, ptr %9, align 16
  %77 = getelementptr inbounds i8, ptr %9, i64 8
  %78 = load double, ptr %77, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %8, ptr noundef nonnull %64, double %76, double %78, double %74, double %75, i8 noundef zeroext 1, i16 noundef zeroext 1)
          to label %79 unwind label %97

79:                                               ; preds = %73
  %80 = getelementptr inbounds i8, ptr %8, i64 99
  store i8 1, ptr %80, align 1, !tbaa !23
  %81 = getelementptr inbounds i8, ptr %8, i64 100
  store i8 1, ptr %81, align 4, !tbaa !40
  %82 = getelementptr inbounds i8, ptr %8, i64 101
  store i8 0, ptr %82, align 1, !tbaa !41
  %83 = load ptr, ptr %51, align 8, !tbaa !13
  %84 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 16 dereferenceable(256) %8, i32 noundef 0)
          to label %85 unwind label %101

85:                                               ; preds = %79
  %86 = getelementptr inbounds i8, ptr %0, i64 128
  store i32 %84, ptr %86, align 8, !tbaa !42
  %87 = getelementptr inbounds i8, ptr %0, i64 136
  %88 = getelementptr inbounds i8, ptr %12, i64 8
  br label %103

89:                                               ; preds = %122
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #9
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %5) #9
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %5) #9
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %2) #9
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %2) #9
  ret void

90:                                               ; preds = %24
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %133

92:                                               ; preds = %56, %54, %50
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %96

94:                                               ; preds = %61
  %95 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %7) #9
  br label %96

96:                                               ; preds = %94, %92
  %.pn = phi { ptr, i32 } [ %95, %94 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %7) #9
  br label %133

97:                                               ; preds = %73, %71, %70, %63
  %98 = landingpad { ptr, i32 }
          cleanup
  br label %132

99:                                               ; preds = %67, %65
  %100 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %64) #9
  br label %132

101:                                              ; preds = %79
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %131

103:                                              ; preds = %85, %122
  %.03651 = phi i32 [ 0, %85 ], [ %123, %122 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #9
  %104 = load ptr, ptr %51, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %11) #9
  %105 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %106 unwind label %124

106:                                              ; preds = %103
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 0x3FB99999A0000000, float noundef 5.000000e-01, float noundef 0x3FC99999A0000000)
          to label %107 unwind label %126

107:                                              ; preds = %106
  %108 = load double, ptr %12, align 16
  %109 = load double, ptr %88, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %105, double %108, double %109, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %110 unwind label %126

110:                                              ; preds = %107
  %111 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %112 unwind label %124

112:                                              ; preds = %110
  %113 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %114 unwind label %124

114:                                              ; preds = %112
  %115 = extractvalue { double, double } %111, 1
  %116 = extractvalue { double, double } %111, 0
  %117 = extractvalue { double, double } %113, 0
  %118 = extractvalue { double, double } %113, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %11, ptr noundef nonnull %105, double %116, double %115, double %117, double %118, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %119 unwind label %124

119:                                              ; preds = %114
  %120 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %104, ptr noundef nonnull align 16 dereferenceable(256) %11, i32 noundef 0)
          to label %121 unwind label %128

121:                                              ; preds = %119
  store i32 %120, ptr %10, align 4
  invoke void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %87, ptr noundef nonnull align 4 dereferenceable(4) %10)
          to label %122 unwind label %128

122:                                              ; preds = %121
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #9
  %123 = add nuw nsw i32 %.03651, 1
  %exitcond55.not = icmp eq i32 %123, 10
  br i1 %exitcond55.not, label %89, label %103, !llvm.loop !43

124:                                              ; preds = %114, %112, %110, %103
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %130

126:                                              ; preds = %107, %106
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %105) #9
  br label %130

128:                                              ; preds = %121, %119
  %129 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #9
  br label %130

130:                                              ; preds = %128, %126, %124
  %.pn39 = phi { ptr, i32 } [ %129, %128 ], [ %125, %124 ], [ %127, %126 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #9
  br label %131

131:                                              ; preds = %130, %101
  %.pn39.pn = phi { ptr, i32 } [ %.pn39, %130 ], [ %102, %101 ]
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #9
  br label %132

132:                                              ; preds = %131, %99, %97
  %.pn39.pn.pn = phi { ptr, i32 } [ %.pn39.pn, %131 ], [ %98, %97 ], [ %100, %99 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #9
  br label %133

133:                                              ; preds = %132, %96, %90, %48
  %.pn43 = phi { ptr, i32 } [ %49, %48 ], [ %.pn39.pn.pn, %132 ], [ %.pn, %96 ], [ %91, %90 ]
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %5) #9
  br label %134

134:                                              ; preds = %133, %32
  %.pn43.pn = phi { ptr, i32 } [ %.pn43, %133 ], [ %33, %32 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %5) #9
  br label %135

135:                                              ; preds = %134, %30, %28, %26
  %.pn43.pn.pn = phi { ptr, i32 } [ %.pn43.pn, %134 ], [ %31, %30 ], [ %29, %28 ], [ %27, %26 ]
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %2) #9
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %2) #9
  resume { ptr, i32 } %.pn43.pn.pn
}

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

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

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

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

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

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

declare void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88), double, double, double, double, ptr noundef, i32 noundef) local_unnamed_addr #4

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sIdentityEv() local_unnamed_addr #6 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 #4

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) 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 uwtable
declare dso_local void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { 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 #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress 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 = { nounwind }

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

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


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