; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Constraints/GearConstraintTest.ll (ZN18GearConstraintTest10InitializeEv)

; 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::Body" = type <{ %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::AABox", %"class.JPH::RefConst", ptr, i64, %"class.JPH::CollisionGroup", float, float, %"class.JPH::BodyID", i16, i8, %"class.JPH::BroadPhaseLayer", i8, %"struct.std::atomic", [6 x i8] }>
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::BroadPhaseLayer" = type { i8 }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i8 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.JPH::STLAllocator" = type { i8 }
%"class.JPH::ConvexHullShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Array", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShapeSettings.base" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::RefConst.12", float }>
%"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.6" }
%"struct.std::atomic.6" = type { %"struct.std::__atomic_base.7" }
%"struct.std::__atomic_base.7" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.8, i8, [7 x i8] }>
%union.anon.8 = 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.11 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.11 = type { i64, [8 x i8] }
%"class.JPH::RefConst.12" = type { ptr }
%"class.JPH::CylinderShapeSettings" = type { %"class.JPH::ConvexShapeSettings.base", float, float, float }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.13" }
%"class.JPH::Array.13" = 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" }
%"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::HingeConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", float, %"class.JPH::MotorSettings", [12 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.17", i8, i32, i32, i32, float, i64 }
%"class.JPH::RefTarget.17" = type { %"struct.std::atomic.6" }
%"class.JPH::SpringSettings" = type { i8, %union.anon.18, float }
%union.anon.18 = type { float }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, float }
%"class.JPH::Ref.36" = type { ptr }
%"class.JPH::GearConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>
%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 }

@_ZN3JPH4Body13sFixedToWorldE = external global %"class.JPH::Body", align 16

; 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 @_ZN18GearConstraintTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %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 i32, align 4
  %6 = alloca float, align 4
  %7 = alloca i32, align 4
  %8 = alloca float, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca %"class.JPH::Array", align 8
  %12 = alloca %"class.std::initializer_list", align 8
  %13 = alloca [8 x %"class.JPH::Vec3"], align 16
  %14 = alloca %"class.JPH::STLAllocator", align 1
  %15 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca %"class.JPH::CylinderShapeSettings", align 8
  %19 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Quat", align 16
  %22 = alloca i32, align 4
  %23 = alloca %"class.JPH::Quat", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Quat", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Quat", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca ptr, align 8
  %32 = alloca %"class.JPH::BodyCreationSettings", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Quat", align 16
  %35 = alloca %"class.JPH::CylinderShapeSettings", align 8
  %36 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Quat", align 16
  %39 = alloca i32, align 4
  %40 = alloca %"class.JPH::Quat", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Quat", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::Quat", align 16
  %48 = alloca ptr, align 8
  %49 = alloca %"class.JPH::BodyCreationSettings", align 16
  %50 = alloca %"class.JPH::Vec3", align 16
  %51 = alloca %"class.JPH::Quat", align 16
  %52 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %53 = alloca %"class.JPH::Vec3", align 16
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca ptr, align 8
  %56 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %57 = alloca %"class.JPH::Vec3", align 16
  %58 = alloca %"class.JPH::Vec3", align 16
  %59 = alloca ptr, align 8
  %60 = alloca %"class.JPH::Ref.36", align 8
  %61 = alloca %"class.JPH::CollisionGroup", align 8
  %62 = alloca %"class.JPH::CollisionGroup", align 8
  %63 = alloca %"class.JPH::GearConstraintSettings", align 16
  %64 = alloca ptr, align 8
  %65 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  %66 = load ptr, ptr %2, align 8
  %67 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %66, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #10
  store float 0x3FA99999A0000000, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #10
  store float 5.000000e-01, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #10
  store i32 100, ptr %5, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  store float 2.000000e+00, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  store i32 400, ptr %7, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  store float 0x3F847AE140000000, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #10
  store float 0x3F747AE140000000, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #10
  store float 0x3F947AE140000000, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #10
  call void @llvm.lifetime.start.p0(i64 128, ptr %13) #10
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %13, float noundef 0.000000e+00, float noundef 0x3FA99999A0000000, float noundef 0x3F847AE140000000)
  %68 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i64 1
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %68, float noundef 0.000000e+00, float noundef 0xBFA99999A0000000, float noundef 0x3F847AE140000000)
  %69 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i64 2
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %69, float noundef 0.000000e+00, float noundef 0x3FA99999A0000000, float noundef 0xBF847AE140000000)
  %70 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i64 3
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %70, float noundef 0.000000e+00, float noundef 0xBFA99999A0000000, float noundef 0xBF847AE140000000)
  %71 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i64 4
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %71, float noundef 0x3F947AE140000000, float noundef 0xBFA99999A0000000, float noundef 0x3F747AE140000000)
  %72 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i64 5
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %72, float noundef 0x3F947AE140000000, float noundef 0x3FA99999A0000000, float noundef 0x3F747AE140000000)
  %73 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i64 6
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %73, float noundef 0x3F947AE140000000, float noundef 0xBFA99999A0000000, float noundef 0xBF747AE140000000)
  %74 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i64 7
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %74, float noundef 0x3F947AE140000000, float noundef 0x3FA99999A0000000, float noundef 0xBF747AE140000000)
  %75 = getelementptr inbounds %"class.std::initializer_list", ptr %12, i32 0, i32 0
  store ptr %13, ptr %75, align 8, !tbaa !13
  %76 = getelementptr inbounds %"class.std::initializer_list", ptr %12, i32 0, i32 1
  store i64 8, ptr %76, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #10
  %77 = getelementptr inbounds { ptr, i64 }, ptr %12, i32 0, i32 0
  %78 = load ptr, ptr %77, align 8
  %79 = getelementptr inbounds { ptr, i64 }, ptr %12, i32 0, i32 1
  %80 = load i64, ptr %79, align 8
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr %78, i64 %80, ptr noundef nonnull align 1 dereferenceable(1) %14)
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr %13) #10
  call void @llvm.lifetime.start.p0(i64 120, ptr %15) #10
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %15, ptr noundef nonnull align 8 dereferenceable(24) %11, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %81 unwind label %120

81:                                               ; preds = %1
  %82 = getelementptr inbounds i8, ptr %15, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %83 unwind label %124

83:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 88, ptr %18) #10
  invoke void @_ZN3JPH21CylinderShapeSettingsC2EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %18, float noundef 0x3FA99999A0000000, float noundef 5.000000e-01, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %84 unwind label %128

84:                                               ; preds = %83
  %85 = getelementptr inbounds i8, ptr %18, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %85)
          to label %86 unwind label %132

86:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 88, ptr %19) #10
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %19)
          to label %87 unwind label %136

87:                                               ; preds = %86
  %88 = getelementptr inbounds i8, ptr %19, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %88)
          to label %89 unwind label %140

89:                                               ; preds = %87
  %90 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %91 unwind label %140

91:                                               ; preds = %89
  %92 = getelementptr inbounds %"class.JPH::Vec3", ptr %20, i32 0, i32 0
  %93 = getelementptr inbounds %union.anon, ptr %92, i32 0, i32 0
  %94 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 0
  %95 = extractvalue { double, double } %90, 0
  store double %95, ptr %94, align 16
  %96 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 1
  %97 = extractvalue { double, double } %90, 1
  store double %97, ptr %96, align 8
  %98 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %99 unwind label %140

99:                                               ; preds = %91
  %100 = getelementptr inbounds %"class.JPH::Quat", ptr %21, i32 0, i32 0
  %101 = getelementptr inbounds %"class.JPH::Vec4", ptr %100, i32 0, i32 0
  %102 = getelementptr inbounds %union.anon.4, ptr %101, i32 0, i32 0
  %103 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 0
  %104 = extractvalue { double, double } %98, 0
  store double %104, ptr %103, align 16
  %105 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 1
  %106 = extractvalue { double, double } %98, 1
  store double %106, ptr %105, align 8
  %107 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %108 = load double, ptr %107, align 16
  %109 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %110 = load double, ptr %109, align 8
  %111 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %112 = load double, ptr %111, align 16
  %113 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %114 = load double, ptr %113, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %19, double %108, double %110, double %112, double %114, ptr noundef %18, i32 noundef 0)
          to label %115 unwind label %140

115:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #10
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %116

116:                                              ; preds = %192, %115
  %117 = load i32, ptr %22, align 4, !tbaa !11
  %118 = icmp slt i32 %117, 100
  br i1 %118, label %144, label %119

119:                                              ; preds = %116
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  br label %199

120:                                              ; preds = %1
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %16, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %17, align 4
  br label %620

124:                                              ; preds = %81
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %16, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %17, align 4
  br label %619

128:                                              ; preds = %83
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %16, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %17, align 4
  br label %618

132:                                              ; preds = %84
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %16, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %17, align 4
  br label %617

136:                                              ; preds = %86
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %16, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %17, align 4
  br label %616

140:                                              ; preds = %99, %91, %89, %87
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %16, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %17, align 4
  br label %615

144:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #10
  %145 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %146 unwind label %195

146:                                              ; preds = %144
  %147 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i32 0, i32 0
  %148 = getelementptr inbounds %union.anon, ptr %147, i32 0, i32 0
  %149 = getelementptr inbounds { double, double }, ptr %148, i32 0, i32 0
  %150 = extractvalue { double, double } %145, 0
  store double %150, ptr %149, align 16
  %151 = getelementptr inbounds { double, double }, ptr %148, i32 0, i32 1
  %152 = extractvalue { double, double } %145, 1
  store double %152, ptr %151, align 8
  %153 = load i32, ptr %22, align 4, !tbaa !11
  %154 = sitofp i32 %153 to float
  %155 = fmul float 0x401921FB60000000, %154
  %156 = fdiv float %155, 1.000000e+02
  %157 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 0
  %158 = load double, ptr %157, align 16
  %159 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 1
  %160 = load double, ptr %159, align 8
  %161 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %158, double %160, float noundef %156)
          to label %162 unwind label %195

162:                                              ; preds = %146
  %163 = getelementptr inbounds %"class.JPH::Quat", ptr %23, i32 0, i32 0
  %164 = getelementptr inbounds %"class.JPH::Vec4", ptr %163, i32 0, i32 0
  %165 = getelementptr inbounds %union.anon.4, ptr %164, i32 0, i32 0
  %166 = getelementptr inbounds { double, double }, ptr %165, i32 0, i32 0
  %167 = extractvalue { double, double } %161, 0
  store double %167, ptr %166, align 16
  %168 = getelementptr inbounds { double, double }, ptr %165, i32 0, i32 1
  %169 = extractvalue { double, double } %161, 1
  store double %169, ptr %168, align 8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %26, float noundef 5.000000e-01, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %170 unwind label %195

170:                                              ; preds = %162
  %171 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %172 = load double, ptr %171, align 16
  %173 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %174 = load double, ptr %173, align 8
  %175 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %23, double %172, double %174)
          to label %176 unwind label %195

176:                                              ; preds = %170
  %177 = getelementptr inbounds %"class.JPH::Vec3", ptr %25, i32 0, i32 0
  %178 = getelementptr inbounds %union.anon, ptr %177, i32 0, i32 0
  %179 = getelementptr inbounds { double, double }, ptr %178, i32 0, i32 0
  %180 = extractvalue { double, double } %175, 0
  store double %180, ptr %179, align 16
  %181 = getelementptr inbounds { double, double }, ptr %178, i32 0, i32 1
  %182 = extractvalue { double, double } %175, 1
  store double %182, ptr %181, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %27, ptr align 16 %23, i64 16, i1 false), !tbaa.struct !17
  %183 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %184 = load double, ptr %183, align 16
  %185 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %186 = load double, ptr %185, align 8
  %187 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %188 = load double, ptr %187, align 16
  %189 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %190 = load double, ptr %189, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %19, double %184, double %186, double %188, double %190, ptr noundef %15, i32 noundef 0)
          to label %191 unwind label %195

191:                                              ; preds = %176
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #10
  br label %192

192:                                              ; preds = %191
  %193 = load i32, ptr %22, align 4, !tbaa !11
  %194 = add nsw i32 %193, 1
  store i32 %194, ptr %22, align 4, !tbaa !11
  br label %116, !llvm.loop !19

195:                                              ; preds = %176, %170, %162, %146, %144
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %16, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  br label %615

199:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 3.000000e+00, float noundef 0.000000e+00)
          to label %200 unwind label %277

200:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #10
  %201 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %202 unwind label %281

202:                                              ; preds = %200
  %203 = getelementptr inbounds %"class.JPH::Vec3", ptr %30, i32 0, i32 0
  %204 = getelementptr inbounds %union.anon, ptr %203, i32 0, i32 0
  %205 = getelementptr inbounds { double, double }, ptr %204, i32 0, i32 0
  %206 = extractvalue { double, double } %201, 0
  store double %206, ptr %205, align 16
  %207 = getelementptr inbounds { double, double }, ptr %204, i32 0, i32 1
  %208 = extractvalue { double, double } %201, 1
  store double %208, ptr %207, align 8
  %209 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %210 = load double, ptr %209, align 16
  %211 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %212 = load double, ptr %211, align 8
  %213 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %210, double %212, float noundef 0x3FF921FB60000000)
          to label %214 unwind label %281

214:                                              ; preds = %202
  %215 = getelementptr inbounds %"class.JPH::Quat", ptr %29, i32 0, i32 0
  %216 = getelementptr inbounds %"class.JPH::Vec4", ptr %215, i32 0, i32 0
  %217 = getelementptr inbounds %union.anon.4, ptr %216, i32 0, i32 0
  %218 = getelementptr inbounds { double, double }, ptr %217, i32 0, i32 0
  %219 = extractvalue { double, double } %213, 0
  store double %219, ptr %218, align 16
  %220 = getelementptr inbounds { double, double }, ptr %217, i32 0, i32 1
  %221 = extractvalue { double, double } %213, 1
  store double %221, ptr %220, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  %222 = getelementptr inbounds %class.Test, ptr %66, i32 0, i32 3
  %223 = load ptr, ptr %222, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 256, ptr %32) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %33, ptr align 16 %28, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %34, ptr align 16 %29, i64 16, i1 false), !tbaa.struct !17
  %224 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 0
  %225 = load double, ptr %224, align 16
  %226 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 1
  %227 = load double, ptr %226, align 8
  %228 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %229 = load double, ptr %228, align 16
  %230 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %231 = load double, ptr %230, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %32, ptr noundef %19, double %225, double %227, double %229, double %231, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %232 unwind label %285

232:                                              ; preds = %214
  %233 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %223, ptr noundef nonnull align 16 dereferenceable(256) %32)
          to label %234 unwind label %289

234:                                              ; preds = %232
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %32) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %32) #10
  store ptr %233, ptr %31, align 8, !tbaa !5
  %235 = getelementptr inbounds %class.Test, ptr %66, i32 0, i32 3
  %236 = load ptr, ptr %235, align 8, !tbaa !21
  %237 = load ptr, ptr %31, align 8, !tbaa !5
  %238 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %237)
          to label %239 unwind label %294

239:                                              ; preds = %234
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %236, ptr noundef nonnull align 4 dereferenceable(4) %238, i32 noundef 0)
          to label %240 unwind label %294

240:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 88, ptr %35) #10
  invoke void @_ZN3JPH21CylinderShapeSettingsC2EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %35, float noundef 0x3FA99999A0000000, float noundef 2.000000e+00, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %241 unwind label %298

241:                                              ; preds = %240
  %242 = getelementptr inbounds i8, ptr %35, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %242)
          to label %243 unwind label %302

243:                                              ; preds = %241
  call void @llvm.lifetime.start.p0(i64 88, ptr %36) #10
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %36)
          to label %244 unwind label %306

244:                                              ; preds = %243
  %245 = getelementptr inbounds i8, ptr %36, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %245)
          to label %246 unwind label %310

246:                                              ; preds = %244
  %247 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %248 unwind label %310

248:                                              ; preds = %246
  %249 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %250 = getelementptr inbounds %union.anon, ptr %249, i32 0, i32 0
  %251 = getelementptr inbounds { double, double }, ptr %250, i32 0, i32 0
  %252 = extractvalue { double, double } %247, 0
  store double %252, ptr %251, align 16
  %253 = getelementptr inbounds { double, double }, ptr %250, i32 0, i32 1
  %254 = extractvalue { double, double } %247, 1
  store double %254, ptr %253, align 8
  %255 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %256 unwind label %310

256:                                              ; preds = %248
  %257 = getelementptr inbounds %"class.JPH::Quat", ptr %38, i32 0, i32 0
  %258 = getelementptr inbounds %"class.JPH::Vec4", ptr %257, i32 0, i32 0
  %259 = getelementptr inbounds %union.anon.4, ptr %258, i32 0, i32 0
  %260 = getelementptr inbounds { double, double }, ptr %259, i32 0, i32 0
  %261 = extractvalue { double, double } %255, 0
  store double %261, ptr %260, align 16
  %262 = getelementptr inbounds { double, double }, ptr %259, i32 0, i32 1
  %263 = extractvalue { double, double } %255, 1
  store double %263, ptr %262, align 8
  %264 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %265 = load double, ptr %264, align 16
  %266 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %267 = load double, ptr %266, align 8
  %268 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %269 = load double, ptr %268, align 16
  %270 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %271 = load double, ptr %270, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %36, double %265, double %267, double %269, double %271, ptr noundef %35, i32 noundef 0)
          to label %272 unwind label %310

272:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %273

273:                                              ; preds = %363, %272
  %274 = load i32, ptr %39, align 4, !tbaa !11
  %275 = icmp slt i32 %274, 400
  br i1 %275, label %314, label %276

276:                                              ; preds = %273
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  br label %370

277:                                              ; preds = %199
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %16, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %17, align 4
  br label %614

281:                                              ; preds = %202, %200
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %16, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %17, align 4
  br label %613

285:                                              ; preds = %214
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %16, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %17, align 4
  br label %293

289:                                              ; preds = %232
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %16, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %17, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %32) #10
  br label %293

293:                                              ; preds = %289, %285
  call void @llvm.lifetime.end.p0(i64 256, ptr %32) #10
  br label %612

294:                                              ; preds = %239, %234
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %16, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %17, align 4
  br label %612

298:                                              ; preds = %240
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %16, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %17, align 4
  br label %611

302:                                              ; preds = %241
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %16, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %17, align 4
  br label %610

306:                                              ; preds = %243
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %16, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %17, align 4
  br label %609

310:                                              ; preds = %256, %248, %246, %244
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %16, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %17, align 4
  br label %608

314:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #10
  %315 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %316 unwind label %366

316:                                              ; preds = %314
  %317 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %318 = getelementptr inbounds %union.anon, ptr %317, i32 0, i32 0
  %319 = getelementptr inbounds { double, double }, ptr %318, i32 0, i32 0
  %320 = extractvalue { double, double } %315, 0
  store double %320, ptr %319, align 16
  %321 = getelementptr inbounds { double, double }, ptr %318, i32 0, i32 1
  %322 = extractvalue { double, double } %315, 1
  store double %322, ptr %321, align 8
  %323 = load i32, ptr %39, align 4, !tbaa !11
  %324 = sitofp i32 %323 to float
  %325 = fadd float %324, 5.000000e-01
  %326 = fmul float 0x401921FB60000000, %325
  %327 = fdiv float %326, 4.000000e+02
  %328 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %329 = load double, ptr %328, align 16
  %330 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %331 = load double, ptr %330, align 8
  %332 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %329, double %331, float noundef %327)
          to label %333 unwind label %366

333:                                              ; preds = %316
  %334 = getelementptr inbounds %"class.JPH::Quat", ptr %40, i32 0, i32 0
  %335 = getelementptr inbounds %"class.JPH::Vec4", ptr %334, i32 0, i32 0
  %336 = getelementptr inbounds %union.anon.4, ptr %335, i32 0, i32 0
  %337 = getelementptr inbounds { double, double }, ptr %336, i32 0, i32 0
  %338 = extractvalue { double, double } %332, 0
  store double %338, ptr %337, align 16
  %339 = getelementptr inbounds { double, double }, ptr %336, i32 0, i32 1
  %340 = extractvalue { double, double } %332, 1
  store double %340, ptr %339, align 8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %43, float noundef 2.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %341 unwind label %366

341:                                              ; preds = %333
  %342 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %343 = load double, ptr %342, align 16
  %344 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %345 = load double, ptr %344, align 8
  %346 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %40, double %343, double %345)
          to label %347 unwind label %366

347:                                              ; preds = %341
  %348 = getelementptr inbounds %"class.JPH::Vec3", ptr %42, i32 0, i32 0
  %349 = getelementptr inbounds %union.anon, ptr %348, i32 0, i32 0
  %350 = getelementptr inbounds { double, double }, ptr %349, i32 0, i32 0
  %351 = extractvalue { double, double } %346, 0
  store double %351, ptr %350, align 16
  %352 = getelementptr inbounds { double, double }, ptr %349, i32 0, i32 1
  %353 = extractvalue { double, double } %346, 1
  store double %353, ptr %352, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %44, ptr align 16 %40, i64 16, i1 false), !tbaa.struct !17
  %354 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %355 = load double, ptr %354, align 16
  %356 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %357 = load double, ptr %356, align 8
  %358 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %359 = load double, ptr %358, align 16
  %360 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %361 = load double, ptr %360, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %36, double %355, double %357, double %359, double %361, ptr noundef %15, i32 noundef 0)
          to label %362 unwind label %366

362:                                              ; preds = %347
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #10
  br label %363

363:                                              ; preds = %362
  %364 = load i32, ptr %39, align 4, !tbaa !11
  %365 = add nsw i32 %364, 1
  store i32 %365, ptr %39, align 4, !tbaa !11
  br label %273, !llvm.loop !28

366:                                              ; preds = %347, %341, %333, %316, %314
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %16, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  br label %608

370:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %46, float noundef 0x400428F5C0000000, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %371 unwind label %505

371:                                              ; preds = %370
  %372 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 0
  %373 = load double, ptr %372, align 16
  %374 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 1
  %375 = load double, ptr %374, align 8
  %376 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %28, double %373, double %375)
          to label %377 unwind label %505

377:                                              ; preds = %371
  %378 = getelementptr inbounds %"class.JPH::Vec3", ptr %45, i32 0, i32 0
  %379 = getelementptr inbounds %union.anon, ptr %378, i32 0, i32 0
  %380 = getelementptr inbounds { double, double }, ptr %379, i32 0, i32 0
  %381 = extractvalue { double, double } %376, 0
  store double %381, ptr %380, align 16
  %382 = getelementptr inbounds { double, double }, ptr %379, i32 0, i32 1
  %383 = extractvalue { double, double } %376, 1
  store double %383, ptr %382, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %47, ptr align 16 %29, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  %384 = getelementptr inbounds %class.Test, ptr %66, i32 0, i32 3
  %385 = load ptr, ptr %384, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 256, ptr %49) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %50, ptr align 16 %45, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %51, ptr align 16 %47, i64 16, i1 false), !tbaa.struct !17
  %386 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 0
  %387 = load double, ptr %386, align 16
  %388 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 1
  %389 = load double, ptr %388, align 8
  %390 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 0
  %391 = load double, ptr %390, align 16
  %392 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 1
  %393 = load double, ptr %392, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %49, ptr noundef %36, double %387, double %389, double %391, double %393, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %394 unwind label %509

394:                                              ; preds = %377
  %395 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %385, ptr noundef nonnull align 16 dereferenceable(256) %49)
          to label %396 unwind label %513

396:                                              ; preds = %394
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %49) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %49) #10
  store ptr %395, ptr %48, align 8, !tbaa !5
  %397 = getelementptr inbounds %class.Test, ptr %66, i32 0, i32 3
  %398 = load ptr, ptr %397, align 8, !tbaa !21
  %399 = load ptr, ptr %48, align 8, !tbaa !5
  %400 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %399)
          to label %401 unwind label %518

401:                                              ; preds = %396
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %398, ptr noundef nonnull align 4 dereferenceable(4) %400, i32 noundef 0)
          to label %402 unwind label %518

402:                                              ; preds = %401
  call void @llvm.lifetime.start.p0(i64 208, ptr %52) #10
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %52)
          to label %403 unwind label %522

403:                                              ; preds = %402
  %404 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %52, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %404, ptr align 16 %28, i64 16, i1 false), !tbaa.struct !17
  %405 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %52, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %405, ptr align 16 %404, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #10
  %406 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %407 unwind label %526

407:                                              ; preds = %403
  %408 = getelementptr inbounds %"class.JPH::Vec3", ptr %53, i32 0, i32 0
  %409 = getelementptr inbounds %union.anon, ptr %408, i32 0, i32 0
  %410 = getelementptr inbounds { double, double }, ptr %409, i32 0, i32 0
  %411 = extractvalue { double, double } %406, 0
  store double %411, ptr %410, align 16
  %412 = getelementptr inbounds { double, double }, ptr %409, i32 0, i32 1
  %413 = extractvalue { double, double } %406, 1
  store double %413, ptr %412, align 8
  %414 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %52, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %414, ptr align 16 %53, i64 16, i1 false), !tbaa.struct !17
  %415 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %52, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %415, ptr align 16 %414, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #10
  %416 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %417 unwind label %530

417:                                              ; preds = %407
  %418 = getelementptr inbounds %"class.JPH::Vec3", ptr %54, i32 0, i32 0
  %419 = getelementptr inbounds %union.anon, ptr %418, i32 0, i32 0
  %420 = getelementptr inbounds { double, double }, ptr %419, i32 0, i32 0
  %421 = extractvalue { double, double } %416, 0
  store double %421, ptr %420, align 16
  %422 = getelementptr inbounds { double, double }, ptr %419, i32 0, i32 1
  %423 = extractvalue { double, double } %416, 1
  store double %423, ptr %422, align 8
  %424 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %52, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %424, ptr align 16 %54, i64 16, i1 false), !tbaa.struct !17
  %425 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %52, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %425, ptr align 16 %424, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #10
  %426 = load ptr, ptr %31, align 8, !tbaa !5
  %427 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %52, ptr noundef nonnull align 16 dereferenceable(122) @_ZN3JPH4Body13sFixedToWorldE, ptr noundef nonnull align 16 dereferenceable(122) %426)
          to label %428 unwind label %534

428:                                              ; preds = %417
  store ptr %427, ptr %55, align 8, !tbaa !5
  %429 = getelementptr inbounds %class.Test, ptr %66, i32 0, i32 2
  %430 = load ptr, ptr %429, align 8, !tbaa !29
  %431 = load ptr, ptr %55, align 8, !tbaa !5
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %430, ptr noundef %431)
          to label %432 unwind label %534

432:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 208, ptr %56) #10
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %56)
          to label %433 unwind label %538

433:                                              ; preds = %432
  %434 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %56, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %434, ptr align 16 %45, i64 16, i1 false), !tbaa.struct !17
  %435 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %56, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %435, ptr align 16 %434, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #10
  %436 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %437 unwind label %542

437:                                              ; preds = %433
  %438 = getelementptr inbounds %"class.JPH::Vec3", ptr %57, i32 0, i32 0
  %439 = getelementptr inbounds %union.anon, ptr %438, i32 0, i32 0
  %440 = getelementptr inbounds { double, double }, ptr %439, i32 0, i32 0
  %441 = extractvalue { double, double } %436, 0
  store double %441, ptr %440, align 16
  %442 = getelementptr inbounds { double, double }, ptr %439, i32 0, i32 1
  %443 = extractvalue { double, double } %436, 1
  store double %443, ptr %442, align 8
  %444 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %56, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %444, ptr align 16 %57, i64 16, i1 false), !tbaa.struct !17
  %445 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %56, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %445, ptr align 16 %444, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #10
  %446 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %447 unwind label %546

447:                                              ; preds = %437
  %448 = getelementptr inbounds %"class.JPH::Vec3", ptr %58, i32 0, i32 0
  %449 = getelementptr inbounds %union.anon, ptr %448, i32 0, i32 0
  %450 = getelementptr inbounds { double, double }, ptr %449, i32 0, i32 0
  %451 = extractvalue { double, double } %446, 0
  store double %451, ptr %450, align 16
  %452 = getelementptr inbounds { double, double }, ptr %449, i32 0, i32 1
  %453 = extractvalue { double, double } %446, 1
  store double %453, ptr %452, align 8
  %454 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %56, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %454, ptr align 16 %58, i64 16, i1 false), !tbaa.struct !17
  %455 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %56, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %455, ptr align 16 %454, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #10
  %456 = load ptr, ptr %48, align 8, !tbaa !5
  %457 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %56, ptr noundef nonnull align 16 dereferenceable(122) @_ZN3JPH4Body13sFixedToWorldE, ptr noundef nonnull align 16 dereferenceable(122) %456)
          to label %458 unwind label %550

458:                                              ; preds = %447
  store ptr %457, ptr %59, align 8, !tbaa !5
  %459 = getelementptr inbounds %class.Test, ptr %66, i32 0, i32 2
  %460 = load ptr, ptr %459, align 8, !tbaa !29
  %461 = load ptr, ptr %59, align 8, !tbaa !5
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %460, ptr noundef %461)
          to label %462 unwind label %550

462:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #10
  %463 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %464 unwind label %554

464:                                              ; preds = %462
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %463, i32 noundef 2)
          to label %465 unwind label %558

465:                                              ; preds = %464
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %60, ptr noundef %463)
          to label %466 unwind label %554

466:                                              ; preds = %465
  %467 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %60)
          to label %468 unwind label %562

468:                                              ; preds = %466
  invoke void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40) %467, i32 noundef 0, i32 noundef 1)
          to label %469 unwind label %562

469:                                              ; preds = %468
  %470 = load ptr, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #10
  %471 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %60)
          to label %472 unwind label %566

472:                                              ; preds = %469
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %61, ptr noundef %471, i32 noundef 0, i32 noundef 0)
          to label %473 unwind label %566

473:                                              ; preds = %472
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %470, ptr noundef nonnull align 8 dereferenceable(16) %61)
          to label %474 unwind label %570

474:                                              ; preds = %473
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %61) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #10
  %475 = load ptr, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #10
  %476 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %60)
          to label %477 unwind label %575

477:                                              ; preds = %474
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %62, ptr noundef %476, i32 noundef 0, i32 noundef 1)
          to label %478 unwind label %575

478:                                              ; preds = %477
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %475, ptr noundef nonnull align 8 dereferenceable(16) %62)
          to label %479 unwind label %579

479:                                              ; preds = %478
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %62) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #10
  call void @llvm.lifetime.start.p0(i64 96, ptr %63) #10
  invoke void @_ZN3JPH22GearConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(96) %63)
          to label %480 unwind label %584

480:                                              ; preds = %479
  %481 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %52, i32 0, i32 4
  %482 = getelementptr inbounds %"class.JPH::GearConstraintSettings", ptr %63, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %482, ptr align 16 %481, i64 16, i1 false), !tbaa.struct !17
  %483 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %56, i32 0, i32 4
  %484 = getelementptr inbounds %"class.JPH::GearConstraintSettings", ptr %63, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %484, ptr align 16 %483, i64 16, i1 false), !tbaa.struct !17
  invoke void @_ZN3JPH22GearConstraintSettings8SetRatioEii(ptr noundef nonnull align 16 dereferenceable(96) %63, i32 noundef 100, i32 noundef 400)
          to label %485 unwind label %588

485:                                              ; preds = %480
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #10
  %486 = load ptr, ptr %31, align 8, !tbaa !5
  %487 = load ptr, ptr %48, align 8, !tbaa !5
  %488 = invoke noundef ptr @_ZNK3JPH22GearConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(96) %63, ptr noundef nonnull align 16 dereferenceable(122) %486, ptr noundef nonnull align 16 dereferenceable(122) %487)
          to label %489 unwind label %592

489:                                              ; preds = %485
  store ptr %488, ptr %64, align 8, !tbaa !5
  %490 = load ptr, ptr %64, align 8, !tbaa !5
  %491 = load ptr, ptr %55, align 8, !tbaa !5
  %492 = load ptr, ptr %59, align 8, !tbaa !5
  invoke void @_ZN3JPH14GearConstraint14SetConstraintsEPKNS_10ConstraintES3_(ptr noundef nonnull align 16 dereferenceable(192) %490, ptr noundef %491, ptr noundef %492)
          to label %493 unwind label %592

493:                                              ; preds = %489
  %494 = getelementptr inbounds %class.Test, ptr %66, i32 0, i32 2
  %495 = load ptr, ptr %494, align 8, !tbaa !29
  %496 = load ptr, ptr %64, align 8, !tbaa !5
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %495, ptr noundef %496)
          to label %497 unwind label %592

497:                                              ; preds = %493
  %498 = load ptr, ptr %48, align 8, !tbaa !5
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %65, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 3.000000e+00)
          to label %499 unwind label %592

499:                                              ; preds = %497
  %500 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 0
  %501 = load double, ptr %500, align 16
  %502 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 1
  %503 = load double, ptr %502, align 8
  invoke void @_ZN3JPH4Body18SetAngularVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %498, double %501, double %503)
          to label %504 unwind label %592

504:                                              ; preds = %499
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %63) #10
  call void @llvm.lifetime.end.p0(i64 96, ptr %63) #10
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %60) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %56) #10
  call void @llvm.lifetime.end.p0(i64 208, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %52) #10
  call void @llvm.lifetime.end.p0(i64 208, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #10
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %36) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %36) #10
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %35) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #10
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %19) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %19) #10
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %18) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %18) #10
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %15) #10
  call void @llvm.lifetime.end.p0(i64 120, ptr %15) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #10
  ret void

505:                                              ; preds = %371, %370
  %506 = landingpad { ptr, i32 }
          cleanup
  %507 = extractvalue { ptr, i32 } %506, 0
  store ptr %507, ptr %16, align 8
  %508 = extractvalue { ptr, i32 } %506, 1
  store i32 %508, ptr %17, align 4
  br label %607

509:                                              ; preds = %377
  %510 = landingpad { ptr, i32 }
          cleanup
  %511 = extractvalue { ptr, i32 } %510, 0
  store ptr %511, ptr %16, align 8
  %512 = extractvalue { ptr, i32 } %510, 1
  store i32 %512, ptr %17, align 4
  br label %517

513:                                              ; preds = %394
  %514 = landingpad { ptr, i32 }
          cleanup
  %515 = extractvalue { ptr, i32 } %514, 0
  store ptr %515, ptr %16, align 8
  %516 = extractvalue { ptr, i32 } %514, 1
  store i32 %516, ptr %17, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %49) #10
  br label %517

517:                                              ; preds = %513, %509
  call void @llvm.lifetime.end.p0(i64 256, ptr %49) #10
  br label %606

518:                                              ; preds = %401, %396
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %16, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %17, align 4
  br label %606

522:                                              ; preds = %402
  %523 = landingpad { ptr, i32 }
          cleanup
  %524 = extractvalue { ptr, i32 } %523, 0
  store ptr %524, ptr %16, align 8
  %525 = extractvalue { ptr, i32 } %523, 1
  store i32 %525, ptr %17, align 4
  br label %605

526:                                              ; preds = %403
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %16, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #10
  br label %604

530:                                              ; preds = %407
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %16, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #10
  br label %604

534:                                              ; preds = %428, %417
  %535 = landingpad { ptr, i32 }
          cleanup
  %536 = extractvalue { ptr, i32 } %535, 0
  store ptr %536, ptr %16, align 8
  %537 = extractvalue { ptr, i32 } %535, 1
  store i32 %537, ptr %17, align 4
  br label %603

538:                                              ; preds = %432
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %16, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %17, align 4
  br label %602

542:                                              ; preds = %433
  %543 = landingpad { ptr, i32 }
          cleanup
  %544 = extractvalue { ptr, i32 } %543, 0
  store ptr %544, ptr %16, align 8
  %545 = extractvalue { ptr, i32 } %543, 1
  store i32 %545, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #10
  br label %601

546:                                              ; preds = %437
  %547 = landingpad { ptr, i32 }
          cleanup
  %548 = extractvalue { ptr, i32 } %547, 0
  store ptr %548, ptr %16, align 8
  %549 = extractvalue { ptr, i32 } %547, 1
  store i32 %549, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #10
  br label %601

550:                                              ; preds = %458, %447
  %551 = landingpad { ptr, i32 }
          cleanup
  %552 = extractvalue { ptr, i32 } %551, 0
  store ptr %552, ptr %16, align 8
  %553 = extractvalue { ptr, i32 } %551, 1
  store i32 %553, ptr %17, align 4
  br label %600

554:                                              ; preds = %465, %462
  %555 = landingpad { ptr, i32 }
          cleanup
  %556 = extractvalue { ptr, i32 } %555, 0
  store ptr %556, ptr %16, align 8
  %557 = extractvalue { ptr, i32 } %555, 1
  store i32 %557, ptr %17, align 4
  br label %599

558:                                              ; preds = %464
  %559 = landingpad { ptr, i32 }
          cleanup
  %560 = extractvalue { ptr, i32 } %559, 0
  store ptr %560, ptr %16, align 8
  %561 = extractvalue { ptr, i32 } %559, 1
  store i32 %561, ptr %17, align 4
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %463) #10
  br label %599

562:                                              ; preds = %468, %466
  %563 = landingpad { ptr, i32 }
          cleanup
  %564 = extractvalue { ptr, i32 } %563, 0
  store ptr %564, ptr %16, align 8
  %565 = extractvalue { ptr, i32 } %563, 1
  store i32 %565, ptr %17, align 4
  br label %598

566:                                              ; preds = %472, %469
  %567 = landingpad { ptr, i32 }
          cleanup
  %568 = extractvalue { ptr, i32 } %567, 0
  store ptr %568, ptr %16, align 8
  %569 = extractvalue { ptr, i32 } %567, 1
  store i32 %569, ptr %17, align 4
  br label %574

570:                                              ; preds = %473
  %571 = landingpad { ptr, i32 }
          cleanup
  %572 = extractvalue { ptr, i32 } %571, 0
  store ptr %572, ptr %16, align 8
  %573 = extractvalue { ptr, i32 } %571, 1
  store i32 %573, ptr %17, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %61) #10
  br label %574

574:                                              ; preds = %570, %566
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #10
  br label %598

575:                                              ; preds = %477, %474
  %576 = landingpad { ptr, i32 }
          cleanup
  %577 = extractvalue { ptr, i32 } %576, 0
  store ptr %577, ptr %16, align 8
  %578 = extractvalue { ptr, i32 } %576, 1
  store i32 %578, ptr %17, align 4
  br label %583

579:                                              ; preds = %478
  %580 = landingpad { ptr, i32 }
          cleanup
  %581 = extractvalue { ptr, i32 } %580, 0
  store ptr %581, ptr %16, align 8
  %582 = extractvalue { ptr, i32 } %580, 1
  store i32 %582, ptr %17, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %62) #10
  br label %583

583:                                              ; preds = %579, %575
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #10
  br label %598

584:                                              ; preds = %479
  %585 = landingpad { ptr, i32 }
          cleanup
  %586 = extractvalue { ptr, i32 } %585, 0
  store ptr %586, ptr %16, align 8
  %587 = extractvalue { ptr, i32 } %585, 1
  store i32 %587, ptr %17, align 4
  br label %597

588:                                              ; preds = %480
  %589 = landingpad { ptr, i32 }
          cleanup
  %590 = extractvalue { ptr, i32 } %589, 0
  store ptr %590, ptr %16, align 8
  %591 = extractvalue { ptr, i32 } %589, 1
  store i32 %591, ptr %17, align 4
  br label %596

592:                                              ; preds = %499, %497, %493, %489, %485
  %593 = landingpad { ptr, i32 }
          cleanup
  %594 = extractvalue { ptr, i32 } %593, 0
  store ptr %594, ptr %16, align 8
  %595 = extractvalue { ptr, i32 } %593, 1
  store i32 %595, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #10
  br label %596

596:                                              ; preds = %592, %588
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %63) #10
  br label %597

597:                                              ; preds = %596, %584
  call void @llvm.lifetime.end.p0(i64 96, ptr %63) #10
  br label %598

598:                                              ; preds = %597, %583, %574, %562
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %60) #10
  br label %599

599:                                              ; preds = %598, %558, %554
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #10
  br label %600

600:                                              ; preds = %599, %550
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  br label %601

601:                                              ; preds = %600, %546, %542
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %56) #10
  br label %602

602:                                              ; preds = %601, %538
  call void @llvm.lifetime.end.p0(i64 208, ptr %56) #10
  br label %603

603:                                              ; preds = %602, %534
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  br label %604

604:                                              ; preds = %603, %530, %526
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %52) #10
  br label %605

605:                                              ; preds = %604, %522
  call void @llvm.lifetime.end.p0(i64 208, ptr %52) #10
  br label %606

606:                                              ; preds = %605, %518, %517
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #10
  br label %607

607:                                              ; preds = %606, %505
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #10
  br label %608

608:                                              ; preds = %607, %366, %310
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %36) #10
  br label %609

609:                                              ; preds = %608, %306
  call void @llvm.lifetime.end.p0(i64 88, ptr %36) #10
  br label %610

610:                                              ; preds = %609, %302
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %35) #10
  br label %611

611:                                              ; preds = %610, %298
  call void @llvm.lifetime.end.p0(i64 88, ptr %35) #10
  br label %612

612:                                              ; preds = %611, %294, %293
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  br label %613

613:                                              ; preds = %612, %281
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #10
  br label %614

614:                                              ; preds = %613, %277
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #10
  br label %615

615:                                              ; preds = %614, %195, %140
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %19) #10
  br label %616

616:                                              ; preds = %615, %136
  call void @llvm.lifetime.end.p0(i64 88, ptr %19) #10
  br label %617

617:                                              ; preds = %616, %132
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %18) #10
  br label %618

618:                                              ; preds = %617, %128
  call void @llvm.lifetime.end.p0(i64 88, ptr %18) #10
  br label %619

619:                                              ; preds = %618, %124
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %15) #10
  br label %620

620:                                              ; preds = %619, %120
  call void @llvm.lifetime.end.p0(i64 120, ptr %15) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #10
  br label %621

621:                                              ; preds = %620
  %622 = load ptr, ptr %16, align 8
  %623 = load i32, ptr %17, align 4
  %624 = insertvalue { ptr, i32 } poison, ptr %622, 0
  %625 = insertvalue { ptr, i32 } %624, i32 %623, 1
  resume { ptr, i32 } %625
}

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112), float noundef) #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 #3 align 2

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

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

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

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

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

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

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

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

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

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

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

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) #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

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

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

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

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

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

declare noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH22GearConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(96)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH22GearConstraintSettings8SetRatioEii(ptr noundef nonnull align 16 dereferenceable(96), i32 noundef, i32 noundef) #9 align 2

declare noundef ptr @_ZNK3JPH22GearConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(96), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH14GearConstraint14SetConstraintsEPKNS_10ConstraintES3_(ptr noundef nonnull align 16 dereferenceable(192), ptr noundef, ptr noundef) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #7 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 @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(76)) unnamed_addr #7 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"_ZTSSt16initializer_listIN3JPH4Vec3EE", !6, i64 0, !15, i64 8}
!15 = !{!"long", !7, i64 0}
!16 = !{!14, !15, i64 8}
!17 = !{i64 0, i64 16, !18}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !6, i64 24}
!22 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !23, i64 48, !24, i64 56}
!23 = !{!"bool", !7, i64 0}
!24 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !25, i64 0}
!25 = !{!"_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, !15, i64 8, !26, i64 16, !15, i64 24, !27, i64 32, !6, i64 48}
!26 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!27 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !10, i64 0, !15, i64 8}
!28 = distinct !{!28, !20}
!29 = !{!22, !6, i64 16}


; 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::Body" = type <{ %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::AABox", %"class.JPH::RefConst", ptr, i64, %"class.JPH::CollisionGroup", float, float, %"class.JPH::BodyID", i16, i8, %"class.JPH::BroadPhaseLayer", i8, %"struct.std::atomic", [6 x i8] }>
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::BroadPhaseLayer" = type { i8 }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i8 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::STLAllocator" = type { i8 }
%"class.JPH::ConvexHullShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Array", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShapeSettings.base" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::RefConst.12", float }>
%"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.6" }
%"struct.std::atomic.6" = type { %"struct.std::__atomic_base.7" }
%"struct.std::__atomic_base.7" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.8, i8, [7 x i8] }>
%union.anon.8 = 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.11 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.11 = type { i64, [8 x i8] }
%"class.JPH::RefConst.12" = type { ptr }
%"class.JPH::CylinderShapeSettings" = type { %"class.JPH::ConvexShapeSettings.base", float, float, float }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.13" }
%"class.JPH::Array.13" = 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" }
%"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::HingeConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", float, %"class.JPH::MotorSettings", [12 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.17", i8, i32, i32, i32, float, i64 }
%"class.JPH::RefTarget.17" = type { %"struct.std::atomic.6" }
%"class.JPH::SpringSettings" = type { i8, %union.anon.18, float }
%union.anon.18 = type { float }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, float }
%"class.JPH::Ref.36" = type { ptr }
%"class.JPH::GearConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>

@_ZN3JPH4Body13sFixedToWorldE = external global %"class.JPH::Body", align 16

; 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 @_ZN18GearConstraintTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::Array", align 8
  %3 = alloca [8 x %"class.JPH::Vec3"], align 16
  %4 = alloca %"class.JPH::STLAllocator", align 1
  %5 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %6 = alloca %"class.JPH::CylinderShapeSettings", align 8
  %7 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %8 = alloca %"class.JPH::Quat", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::BodyCreationSettings", align 16
  %12 = alloca %"class.JPH::CylinderShapeSettings", align 8
  %13 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %14 = alloca %"class.JPH::Quat", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::BodyCreationSettings", align 16
  %18 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %19 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %20 = alloca %"class.JPH::Ref.36", align 8
  %21 = alloca %"class.JPH::CollisionGroup", align 8
  %22 = alloca %"class.JPH::CollisionGroup", align 8
  %23 = alloca %"class.JPH::GearConstraintSettings", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = tail call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %0, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #10
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %3) #10
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 0.000000e+00, float noundef 0x3FA99999A0000000, float noundef 0x3F847AE140000000)
  %26 = getelementptr inbounds i8, ptr %3, i64 16
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %26, float noundef 0.000000e+00, float noundef 0xBFA99999A0000000, float noundef 0x3F847AE140000000)
  %27 = getelementptr inbounds i8, ptr %3, i64 32
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef 0.000000e+00, float noundef 0x3FA99999A0000000, float noundef 0xBF847AE140000000)
  %28 = getelementptr inbounds i8, ptr %3, i64 48
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 0xBFA99999A0000000, float noundef 0xBF847AE140000000)
  %29 = getelementptr inbounds i8, ptr %3, i64 64
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %29, float noundef 0x3F947AE140000000, float noundef 0xBFA99999A0000000, float noundef 0x3F747AE140000000)
  %30 = getelementptr inbounds i8, ptr %3, i64 80
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %30, float noundef 0x3F947AE140000000, float noundef 0x3FA99999A0000000, float noundef 0x3F747AE140000000)
  %31 = getelementptr inbounds i8, ptr %3, i64 96
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %31, float noundef 0x3F947AE140000000, float noundef 0xBFA99999A0000000, float noundef 0xBF747AE140000000)
  %32 = getelementptr inbounds i8, ptr %3, i64 112
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef 0x3F947AE140000000, float noundef 0x3FA99999A0000000, float noundef 0xBF747AE140000000)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr nonnull %3, i64 8, ptr noundef nonnull align 1 dereferenceable(1) %4)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %3) #10
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %5) #10
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %5, ptr noundef nonnull align 8 dereferenceable(24) %2, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %33 unwind label %53

33:                                               ; preds = %1
  %34 = getelementptr inbounds i8, ptr %5, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %35 unwind label %55

35:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %6) #10
  invoke void @_ZN3JPH21CylinderShapeSettingsC2EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %6, float noundef 0x3FA99999A0000000, float noundef 5.000000e-01, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %36 unwind label %57

36:                                               ; preds = %35
  %37 = getelementptr inbounds i8, ptr %6, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %37)
          to label %38 unwind label %59

38:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %7) #10
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %7)
          to label %39 unwind label %61

39:                                               ; preds = %38
  %40 = getelementptr inbounds i8, ptr %7, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %41 unwind label %63

41:                                               ; preds = %39
  %42 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %43 unwind label %63

43:                                               ; preds = %41
  %44 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %45 unwind label %63

45:                                               ; preds = %43
  %46 = extractvalue { double, double } %42, 1
  %47 = extractvalue { double, double } %42, 0
  %48 = extractvalue { double, double } %44, 0
  %49 = extractvalue { double, double } %44, 1
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %7, double %47, double %46, double %48, double %49, ptr noundef nonnull %6, i32 noundef 0)
          to label %.preheader129 unwind label %63

.preheader129:                                    ; preds = %45
  %50 = getelementptr inbounds i8, ptr %8, i64 8
  %51 = getelementptr inbounds i8, ptr %9, i64 8
  br label %65

52:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef 0.000000e+00, float noundef 3.000000e+00, float noundef 0.000000e+00)
          to label %88 unwind label %122

53:                                               ; preds = %1
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %306

55:                                               ; preds = %33
  %56 = landingpad { ptr, i32 }
          cleanup
  br label %305

57:                                               ; preds = %35
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %304

59:                                               ; preds = %36
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %303

61:                                               ; preds = %38
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %302

63:                                               ; preds = %45, %43, %41, %39
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %301

65:                                               ; preds = %.preheader129, %84
  %.093130 = phi i32 [ 0, %.preheader129 ], [ %85, %84 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #10
  %66 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %67 unwind label %86

67:                                               ; preds = %65
  %68 = extractvalue { double, double } %66, 0
  %69 = extractvalue { double, double } %66, 1
  %70 = uitofp nneg i32 %.093130 to float
  %71 = fmul float %70, 0x401921FB60000000
  %72 = fdiv float %71, 1.000000e+02
  %73 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %68, double %69, float noundef %72)
          to label %74 unwind label %86

74:                                               ; preds = %67
  %75 = extractvalue { double, double } %73, 0
  store double %75, ptr %8, align 16
  %76 = extractvalue { double, double } %73, 1
  store double %76, ptr %50, align 8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef 5.000000e-01, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %77 unwind label %86

77:                                               ; preds = %74
  %78 = load double, ptr %9, align 16
  %79 = load double, ptr %51, align 8
  %80 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %8, double %78, double %79)
          to label %81 unwind label %86

81:                                               ; preds = %77
  %82 = extractvalue { double, double } %80, 0
  %83 = extractvalue { double, double } %80, 1
  %.sroa.047.0.copyload = load double, ptr %8, align 16
  %.sroa.248.0.copyload = load double, ptr %50, align 8, !tbaa !5
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %7, double %82, double %83, double %.sroa.047.0.copyload, double %.sroa.248.0.copyload, ptr noundef nonnull %5, i32 noundef 0)
          to label %84 unwind label %86

84:                                               ; preds = %81
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #10
  %85 = add nuw nsw i32 %.093130, 1
  %exitcond.not = icmp eq i32 %85, 100
  br i1 %exitcond.not, label %52, label %65, !llvm.loop !8

86:                                               ; preds = %81, %77, %74, %67, %65
  %87 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #10
  br label %301

88:                                               ; preds = %52
  %89 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %90 unwind label %124

90:                                               ; preds = %88
  %91 = extractvalue { double, double } %89, 0
  %92 = extractvalue { double, double } %89, 1
  %93 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %91, double %92, float noundef 0x3FF921FB60000000)
          to label %94 unwind label %124

94:                                               ; preds = %90
  %95 = extractvalue { double, double } %93, 0
  %96 = extractvalue { double, double } %93, 1
  %97 = getelementptr inbounds i8, ptr %0, i64 24
  %98 = load ptr, ptr %97, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %11) #10
  %.sroa.037.0.copyload = load double, ptr %10, align 16
  %.sroa.238.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 8
  %.sroa.238.0.copyload = load double, ptr %.sroa.238.0..sroa_idx, align 8, !tbaa !5
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %11, ptr noundef nonnull %7, double %.sroa.037.0.copyload, double %.sroa.238.0.copyload, double %95, double %96, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %99 unwind label %126

99:                                               ; preds = %94
  %100 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %98, ptr noundef nonnull align 16 dereferenceable(256) %11)
          to label %101 unwind label %128

101:                                              ; preds = %99
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #10
  %102 = load ptr, ptr %97, align 8, !tbaa !10
  %103 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %100)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %102, ptr noundef nonnull align 4 dereferenceable(4) %103, i32 noundef 0)
          to label %104 unwind label %131

104:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %12) #10
  invoke void @_ZN3JPH21CylinderShapeSettingsC2EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %12, float noundef 0x3FA99999A0000000, float noundef 2.000000e+00, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %105 unwind label %133

105:                                              ; preds = %104
  %106 = getelementptr inbounds i8, ptr %12, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %106)
          to label %107 unwind label %135

107:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %13) #10
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %13)
          to label %108 unwind label %137

108:                                              ; preds = %107
  %109 = getelementptr inbounds i8, ptr %13, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %109)
          to label %110 unwind label %139

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

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

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 @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %13, double %116, double %115, double %117, double %118, ptr noundef nonnull %12, i32 noundef 0)
          to label %.preheader unwind label %139

.preheader:                                       ; preds = %114
  %119 = getelementptr inbounds i8, ptr %14, i64 8
  %120 = getelementptr inbounds i8, ptr %15, i64 8
  br label %141

121:                                              ; preds = %161
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef 0x400428F5C0000000, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %165 unwind label %244

122:                                              ; preds = %52
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %300

124:                                              ; preds = %90, %88
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %300

126:                                              ; preds = %94
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %130

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

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

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

133:                                              ; preds = %104
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %299

135:                                              ; preds = %105
  %136 = landingpad { ptr, i32 }
          cleanup
  br label %298

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

139:                                              ; preds = %114, %112, %110, %108
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %296

141:                                              ; preds = %.preheader, %161
  %.094131 = phi i32 [ 0, %.preheader ], [ %162, %161 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #10
  %142 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %143 unwind label %163

143:                                              ; preds = %141
  %144 = extractvalue { double, double } %142, 0
  %145 = extractvalue { double, double } %142, 1
  %146 = uitofp nneg i32 %.094131 to float
  %147 = fadd float %146, 5.000000e-01
  %148 = fmul float %147, 0x401921FB60000000
  %149 = fdiv float %148, 4.000000e+02
  %150 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %144, double %145, float noundef %149)
          to label %151 unwind label %163

151:                                              ; preds = %143
  %152 = extractvalue { double, double } %150, 0
  store double %152, ptr %14, align 16
  %153 = extractvalue { double, double } %150, 1
  store double %153, ptr %119, align 8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 2.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %154 unwind label %163

154:                                              ; preds = %151
  %155 = load double, ptr %15, align 16
  %156 = load double, ptr %120, align 8
  %157 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %14, double %155, double %156)
          to label %158 unwind label %163

158:                                              ; preds = %154
  %159 = extractvalue { double, double } %157, 0
  %160 = extractvalue { double, double } %157, 1
  %.sroa.023.0.copyload = load double, ptr %14, align 16
  %.sroa.224.0.copyload = load double, ptr %119, align 8, !tbaa !5
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %13, double %159, double %160, double %.sroa.023.0.copyload, double %.sroa.224.0.copyload, ptr noundef nonnull %5, i32 noundef 0)
          to label %161 unwind label %163

161:                                              ; preds = %158
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  %162 = add nuw nsw i32 %.094131, 1
  %exitcond132.not = icmp eq i32 %162, 400
  br i1 %exitcond132.not, label %121, label %141, !llvm.loop !20

163:                                              ; preds = %158, %154, %151, %143, %141
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  br label %296

165:                                              ; preds = %121
  %166 = load double, ptr %16, align 16
  %167 = getelementptr inbounds i8, ptr %16, i64 8
  %168 = load double, ptr %167, align 8
  %169 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %166, double %168)
          to label %170 unwind label %244

170:                                              ; preds = %165
  %171 = extractvalue { double, double } %169, 0
  %172 = extractvalue { double, double } %169, 1
  %173 = load ptr, ptr %97, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %17) #10
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %17, ptr noundef nonnull %13, double %171, double %172, double %95, double %96, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %174 unwind label %246

174:                                              ; preds = %170
  %175 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %173, ptr noundef nonnull align 16 dereferenceable(256) %17)
          to label %176 unwind label %248

176:                                              ; preds = %174
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %17) #10
  %177 = load ptr, ptr %97, align 8, !tbaa !10
  %178 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %175)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %177, ptr noundef nonnull align 4 dereferenceable(4) %178, i32 noundef 0)
          to label %179 unwind label %251

179:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %18) #10
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %18)
          to label %180 unwind label %253

180:                                              ; preds = %179
  %181 = getelementptr inbounds i8, ptr %18, i64 96
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %181, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !21
  %182 = getelementptr inbounds i8, ptr %18, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %182, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false)
  %183 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %184 unwind label %255

184:                                              ; preds = %180
  %185 = extractvalue { double, double } %183, 0
  %186 = extractvalue { double, double } %183, 1
  %187 = getelementptr inbounds i8, ptr %18, i64 112
  store double %185, ptr %187, align 16
  %.sroa.511.0..sroa_idx = getelementptr inbounds i8, ptr %18, i64 120
  store double %186, ptr %.sroa.511.0..sroa_idx, align 8, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %18, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %188, ptr noundef nonnull align 16 dereferenceable(16) %187, i64 16, i1 false), !tbaa.struct !21
  %189 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %190 unwind label %257

190:                                              ; preds = %184
  %191 = extractvalue { double, double } %189, 0
  %192 = extractvalue { double, double } %189, 1
  %193 = getelementptr inbounds i8, ptr %18, i64 128
  store double %191, ptr %193, align 16
  %.sroa.59.0..sroa_idx = getelementptr inbounds i8, ptr %18, i64 136
  store double %192, ptr %.sroa.59.0..sroa_idx, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %18, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %194, ptr noundef nonnull align 16 dereferenceable(16) %193, i64 16, i1 false), !tbaa.struct !21
  %195 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %18, ptr noundef nonnull align 16 dereferenceable(122) @_ZN3JPH4Body13sFixedToWorldE, ptr noundef nonnull align 16 dereferenceable(122) %100)
          to label %196 unwind label %259

196:                                              ; preds = %190
  %197 = getelementptr inbounds i8, ptr %0, i64 16
  %198 = load ptr, ptr %197, align 8, !tbaa !22
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %198, ptr noundef %195)
          to label %199 unwind label %259

199:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %19) #10
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %19)
          to label %200 unwind label %261

200:                                              ; preds = %199
  %201 = getelementptr inbounds i8, ptr %19, i64 96
  store double %171, ptr %201, align 16
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %19, i64 104
  store double %172, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %19, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %202, ptr noundef nonnull align 16 dereferenceable(16) %201, i64 16, i1 false), !tbaa.struct !21
  %203 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %204 unwind label %263

204:                                              ; preds = %200
  %205 = extractvalue { double, double } %203, 0
  %206 = extractvalue { double, double } %203, 1
  %207 = getelementptr inbounds i8, ptr %19, i64 112
  store double %205, ptr %207, align 16
  %.sroa.55.0..sroa_idx = getelementptr inbounds i8, ptr %19, i64 120
  store double %206, ptr %.sroa.55.0..sroa_idx, align 8, !tbaa !5
  %208 = getelementptr inbounds i8, ptr %19, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %208, ptr noundef nonnull align 16 dereferenceable(16) %207, i64 16, i1 false), !tbaa.struct !21
  %209 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %210 unwind label %265

210:                                              ; preds = %204
  %211 = extractvalue { double, double } %209, 0
  %212 = extractvalue { double, double } %209, 1
  %213 = getelementptr inbounds i8, ptr %19, i64 128
  store double %211, ptr %213, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %19, i64 136
  store double %212, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %19, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %214, ptr noundef nonnull align 16 dereferenceable(16) %213, i64 16, i1 false), !tbaa.struct !21
  %215 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %19, ptr noundef nonnull align 16 dereferenceable(122) @_ZN3JPH4Body13sFixedToWorldE, ptr noundef nonnull align 16 dereferenceable(122) %175)
          to label %216 unwind label %267

216:                                              ; preds = %210
  %217 = load ptr, ptr %197, align 8, !tbaa !22
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %217, ptr noundef %215)
          to label %218 unwind label %267

218:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #10
  %219 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %220 unwind label %269

220:                                              ; preds = %218
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %219, i32 noundef 2)
          to label %221 unwind label %271

221:                                              ; preds = %220
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull %219)
          to label %222 unwind label %269

222:                                              ; preds = %221
  %223 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  invoke void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40) %223, i32 noundef 0, i32 noundef 1)
          to label %224 unwind label %273

224:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #10
  %225 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %20)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %21, ptr noundef %225, i32 noundef 0, i32 noundef 0)
          to label %226 unwind label %275

226:                                              ; preds = %224
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %100, ptr noundef nonnull align 8 dereferenceable(16) %21)
          to label %227 unwind label %277

227:                                              ; preds = %226
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #10
  %228 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %20)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef %228, i32 noundef 0, i32 noundef 1)
          to label %229 unwind label %280

229:                                              ; preds = %227
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %175, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %230 unwind label %282

230:                                              ; preds = %229
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #10
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %23) #10
  invoke void @_ZN3JPH22GearConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(96) %23)
          to label %231 unwind label %285

231:                                              ; preds = %230
  %232 = getelementptr inbounds i8, ptr %23, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %232, ptr noundef nonnull align 16 dereferenceable(16) %188, i64 16, i1 false), !tbaa.struct !21
  %233 = getelementptr inbounds i8, ptr %23, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %233, ptr noundef nonnull align 16 dereferenceable(16) %208, i64 16, i1 false), !tbaa.struct !21
  call void @_ZN3JPH22GearConstraintSettings8SetRatioEii(ptr noundef nonnull align 16 dereferenceable(96) %23, i32 noundef 100, i32 noundef 400)
  %234 = invoke noundef ptr @_ZNK3JPH22GearConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(96) %23, ptr noundef nonnull align 16 dereferenceable(122) %100, ptr noundef nonnull align 16 dereferenceable(122) %175)
          to label %235 unwind label %287

235:                                              ; preds = %231
  invoke void @_ZN3JPH14GearConstraint14SetConstraintsEPKNS_10ConstraintES3_(ptr noundef nonnull align 16 dereferenceable(192) %234, ptr noundef %195, ptr noundef %215)
          to label %236 unwind label %287

236:                                              ; preds = %235
  %237 = load ptr, ptr %197, align 8, !tbaa !22
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %237, ptr noundef nonnull %234)
          to label %238 unwind label %287

238:                                              ; preds = %236
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %24, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 3.000000e+00)
          to label %239 unwind label %287

239:                                              ; preds = %238
  %240 = load double, ptr %24, align 16
  %241 = getelementptr inbounds i8, ptr %24, i64 8
  %242 = load double, ptr %241, align 8
  invoke void @_ZN3JPH4Body18SetAngularVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %175, double %240, double %242)
          to label %243 unwind label %287

243:                                              ; preds = %239
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %23) #10
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %23) #10
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %19) #10
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %19) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %18) #10
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %18) #10
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %13) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %13) #10
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %12) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #10
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %7) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %7) #10
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %6) #10
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #10
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #10
  ret void

244:                                              ; preds = %165, %121
  %245 = landingpad { ptr, i32 }
          cleanup
  br label %296

246:                                              ; preds = %170
  %247 = landingpad { ptr, i32 }
          cleanup
  br label %250

248:                                              ; preds = %174
  %249 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #10
  br label %250

250:                                              ; preds = %248, %246
  %.pn96 = phi { ptr, i32 } [ %249, %248 ], [ %247, %246 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %17) #10
  br label %296

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

253:                                              ; preds = %179
  %254 = landingpad { ptr, i32 }
          cleanup
  br label %295

255:                                              ; preds = %180
  %256 = landingpad { ptr, i32 }
          cleanup
  br label %294

257:                                              ; preds = %184
  %258 = landingpad { ptr, i32 }
          cleanup
  br label %294

259:                                              ; preds = %196, %190
  %260 = landingpad { ptr, i32 }
          cleanup
  br label %294

261:                                              ; preds = %199
  %262 = landingpad { ptr, i32 }
          cleanup
  br label %293

263:                                              ; preds = %200
  %264 = landingpad { ptr, i32 }
          cleanup
  br label %292

265:                                              ; preds = %204
  %266 = landingpad { ptr, i32 }
          cleanup
  br label %292

267:                                              ; preds = %216, %210
  %268 = landingpad { ptr, i32 }
          cleanup
  br label %292

269:                                              ; preds = %221, %218
  %270 = landingpad { ptr, i32 }
          cleanup
  br label %291

271:                                              ; preds = %220
  %272 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %219) #10
  br label %291

273:                                              ; preds = %222
  %274 = landingpad { ptr, i32 }
          cleanup
  br label %290

275:                                              ; preds = %224
  %276 = landingpad { ptr, i32 }
          cleanup
  br label %279

277:                                              ; preds = %226
  %278 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #10
  br label %279

279:                                              ; preds = %277, %275
  %.pn98 = phi { ptr, i32 } [ %278, %277 ], [ %276, %275 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #10
  br label %290

280:                                              ; preds = %227
  %281 = landingpad { ptr, i32 }
          cleanup
  br label %284

282:                                              ; preds = %229
  %283 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #10
  br label %284

284:                                              ; preds = %282, %280
  %.pn100 = phi { ptr, i32 } [ %283, %282 ], [ %281, %280 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #10
  br label %290

285:                                              ; preds = %230
  %286 = landingpad { ptr, i32 }
          cleanup
  br label %289

287:                                              ; preds = %239, %238, %236, %235, %231
  %288 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(96) %23) #10
  br label %289

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

290:                                              ; preds = %289, %284, %279, %273
  %.pn102.pn = phi { ptr, i32 } [ %.pn102, %289 ], [ %.pn100, %284 ], [ %.pn98, %279 ], [ %274, %273 ]
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  br label %291

291:                                              ; preds = %290, %271, %269
  %.pn102.pn.pn = phi { ptr, i32 } [ %.pn102.pn, %290 ], [ %270, %269 ], [ %272, %271 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  br label %292

292:                                              ; preds = %267, %291, %265, %263
  %.pn102.pn.pn.pn.pn = phi { ptr, i32 } [ %266, %265 ], [ %264, %263 ], [ %.pn102.pn.pn, %291 ], [ %268, %267 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %19) #10
  br label %293

293:                                              ; preds = %292, %261
  %.pn102.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn102.pn.pn.pn.pn, %292 ], [ %262, %261 ]
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %19) #10
  br label %294

294:                                              ; preds = %259, %293, %257, %255
  %.pn102.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %258, %257 ], [ %256, %255 ], [ %.pn102.pn.pn.pn.pn.pn, %293 ], [ %260, %259 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %18) #10
  br label %295

295:                                              ; preds = %294, %253
  %.pn102.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn102.pn.pn.pn.pn.pn.pn.pn, %294 ], [ %254, %253 ]
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %18) #10
  br label %296

296:                                              ; preds = %244, %295, %251, %250, %163, %139
  %.pn114 = phi { ptr, i32 } [ %164, %163 ], [ %140, %139 ], [ %245, %244 ], [ %.pn102.pn.pn.pn.pn.pn.pn.pn.pn, %295 ], [ %252, %251 ], [ %.pn96, %250 ]
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %13) #10
  br label %297

297:                                              ; preds = %296, %137
  %.pn114.pn = phi { ptr, i32 } [ %.pn114, %296 ], [ %138, %137 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %13) #10
  br label %298

298:                                              ; preds = %297, %135
  %.pn114.pn.pn = phi { ptr, i32 } [ %.pn114.pn, %297 ], [ %136, %135 ]
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %12) #10
  br label %299

299:                                              ; preds = %298, %133
  %.pn114.pn.pn.pn = phi { ptr, i32 } [ %.pn114.pn.pn, %298 ], [ %134, %133 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %12) #10
  br label %300

300:                                              ; preds = %124, %299, %131, %130, %122
  %.pn114.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %123, %122 ], [ %125, %124 ], [ %.pn114.pn.pn.pn, %299 ], [ %132, %131 ], [ %.pn, %130 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #10
  br label %301

301:                                              ; preds = %300, %86, %63
  %.pn122 = phi { ptr, i32 } [ %87, %86 ], [ %.pn114.pn.pn.pn.pn.pn.pn, %300 ], [ %64, %63 ]
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %7) #10
  br label %302

302:                                              ; preds = %301, %61
  %.pn122.pn = phi { ptr, i32 } [ %.pn122, %301 ], [ %62, %61 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %7) #10
  br label %303

303:                                              ; preds = %302, %59
  %.pn122.pn.pn = phi { ptr, i32 } [ %.pn122.pn, %302 ], [ %60, %59 ]
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #10
  br label %304

304:                                              ; preds = %303, %57
  %.pn122.pn.pn.pn = phi { ptr, i32 } [ %.pn122.pn.pn, %303 ], [ %58, %57 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %6) #10
  br label %305

305:                                              ; preds = %304, %55
  %.pn122.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn122.pn.pn.pn, %304 ], [ %56, %55 ]
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #10
  br label %306

306:                                              ; preds = %305, %53
  %.pn122.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn122.pn.pn.pn.pn, %305 ], [ %54, %53 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #10
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn122.pn.pn.pn.pn.pn
}

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112), float noundef) local_unnamed_addr #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 #3 align 2

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

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

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

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

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

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

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

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

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

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

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

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #7 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 #3 align 2

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

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

declare noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH22GearConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(96)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH22GearConstraintSettings8SetRatioEii(ptr noundef nonnull align 16 dereferenceable(96), i32 noundef, i32 noundef) local_unnamed_addr #9 align 2

declare noundef ptr @_ZNK3JPH22GearConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(96), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH14GearConstraint14SetConstraintsEPKNS_10ConstraintES3_(ptr noundef nonnull align 16 dereferenceable(192), ptr noundef, ptr noundef) local_unnamed_addr #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #7 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 @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(76)) unnamed_addr #7 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #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 = { "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 = { 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 #4 = { 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 #5 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { 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, !12, i64 24}
!11 = !{!"_ZTS4Test", !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !13, i64 48, !14, i64 56}
!12 = !{!"any pointer", !6, i64 0}
!13 = !{!"bool", !6, i64 0}
!14 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !15, i64 0}
!15 = !{!"_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", !12, i64 0, !16, i64 8, !17, i64 16, !16, i64 24, !18, i64 32, !12, i64 48}
!16 = !{!"long", !6, i64 0}
!17 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !12, i64 0}
!18 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !19, i64 0, !16, i64 8}
!19 = !{!"float", !6, i64 0}
!20 = distinct !{!20, !9}
!21 = !{i64 0, i64 16, !5}
!22 = !{!11, !12, i64 16}


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