; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/General/FunnelTest.ll (ZN10FunnelTest10InitializeEv)

; 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::RefConst" = type { ptr }
%"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.5 }
%union.anon.5 = type { <4 x float> }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.7", %"class.JPH::RefConst" }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.6", i32, i32 }
%"class.JPH::RefConst.6" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.7" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.std::linear_congruential_engine" = type { i64 }
%"class.std::uniform_real_distribution" = type { %"struct.std::uniform_real_distribution<float>::param_type" }
%"struct.std::uniform_real_distribution<float>::param_type" = type { float, float }
%"class.JPH::UVec4" = type { %union.anon.8 }
%union.anon.8 = type { <2 x i64> }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Result" = type <{ %union.anon.9, i8, [7 x i8] }>
%union.anon.9 = 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.12 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.12 = type { i64, [8 x 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.4", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.13", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.13" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.4" = type { ptr }
%"class.JPH::TaperedCapsuleShapeSettings" = type { %"class.JPH::ConvexShapeSettings.base", float, float, float }
%"class.JPH::TaperedCylinderShapeSettings" = type { %"class.JPH::ConvexShapeSettings.base", float, float, float, float, [4 x i8] }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.14" }
%"class.JPH::Array.14" = type { i64, i64, ptr }
%"class.JPH::Ref.17" = type { ptr }
%class.Test = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

; 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 @_ZN10FunnelTest10InitializeEv(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 %"class.JPH::RefConst", align 8
  %4 = alloca %"class.JPH::Vec3", align 16
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %"class.JPH::Quat", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::BodyCreationSettings", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Quat", align 16
  %14 = alloca %"class.JPH::Quat", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::BodyID", align 4
  %17 = alloca %"class.std::linear_congruential_engine", align 8
  %18 = alloca %"class.std::uniform_real_distribution", align 4
  %19 = alloca %"class.std::uniform_real_distribution", align 4
  %20 = alloca %"class.std::uniform_real_distribution", align 4
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::UVec4", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::RefConst", align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Array", align 8
  %34 = alloca i32, align 4
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::Vec3", align 16
  %37 = alloca %"class.JPH::Result", align 8
  %38 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca float, align 4
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca float, align 4
  %44 = alloca float, align 4
  %45 = alloca %"class.JPH::Result", align 8
  %46 = alloca %"class.JPH::TaperedCapsuleShapeSettings", align 8
  %47 = alloca %"class.JPH::Vec3", align 16
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::Result", align 8
  %50 = alloca %"class.JPH::TaperedCylinderShapeSettings", align 8
  %51 = alloca %"class.JPH::Vec3", align 16
  %52 = alloca %"class.JPH::Result", align 8
  %53 = alloca %"class.JPH::TaperedCylinderShapeSettings", align 8
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %56 = alloca %"class.JPH::Vec3", align 16
  %57 = alloca %"class.JPH::Quat", align 16
  %58 = alloca %"class.JPH::Vec3", align 16
  %59 = alloca %"class.JPH::Quat", align 16
  %60 = alloca %"class.JPH::Vec3", align 16
  %61 = alloca %"class.JPH::Quat", align 16
  %62 = alloca %"class.JPH::Result", align 8
  %63 = alloca %"class.JPH::Vec3", align 16
  %64 = alloca %"class.JPH::Ref.17", align 8
  %65 = alloca %"class.JPH::Vec3", align 16
  %66 = alloca %"class.JPH::Quat", align 16
  %67 = alloca %"class.JPH::Vec3", align 16
  %68 = alloca %"class.JPH::Vec3", align 16
  %69 = alloca %"class.JPH::Vec3", align 16
  %70 = alloca %"class.JPH::Quat", align 16
  %71 = alloca %"class.JPH::Vec3", align 16
  %72 = alloca %"class.JPH::Vec3", align 16
  %73 = alloca %"class.JPH::Quat", align 16
  %74 = alloca %"class.JPH::Vec3", align 16
  %75 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %76 = alloca %"class.JPH::Vec3", align 16
  %77 = alloca %"class.JPH::Quat", align 16
  %78 = alloca %"class.JPH::Quat", align 16
  %79 = alloca %"class.JPH::Vec3", align 16
  %80 = alloca %"class.JPH::Quat", align 16
  %81 = alloca %"class.JPH::Vec3", align 16
  %82 = alloca %"class.JPH::Vec3", align 16
  %83 = alloca %"class.JPH::Quat", align 16
  %84 = alloca %"class.JPH::Quat", align 16
  %85 = alloca %"class.JPH::Vec3", align 16
  %86 = alloca %"class.JPH::Quat", align 16
  %87 = alloca %"class.JPH::Vec3", align 16
  %88 = alloca %"class.JPH::Result", align 8
  %89 = alloca %"class.JPH::Vec3", align 16
  %90 = alloca %"class.JPH::Vec3", align 16
  %91 = alloca %"class.JPH::Vec3", align 16
  %92 = alloca %"class.JPH::BodyCreationSettings", align 16
  %93 = alloca %"class.JPH::Vec3", align 16
  %94 = alloca %"class.JPH::Quat", align 16
  %95 = alloca %"class.JPH::BodyID", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %96 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #13
  %97 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %4, float noundef 5.000000e+01, float noundef 1.000000e+00, float noundef 5.000000e+01)
          to label %98 unwind label %108

98:                                               ; preds = %1
  %99 = getelementptr inbounds { double, double }, ptr %4, i32 0, i32 0
  %100 = load double, ptr %99, align 16
  %101 = getelementptr inbounds { double, double }, ptr %4, i32 0, i32 1
  %102 = load double, ptr %101, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %97, double %100, double %102, float noundef 0.000000e+00, ptr noundef null)
          to label %103 unwind label %108

103:                                              ; preds = %98
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef %97)
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #13
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %104

104:                                              ; preds = %200, %103
  %105 = load i32, ptr %7, align 4, !tbaa !9
  %106 = icmp slt i32 %105, 4
  br i1 %106, label %112, label %107

107:                                              ; preds = %104
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #13
  br label %217

108:                                              ; preds = %98, %1
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %5, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %97) #13
  br label %1166

112:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #13
  %113 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %114 unwind label %203

114:                                              ; preds = %112
  %115 = getelementptr inbounds %"class.JPH::Vec3", ptr %9, i32 0, i32 0
  %116 = getelementptr inbounds %union.anon, ptr %115, i32 0, i32 0
  %117 = getelementptr inbounds { double, double }, ptr %116, i32 0, i32 0
  %118 = extractvalue { double, double } %113, 0
  store double %118, ptr %117, align 16
  %119 = getelementptr inbounds { double, double }, ptr %116, i32 0, i32 1
  %120 = extractvalue { double, double } %113, 1
  store double %120, ptr %119, align 8
  %121 = load i32, ptr %7, align 4, !tbaa !9
  %122 = sitofp i32 %121 to float
  %123 = fmul float 0x3FF921FB60000000, %122
  %124 = getelementptr inbounds { double, double }, ptr %9, i32 0, i32 0
  %125 = load double, ptr %124, align 16
  %126 = getelementptr inbounds { double, double }, ptr %9, i32 0, i32 1
  %127 = load double, ptr %126, align 8
  %128 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %125, double %127, float noundef %123)
          to label %129 unwind label %203

129:                                              ; preds = %114
  %130 = getelementptr inbounds %"class.JPH::Quat", ptr %8, i32 0, i32 0
  %131 = getelementptr inbounds %"class.JPH::Vec4", ptr %130, i32 0, i32 0
  %132 = getelementptr inbounds %union.anon.5, ptr %131, i32 0, i32 0
  %133 = getelementptr inbounds { double, double }, ptr %132, i32 0, i32 0
  %134 = extractvalue { double, double } %128, 0
  store double %134, ptr %133, align 16
  %135 = getelementptr inbounds { double, double }, ptr %132, i32 0, i32 1
  %136 = extractvalue { double, double } %128, 1
  store double %136, ptr %135, align 8
  %137 = getelementptr inbounds %class.Test, ptr %96, i32 0, i32 3
  %138 = load ptr, ptr %137, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 256, ptr %10) #13
  %139 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %140 unwind label %207

140:                                              ; preds = %129
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 2.500000e+01, float noundef 2.500000e+01, float noundef 0.000000e+00)
          to label %141 unwind label %207

141:                                              ; preds = %140
  %142 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %143 = load double, ptr %142, align 16
  %144 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %145 = load double, ptr %144, align 8
  %146 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %8, double %143, double %145)
          to label %147 unwind label %207

147:                                              ; preds = %141
  %148 = getelementptr inbounds %"class.JPH::Vec3", ptr %11, i32 0, i32 0
  %149 = getelementptr inbounds %union.anon, ptr %148, i32 0, i32 0
  %150 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 0
  %151 = extractvalue { double, double } %146, 0
  store double %151, ptr %150, align 16
  %152 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 1
  %153 = extractvalue { double, double } %146, 1
  store double %153, ptr %152, align 8
  %154 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %155 unwind label %207

155:                                              ; preds = %147
  %156 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i32 0, i32 0
  %157 = getelementptr inbounds %union.anon, ptr %156, i32 0, i32 0
  %158 = getelementptr inbounds { double, double }, ptr %157, i32 0, i32 0
  %159 = extractvalue { double, double } %154, 0
  store double %159, ptr %158, align 16
  %160 = getelementptr inbounds { double, double }, ptr %157, i32 0, i32 1
  %161 = extractvalue { double, double } %154, 1
  store double %161, ptr %160, align 8
  %162 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 0
  %163 = load double, ptr %162, align 16
  %164 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 1
  %165 = load double, ptr %164, align 8
  %166 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %163, double %165, float noundef 0x3FE921FB60000000)
          to label %167 unwind label %207

167:                                              ; preds = %155
  %168 = getelementptr inbounds %"class.JPH::Quat", ptr %14, i32 0, i32 0
  %169 = getelementptr inbounds %"class.JPH::Vec4", ptr %168, i32 0, i32 0
  %170 = getelementptr inbounds %union.anon.5, ptr %169, i32 0, i32 0
  %171 = getelementptr inbounds { double, double }, ptr %170, i32 0, i32 0
  %172 = extractvalue { double, double } %166, 0
  store double %172, ptr %171, align 16
  %173 = getelementptr inbounds { double, double }, ptr %170, i32 0, i32 1
  %174 = extractvalue { double, double } %166, 1
  store double %174, ptr %173, align 8
  %175 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %176 = load double, ptr %175, align 16
  %177 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %178 = load double, ptr %177, align 8
  %179 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %8, double %176, double %178)
          to label %180 unwind label %207

180:                                              ; preds = %167
  %181 = getelementptr inbounds %"class.JPH::Quat", ptr %13, i32 0, i32 0
  %182 = getelementptr inbounds %"class.JPH::Vec4", ptr %181, i32 0, i32 0
  %183 = getelementptr inbounds %union.anon.5, ptr %182, i32 0, i32 0
  %184 = getelementptr inbounds { double, double }, ptr %183, i32 0, i32 0
  %185 = extractvalue { double, double } %179, 0
  store double %185, ptr %184, align 16
  %186 = getelementptr inbounds { double, double }, ptr %183, i32 0, i32 1
  %187 = extractvalue { double, double } %179, 1
  store double %187, ptr %186, align 8
  %188 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %189 = load double, ptr %188, align 16
  %190 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %191 = load double, ptr %190, align 8
  %192 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %193 = load double, ptr %192, align 16
  %194 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %195 = load double, ptr %194, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %10, ptr noundef %139, double %189, double %191, double %193, double %195, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %196 unwind label %207

196:                                              ; preds = %180
  %197 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %138, ptr noundef nonnull align 16 dereferenceable(256) %10, i32 noundef 1)
          to label %198 unwind label %211

198:                                              ; preds = %196
  %199 = getelementptr inbounds %"class.JPH::BodyID", ptr %16, i32 0, i32 0
  store i32 %197, ptr %199, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %10) #13
  call void @llvm.lifetime.end.p0(i64 256, ptr %10) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #13
  br label %200

200:                                              ; preds = %198
  %201 = load i32, ptr %7, align 4, !tbaa !9
  %202 = add nsw i32 %201, 1
  store i32 %202, ptr %7, align 4, !tbaa !9
  br label %104, !llvm.loop !20

203:                                              ; preds = %114, %112
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %5, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %6, align 4
  br label %216

207:                                              ; preds = %180, %167, %155, %147, %141, %140, %129
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %5, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %6, align 4
  br label %215

211:                                              ; preds = %196
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %5, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %6, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %10) #13
  br label %215

215:                                              ; preds = %211, %207
  call void @llvm.lifetime.end.p0(i64 256, ptr %10) #13
  br label %216

216:                                              ; preds = %215, %203
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #13
  br label %1165

217:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #13
  invoke void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %218 unwind label %300

218:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #13
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %18, float noundef 0x3FB99999A0000000, float noundef 2.000000e+00)
          to label %219 unwind label %304

219:                                              ; preds = %218
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #13
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %19, float noundef -4.000000e+01, float noundef 4.000000e+01)
          to label %220 unwind label %308

220:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #13
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %20, float noundef -1.500000e+00, float noundef 1.500000e+00)
          to label %221 unwind label %312

221:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #13
  %222 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %223 unwind label %316

223:                                              ; preds = %221
  %224 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %225 unwind label %316

225:                                              ; preds = %223
  %226 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %227 unwind label %316

227:                                              ; preds = %225
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef %222, float noundef %224, float noundef %226)
          to label %228 unwind label %316

228:                                              ; preds = %227
  %229 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef -5.000000e-01)
          to label %230 unwind label %316

230:                                              ; preds = %228
  %231 = getelementptr inbounds %"class.JPH::Vec3", ptr %23, i32 0, i32 0
  %232 = getelementptr inbounds %union.anon, ptr %231, i32 0, i32 0
  %233 = getelementptr inbounds { double, double }, ptr %232, i32 0, i32 0
  %234 = extractvalue { double, double } %229, 0
  store double %234, ptr %233, align 16
  %235 = getelementptr inbounds { double, double }, ptr %232, i32 0, i32 1
  %236 = extractvalue { double, double } %229, 1
  store double %236, ptr %235, align 8
  %237 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 5.000000e-01)
          to label %238 unwind label %316

238:                                              ; preds = %230
  %239 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i32 0, i32 0
  %240 = getelementptr inbounds %union.anon, ptr %239, i32 0, i32 0
  %241 = getelementptr inbounds { double, double }, ptr %240, i32 0, i32 0
  %242 = extractvalue { double, double } %237, 0
  store double %242, ptr %241, align 16
  %243 = getelementptr inbounds { double, double }, ptr %240, i32 0, i32 1
  %244 = extractvalue { double, double } %237, 1
  store double %244, ptr %243, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %26, ptr align 16 %21, i64 16, i1 false), !tbaa.struct !22
  %245 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %246 unwind label %316

246:                                              ; preds = %238
  %247 = getelementptr inbounds %"class.JPH::Vec3", ptr %27, i32 0, i32 0
  %248 = getelementptr inbounds %union.anon, ptr %247, i32 0, i32 0
  %249 = getelementptr inbounds { double, double }, ptr %248, i32 0, i32 0
  %250 = extractvalue { double, double } %245, 0
  store double %250, ptr %249, align 16
  %251 = getelementptr inbounds { double, double }, ptr %248, i32 0, i32 1
  %252 = extractvalue { double, double } %245, 1
  store double %252, ptr %251, align 8
  %253 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %254 = load double, ptr %253, align 16
  %255 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %256 = load double, ptr %255, align 8
  %257 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %258 = load double, ptr %257, align 16
  %259 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %260 = load double, ptr %259, align 8
  %261 = invoke { i64, i64 } @_ZN3JPH4Vec315sGreaterOrEqualES0_S0_(double %254, double %256, double %258, double %260)
          to label %262 unwind label %316

262:                                              ; preds = %246
  %263 = getelementptr inbounds %"class.JPH::UVec4", ptr %25, i32 0, i32 0
  %264 = getelementptr inbounds %union.anon.8, ptr %263, i32 0, i32 0
  %265 = getelementptr inbounds { i64, i64 }, ptr %264, i32 0, i32 0
  %266 = extractvalue { i64, i64 } %261, 0
  store i64 %266, ptr %265, align 16
  %267 = getelementptr inbounds { i64, i64 }, ptr %264, i32 0, i32 1
  %268 = extractvalue { i64, i64 } %261, 1
  store i64 %268, ptr %267, align 8
  %269 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %270 = load double, ptr %269, align 16
  %271 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %272 = load double, ptr %271, align 8
  %273 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 0
  %274 = load double, ptr %273, align 16
  %275 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 1
  %276 = load double, ptr %275, align 8
  %277 = getelementptr inbounds { i64, i64 }, ptr %25, i32 0, i32 0
  %278 = load i64, ptr %277, align 16
  %279 = getelementptr inbounds { i64, i64 }, ptr %25, i32 0, i32 1
  %280 = load i64, ptr %279, align 8
  %281 = invoke { double, double } @_ZN3JPH4Vec37sSelectES0_S0_NS_5UVec4E(double %270, double %272, double %274, double %276, i64 %278, i64 %280)
          to label %282 unwind label %316

282:                                              ; preds = %262
  %283 = getelementptr inbounds %"class.JPH::Vec3", ptr %22, i32 0, i32 0
  %284 = getelementptr inbounds %union.anon, ptr %283, i32 0, i32 0
  %285 = getelementptr inbounds { double, double }, ptr %284, i32 0, i32 0
  %286 = extractvalue { double, double } %281, 0
  store double %286, ptr %285, align 16
  %287 = getelementptr inbounds { double, double }, ptr %284, i32 0, i32 1
  %288 = extractvalue { double, double } %281, 1
  store double %288, ptr %287, align 8
  %289 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %290 = load double, ptr %289, align 16
  %291 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %292 = load double, ptr %291, align 8
  %293 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %290, double %292)
          to label %294 unwind label %316

294:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #13
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %295 unwind label %320

295:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #13
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %296

296:                                              ; preds = %1140, %295
  %297 = load i32, ptr %29, align 4, !tbaa !9
  %298 = icmp slt i32 %297, 1000
  br i1 %298, label %324, label %299

299:                                              ; preds = %296
  store i32 5, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #13
  br label %1158

300:                                              ; preds = %217
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %5, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %6, align 4
  br label %1164

304:                                              ; preds = %218
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %5, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %6, align 4
  br label %1163

308:                                              ; preds = %219
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %5, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %6, align 4
  br label %1162

312:                                              ; preds = %220
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %5, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %6, align 4
  br label %1161

316:                                              ; preds = %282, %262, %246, %238, %230, %228, %227, %225, %223, %221
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %5, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %6, align 4
  br label %1160

320:                                              ; preds = %294
  %321 = landingpad { ptr, i32 }
          cleanup
  %322 = extractvalue { ptr, i32 } %321, 0
  store ptr %322, ptr %5, align 8
  %323 = extractvalue { ptr, i32 } %321, 1
  store i32 %323, ptr %6, align 4
  br label %1159

324:                                              ; preds = %296
  %325 = invoke noundef i64 @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEclEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %326 unwind label %328

326:                                              ; preds = %324
  %327 = urem i64 %325, 10
  switch i64 %327, label %1085 [
    i64 0, label %332
    i64 1, label %356
    i64 2, label %377
    i64 3, label %435
    i64 4, label %462
    i64 5, label %534
    i64 6, label %561
    i64 7, label %601
    i64 8, label %639
    i64 9, label %762
  ]

328:                                              ; preds = %1099, %1090, %1085, %542, %534, %443, %435, %370, %356, %337, %332, %324
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %5, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %6, align 4
  br label %1157

332:                                              ; preds = %326
  %333 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %334 unwind label %328

334:                                              ; preds = %332
  %335 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %336 unwind label %348

336:                                              ; preds = %334
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %333, float noundef %335, ptr noundef null)
          to label %337 unwind label %348

337:                                              ; preds = %336
  %338 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef %333)
          to label %339 unwind label %328

339:                                              ; preds = %337
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #13
  %340 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %341 unwind label %352

341:                                              ; preds = %339
  %342 = getelementptr inbounds %"class.JPH::Vec3", ptr %31, i32 0, i32 0
  %343 = getelementptr inbounds %union.anon, ptr %342, i32 0, i32 0
  %344 = getelementptr inbounds { double, double }, ptr %343, i32 0, i32 0
  %345 = extractvalue { double, double } %340, 0
  store double %345, ptr %344, align 16
  %346 = getelementptr inbounds { double, double }, ptr %343, i32 0, i32 1
  %347 = extractvalue { double, double } %340, 1
  store double %347, ptr %346, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %31, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #13
  br label %1085

348:                                              ; preds = %336, %334
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %5, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %6, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %333) #13
  br label %1157

352:                                              ; preds = %339
  %353 = landingpad { ptr, i32 }
          cleanup
  %354 = extractvalue { ptr, i32 } %353, 0
  store ptr %354, ptr %5, align 8
  %355 = extractvalue { ptr, i32 } %353, 1
  store i32 %355, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #13
  br label %1157

356:                                              ; preds = %326
  %357 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %358 unwind label %328

358:                                              ; preds = %356
  %359 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %360 unwind label %373

360:                                              ; preds = %358
  %361 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %362 unwind label %373

362:                                              ; preds = %360
  %363 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %364 unwind label %373

364:                                              ; preds = %362
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef %359, float noundef %361, float noundef %363)
          to label %365 unwind label %373

365:                                              ; preds = %364
  %366 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %367 = load double, ptr %366, align 16
  %368 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %369 = load double, ptr %368, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %357, double %367, double %369, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %370 unwind label %373

370:                                              ; preds = %365
  %371 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef %357)
          to label %372 unwind label %328

372:                                              ; preds = %370
  br label %1085

373:                                              ; preds = %365, %364, %362, %360, %358
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %5, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %357) #13
  br label %1157

377:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 24, ptr %33) #13
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #13
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %378

378:                                              ; preds = %406, %377
  %379 = load i32, ptr %34, align 4, !tbaa !9
  %380 = icmp slt i32 %379, 20
  br i1 %380, label %382, label %381

381:                                              ; preds = %378
  store i32 9, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #13
  br label %413

382:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #13
  %383 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %384 unwind label %409

384:                                              ; preds = %382
  %385 = invoke { double, double } @_ZN3JPH4Vec37sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %386 unwind label %409

386:                                              ; preds = %384
  %387 = getelementptr inbounds %"class.JPH::Vec3", ptr %36, i32 0, i32 0
  %388 = getelementptr inbounds %union.anon, ptr %387, i32 0, i32 0
  %389 = getelementptr inbounds { double, double }, ptr %388, i32 0, i32 0
  %390 = extractvalue { double, double } %385, 0
  store double %390, ptr %389, align 16
  %391 = getelementptr inbounds { double, double }, ptr %388, i32 0, i32 1
  %392 = extractvalue { double, double } %385, 1
  store double %392, ptr %391, align 8
  %393 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %394 = load double, ptr %393, align 16
  %395 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %396 = load double, ptr %395, align 8
  %397 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %383, double %394, double %396)
          to label %398 unwind label %409

398:                                              ; preds = %386
  %399 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %400 = getelementptr inbounds %union.anon, ptr %399, i32 0, i32 0
  %401 = getelementptr inbounds { double, double }, ptr %400, i32 0, i32 0
  %402 = extractvalue { double, double } %397, 0
  store double %402, ptr %401, align 16
  %403 = getelementptr inbounds { double, double }, ptr %400, i32 0, i32 1
  %404 = extractvalue { double, double } %397, 1
  store double %404, ptr %403, align 8
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 16 dereferenceable(16) %35)
          to label %405 unwind label %409

405:                                              ; preds = %398
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #13
  br label %406

406:                                              ; preds = %405
  %407 = load i32, ptr %34, align 4, !tbaa !9
  %408 = add nsw i32 %407, 1
  store i32 %408, ptr %34, align 4, !tbaa !9
  br label %378, !llvm.loop !24

409:                                              ; preds = %398, %386, %384, %382
  %410 = landingpad { ptr, i32 }
          cleanup
  %411 = extractvalue { ptr, i32 } %410, 0
  store ptr %411, ptr %5, align 8
  %412 = extractvalue { ptr, i32 } %410, 1
  store i32 %412, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #13
  br label %434

413:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 40, ptr %37) #13
  call void @llvm.lifetime.start.p0(i64 120, ptr %38) #13
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %38, ptr noundef nonnull align 8 dereferenceable(24) %33, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %414 unwind label %420

414:                                              ; preds = %413
  invoke void @_ZNK3JPH23ConvexHullShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %37, ptr noundef nonnull align 8 dereferenceable(120) %38)
          to label %415 unwind label %424

415:                                              ; preds = %414
  %416 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %37)
          to label %417 unwind label %428

417:                                              ; preds = %415
  %418 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %416)
          to label %419 unwind label %428

419:                                              ; preds = %417
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %37) #13
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %38) #13
  call void @llvm.lifetime.end.p0(i64 120, ptr %38) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %37) #13
  store i32 8, ptr %30, align 4
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #13
  br label %1085

420:                                              ; preds = %413
  %421 = landingpad { ptr, i32 }
          cleanup
  %422 = extractvalue { ptr, i32 } %421, 0
  store ptr %422, ptr %5, align 8
  %423 = extractvalue { ptr, i32 } %421, 1
  store i32 %423, ptr %6, align 4
  br label %433

424:                                              ; preds = %414
  %425 = landingpad { ptr, i32 }
          cleanup
  %426 = extractvalue { ptr, i32 } %425, 0
  store ptr %426, ptr %5, align 8
  %427 = extractvalue { ptr, i32 } %425, 1
  store i32 %427, ptr %6, align 4
  br label %432

428:                                              ; preds = %417, %415
  %429 = landingpad { ptr, i32 }
          cleanup
  %430 = extractvalue { ptr, i32 } %429, 0
  store ptr %430, ptr %5, align 8
  %431 = extractvalue { ptr, i32 } %429, 1
  store i32 %431, ptr %6, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %37) #13
  br label %432

432:                                              ; preds = %428, %424
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %38) #13
  br label %433

433:                                              ; preds = %432, %420
  call void @llvm.lifetime.end.p0(i64 120, ptr %38) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %37) #13
  br label %434

434:                                              ; preds = %433, %409
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #13
  br label %1157

435:                                              ; preds = %326
  %436 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %437 unwind label %328

437:                                              ; preds = %435
  %438 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %439 unwind label %454

439:                                              ; preds = %437
  %440 = fmul float 5.000000e-01, %438
  %441 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %442 unwind label %454

442:                                              ; preds = %439
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %436, float noundef %440, float noundef %441, ptr noundef null)
          to label %443 unwind label %454

443:                                              ; preds = %442
  %444 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef %436)
          to label %445 unwind label %328

445:                                              ; preds = %443
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #13
  %446 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %447 unwind label %458

447:                                              ; preds = %445
  %448 = getelementptr inbounds %"class.JPH::Vec3", ptr %39, 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
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %39, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #13
  br label %1085

454:                                              ; preds = %442, %439, %437
  %455 = landingpad { ptr, i32 }
          cleanup
  %456 = extractvalue { ptr, i32 } %455, 0
  store ptr %456, ptr %5, align 8
  %457 = extractvalue { ptr, i32 } %455, 1
  store i32 %457, ptr %6, align 4
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %436) #13
  br label %1157

458:                                              ; preds = %445
  %459 = landingpad { ptr, i32 }
          cleanup
  %460 = extractvalue { ptr, i32 } %459, 0
  store ptr %460, ptr %5, align 8
  %461 = extractvalue { ptr, i32 } %459, 1
  store i32 %461, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #13
  br label %1157

462:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #13
  %463 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %464 unwind label %496

464:                                              ; preds = %462
  store float %463, ptr %40, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #13
  %465 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %466 unwind label %500

466:                                              ; preds = %464
  store float %465, ptr %41, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #13
  %467 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %468 unwind label %504

468:                                              ; preds = %466
  %469 = fmul float 5.000000e-01, %467
  store float %469, ptr %43, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #13
  %470 = load float, ptr %40, align 4, !tbaa !25
  %471 = load float, ptr %41, align 4, !tbaa !25
  %472 = fsub float %470, %471
  %473 = invoke noundef float @_ZSt3absf(float noundef %472)
          to label %474 unwind label %508

474:                                              ; preds = %468
  %475 = call float @llvm.fmuladd.f32(float 5.000000e-01, float %473, float 0x3F50624DE0000000)
  store float %475, ptr %44, align 4, !tbaa !25
  %476 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %43, ptr noundef nonnull align 4 dereferenceable(4) %44)
          to label %477 unwind label %508

477:                                              ; preds = %474
  %478 = load float, ptr %476, align 4, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #13
  store float %478, ptr %42, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 40, ptr %45) #13
  call void @llvm.lifetime.start.p0(i64 88, ptr %46) #13
  %479 = load float, ptr %42, align 4, !tbaa !25
  %480 = load float, ptr %40, align 4, !tbaa !25
  %481 = load float, ptr %41, align 4, !tbaa !25
  invoke void @_ZN3JPH27TaperedCapsuleShapeSettingsC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %46, float noundef %479, float noundef %480, float noundef %481, ptr noundef null)
          to label %482 unwind label %513

482:                                              ; preds = %477
  invoke void @_ZNK3JPH27TaperedCapsuleShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %45, ptr noundef nonnull align 8 dereferenceable(88) %46)
          to label %483 unwind label %517

483:                                              ; preds = %482
  %484 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %45)
          to label %485 unwind label %521

485:                                              ; preds = %483
  %486 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %484)
          to label %487 unwind label %521

487:                                              ; preds = %485
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %45) #13
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %46) #13
  call void @llvm.lifetime.end.p0(i64 88, ptr %46) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %45) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #13
  %488 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %489 unwind label %527

489:                                              ; preds = %487
  %490 = getelementptr inbounds %"class.JPH::Vec3", ptr %47, i32 0, i32 0
  %491 = getelementptr inbounds %union.anon, ptr %490, i32 0, i32 0
  %492 = getelementptr inbounds { double, double }, ptr %491, i32 0, i32 0
  %493 = extractvalue { double, double } %488, 0
  store double %493, ptr %492, align 16
  %494 = getelementptr inbounds { double, double }, ptr %491, i32 0, i32 1
  %495 = extractvalue { double, double } %488, 1
  store double %495, ptr %494, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %47, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #13
  store i32 8, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #13
  br label %1085

496:                                              ; preds = %462
  %497 = landingpad { ptr, i32 }
          cleanup
  %498 = extractvalue { ptr, i32 } %497, 0
  store ptr %498, ptr %5, align 8
  %499 = extractvalue { ptr, i32 } %497, 1
  store i32 %499, ptr %6, align 4
  br label %533

500:                                              ; preds = %464
  %501 = landingpad { ptr, i32 }
          cleanup
  %502 = extractvalue { ptr, i32 } %501, 0
  store ptr %502, ptr %5, align 8
  %503 = extractvalue { ptr, i32 } %501, 1
  store i32 %503, ptr %6, align 4
  br label %532

504:                                              ; preds = %466
  %505 = landingpad { ptr, i32 }
          cleanup
  %506 = extractvalue { ptr, i32 } %505, 0
  store ptr %506, ptr %5, align 8
  %507 = extractvalue { ptr, i32 } %505, 1
  store i32 %507, ptr %6, align 4
  br label %512

508:                                              ; preds = %474, %468
  %509 = landingpad { ptr, i32 }
          cleanup
  %510 = extractvalue { ptr, i32 } %509, 0
  store ptr %510, ptr %5, align 8
  %511 = extractvalue { ptr, i32 } %509, 1
  store i32 %511, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #13
  br label %512

512:                                              ; preds = %508, %504
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #13
  br label %531

513:                                              ; preds = %477
  %514 = landingpad { ptr, i32 }
          cleanup
  %515 = extractvalue { ptr, i32 } %514, 0
  store ptr %515, ptr %5, align 8
  %516 = extractvalue { ptr, i32 } %514, 1
  store i32 %516, ptr %6, align 4
  br label %526

517:                                              ; preds = %482
  %518 = landingpad { ptr, i32 }
          cleanup
  %519 = extractvalue { ptr, i32 } %518, 0
  store ptr %519, ptr %5, align 8
  %520 = extractvalue { ptr, i32 } %518, 1
  store i32 %520, ptr %6, align 4
  br label %525

521:                                              ; preds = %485, %483
  %522 = landingpad { ptr, i32 }
          cleanup
  %523 = extractvalue { ptr, i32 } %522, 0
  store ptr %523, ptr %5, align 8
  %524 = extractvalue { ptr, i32 } %522, 1
  store i32 %524, ptr %6, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %45) #13
  br label %525

525:                                              ; preds = %521, %517
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %46) #13
  br label %526

526:                                              ; preds = %525, %513
  call void @llvm.lifetime.end.p0(i64 88, ptr %46) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %45) #13
  br label %531

527:                                              ; preds = %487
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %5, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #13
  br label %531

531:                                              ; preds = %527, %526, %512
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #13
  br label %532

532:                                              ; preds = %531, %500
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #13
  br label %533

533:                                              ; preds = %532, %496
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #13
  br label %1157

534:                                              ; preds = %326
  %535 = invoke noundef ptr @_ZN3JPH13CylinderShapenwEm(i64 noundef 56)
          to label %536 unwind label %328

536:                                              ; preds = %534
  %537 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %538 unwind label %553

538:                                              ; preds = %536
  %539 = fmul float 5.000000e-01, %537
  %540 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %541 unwind label %553

541:                                              ; preds = %538
  invoke void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %535, float noundef %539, float noundef %540, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %542 unwind label %553

542:                                              ; preds = %541
  %543 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef %535)
          to label %544 unwind label %328

544:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #13
  %545 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj1ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %546 unwind label %557

546:                                              ; preds = %544
  %547 = getelementptr inbounds %"class.JPH::Vec3", ptr %48, i32 0, i32 0
  %548 = getelementptr inbounds %union.anon, ptr %547, i32 0, i32 0
  %549 = getelementptr inbounds { double, double }, ptr %548, i32 0, i32 0
  %550 = extractvalue { double, double } %545, 0
  store double %550, ptr %549, align 16
  %551 = getelementptr inbounds { double, double }, ptr %548, i32 0, i32 1
  %552 = extractvalue { double, double } %545, 1
  store double %552, ptr %551, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %48, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #13
  br label %1085

553:                                              ; preds = %541, %538, %536
  %554 = landingpad { ptr, i32 }
          cleanup
  %555 = extractvalue { ptr, i32 } %554, 0
  store ptr %555, ptr %5, align 8
  %556 = extractvalue { ptr, i32 } %554, 1
  store i32 %556, ptr %6, align 4
  call void @_ZN3JPH13CylinderShapedlEPv(ptr noundef %535) #13
  br label %1157

557:                                              ; preds = %544
  %558 = landingpad { ptr, i32 }
          cleanup
  %559 = extractvalue { ptr, i32 } %558, 0
  store ptr %559, ptr %5, align 8
  %560 = extractvalue { ptr, i32 } %558, 1
  store i32 %560, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #13
  br label %1157

561:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 40, ptr %49) #13
  call void @llvm.lifetime.start.p0(i64 96, ptr %50) #13
  %562 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %563 unwind label %583

563:                                              ; preds = %561
  %564 = fmul float 5.000000e-01, %562
  %565 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %566 unwind label %583

566:                                              ; preds = %563
  %567 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %568 unwind label %583

568:                                              ; preds = %566
  invoke void @_ZN3JPH28TaperedCylinderShapeSettingsC1EffffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(96) %50, float noundef %564, float noundef %565, float noundef %567, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %569 unwind label %583

569:                                              ; preds = %568
  invoke void @_ZNK3JPH28TaperedCylinderShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %49, ptr noundef nonnull align 8 dereferenceable(96) %50)
          to label %570 unwind label %587

570:                                              ; preds = %569
  %571 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %49)
          to label %572 unwind label %591

572:                                              ; preds = %570
  %573 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %571)
          to label %574 unwind label %591

574:                                              ; preds = %572
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %49) #13
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %50) #13
  call void @llvm.lifetime.end.p0(i64 96, ptr %50) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %49) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #13
  %575 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj1ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %576 unwind label %597

576:                                              ; preds = %574
  %577 = getelementptr inbounds %"class.JPH::Vec3", ptr %51, i32 0, i32 0
  %578 = getelementptr inbounds %union.anon, ptr %577, i32 0, i32 0
  %579 = getelementptr inbounds { double, double }, ptr %578, i32 0, i32 0
  %580 = extractvalue { double, double } %575, 0
  store double %580, ptr %579, align 16
  %581 = getelementptr inbounds { double, double }, ptr %578, i32 0, i32 1
  %582 = extractvalue { double, double } %575, 1
  store double %582, ptr %581, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %51, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #13
  br label %1085

583:                                              ; preds = %568, %566, %563, %561
  %584 = landingpad { ptr, i32 }
          cleanup
  %585 = extractvalue { ptr, i32 } %584, 0
  store ptr %585, ptr %5, align 8
  %586 = extractvalue { ptr, i32 } %584, 1
  store i32 %586, ptr %6, align 4
  br label %596

587:                                              ; preds = %569
  %588 = landingpad { ptr, i32 }
          cleanup
  %589 = extractvalue { ptr, i32 } %588, 0
  store ptr %589, ptr %5, align 8
  %590 = extractvalue { ptr, i32 } %588, 1
  store i32 %590, ptr %6, align 4
  br label %595

591:                                              ; preds = %572, %570
  %592 = landingpad { ptr, i32 }
          cleanup
  %593 = extractvalue { ptr, i32 } %592, 0
  store ptr %593, ptr %5, align 8
  %594 = extractvalue { ptr, i32 } %592, 1
  store i32 %594, ptr %6, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %49) #13
  br label %595

595:                                              ; preds = %591, %587
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %50) #13
  br label %596

596:                                              ; preds = %595, %583
  call void @llvm.lifetime.end.p0(i64 96, ptr %50) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %49) #13
  br label %1157

597:                                              ; preds = %574
  %598 = landingpad { ptr, i32 }
          cleanup
  %599 = extractvalue { ptr, i32 } %598, 0
  store ptr %599, ptr %5, align 8
  %600 = extractvalue { ptr, i32 } %598, 1
  store i32 %600, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #13
  br label %1157

601:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 40, ptr %52) #13
  call void @llvm.lifetime.start.p0(i64 96, ptr %53) #13
  %602 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %603 unwind label %621

603:                                              ; preds = %601
  %604 = fmul float 5.000000e-01, %602
  %605 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %606 unwind label %621

606:                                              ; preds = %603
  invoke void @_ZN3JPH28TaperedCylinderShapeSettingsC1EffffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(96) %53, float noundef %604, float noundef 0.000000e+00, float noundef %605, float noundef 0.000000e+00, ptr noundef null)
          to label %607 unwind label %621

607:                                              ; preds = %606
  invoke void @_ZNK3JPH28TaperedCylinderShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %52, ptr noundef nonnull align 8 dereferenceable(96) %53)
          to label %608 unwind label %625

608:                                              ; preds = %607
  %609 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %52)
          to label %610 unwind label %629

610:                                              ; preds = %608
  %611 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %609)
          to label %612 unwind label %629

612:                                              ; preds = %610
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %52) #13
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %53) #13
  call void @llvm.lifetime.end.p0(i64 96, ptr %53) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %52) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #13
  %613 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj1ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %614 unwind label %635

614:                                              ; preds = %612
  %615 = getelementptr inbounds %"class.JPH::Vec3", ptr %54, i32 0, i32 0
  %616 = getelementptr inbounds %union.anon, ptr %615, i32 0, i32 0
  %617 = getelementptr inbounds { double, double }, ptr %616, i32 0, i32 0
  %618 = extractvalue { double, double } %613, 0
  store double %618, ptr %617, align 16
  %619 = getelementptr inbounds { double, double }, ptr %616, i32 0, i32 1
  %620 = extractvalue { double, double } %613, 1
  store double %620, ptr %619, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %54, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #13
  br label %1085

621:                                              ; preds = %606, %603, %601
  %622 = landingpad { ptr, i32 }
          cleanup
  %623 = extractvalue { ptr, i32 } %622, 0
  store ptr %623, ptr %5, align 8
  %624 = extractvalue { ptr, i32 } %622, 1
  store i32 %624, ptr %6, align 4
  br label %634

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

629:                                              ; preds = %610, %608
  %630 = landingpad { ptr, i32 }
          cleanup
  %631 = extractvalue { ptr, i32 } %630, 0
  store ptr %631, ptr %5, align 8
  %632 = extractvalue { ptr, i32 } %630, 1
  store i32 %632, ptr %6, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %52) #13
  br label %633

633:                                              ; preds = %629, %625
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %53) #13
  br label %634

634:                                              ; preds = %633, %621
  call void @llvm.lifetime.end.p0(i64 96, ptr %53) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %52) #13
  br label %1157

635:                                              ; preds = %612
  %636 = landingpad { ptr, i32 }
          cleanup
  %637 = extractvalue { ptr, i32 } %636, 0
  store ptr %637, ptr %5, align 8
  %638 = extractvalue { ptr, i32 } %636, 1
  store i32 %638, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #13
  br label %1157

639:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 88, ptr %55) #13
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %55)
          to label %640 unwind label %727

640:                                              ; preds = %639
  %641 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %642 unwind label %731

642:                                              ; preds = %640
  %643 = getelementptr inbounds %"class.JPH::Vec3", ptr %56, i32 0, i32 0
  %644 = getelementptr inbounds %union.anon, ptr %643, i32 0, i32 0
  %645 = getelementptr inbounds { double, double }, ptr %644, i32 0, i32 0
  %646 = extractvalue { double, double } %641, 0
  store double %646, ptr %645, align 16
  %647 = getelementptr inbounds { double, double }, ptr %644, i32 0, i32 1
  %648 = extractvalue { double, double } %641, 1
  store double %648, ptr %647, align 8
  %649 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %650 unwind label %731

650:                                              ; preds = %642
  %651 = getelementptr inbounds %"class.JPH::Quat", ptr %57, i32 0, i32 0
  %652 = getelementptr inbounds %"class.JPH::Vec4", ptr %651, i32 0, i32 0
  %653 = getelementptr inbounds %union.anon.5, ptr %652, i32 0, i32 0
  %654 = getelementptr inbounds { double, double }, ptr %653, i32 0, i32 0
  %655 = extractvalue { double, double } %649, 0
  store double %655, ptr %654, align 16
  %656 = getelementptr inbounds { double, double }, ptr %653, i32 0, i32 1
  %657 = extractvalue { double, double } %649, 1
  store double %657, ptr %656, align 8
  %658 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %659 unwind label %731

659:                                              ; preds = %650
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %658, float noundef 1.000000e+00, float noundef 0x3FB99999A0000000, ptr noundef null)
          to label %660 unwind label %735

660:                                              ; preds = %659
  %661 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 0
  %662 = load double, ptr %661, align 16
  %663 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 1
  %664 = load double, ptr %663, align 8
  %665 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 0
  %666 = load double, ptr %665, align 16
  %667 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 1
  %668 = load double, ptr %667, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %55, double %662, double %664, double %666, double %668, ptr noundef %658, i32 noundef 0)
          to label %669 unwind label %731

669:                                              ; preds = %660
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %58, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
          to label %670 unwind label %731

670:                                              ; preds = %669
  %671 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %672 unwind label %731

672:                                              ; preds = %670
  %673 = getelementptr inbounds %"class.JPH::Quat", ptr %59, i32 0, i32 0
  %674 = getelementptr inbounds %"class.JPH::Vec4", ptr %673, i32 0, i32 0
  %675 = getelementptr inbounds %union.anon.5, ptr %674, i32 0, i32 0
  %676 = getelementptr inbounds { double, double }, ptr %675, i32 0, i32 0
  %677 = extractvalue { double, double } %671, 0
  store double %677, ptr %676, align 16
  %678 = getelementptr inbounds { double, double }, ptr %675, i32 0, i32 1
  %679 = extractvalue { double, double } %671, 1
  store double %679, ptr %678, align 8
  %680 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %681 unwind label %731

681:                                              ; preds = %672
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %680, float noundef 5.000000e-01, ptr noundef null)
          to label %682 unwind label %739

682:                                              ; preds = %681
  %683 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 0
  %684 = load double, ptr %683, align 16
  %685 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 1
  %686 = load double, ptr %685, align 8
  %687 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 0
  %688 = load double, ptr %687, align 16
  %689 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 1
  %690 = load double, ptr %689, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %55, double %684, double %686, double %688, double %690, ptr noundef %680, i32 noundef 0)
          to label %691 unwind label %731

691:                                              ; preds = %682
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %60, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %692 unwind label %731

692:                                              ; preds = %691
  %693 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %694 unwind label %731

694:                                              ; preds = %692
  %695 = getelementptr inbounds %"class.JPH::Quat", ptr %61, i32 0, i32 0
  %696 = getelementptr inbounds %"class.JPH::Vec4", ptr %695, i32 0, i32 0
  %697 = getelementptr inbounds %union.anon.5, ptr %696, i32 0, i32 0
  %698 = getelementptr inbounds { double, double }, ptr %697, i32 0, i32 0
  %699 = extractvalue { double, double } %693, 0
  store double %699, ptr %698, align 16
  %700 = getelementptr inbounds { double, double }, ptr %697, i32 0, i32 1
  %701 = extractvalue { double, double } %693, 1
  store double %701, ptr %700, align 8
  %702 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %703 unwind label %731

703:                                              ; preds = %694
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %702, float noundef 5.000000e-01, ptr noundef null)
          to label %704 unwind label %743

704:                                              ; preds = %703
  %705 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 0
  %706 = load double, ptr %705, align 16
  %707 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 1
  %708 = load double, ptr %707, align 8
  %709 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 0
  %710 = load double, ptr %709, align 16
  %711 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 1
  %712 = load double, ptr %711, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %55, double %706, double %708, double %710, double %712, ptr noundef %702, i32 noundef 0)
          to label %713 unwind label %731

713:                                              ; preds = %704
  call void @llvm.lifetime.start.p0(i64 40, ptr %62) #13
  invoke void @_ZNK3JPH27StaticCompoundShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %62, ptr noundef nonnull align 8 dereferenceable(88) %55)
          to label %714 unwind label %747

714:                                              ; preds = %713
  %715 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %62)
          to label %716 unwind label %751

716:                                              ; preds = %714
  %717 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %715)
          to label %718 unwind label %751

718:                                              ; preds = %716
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %62) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %62) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #13
  %719 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %720 unwind label %756

720:                                              ; preds = %718
  %721 = getelementptr inbounds %"class.JPH::Vec3", ptr %63, i32 0, i32 0
  %722 = getelementptr inbounds %union.anon, ptr %721, i32 0, i32 0
  %723 = getelementptr inbounds { double, double }, ptr %722, i32 0, i32 0
  %724 = extractvalue { double, double } %719, 0
  store double %724, ptr %723, align 16
  %725 = getelementptr inbounds { double, double }, ptr %722, i32 0, i32 1
  %726 = extractvalue { double, double } %719, 1
  store double %726, ptr %725, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %63, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #13
  store i32 8, ptr %30, align 4
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %55) #13
  call void @llvm.lifetime.end.p0(i64 88, ptr %55) #13
  br label %1085

727:                                              ; preds = %639
  %728 = landingpad { ptr, i32 }
          cleanup
  %729 = extractvalue { ptr, i32 } %728, 0
  store ptr %729, ptr %5, align 8
  %730 = extractvalue { ptr, i32 } %728, 1
  store i32 %730, ptr %6, align 4
  br label %761

731:                                              ; preds = %704, %694, %692, %691, %682, %672, %670, %669, %660, %650, %642, %640
  %732 = landingpad { ptr, i32 }
          cleanup
  %733 = extractvalue { ptr, i32 } %732, 0
  store ptr %733, ptr %5, align 8
  %734 = extractvalue { ptr, i32 } %732, 1
  store i32 %734, ptr %6, align 4
  br label %760

735:                                              ; preds = %659
  %736 = landingpad { ptr, i32 }
          cleanup
  %737 = extractvalue { ptr, i32 } %736, 0
  store ptr %737, ptr %5, align 8
  %738 = extractvalue { ptr, i32 } %736, 1
  store i32 %738, ptr %6, align 4
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %658) #13
  br label %760

739:                                              ; preds = %681
  %740 = landingpad { ptr, i32 }
          cleanup
  %741 = extractvalue { ptr, i32 } %740, 0
  store ptr %741, ptr %5, align 8
  %742 = extractvalue { ptr, i32 } %740, 1
  store i32 %742, ptr %6, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %680) #13
  br label %760

743:                                              ; preds = %703
  %744 = landingpad { ptr, i32 }
          cleanup
  %745 = extractvalue { ptr, i32 } %744, 0
  store ptr %745, ptr %5, align 8
  %746 = extractvalue { ptr, i32 } %744, 1
  store i32 %746, ptr %6, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %702) #13
  br label %760

747:                                              ; preds = %713
  %748 = landingpad { ptr, i32 }
          cleanup
  %749 = extractvalue { ptr, i32 } %748, 0
  store ptr %749, ptr %5, align 8
  %750 = extractvalue { ptr, i32 } %748, 1
  store i32 %750, ptr %6, align 4
  br label %755

751:                                              ; preds = %716, %714
  %752 = landingpad { ptr, i32 }
          cleanup
  %753 = extractvalue { ptr, i32 } %752, 0
  store ptr %753, ptr %5, align 8
  %754 = extractvalue { ptr, i32 } %752, 1
  store i32 %754, ptr %6, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %62) #13
  br label %755

755:                                              ; preds = %751, %747
  call void @llvm.lifetime.end.p0(i64 40, ptr %62) #13
  br label %760

756:                                              ; preds = %718
  %757 = landingpad { ptr, i32 }
          cleanup
  %758 = extractvalue { ptr, i32 } %757, 0
  store ptr %758, ptr %5, align 8
  %759 = extractvalue { ptr, i32 } %757, 1
  store i32 %759, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #13
  br label %760

760:                                              ; preds = %756, %755, %743, %739, %735, %731
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %55) #13
  br label %761

761:                                              ; preds = %760, %727
  call void @llvm.lifetime.end.p0(i64 88, ptr %55) #13
  br label %1157

762:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #13
  %763 = invoke noundef ptr @_ZN3JPH27StaticCompoundShapeSettingsnwEm(i64 noundef 88)
          to label %764 unwind label %1028

764:                                              ; preds = %762
  call void @llvm.memset.p0.i64(ptr align 8 %763, i8 0, i64 88, i1 false)
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %763)
          to label %765 unwind label %1032

765:                                              ; preds = %764
  invoke void @_ZN3JPH3RefINS_27StaticCompoundShapeSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef %763)
          to label %766 unwind label %1028

766:                                              ; preds = %765
  %767 = invoke noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %768 unwind label %1036

768:                                              ; preds = %766
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %65, float noundef 0.000000e+00, float noundef 7.500000e-01, float noundef 0.000000e+00)
          to label %769 unwind label %1036

769:                                              ; preds = %768
  %770 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %771 unwind label %1036

771:                                              ; preds = %769
  %772 = getelementptr inbounds %"class.JPH::Vec3", ptr %67, i32 0, i32 0
  %773 = getelementptr inbounds %union.anon, ptr %772, i32 0, i32 0
  %774 = getelementptr inbounds { double, double }, ptr %773, i32 0, i32 0
  %775 = extractvalue { double, double } %770, 0
  store double %775, ptr %774, align 16
  %776 = getelementptr inbounds { double, double }, ptr %773, i32 0, i32 1
  %777 = extractvalue { double, double } %770, 1
  store double %777, ptr %776, align 8
  %778 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 0
  %779 = load double, ptr %778, align 16
  %780 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 1
  %781 = load double, ptr %780, align 8
  %782 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %779, double %781, float noundef 0x3FF921FB60000000)
          to label %783 unwind label %1036

783:                                              ; preds = %771
  %784 = getelementptr inbounds %"class.JPH::Quat", ptr %66, i32 0, i32 0
  %785 = getelementptr inbounds %"class.JPH::Vec4", ptr %784, i32 0, i32 0
  %786 = getelementptr inbounds %union.anon.5, ptr %785, i32 0, i32 0
  %787 = getelementptr inbounds { double, double }, ptr %786, i32 0, i32 0
  %788 = extractvalue { double, double } %782, 0
  store double %788, ptr %787, align 16
  %789 = getelementptr inbounds { double, double }, ptr %786, i32 0, i32 1
  %790 = extractvalue { double, double } %782, 1
  store double %790, ptr %789, align 8
  %791 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %792 unwind label %1036

792:                                              ; preds = %783
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %68, float noundef 7.500000e-01, float noundef 2.500000e-01, float noundef 0x3FC99999A0000000)
          to label %793 unwind label %1040

793:                                              ; preds = %792
  %794 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 0
  %795 = load double, ptr %794, align 16
  %796 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 1
  %797 = load double, ptr %796, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %791, double %795, double %797, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %798 unwind label %1040

798:                                              ; preds = %793
  %799 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 0
  %800 = load double, ptr %799, align 16
  %801 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 1
  %802 = load double, ptr %801, align 8
  %803 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %804 = load double, ptr %803, align 16
  %805 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %806 = load double, ptr %805, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %767, double %800, double %802, double %804, double %806, ptr noundef %791, i32 noundef 0)
          to label %807 unwind label %1036

807:                                              ; preds = %798
  %808 = invoke noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %809 unwind label %1036

809:                                              ; preds = %807
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %69, float noundef 7.500000e-01, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %810 unwind label %1036

810:                                              ; preds = %809
  %811 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %812 unwind label %1036

812:                                              ; preds = %810
  %813 = getelementptr inbounds %"class.JPH::Vec3", ptr %71, i32 0, i32 0
  %814 = getelementptr inbounds %union.anon, ptr %813, i32 0, i32 0
  %815 = getelementptr inbounds { double, double }, ptr %814, i32 0, i32 0
  %816 = extractvalue { double, double } %811, 0
  store double %816, ptr %815, align 16
  %817 = getelementptr inbounds { double, double }, ptr %814, i32 0, i32 1
  %818 = extractvalue { double, double } %811, 1
  store double %818, ptr %817, align 8
  %819 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 0
  %820 = load double, ptr %819, align 16
  %821 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 1
  %822 = load double, ptr %821, align 8
  %823 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %820, double %822, float noundef 0x3FF921FB60000000)
          to label %824 unwind label %1036

824:                                              ; preds = %812
  %825 = getelementptr inbounds %"class.JPH::Quat", ptr %70, i32 0, i32 0
  %826 = getelementptr inbounds %"class.JPH::Vec4", ptr %825, i32 0, i32 0
  %827 = getelementptr inbounds %union.anon.5, ptr %826, i32 0, i32 0
  %828 = getelementptr inbounds { double, double }, ptr %827, i32 0, i32 0
  %829 = extractvalue { double, double } %823, 0
  store double %829, ptr %828, align 16
  %830 = getelementptr inbounds { double, double }, ptr %827, i32 0, i32 1
  %831 = extractvalue { double, double } %823, 1
  store double %831, ptr %830, align 8
  %832 = invoke noundef ptr @_ZN3JPH13CylinderShapenwEm(i64 noundef 56)
          to label %833 unwind label %1036

833:                                              ; preds = %824
  invoke void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %832, float noundef 7.500000e-01, float noundef 0x3FC99999A0000000, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %834 unwind label %1044

834:                                              ; preds = %833
  %835 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 0
  %836 = load double, ptr %835, align 16
  %837 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 1
  %838 = load double, ptr %837, align 8
  %839 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 0
  %840 = load double, ptr %839, align 16
  %841 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 1
  %842 = load double, ptr %841, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %808, double %836, double %838, double %840, double %842, ptr noundef %832, i32 noundef 0)
          to label %843 unwind label %1036

843:                                              ; preds = %834
  %844 = invoke noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %845 unwind label %1036

845:                                              ; preds = %843
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %72, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 7.500000e-01)
          to label %846 unwind label %1036

846:                                              ; preds = %845
  %847 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %848 unwind label %1036

848:                                              ; preds = %846
  %849 = getelementptr inbounds %"class.JPH::Vec3", ptr %74, i32 0, i32 0
  %850 = getelementptr inbounds %union.anon, ptr %849, i32 0, i32 0
  %851 = getelementptr inbounds { double, double }, ptr %850, i32 0, i32 0
  %852 = extractvalue { double, double } %847, 0
  store double %852, ptr %851, align 16
  %853 = getelementptr inbounds { double, double }, ptr %850, i32 0, i32 1
  %854 = extractvalue { double, double } %847, 1
  store double %854, ptr %853, align 8
  %855 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 0
  %856 = load double, ptr %855, align 16
  %857 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 1
  %858 = load double, ptr %857, align 8
  %859 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %856, double %858, float noundef 0x3FF921FB60000000)
          to label %860 unwind label %1036

860:                                              ; preds = %848
  %861 = getelementptr inbounds %"class.JPH::Quat", ptr %73, i32 0, i32 0
  %862 = getelementptr inbounds %"class.JPH::Vec4", ptr %861, i32 0, i32 0
  %863 = getelementptr inbounds %union.anon.5, ptr %862, i32 0, i32 0
  %864 = getelementptr inbounds { double, double }, ptr %863, i32 0, i32 0
  %865 = extractvalue { double, double } %859, 0
  store double %865, ptr %864, align 16
  %866 = getelementptr inbounds { double, double }, ptr %863, i32 0, i32 1
  %867 = extractvalue { double, double } %859, 1
  store double %867, ptr %866, align 8
  %868 = invoke noundef ptr @_ZN3JPH27TaperedCapsuleShapeSettingsnwEm(i64 noundef 88)
          to label %869 unwind label %1036

869:                                              ; preds = %860
  invoke void @_ZN3JPH27TaperedCapsuleShapeSettingsC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %868, float noundef 7.500000e-01, float noundef 2.500000e-01, float noundef 0x3FC99999A0000000, ptr noundef null)
          to label %870 unwind label %1048

870:                                              ; preds = %869
  %871 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 0
  %872 = load double, ptr %871, align 16
  %873 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 1
  %874 = load double, ptr %873, align 8
  %875 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 0
  %876 = load double, ptr %875, align 16
  %877 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 1
  %878 = load double, ptr %877, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %844, double %872, double %874, double %876, double %878, ptr noundef %868, i32 noundef 0)
          to label %879 unwind label %1036

879:                                              ; preds = %870
  call void @llvm.lifetime.start.p0(i64 88, ptr %75) #13
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %75)
          to label %880 unwind label %1052

880:                                              ; preds = %879
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %76, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %881 unwind label %1056

881:                                              ; preds = %880
  call void @llvm.lifetime.start.p0(i64 16, ptr %78) #13
  %882 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %883 unwind label %1060

883:                                              ; preds = %881
  %884 = getelementptr inbounds %"class.JPH::Vec3", ptr %79, i32 0, i32 0
  %885 = getelementptr inbounds %union.anon, ptr %884, i32 0, i32 0
  %886 = getelementptr inbounds { double, double }, ptr %885, i32 0, i32 0
  %887 = extractvalue { double, double } %882, 0
  store double %887, ptr %886, align 16
  %888 = getelementptr inbounds { double, double }, ptr %885, i32 0, i32 1
  %889 = extractvalue { double, double } %882, 1
  store double %889, ptr %888, align 8
  %890 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 0
  %891 = load double, ptr %890, align 16
  %892 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 1
  %893 = load double, ptr %892, align 8
  %894 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %891, double %893, float noundef 0xBFE921FB60000000)
          to label %895 unwind label %1060

895:                                              ; preds = %883
  %896 = getelementptr inbounds %"class.JPH::Quat", ptr %78, i32 0, i32 0
  %897 = getelementptr inbounds %"class.JPH::Vec4", ptr %896, i32 0, i32 0
  %898 = getelementptr inbounds %union.anon.5, ptr %897, i32 0, i32 0
  %899 = getelementptr inbounds { double, double }, ptr %898, i32 0, i32 0
  %900 = extractvalue { double, double } %894, 0
  store double %900, ptr %899, align 16
  %901 = getelementptr inbounds { double, double }, ptr %898, i32 0, i32 1
  %902 = extractvalue { double, double } %894, 1
  store double %902, ptr %901, align 8
  %903 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %904 unwind label %1060

904:                                              ; preds = %895
  %905 = getelementptr inbounds %"class.JPH::Vec3", ptr %81, i32 0, i32 0
  %906 = getelementptr inbounds %union.anon, ptr %905, i32 0, i32 0
  %907 = getelementptr inbounds { double, double }, ptr %906, i32 0, i32 0
  %908 = extractvalue { double, double } %903, 0
  store double %908, ptr %907, align 16
  %909 = getelementptr inbounds { double, double }, ptr %906, i32 0, i32 1
  %910 = extractvalue { double, double } %903, 1
  store double %910, ptr %909, align 8
  %911 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 0
  %912 = load double, ptr %911, align 16
  %913 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 1
  %914 = load double, ptr %913, align 8
  %915 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %912, double %914, float noundef 0x3FE921FB60000000)
          to label %916 unwind label %1060

916:                                              ; preds = %904
  %917 = getelementptr inbounds %"class.JPH::Quat", ptr %80, i32 0, i32 0
  %918 = getelementptr inbounds %"class.JPH::Vec4", ptr %917, i32 0, i32 0
  %919 = getelementptr inbounds %union.anon.5, ptr %918, i32 0, i32 0
  %920 = getelementptr inbounds { double, double }, ptr %919, i32 0, i32 0
  %921 = extractvalue { double, double } %915, 0
  store double %921, ptr %920, align 16
  %922 = getelementptr inbounds { double, double }, ptr %919, i32 0, i32 1
  %923 = extractvalue { double, double } %915, 1
  store double %923, ptr %922, align 8
  %924 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 0
  %925 = load double, ptr %924, align 16
  %926 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 1
  %927 = load double, ptr %926, align 8
  %928 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %78, double %925, double %927)
          to label %929 unwind label %1060

929:                                              ; preds = %916
  %930 = getelementptr inbounds %"class.JPH::Quat", ptr %77, i32 0, i32 0
  %931 = getelementptr inbounds %"class.JPH::Vec4", ptr %930, i32 0, i32 0
  %932 = getelementptr inbounds %union.anon.5, ptr %931, i32 0, i32 0
  %933 = getelementptr inbounds { double, double }, ptr %932, i32 0, i32 0
  %934 = extractvalue { double, double } %928, 0
  store double %934, ptr %933, align 16
  %935 = getelementptr inbounds { double, double }, ptr %932, i32 0, i32 1
  %936 = extractvalue { double, double } %928, 1
  store double %936, ptr %935, align 8
  %937 = invoke noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %938 unwind label %1060

938:                                              ; preds = %929
  %939 = getelementptr inbounds { double, double }, ptr %76, i32 0, i32 0
  %940 = load double, ptr %939, align 16
  %941 = getelementptr inbounds { double, double }, ptr %76, i32 0, i32 1
  %942 = load double, ptr %941, align 8
  %943 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 0
  %944 = load double, ptr %943, align 16
  %945 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 1
  %946 = load double, ptr %945, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %75, double %940, double %942, double %944, double %946, ptr noundef %937, i32 noundef 0)
          to label %947 unwind label %1060

947:                                              ; preds = %938
  call void @llvm.lifetime.end.p0(i64 16, ptr %78) #13
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %82, float noundef 0.000000e+00, float noundef 0xBFB99999A0000000, float noundef 0.000000e+00)
          to label %948 unwind label %1056

948:                                              ; preds = %947
  call void @llvm.lifetime.start.p0(i64 16, ptr %84) #13
  %949 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %950 unwind label %1064

950:                                              ; preds = %948
  %951 = getelementptr inbounds %"class.JPH::Vec3", ptr %85, i32 0, i32 0
  %952 = getelementptr inbounds %union.anon, ptr %951, i32 0, i32 0
  %953 = getelementptr inbounds { double, double }, ptr %952, i32 0, i32 0
  %954 = extractvalue { double, double } %949, 0
  store double %954, ptr %953, align 16
  %955 = getelementptr inbounds { double, double }, ptr %952, i32 0, i32 1
  %956 = extractvalue { double, double } %949, 1
  store double %956, ptr %955, align 8
  %957 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 0
  %958 = load double, ptr %957, align 16
  %959 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 1
  %960 = load double, ptr %959, align 8
  %961 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %958, double %960, float noundef 0x3FE921FB60000000)
          to label %962 unwind label %1064

962:                                              ; preds = %950
  %963 = getelementptr inbounds %"class.JPH::Quat", ptr %84, i32 0, i32 0
  %964 = getelementptr inbounds %"class.JPH::Vec4", ptr %963, i32 0, i32 0
  %965 = getelementptr inbounds %union.anon.5, ptr %964, i32 0, i32 0
  %966 = getelementptr inbounds { double, double }, ptr %965, i32 0, i32 0
  %967 = extractvalue { double, double } %961, 0
  store double %967, ptr %966, align 16
  %968 = getelementptr inbounds { double, double }, ptr %965, i32 0, i32 1
  %969 = extractvalue { double, double } %961, 1
  store double %969, ptr %968, align 8
  %970 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %971 unwind label %1064

971:                                              ; preds = %962
  %972 = getelementptr inbounds %"class.JPH::Vec3", ptr %87, i32 0, i32 0
  %973 = getelementptr inbounds %union.anon, ptr %972, i32 0, i32 0
  %974 = getelementptr inbounds { double, double }, ptr %973, i32 0, i32 0
  %975 = extractvalue { double, double } %970, 0
  store double %975, ptr %974, align 16
  %976 = getelementptr inbounds { double, double }, ptr %973, i32 0, i32 1
  %977 = extractvalue { double, double } %970, 1
  store double %977, ptr %976, align 8
  %978 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %979 = load double, ptr %978, align 16
  %980 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  %981 = load double, ptr %980, align 8
  %982 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %979, double %981, float noundef 0xC002D97C80000000)
          to label %983 unwind label %1064

983:                                              ; preds = %971
  %984 = getelementptr inbounds %"class.JPH::Quat", ptr %86, i32 0, i32 0
  %985 = getelementptr inbounds %"class.JPH::Vec4", ptr %984, i32 0, i32 0
  %986 = getelementptr inbounds %union.anon.5, ptr %985, i32 0, i32 0
  %987 = getelementptr inbounds { double, double }, ptr %986, i32 0, i32 0
  %988 = extractvalue { double, double } %982, 0
  store double %988, ptr %987, align 16
  %989 = getelementptr inbounds { double, double }, ptr %986, i32 0, i32 1
  %990 = extractvalue { double, double } %982, 1
  store double %990, ptr %989, align 8
  %991 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 0
  %992 = load double, ptr %991, align 16
  %993 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 1
  %994 = load double, ptr %993, align 8
  %995 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %84, double %992, double %994)
          to label %996 unwind label %1064

996:                                              ; preds = %983
  %997 = getelementptr inbounds %"class.JPH::Quat", ptr %83, i32 0, i32 0
  %998 = getelementptr inbounds %"class.JPH::Vec4", ptr %997, i32 0, i32 0
  %999 = getelementptr inbounds %union.anon.5, ptr %998, i32 0, i32 0
  %1000 = getelementptr inbounds { double, double }, ptr %999, i32 0, i32 0
  %1001 = extractvalue { double, double } %995, 0
  store double %1001, ptr %1000, align 16
  %1002 = getelementptr inbounds { double, double }, ptr %999, i32 0, i32 1
  %1003 = extractvalue { double, double } %995, 1
  store double %1003, ptr %1002, align 8
  %1004 = invoke noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %1005 unwind label %1064

1005:                                             ; preds = %996
  %1006 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 0
  %1007 = load double, ptr %1006, align 16
  %1008 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 1
  %1009 = load double, ptr %1008, align 8
  %1010 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 0
  %1011 = load double, ptr %1010, align 16
  %1012 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 1
  %1013 = load double, ptr %1012, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %75, double %1007, double %1009, double %1011, double %1013, ptr noundef %1004, i32 noundef 0)
          to label %1014 unwind label %1064

1014:                                             ; preds = %1005
  call void @llvm.lifetime.end.p0(i64 16, ptr %84) #13
  call void @llvm.lifetime.start.p0(i64 40, ptr %88) #13
  invoke void @_ZNK3JPH27StaticCompoundShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %88, ptr noundef nonnull align 8 dereferenceable(88) %75)
          to label %1015 unwind label %1068

1015:                                             ; preds = %1014
  %1016 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %88)
          to label %1017 unwind label %1072

1017:                                             ; preds = %1015
  %1018 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %1016)
          to label %1019 unwind label %1072

1019:                                             ; preds = %1017
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %88) #13
  call void @llvm.lifetime.end.p0(i64 40, ptr %88) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr %89) #13
  %1020 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %21)
          to label %1021 unwind label %1077

1021:                                             ; preds = %1019
  %1022 = getelementptr inbounds %"class.JPH::Vec3", ptr %89, i32 0, i32 0
  %1023 = getelementptr inbounds %union.anon, ptr %1022, i32 0, i32 0
  %1024 = getelementptr inbounds { double, double }, ptr %1023, i32 0, i32 0
  %1025 = extractvalue { double, double } %1020, 0
  store double %1025, ptr %1024, align 16
  %1026 = getelementptr inbounds { double, double }, ptr %1023, i32 0, i32 1
  %1027 = extractvalue { double, double } %1020, 1
  store double %1027, ptr %1026, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %89, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 16, ptr %89) #13
  store i32 8, ptr %30, align 4
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %75) #13
  call void @llvm.lifetime.end.p0(i64 88, ptr %75) #13
  call void @_ZN3JPH3RefINS_27StaticCompoundShapeSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %64) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #13
  br label %1085

1028:                                             ; preds = %765, %762
  %1029 = landingpad { ptr, i32 }
          cleanup
  %1030 = extractvalue { ptr, i32 } %1029, 0
  store ptr %1030, ptr %5, align 8
  %1031 = extractvalue { ptr, i32 } %1029, 1
  store i32 %1031, ptr %6, align 4
  br label %1084

1032:                                             ; preds = %764
  %1033 = landingpad { ptr, i32 }
          cleanup
  %1034 = extractvalue { ptr, i32 } %1033, 0
  store ptr %1034, ptr %5, align 8
  %1035 = extractvalue { ptr, i32 } %1033, 1
  store i32 %1035, ptr %6, align 4
  call void @_ZN3JPH27StaticCompoundShapeSettingsdlEPv(ptr noundef %763) #13
  br label %1084

1036:                                             ; preds = %870, %860, %848, %846, %845, %843, %834, %824, %812, %810, %809, %807, %798, %783, %771, %769, %768, %766
  %1037 = landingpad { ptr, i32 }
          cleanup
  %1038 = extractvalue { ptr, i32 } %1037, 0
  store ptr %1038, ptr %5, align 8
  %1039 = extractvalue { ptr, i32 } %1037, 1
  store i32 %1039, ptr %6, align 4
  br label %1083

1040:                                             ; preds = %793, %792
  %1041 = landingpad { ptr, i32 }
          cleanup
  %1042 = extractvalue { ptr, i32 } %1041, 0
  store ptr %1042, ptr %5, align 8
  %1043 = extractvalue { ptr, i32 } %1041, 1
  store i32 %1043, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %791) #13
  br label %1083

1044:                                             ; preds = %833
  %1045 = landingpad { ptr, i32 }
          cleanup
  %1046 = extractvalue { ptr, i32 } %1045, 0
  store ptr %1046, ptr %5, align 8
  %1047 = extractvalue { ptr, i32 } %1045, 1
  store i32 %1047, ptr %6, align 4
  call void @_ZN3JPH13CylinderShapedlEPv(ptr noundef %832) #13
  br label %1083

1048:                                             ; preds = %869
  %1049 = landingpad { ptr, i32 }
          cleanup
  %1050 = extractvalue { ptr, i32 } %1049, 0
  store ptr %1050, ptr %5, align 8
  %1051 = extractvalue { ptr, i32 } %1049, 1
  store i32 %1051, ptr %6, align 4
  call void @_ZN3JPH27TaperedCapsuleShapeSettingsdlEPv(ptr noundef %868) #13
  br label %1083

1052:                                             ; preds = %879
  %1053 = landingpad { ptr, i32 }
          cleanup
  %1054 = extractvalue { ptr, i32 } %1053, 0
  store ptr %1054, ptr %5, align 8
  %1055 = extractvalue { ptr, i32 } %1053, 1
  store i32 %1055, ptr %6, align 4
  br label %1082

1056:                                             ; preds = %947, %880
  %1057 = landingpad { ptr, i32 }
          cleanup
  %1058 = extractvalue { ptr, i32 } %1057, 0
  store ptr %1058, ptr %5, align 8
  %1059 = extractvalue { ptr, i32 } %1057, 1
  store i32 %1059, ptr %6, align 4
  br label %1081

1060:                                             ; preds = %938, %929, %916, %904, %895, %883, %881
  %1061 = landingpad { ptr, i32 }
          cleanup
  %1062 = extractvalue { ptr, i32 } %1061, 0
  store ptr %1062, ptr %5, align 8
  %1063 = extractvalue { ptr, i32 } %1061, 1
  store i32 %1063, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %78) #13
  br label %1081

1064:                                             ; preds = %1005, %996, %983, %971, %962, %950, %948
  %1065 = landingpad { ptr, i32 }
          cleanup
  %1066 = extractvalue { ptr, i32 } %1065, 0
  store ptr %1066, ptr %5, align 8
  %1067 = extractvalue { ptr, i32 } %1065, 1
  store i32 %1067, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %84) #13
  br label %1081

1068:                                             ; preds = %1014
  %1069 = landingpad { ptr, i32 }
          cleanup
  %1070 = extractvalue { ptr, i32 } %1069, 0
  store ptr %1070, ptr %5, align 8
  %1071 = extractvalue { ptr, i32 } %1069, 1
  store i32 %1071, ptr %6, align 4
  br label %1076

1072:                                             ; preds = %1017, %1015
  %1073 = landingpad { ptr, i32 }
          cleanup
  %1074 = extractvalue { ptr, i32 } %1073, 0
  store ptr %1074, ptr %5, align 8
  %1075 = extractvalue { ptr, i32 } %1073, 1
  store i32 %1075, ptr %6, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %88) #13
  br label %1076

1076:                                             ; preds = %1072, %1068
  call void @llvm.lifetime.end.p0(i64 40, ptr %88) #13
  br label %1081

1077:                                             ; preds = %1019
  %1078 = landingpad { ptr, i32 }
          cleanup
  %1079 = extractvalue { ptr, i32 } %1078, 0
  store ptr %1079, ptr %5, align 8
  %1080 = extractvalue { ptr, i32 } %1078, 1
  store i32 %1080, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %89) #13
  br label %1081

1081:                                             ; preds = %1077, %1076, %1064, %1060, %1056
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %75) #13
  br label %1082

1082:                                             ; preds = %1081, %1052
  call void @llvm.lifetime.end.p0(i64 88, ptr %75) #13
  br label %1083

1083:                                             ; preds = %1082, %1048, %1044, %1040, %1036
  call void @_ZN3JPH3RefINS_27StaticCompoundShapeSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %64) #13
  br label %1084

1084:                                             ; preds = %1083, %1032, %1028
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #13
  br label %1157

1085:                                             ; preds = %1021, %720, %614, %576, %546, %489, %447, %419, %372, %341, %326
  %1086 = invoke noundef i64 @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEclEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %1087 unwind label %328

1087:                                             ; preds = %1085
  %1088 = urem i64 %1086, 3
  %1089 = icmp eq i64 %1088, 0
  br i1 %1089, label %1090, label %1106

1090:                                             ; preds = %1087
  %1091 = invoke noundef ptr @_ZN3JPH11ScaledShapenwEm(i64 noundef 64)
          to label %1092 unwind label %328

1092:                                             ; preds = %1090
  %1093 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %1094 unwind label %1102

1094:                                             ; preds = %1092
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %90, ptr align 16 %21, i64 16, i1 false), !tbaa.struct !22
  %1095 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 0
  %1096 = load double, ptr %1095, align 16
  %1097 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 1
  %1098 = load double, ptr %1097, align 8
  invoke void @_ZN3JPH11ScaledShapeC2EPKNS_5ShapeENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %1091, ptr noundef %1093, double %1096, double %1098)
          to label %1099 unwind label %1102

1099:                                             ; preds = %1094
  %1100 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef %1091)
          to label %1101 unwind label %328

1101:                                             ; preds = %1099
  br label %1106

1102:                                             ; preds = %1094, %1092
  %1103 = landingpad { ptr, i32 }
          cleanup
  %1104 = extractvalue { ptr, i32 } %1103, 0
  store ptr %1104, ptr %5, align 8
  %1105 = extractvalue { ptr, i32 } %1103, 1
  store i32 %1105, ptr %6, align 4
  call void @_ZN3JPH11ScaledShapedlEPv(ptr noundef %1091) #13
  br label %1157

1106:                                             ; preds = %1101, %1087
  call void @llvm.lifetime.start.p0(i64 16, ptr %91) #13
  %1107 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %1108 unwind label %1143

1108:                                             ; preds = %1106
  %1109 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %1110 unwind label %1143

1110:                                             ; preds = %1108
  %1111 = fadd float 1.000000e+02, %1109
  %1112 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %1113 unwind label %1143

1113:                                             ; preds = %1110
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %91, float noundef %1107, float noundef %1111, float noundef %1112)
          to label %1114 unwind label %1143

1114:                                             ; preds = %1113
  %1115 = getelementptr inbounds %class.Test, ptr %96, i32 0, i32 3
  %1116 = load ptr, ptr %1115, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 256, ptr %92) #13
  %1117 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %1118 unwind label %1147

1118:                                             ; preds = %1114
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %93, ptr align 16 %91, i64 16, i1 false), !tbaa.struct !22
  %1119 = invoke { double, double } @_ZN3JPH4Quat7sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %1120 unwind label %1147

1120:                                             ; preds = %1118
  %1121 = getelementptr inbounds %"class.JPH::Quat", ptr %94, i32 0, i32 0
  %1122 = getelementptr inbounds %"class.JPH::Vec4", ptr %1121, i32 0, i32 0
  %1123 = getelementptr inbounds %union.anon.5, ptr %1122, i32 0, i32 0
  %1124 = getelementptr inbounds { double, double }, ptr %1123, i32 0, i32 0
  %1125 = extractvalue { double, double } %1119, 0
  store double %1125, ptr %1124, align 16
  %1126 = getelementptr inbounds { double, double }, ptr %1123, i32 0, i32 1
  %1127 = extractvalue { double, double } %1119, 1
  store double %1127, ptr %1126, align 8
  %1128 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 0
  %1129 = load double, ptr %1128, align 16
  %1130 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 1
  %1131 = load double, ptr %1130, align 8
  %1132 = getelementptr inbounds { double, double }, ptr %94, i32 0, i32 0
  %1133 = load double, ptr %1132, align 16
  %1134 = getelementptr inbounds { double, double }, ptr %94, i32 0, i32 1
  %1135 = load double, ptr %1134, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %92, ptr noundef %1117, double %1129, double %1131, double %1133, double %1135, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %1136 unwind label %1147

1136:                                             ; preds = %1120
  %1137 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %1116, ptr noundef nonnull align 16 dereferenceable(256) %92, i32 noundef 0)
          to label %1138 unwind label %1151

1138:                                             ; preds = %1136
  %1139 = getelementptr inbounds %"class.JPH::BodyID", ptr %95, i32 0, i32 0
  store i32 %1137, ptr %1139, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %92) #13
  call void @llvm.lifetime.end.p0(i64 256, ptr %92) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %91) #13
  br label %1140

1140:                                             ; preds = %1138
  %1141 = load i32, ptr %29, align 4, !tbaa !9
  %1142 = add nsw i32 %1141, 1
  store i32 %1142, ptr %29, align 4, !tbaa !9
  br label %296, !llvm.loop !26

1143:                                             ; preds = %1113, %1110, %1108, %1106
  %1144 = landingpad { ptr, i32 }
          cleanup
  %1145 = extractvalue { ptr, i32 } %1144, 0
  store ptr %1145, ptr %5, align 8
  %1146 = extractvalue { ptr, i32 } %1144, 1
  store i32 %1146, ptr %6, align 4
  br label %1156

1147:                                             ; preds = %1120, %1118, %1114
  %1148 = landingpad { ptr, i32 }
          cleanup
  %1149 = extractvalue { ptr, i32 } %1148, 0
  store ptr %1149, ptr %5, align 8
  %1150 = extractvalue { ptr, i32 } %1148, 1
  store i32 %1150, ptr %6, align 4
  br label %1155

1151:                                             ; preds = %1136
  %1152 = landingpad { ptr, i32 }
          cleanup
  %1153 = extractvalue { ptr, i32 } %1152, 0
  store ptr %1153, ptr %5, align 8
  %1154 = extractvalue { ptr, i32 } %1152, 1
  store i32 %1154, ptr %6, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %92) #13
  br label %1155

1155:                                             ; preds = %1151, %1147
  call void @llvm.lifetime.end.p0(i64 256, ptr %92) #13
  br label %1156

1156:                                             ; preds = %1155, %1143
  call void @llvm.lifetime.end.p0(i64 16, ptr %91) #13
  br label %1157

1157:                                             ; preds = %1156, %1102, %1084, %761, %635, %634, %597, %596, %557, %553, %533, %458, %454, %434, %373, %352, %348, %328
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #13
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #13
  br label %1159

1158:                                             ; preds = %299
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #13
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #13
  ret void

1159:                                             ; preds = %1157, %320
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #13
  br label %1160

1160:                                             ; preds = %1159, %316
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #13
  br label %1161

1161:                                             ; preds = %1160, %312
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #13
  br label %1162

1162:                                             ; preds = %1161, %308
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #13
  br label %1163

1163:                                             ; preds = %1162, %304
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #13
  br label %1164

1164:                                             ; preds = %1163, %300
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #13
  br label %1165

1165:                                             ; preds = %1164, %216
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #13
  br label %1166

1166:                                             ; preds = %1165, %108
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #13
  br label %1167

1167:                                             ; preds = %1166
  %1168 = load ptr, ptr %5, align 8
  %1169 = load i32, ptr %6, align 4
  %1170 = insertvalue { ptr, i32 } poison, ptr %1168, 0
  %1171 = insertvalue { ptr, i32 } %1170, i32 %1169, 1
  resume { ptr, i32 } %1171
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #9 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef, double, double) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec37sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8)) #5 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

declare void @_ZNK3JPH23ConvexHullShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #6

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33)) unnamed_addr #10 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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #11

declare void @_ZN3JPH27TaperedCapsuleShapeSettingsC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88), float noundef, float noundef, float noundef, ptr noundef) unnamed_addr #6

declare void @_ZNK3JPH27TaperedCapsuleShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #6

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

declare void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56), float noundef, float noundef, float noundef, ptr noundef) unnamed_addr #6

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

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

declare void @_ZN3JPH28TaperedCylinderShapeSettingsC1EffffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(96), float noundef, float noundef, float noundef, float noundef, ptr noundef) unnamed_addr #6

declare void @_ZNK3JPH28TaperedCylinderShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #6

; 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 uwtable
declare dso_local void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #5 align 2

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

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

declare void @_ZNK3JPH27StaticCompoundShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #6

; 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: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH27StaticCompoundShapeSettingsnwEm(i64 noundef) #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


; 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::RefConst" = type { ptr }
%"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.5 }
%union.anon.5 = type { <4 x float> }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.7", %"class.JPH::RefConst" }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.6", i32, i32 }
%"class.JPH::RefConst.6" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.7" = type { ptr }
%"class.std::linear_congruential_engine" = type { i64 }
%"class.std::uniform_real_distribution" = type { %"struct.std::uniform_real_distribution<float>::param_type" }
%"struct.std::uniform_real_distribution<float>::param_type" = type { float, float }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Result" = type <{ %union.anon.9, i8, [7 x i8] }>
%union.anon.9 = 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.12 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.12 = type { i64, [8 x 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.4", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.13", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.13" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.4" = type { ptr }
%"class.JPH::TaperedCapsuleShapeSettings" = type { %"class.JPH::ConvexShapeSettings.base", float, float, float }
%"class.JPH::TaperedCylinderShapeSettings" = type { %"class.JPH::ConvexShapeSettings.base", float, float, float, float, [4 x i8] }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.14" }
%"class.JPH::Array.14" = type { i64, i64, ptr }
%"class.JPH::Ref.17" = type { ptr }

; 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 @_ZN10FunnelTest10InitializeEv(ptr nocapture noundef nonnull readonly align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::RefConst", align 8
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::Quat", align 16
  %5 = alloca %"class.JPH::BodyCreationSettings", align 16
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.std::linear_congruential_engine", align 8
  %8 = alloca %"class.std::uniform_real_distribution", align 4
  %9 = alloca %"class.std::uniform_real_distribution", align 4
  %10 = alloca %"class.std::uniform_real_distribution", align 4
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::RefConst", align 8
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Array", align 8
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Result", align 8
  %17 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca %"class.JPH::Result", align 8
  %21 = alloca %"class.JPH::TaperedCapsuleShapeSettings", align 8
  %22 = alloca %"class.JPH::Result", align 8
  %23 = alloca %"class.JPH::TaperedCylinderShapeSettings", align 8
  %24 = alloca %"class.JPH::Result", align 8
  %25 = alloca %"class.JPH::TaperedCylinderShapeSettings", align 8
  %26 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Result", align 8
  %30 = alloca %"class.JPH::Ref.17", align 8
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %36 = alloca %"class.JPH::Vec3", align 16
  %37 = alloca %"class.JPH::Quat", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Quat", align 16
  %40 = alloca %"class.JPH::Result", align 8
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::BodyCreationSettings", align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #12
  %43 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 5.000000e+01, float noundef 1.000000e+00, float noundef 5.000000e+01)
          to label %44 unwind label %53

44:                                               ; preds = %1
  %45 = load double, ptr %3, align 16
  %46 = getelementptr inbounds i8, ptr %3, i64 8
  %47 = load double, ptr %46, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %43, double %45, double %47, float noundef 0.000000e+00, ptr noundef null)
          to label %48 unwind label %53

48:                                               ; preds = %44
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %43)
  %49 = getelementptr inbounds i8, ptr %4, i64 8
  %50 = getelementptr inbounds i8, ptr %0, i64 24
  %51 = getelementptr inbounds i8, ptr %6, i64 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #12
  %52 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %55 unwind label %182

53:                                               ; preds = %44, %1
  %54 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %43) #12
  br label %704

55:                                               ; preds = %48
  %56 = extractvalue { double, double } %52, 0
  %57 = extractvalue { double, double } %52, 1
  %58 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %56, double %57, float noundef 0.000000e+00)
          to label %59 unwind label %182

59:                                               ; preds = %55
  %60 = extractvalue { double, double } %58, 0
  store double %60, ptr %4, align 16
  %61 = extractvalue { double, double } %58, 1
  store double %61, ptr %49, align 8
  %62 = load ptr, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #12
  %63 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef 2.500000e+01, float noundef 2.500000e+01, float noundef 0.000000e+00)
          to label %64 unwind label %184

64:                                               ; preds = %59
  %65 = load double, ptr %6, align 16
  %66 = load double, ptr %51, align 8
  %67 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %4, double %65, double %66)
          to label %68 unwind label %184

68:                                               ; preds = %64
  %69 = extractvalue { double, double } %67, 0
  %70 = extractvalue { double, double } %67, 1
  %71 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %72 unwind label %184

72:                                               ; preds = %68
  %73 = extractvalue { double, double } %71, 0
  %74 = extractvalue { double, double } %71, 1
  %75 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %73, double %74, float noundef 0x3FE921FB60000000)
          to label %76 unwind label %184

76:                                               ; preds = %72
  %77 = extractvalue { double, double } %75, 0
  %78 = extractvalue { double, double } %75, 1
  %79 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %77, double %78)
          to label %80 unwind label %184

80:                                               ; preds = %76
  %81 = extractvalue { double, double } %79, 0
  %82 = extractvalue { double, double } %79, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %5, ptr noundef %63, double %69, double %70, double %81, double %82, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %83 unwind label %184

83:                                               ; preds = %80
  %84 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef nonnull align 16 dereferenceable(256) %5, i32 noundef 1)
          to label %85 unwind label %186

85:                                               ; preds = %83
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #12
  %86 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %87 unwind label %182

87:                                               ; preds = %85
  %88 = extractvalue { double, double } %86, 0
  %89 = extractvalue { double, double } %86, 1
  %90 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %88, double %89, float noundef 0x3FF921FB60000000)
          to label %91 unwind label %182

91:                                               ; preds = %87
  %92 = extractvalue { double, double } %90, 0
  store double %92, ptr %4, align 16
  %93 = extractvalue { double, double } %90, 1
  store double %93, ptr %49, align 8
  %94 = load ptr, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #12
  %95 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef 2.500000e+01, float noundef 2.500000e+01, float noundef 0.000000e+00)
          to label %96 unwind label %184

96:                                               ; preds = %91
  %97 = load double, ptr %6, align 16
  %98 = load double, ptr %51, align 8
  %99 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %4, double %97, double %98)
          to label %100 unwind label %184

100:                                              ; preds = %96
  %101 = extractvalue { double, double } %99, 0
  %102 = extractvalue { double, double } %99, 1
  %103 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %104 unwind label %184

104:                                              ; preds = %100
  %105 = extractvalue { double, double } %103, 0
  %106 = extractvalue { double, double } %103, 1
  %107 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %105, double %106, float noundef 0x3FE921FB60000000)
          to label %108 unwind label %184

108:                                              ; preds = %104
  %109 = extractvalue { double, double } %107, 0
  %110 = extractvalue { double, double } %107, 1
  %111 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %109, double %110)
          to label %112 unwind label %184

112:                                              ; preds = %108
  %113 = extractvalue { double, double } %111, 0
  %114 = extractvalue { double, double } %111, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %5, ptr noundef %95, double %101, double %102, double %113, double %114, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %115 unwind label %184

115:                                              ; preds = %112
  %116 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %94, ptr noundef nonnull align 16 dereferenceable(256) %5, i32 noundef 1)
          to label %117 unwind label %186

117:                                              ; preds = %115
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #12
  %118 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %119 unwind label %182

119:                                              ; preds = %117
  %120 = extractvalue { double, double } %118, 0
  %121 = extractvalue { double, double } %118, 1
  %122 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %120, double %121, float noundef 0x400921FB60000000)
          to label %123 unwind label %182

123:                                              ; preds = %119
  %124 = extractvalue { double, double } %122, 0
  store double %124, ptr %4, align 16
  %125 = extractvalue { double, double } %122, 1
  store double %125, ptr %49, align 8
  %126 = load ptr, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #12
  %127 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef 2.500000e+01, float noundef 2.500000e+01, float noundef 0.000000e+00)
          to label %128 unwind label %184

128:                                              ; preds = %123
  %129 = load double, ptr %6, align 16
  %130 = load double, ptr %51, align 8
  %131 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %4, double %129, double %130)
          to label %132 unwind label %184

132:                                              ; preds = %128
  %133 = extractvalue { double, double } %131, 0
  %134 = extractvalue { double, double } %131, 1
  %135 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %136 unwind label %184

136:                                              ; preds = %132
  %137 = extractvalue { double, double } %135, 0
  %138 = extractvalue { double, double } %135, 1
  %139 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %137, double %138, float noundef 0x3FE921FB60000000)
          to label %140 unwind label %184

140:                                              ; preds = %136
  %141 = extractvalue { double, double } %139, 0
  %142 = extractvalue { double, double } %139, 1
  %143 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %141, double %142)
          to label %144 unwind label %184

144:                                              ; preds = %140
  %145 = extractvalue { double, double } %143, 0
  %146 = extractvalue { double, double } %143, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %5, ptr noundef %127, double %133, double %134, double %145, double %146, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %147 unwind label %184

147:                                              ; preds = %144
  %148 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %126, ptr noundef nonnull align 16 dereferenceable(256) %5, i32 noundef 1)
          to label %149 unwind label %186

149:                                              ; preds = %147
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #12
  %150 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %151 unwind label %182

151:                                              ; preds = %149
  %152 = extractvalue { double, double } %150, 0
  %153 = extractvalue { double, double } %150, 1
  %154 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %152, double %153, float noundef 0x4012D97C80000000)
          to label %155 unwind label %182

155:                                              ; preds = %151
  %156 = extractvalue { double, double } %154, 0
  store double %156, ptr %4, align 16
  %157 = extractvalue { double, double } %154, 1
  store double %157, ptr %49, align 8
  %158 = load ptr, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #12
  %159 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef 2.500000e+01, float noundef 2.500000e+01, float noundef 0.000000e+00)
          to label %160 unwind label %184

160:                                              ; preds = %155
  %161 = load double, ptr %6, align 16
  %162 = load double, ptr %51, align 8
  %163 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %4, double %161, double %162)
          to label %164 unwind label %184

164:                                              ; preds = %160
  %165 = extractvalue { double, double } %163, 0
  %166 = extractvalue { double, double } %163, 1
  %167 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %168 unwind label %184

168:                                              ; preds = %164
  %169 = extractvalue { double, double } %167, 0
  %170 = extractvalue { double, double } %167, 1
  %171 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %169, double %170, float noundef 0x3FE921FB60000000)
          to label %172 unwind label %184

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

176:                                              ; preds = %172
  %177 = extractvalue { double, double } %175, 0
  %178 = extractvalue { double, double } %175, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %5, ptr noundef %159, double %165, double %166, double %177, double %178, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %179 unwind label %184

179:                                              ; preds = %176
  %180 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %158, ptr noundef nonnull align 16 dereferenceable(256) %5, i32 noundef 1)
          to label %181 unwind label %186

181:                                              ; preds = %179
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #12
  invoke void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %190 unwind label %235

182:                                              ; preds = %151, %149, %119, %117, %87, %85, %55, %48
  %183 = landingpad { ptr, i32 }
          cleanup
  br label %189

184:                                              ; preds = %176, %172, %168, %164, %160, %155, %144, %140, %136, %132, %128, %123, %112, %108, %104, %100, %96, %91, %80, %76, %72, %68, %64, %59
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %188

186:                                              ; preds = %179, %147, %115, %83
  %187 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #12
  br label %188

188:                                              ; preds = %186, %184
  %.pn168 = phi { ptr, i32 } [ %187, %186 ], [ %185, %184 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #12
  br label %189

189:                                              ; preds = %188, %182
  %.pn168.pn = phi { ptr, i32 } [ %.pn168, %188 ], [ %183, %182 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #12
  br label %703

190:                                              ; preds = %181
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #12
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %8, float noundef 0x3FB99999A0000000, float noundef 2.000000e+00)
          to label %191 unwind label %237

191:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #12
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %9, float noundef -4.000000e+01, float noundef 4.000000e+01)
          to label %192 unwind label %239

192:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #12
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %10, float noundef -1.500000e+00, float noundef 1.500000e+00)
          to label %193 unwind label %241

193:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #12
  %194 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %195 unwind label %243

195:                                              ; preds = %193
  %196 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %197 unwind label %243

197:                                              ; preds = %195
  %198 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %199 unwind label %243

199:                                              ; preds = %197
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef %194, float noundef %196, float noundef %198)
          to label %200 unwind label %243

200:                                              ; preds = %199
  %201 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef -5.000000e-01)
          to label %202 unwind label %243

202:                                              ; preds = %200
  %203 = extractvalue { double, double } %201, 0
  %204 = extractvalue { double, double } %201, 1
  %205 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 5.000000e-01)
          to label %206 unwind label %243

206:                                              ; preds = %202
  %207 = extractvalue { double, double } %205, 0
  %208 = extractvalue { double, double } %205, 1
  %.sroa.068.0.copyload = load double, ptr %11, align 16
  %.sroa.269.0..sroa_idx = getelementptr inbounds i8, ptr %11, i64 8
  %.sroa.269.0.copyload = load double, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  %209 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %210 unwind label %243

210:                                              ; preds = %206
  %211 = extractvalue { double, double } %209, 0
  %212 = extractvalue { double, double } %209, 1
  %213 = invoke { i64, i64 } @_ZN3JPH4Vec315sGreaterOrEqualES0_S0_(double %.sroa.068.0.copyload, double %.sroa.269.0.copyload, double %211, double %212)
          to label %214 unwind label %243

214:                                              ; preds = %210
  %215 = extractvalue { i64, i64 } %213, 0
  %216 = extractvalue { i64, i64 } %213, 1
  %217 = invoke { double, double } @_ZN3JPH4Vec37sSelectES0_S0_NS_5UVec4E(double %203, double %204, double %207, double %208, i64 %215, i64 %216)
          to label %218 unwind label %243

218:                                              ; preds = %214
  %219 = extractvalue { double, double } %217, 0
  %220 = extractvalue { double, double } %217, 1
  %221 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %219, double %220)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12)
  %222 = getelementptr inbounds i8, ptr %32, i64 8
  %223 = getelementptr inbounds i8, ptr %31, i64 8
  %224 = getelementptr inbounds i8, ptr %33, i64 8
  %225 = getelementptr inbounds i8, ptr %34, i64 8
  %226 = getelementptr inbounds i8, ptr %37, i64 8
  %227 = getelementptr inbounds i8, ptr %36, i64 8
  %228 = getelementptr inbounds i8, ptr %39, i64 8
  %229 = getelementptr inbounds i8, ptr %38, i64 8
  %230 = getelementptr inbounds i8, ptr %27, i64 8
  %231 = getelementptr inbounds i8, ptr %28, i64 8
  %232 = getelementptr inbounds i8, ptr %15, i64 8
  %233 = getelementptr inbounds i8, ptr %13, i64 8
  %.sroa.23.0..sroa_idx = getelementptr inbounds i8, ptr %41, i64 8
  br label %245

234:                                              ; preds = %687
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #12
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #12
  ret void

235:                                              ; preds = %181
  %236 = landingpad { ptr, i32 }
          cleanup
  br label %702

237:                                              ; preds = %190
  %238 = landingpad { ptr, i32 }
          cleanup
  br label %701

239:                                              ; preds = %191
  %240 = landingpad { ptr, i32 }
          cleanup
  br label %700

241:                                              ; preds = %192
  %242 = landingpad { ptr, i32 }
          cleanup
  br label %699

243:                                              ; preds = %214, %210, %206, %202, %200, %199, %197, %195, %193
  %244 = landingpad { ptr, i32 }
          cleanup
  br label %698

245:                                              ; preds = %218, %687
  %.0128236 = phi i32 [ 0, %218 ], [ %688, %687 ]
  %246 = invoke noundef i64 @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEclEv(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %247 unwind label %249

247:                                              ; preds = %245
  %248 = urem i64 %246, 10
  switch i64 %248, label %default.unreachable299 [
    i64 0, label %251
    i64 1, label %267
    i64 2, label %283
    i64 3, label %315
    i64 4, label %334
    i64 5, label %373
    i64 6, label %392
    i64 7, label %420
    i64 8, label %446
    i64 9, label %510
  ]

249:                                              ; preds = %666, %662, %657, %381, %373, %323, %315, %279, %267, %256, %251, %245
  %250 = landingpad { ptr, i32 }
          cleanup
  br label %697

251:                                              ; preds = %247
  %252 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %253 unwind label %249

253:                                              ; preds = %251
  %254 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %255 unwind label %263

255:                                              ; preds = %253
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %252, float noundef %254, ptr noundef null)
          to label %256 unwind label %263

256:                                              ; preds = %255
  %257 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull %252)
          to label %258 unwind label %249

258:                                              ; preds = %256
  %259 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %11)
          to label %260 unwind label %265

260:                                              ; preds = %258
  %261 = extractvalue { double, double } %259, 0
  %262 = extractvalue { double, double } %259, 1
  store double %261, ptr %11, align 16
  store double %262, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  br label %657

263:                                              ; preds = %255, %253
  %264 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %252) #12
  br label %697

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

267:                                              ; preds = %247
  %268 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %269 unwind label %249

269:                                              ; preds = %267
  %270 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %271 unwind label %281

271:                                              ; preds = %269
  %272 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %273 unwind label %281

273:                                              ; preds = %271
  %274 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %275 unwind label %281

275:                                              ; preds = %273
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %13, float noundef %270, float noundef %272, float noundef %274)
          to label %276 unwind label %281

276:                                              ; preds = %275
  %277 = load double, ptr %13, align 16
  %278 = load double, ptr %233, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %268, double %277, double %278, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %279 unwind label %281

279:                                              ; preds = %276
  %280 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull %268)
          to label %657 unwind label %249

281:                                              ; preds = %276, %275, %273, %271, %269
  %282 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %268) #12
  br label %697

283:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #12
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #12
  br label %285

284:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %16) #12
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %17) #12
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %17, ptr noundef nonnull align 8 dereferenceable(24) %14, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %300 unwind label %306

285:                                              ; preds = %283, %296
  %.0129235 = phi i32 [ 0, %283 ], [ %297, %296 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #12
  %286 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %287 unwind label %298

287:                                              ; preds = %285
  %288 = invoke { double, double } @_ZN3JPH4Vec37sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %289 unwind label %298

289:                                              ; preds = %287
  %290 = extractvalue { double, double } %288, 0
  %291 = extractvalue { double, double } %288, 1
  %292 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %286, double %290, double %291)
          to label %293 unwind label %298

293:                                              ; preds = %289
  %294 = extractvalue { double, double } %292, 0
  store double %294, ptr %15, align 16
  %295 = extractvalue { double, double } %292, 1
  store double %295, ptr %232, align 8
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 16 dereferenceable(16) %15)
          to label %296 unwind label %298

296:                                              ; preds = %293
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  %297 = add nuw nsw i32 %.0129235, 1
  %exitcond.not = icmp eq i32 %297, 20
  br i1 %exitcond.not, label %284, label %285, !llvm.loop !18

298:                                              ; preds = %293, %289, %287, %285
  %299 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  br label %314

300:                                              ; preds = %284
  invoke void @_ZNK3JPH23ConvexHullShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %16, ptr noundef nonnull align 8 dereferenceable(120) %17)
          to label %301 unwind label %308

301:                                              ; preds = %300
  %302 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %16)
          to label %303 unwind label %310

303:                                              ; preds = %301
  %304 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %302)
          to label %305 unwind label %310

305:                                              ; preds = %303
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %16) #12
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %17) #12
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %16) #12
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #12
  br label %657

306:                                              ; preds = %284
  %307 = landingpad { ptr, i32 }
          cleanup
  br label %313

308:                                              ; preds = %300
  %309 = landingpad { ptr, i32 }
          cleanup
  br label %312

310:                                              ; preds = %303, %301
  %311 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %16) #12
  br label %312

312:                                              ; preds = %310, %308
  %.pn154 = phi { ptr, i32 } [ %311, %310 ], [ %309, %308 ]
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %17) #12
  br label %313

313:                                              ; preds = %312, %306
  %.pn154.pn = phi { ptr, i32 } [ %.pn154, %312 ], [ %307, %306 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %16) #12
  br label %314

314:                                              ; preds = %313, %298
  %.pn157 = phi { ptr, i32 } [ %299, %298 ], [ %.pn154.pn, %313 ]
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #12
  br label %697

315:                                              ; preds = %247
  %316 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %317 unwind label %249

317:                                              ; preds = %315
  %318 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %319 unwind label %330

319:                                              ; preds = %317
  %320 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %321 unwind label %330

321:                                              ; preds = %319
  %322 = fmul float %318, 5.000000e-01
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %316, float noundef %322, float noundef %320, ptr noundef null)
          to label %323 unwind label %330

323:                                              ; preds = %321
  %324 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull %316)
          to label %325 unwind label %249

325:                                              ; preds = %323
  %326 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %11)
          to label %327 unwind label %332

327:                                              ; preds = %325
  %328 = extractvalue { double, double } %326, 0
  %329 = extractvalue { double, double } %326, 1
  store double %328, ptr %11, align 16
  store double %329, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  br label %657

330:                                              ; preds = %321, %319, %317
  %331 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %316) #12
  br label %697

332:                                              ; preds = %325
  %333 = landingpad { ptr, i32 }
          cleanup
  br label %697

334:                                              ; preds = %247
  %335 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %336 unwind label %357

336:                                              ; preds = %334
  %337 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %338 unwind label %359

338:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #12
  %339 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %340 unwind label %361

340:                                              ; preds = %338
  %341 = fmul float %339, 5.000000e-01
  store float %341, ptr %18, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #12
  %342 = fsub float %335, %337
  %343 = call noundef float @_ZSt3absf(float noundef %342)
  %344 = call float @llvm.fmuladd.f32(float %343, float 5.000000e-01, float 0x3F50624DE0000000)
  store float %344, ptr %19, align 4, !tbaa !20
  %345 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %19)
  %346 = load float, ptr %345, align 4, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %20) #12
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %21) #12
  invoke void @_ZN3JPH27TaperedCapsuleShapeSettingsC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %21, float noundef %346, float noundef %335, float noundef %337, ptr noundef null)
          to label %347 unwind label %363

347:                                              ; preds = %340
  invoke void @_ZNK3JPH27TaperedCapsuleShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %20, ptr noundef nonnull align 8 dereferenceable(88) %21)
          to label %348 unwind label %365

348:                                              ; preds = %347
  %349 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %20)
          to label %350 unwind label %367

350:                                              ; preds = %348
  %351 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %349)
          to label %352 unwind label %367

352:                                              ; preds = %350
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %20) #12
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #12
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %21) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %20) #12
  %353 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %11)
          to label %354 unwind label %371

354:                                              ; preds = %352
  %355 = extractvalue { double, double } %353, 0
  %356 = extractvalue { double, double } %353, 1
  store double %355, ptr %11, align 16
  store double %356, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  br label %657

357:                                              ; preds = %334
  %358 = landingpad { ptr, i32 }
          cleanup
  br label %697

359:                                              ; preds = %336
  %360 = landingpad { ptr, i32 }
          cleanup
  br label %697

361:                                              ; preds = %338
  %362 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  br label %697

363:                                              ; preds = %340
  %364 = landingpad { ptr, i32 }
          cleanup
  br label %370

365:                                              ; preds = %347
  %366 = landingpad { ptr, i32 }
          cleanup
  br label %369

367:                                              ; preds = %350, %348
  %368 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %20) #12
  br label %369

369:                                              ; preds = %367, %365
  %.pn147 = phi { ptr, i32 } [ %368, %367 ], [ %366, %365 ]
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #12
  br label %370

370:                                              ; preds = %369, %363
  %.pn147.pn = phi { ptr, i32 } [ %.pn147, %369 ], [ %364, %363 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %21) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %20) #12
  br label %697

371:                                              ; preds = %352
  %372 = landingpad { ptr, i32 }
          cleanup
  br label %697

373:                                              ; preds = %247
  %374 = invoke noundef ptr @_ZN3JPH13CylinderShapenwEm(i64 noundef 56)
          to label %375 unwind label %249

375:                                              ; preds = %373
  %376 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %377 unwind label %388

377:                                              ; preds = %375
  %378 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %379 unwind label %388

379:                                              ; preds = %377
  %380 = fmul float %376, 5.000000e-01
  invoke void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %374, float noundef %380, float noundef %378, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %381 unwind label %388

381:                                              ; preds = %379
  %382 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull %374)
          to label %383 unwind label %249

383:                                              ; preds = %381
  %384 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj1ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %11)
          to label %385 unwind label %390

385:                                              ; preds = %383
  %386 = extractvalue { double, double } %384, 0
  %387 = extractvalue { double, double } %384, 1
  store double %386, ptr %11, align 16
  store double %387, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  br label %657

388:                                              ; preds = %379, %377, %375
  %389 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH13CylinderShapedlEPv(ptr noundef %374) #12
  br label %697

390:                                              ; preds = %383
  %391 = landingpad { ptr, i32 }
          cleanup
  br label %697

392:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %22) #12
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %23) #12
  %393 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %394 unwind label %410

394:                                              ; preds = %392
  %395 = fmul float %393, 5.000000e-01
  %396 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %397 unwind label %410

397:                                              ; preds = %394
  %398 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %399 unwind label %410

399:                                              ; preds = %397
  invoke void @_ZN3JPH28TaperedCylinderShapeSettingsC1EffffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(96) %23, float noundef %395, float noundef %396, float noundef %398, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %400 unwind label %410

400:                                              ; preds = %399
  invoke void @_ZNK3JPH28TaperedCylinderShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %22, ptr noundef nonnull align 8 dereferenceable(96) %23)
          to label %401 unwind label %412

401:                                              ; preds = %400
  %402 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %22)
          to label %403 unwind label %414

403:                                              ; preds = %401
  %404 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %402)
          to label %405 unwind label %414

405:                                              ; preds = %403
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %22) #12
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %23) #12
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %22) #12
  %406 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj1ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %11)
          to label %407 unwind label %418

407:                                              ; preds = %405
  %408 = extractvalue { double, double } %406, 0
  %409 = extractvalue { double, double } %406, 1
  store double %408, ptr %11, align 16
  store double %409, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  br label %657

410:                                              ; preds = %399, %397, %394, %392
  %411 = landingpad { ptr, i32 }
          cleanup
  br label %417

412:                                              ; preds = %400
  %413 = landingpad { ptr, i32 }
          cleanup
  br label %416

414:                                              ; preds = %403, %401
  %415 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %22) #12
  br label %416

416:                                              ; preds = %414, %412
  %.pn144 = phi { ptr, i32 } [ %415, %414 ], [ %413, %412 ]
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %23) #12
  br label %417

417:                                              ; preds = %416, %410
  %.pn144.pn = phi { ptr, i32 } [ %.pn144, %416 ], [ %411, %410 ]
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %22) #12
  br label %697

418:                                              ; preds = %405
  %419 = landingpad { ptr, i32 }
          cleanup
  br label %697

420:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %24) #12
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %25) #12
  %421 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %422 unwind label %436

422:                                              ; preds = %420
  %423 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %424 unwind label %436

424:                                              ; preds = %422
  %425 = fmul float %421, 5.000000e-01
  invoke void @_ZN3JPH28TaperedCylinderShapeSettingsC1EffffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(96) %25, float noundef %425, float noundef 0.000000e+00, float noundef %423, float noundef 0.000000e+00, ptr noundef null)
          to label %426 unwind label %436

426:                                              ; preds = %424
  invoke void @_ZNK3JPH28TaperedCylinderShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %24, ptr noundef nonnull align 8 dereferenceable(96) %25)
          to label %427 unwind label %438

427:                                              ; preds = %426
  %428 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %24)
          to label %429 unwind label %440

429:                                              ; preds = %427
  %430 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %428)
          to label %431 unwind label %440

431:                                              ; preds = %429
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %24) #12
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %25) #12
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %25) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %24) #12
  %432 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj1ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %11)
          to label %433 unwind label %444

433:                                              ; preds = %431
  %434 = extractvalue { double, double } %432, 0
  %435 = extractvalue { double, double } %432, 1
  store double %434, ptr %11, align 16
  store double %435, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  br label %657

436:                                              ; preds = %424, %422, %420
  %437 = landingpad { ptr, i32 }
          cleanup
  br label %443

438:                                              ; preds = %426
  %439 = landingpad { ptr, i32 }
          cleanup
  br label %442

440:                                              ; preds = %429, %427
  %441 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %24) #12
  br label %442

442:                                              ; preds = %440, %438
  %.pn141 = phi { ptr, i32 } [ %441, %440 ], [ %439, %438 ]
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %25) #12
  br label %443

443:                                              ; preds = %442, %436
  %.pn141.pn = phi { ptr, i32 } [ %.pn141, %442 ], [ %437, %436 ]
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %25) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %24) #12
  br label %697

444:                                              ; preds = %431
  %445 = landingpad { ptr, i32 }
          cleanup
  br label %697

446:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %26) #12
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %26)
          to label %447 unwind label %491

447:                                              ; preds = %446
  %448 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %449 unwind label %493

449:                                              ; preds = %447
  %450 = extractvalue { double, double } %448, 0
  %451 = extractvalue { double, double } %448, 1
  %452 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %453 unwind label %493

453:                                              ; preds = %449
  %454 = extractvalue { double, double } %452, 0
  %455 = extractvalue { double, double } %452, 1
  %456 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %457 unwind label %493

457:                                              ; preds = %453
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %456, float noundef 1.000000e+00, float noundef 0x3FB99999A0000000, ptr noundef null)
          to label %458 unwind label %495

458:                                              ; preds = %457
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %26, double %450, double %451, double %454, double %455, ptr noundef nonnull %456, i32 noundef 0)
          to label %459 unwind label %493

459:                                              ; preds = %458
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
          to label %460 unwind label %493

460:                                              ; preds = %459
  %461 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %462 unwind label %493

462:                                              ; preds = %460
  %463 = extractvalue { double, double } %461, 0
  %464 = extractvalue { double, double } %461, 1
  %465 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %466 unwind label %493

466:                                              ; preds = %462
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %465, float noundef 5.000000e-01, ptr noundef null)
          to label %467 unwind label %497

467:                                              ; preds = %466
  %468 = load double, ptr %27, align 16
  %469 = load double, ptr %230, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %26, double %468, double %469, double %463, double %464, ptr noundef nonnull %465, i32 noundef 0)
          to label %470 unwind label %493

470:                                              ; preds = %467
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %471 unwind label %493

471:                                              ; preds = %470
  %472 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %473 unwind label %493

473:                                              ; preds = %471
  %474 = extractvalue { double, double } %472, 0
  %475 = extractvalue { double, double } %472, 1
  %476 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %477 unwind label %493

477:                                              ; preds = %473
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %476, float noundef 5.000000e-01, ptr noundef null)
          to label %478 unwind label %499

478:                                              ; preds = %477
  %479 = load double, ptr %28, align 16
  %480 = load double, ptr %231, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %26, double %479, double %480, double %474, double %475, ptr noundef nonnull %476, i32 noundef 0)
          to label %481 unwind label %493

481:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %29) #12
  invoke void @_ZNK3JPH27StaticCompoundShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %29, ptr noundef nonnull align 8 dereferenceable(88) %26)
          to label %482 unwind label %501

482:                                              ; preds = %481
  %483 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %29)
          to label %484 unwind label %503

484:                                              ; preds = %482
  %485 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %483)
          to label %486 unwind label %503

486:                                              ; preds = %484
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %29) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %29) #12
  %487 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %11)
          to label %488 unwind label %506

488:                                              ; preds = %486
  %489 = extractvalue { double, double } %487, 0
  %490 = extractvalue { double, double } %487, 1
  store double %489, ptr %11, align 16
  store double %490, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %26) #12
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %26) #12
  br label %657

491:                                              ; preds = %446
  %492 = landingpad { ptr, i32 }
          cleanup
  br label %509

493:                                              ; preds = %478, %473, %471, %470, %467, %462, %460, %459, %458, %453, %449, %447
  %494 = landingpad { ptr, i32 }
          cleanup
  br label %508

495:                                              ; preds = %457
  %496 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %456) #12
  br label %508

497:                                              ; preds = %466
  %498 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %465) #12
  br label %508

499:                                              ; preds = %477
  %500 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %476) #12
  br label %508

501:                                              ; preds = %481
  %502 = landingpad { ptr, i32 }
          cleanup
  br label %505

503:                                              ; preds = %484, %482
  %504 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %29) #12
  br label %505

505:                                              ; preds = %503, %501
  %.pn136 = phi { ptr, i32 } [ %504, %503 ], [ %502, %501 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %29) #12
  br label %508

506:                                              ; preds = %486
  %507 = landingpad { ptr, i32 }
          cleanup
  br label %508

508:                                              ; preds = %506, %505, %499, %497, %495, %493
  %.pn138 = phi { ptr, i32 } [ %507, %506 ], [ %.pn136, %505 ], [ %494, %493 ], [ %500, %499 ], [ %498, %497 ], [ %496, %495 ]
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %26) #12
  br label %509

509:                                              ; preds = %508, %491
  %.pn138.pn = phi { ptr, i32 } [ %.pn138, %508 ], [ %492, %491 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %26) #12
  br label %697

510:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #12
  %511 = invoke noundef ptr @_ZN3JPH27StaticCompoundShapeSettingsnwEm(i64 noundef 88)
          to label %512 unwind label %626

512:                                              ; preds = %510
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(88) %511, i8 0, i64 88, i1 false)
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %511)
          to label %513 unwind label %628

513:                                              ; preds = %512
  invoke void @_ZN3JPH3RefINS_27StaticCompoundShapeSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull %511)
          to label %514 unwind label %626

514:                                              ; preds = %513
  %515 = call noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %30)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %31, float noundef 0.000000e+00, float noundef 7.500000e-01, float noundef 0.000000e+00)
          to label %516 unwind label %630

516:                                              ; preds = %514
  %517 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %518 unwind label %630

518:                                              ; preds = %516
  %519 = extractvalue { double, double } %517, 0
  %520 = extractvalue { double, double } %517, 1
  %521 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %519, double %520, float noundef 0x3FF921FB60000000)
          to label %522 unwind label %630

522:                                              ; preds = %518
  %523 = extractvalue { double, double } %521, 0
  %524 = extractvalue { double, double } %521, 1
  %525 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %526 unwind label %630

526:                                              ; preds = %522
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef 7.500000e-01, float noundef 2.500000e-01, float noundef 0x3FC99999A0000000)
          to label %527 unwind label %632

527:                                              ; preds = %526
  %528 = load double, ptr %32, align 16
  %529 = load double, ptr %222, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %525, double %528, double %529, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %530 unwind label %632

530:                                              ; preds = %527
  %531 = load double, ptr %31, align 16
  %532 = load double, ptr %223, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %515, double %531, double %532, double %523, double %524, ptr noundef nonnull %525, i32 noundef 0)
          to label %533 unwind label %630

533:                                              ; preds = %530
  %534 = call noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %30)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %33, float noundef 7.500000e-01, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %535 unwind label %630

535:                                              ; preds = %533
  %536 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %537 unwind label %630

537:                                              ; preds = %535
  %538 = extractvalue { double, double } %536, 0
  %539 = extractvalue { double, double } %536, 1
  %540 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %538, double %539, float noundef 0x3FF921FB60000000)
          to label %541 unwind label %630

541:                                              ; preds = %537
  %542 = extractvalue { double, double } %540, 0
  %543 = extractvalue { double, double } %540, 1
  %544 = invoke noundef ptr @_ZN3JPH13CylinderShapenwEm(i64 noundef 56)
          to label %545 unwind label %630

545:                                              ; preds = %541
  invoke void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %544, float noundef 7.500000e-01, float noundef 0x3FC99999A0000000, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %546 unwind label %634

546:                                              ; preds = %545
  %547 = load double, ptr %33, align 16
  %548 = load double, ptr %224, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %534, double %547, double %548, double %542, double %543, ptr noundef nonnull %544, i32 noundef 0)
          to label %549 unwind label %630

549:                                              ; preds = %546
  %550 = call noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %30)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %34, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 7.500000e-01)
          to label %551 unwind label %630

551:                                              ; preds = %549
  %552 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %553 unwind label %630

553:                                              ; preds = %551
  %554 = extractvalue { double, double } %552, 0
  %555 = extractvalue { double, double } %552, 1
  %556 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %554, double %555, float noundef 0x3FF921FB60000000)
          to label %557 unwind label %630

557:                                              ; preds = %553
  %558 = extractvalue { double, double } %556, 0
  %559 = extractvalue { double, double } %556, 1
  %560 = invoke noundef ptr @_ZN3JPH27TaperedCapsuleShapeSettingsnwEm(i64 noundef 88)
          to label %561 unwind label %630

561:                                              ; preds = %557
  invoke void @_ZN3JPH27TaperedCapsuleShapeSettingsC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %560, float noundef 7.500000e-01, float noundef 2.500000e-01, float noundef 0x3FC99999A0000000, ptr noundef null)
          to label %562 unwind label %636

562:                                              ; preds = %561
  %563 = load double, ptr %34, align 16
  %564 = load double, ptr %225, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %550, double %563, double %564, double %558, double %559, ptr noundef nonnull %560, i32 noundef 0)
          to label %565 unwind label %630

565:                                              ; preds = %562
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %35) #12
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %35)
          to label %566 unwind label %638

566:                                              ; preds = %565
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %36, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %567 unwind label %640

567:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #12
  %568 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %569 unwind label %642

569:                                              ; preds = %567
  %570 = extractvalue { double, double } %568, 0
  %571 = extractvalue { double, double } %568, 1
  %572 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %570, double %571, float noundef 0xBFE921FB60000000)
          to label %573 unwind label %642

573:                                              ; preds = %569
  %574 = extractvalue { double, double } %572, 0
  store double %574, ptr %37, align 16
  %575 = extractvalue { double, double } %572, 1
  store double %575, ptr %226, align 8
  %576 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %577 unwind label %642

577:                                              ; preds = %573
  %578 = extractvalue { double, double } %576, 0
  %579 = extractvalue { double, double } %576, 1
  %580 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %578, double %579, float noundef 0x3FE921FB60000000)
          to label %581 unwind label %642

581:                                              ; preds = %577
  %582 = extractvalue { double, double } %580, 0
  %583 = extractvalue { double, double } %580, 1
  %584 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %37, double %582, double %583)
          to label %585 unwind label %642

585:                                              ; preds = %581
  %586 = extractvalue { double, double } %584, 0
  %587 = extractvalue { double, double } %584, 1
  %588 = call noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %30)
  %589 = load double, ptr %36, align 16
  %590 = load double, ptr %227, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %35, double %589, double %590, double %586, double %587, ptr noundef %588, i32 noundef 0)
          to label %591 unwind label %642

591:                                              ; preds = %585
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #12
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %38, float noundef 0.000000e+00, float noundef 0xBFB99999A0000000, float noundef 0.000000e+00)
          to label %592 unwind label %640

592:                                              ; preds = %591
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %39) #12
  %593 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %594 unwind label %644

594:                                              ; preds = %592
  %595 = extractvalue { double, double } %593, 0
  %596 = extractvalue { double, double } %593, 1
  %597 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %595, double %596, float noundef 0x3FE921FB60000000)
          to label %598 unwind label %644

598:                                              ; preds = %594
  %599 = extractvalue { double, double } %597, 0
  store double %599, ptr %39, align 16
  %600 = extractvalue { double, double } %597, 1
  store double %600, ptr %228, align 8
  %601 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %602 unwind label %644

602:                                              ; preds = %598
  %603 = extractvalue { double, double } %601, 0
  %604 = extractvalue { double, double } %601, 1
  %605 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %603, double %604, float noundef 0xC002D97C80000000)
          to label %606 unwind label %644

606:                                              ; preds = %602
  %607 = extractvalue { double, double } %605, 0
  %608 = extractvalue { double, double } %605, 1
  %609 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %39, double %607, double %608)
          to label %610 unwind label %644

610:                                              ; preds = %606
  %611 = extractvalue { double, double } %609, 0
  %612 = extractvalue { double, double } %609, 1
  %613 = call noundef ptr @_ZNK3JPH3RefINS_27StaticCompoundShapeSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %30)
  %614 = load double, ptr %38, align 16
  %615 = load double, ptr %229, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_13ShapeSettingsEj(ptr noundef nonnull align 8 dereferenceable(88) %35, double %614, double %615, double %611, double %612, ptr noundef %613, i32 noundef 0)
          to label %616 unwind label %644

616:                                              ; preds = %610
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #12
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %40) #12
  invoke void @_ZNK3JPH27StaticCompoundShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %40, ptr noundef nonnull align 8 dereferenceable(88) %35)
          to label %617 unwind label %646

617:                                              ; preds = %616
  %618 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %40)
          to label %619 unwind label %648

619:                                              ; preds = %617
  %620 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %618)
          to label %621 unwind label %648

621:                                              ; preds = %619
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %40) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %40) #12
  %622 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %11)
          to label %623 unwind label %651

623:                                              ; preds = %621
  %624 = extractvalue { double, double } %622, 0
  %625 = extractvalue { double, double } %622, 1
  store double %624, ptr %11, align 16
  store double %625, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %35) #12
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %35) #12
  call void @_ZN3JPH3RefINS_27StaticCompoundShapeSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #12
  br label %657

626:                                              ; preds = %513, %510
  %627 = landingpad { ptr, i32 }
          cleanup
  br label %656

628:                                              ; preds = %512
  %629 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH27StaticCompoundShapeSettingsdlEPv(ptr noundef nonnull %511) #12
  br label %656

630:                                              ; preds = %562, %557, %553, %551, %549, %546, %541, %537, %535, %533, %530, %522, %518, %516, %514
  %631 = landingpad { ptr, i32 }
          cleanup
  br label %655

632:                                              ; preds = %527, %526
  %633 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %525) #12
  br label %655

634:                                              ; preds = %545
  %635 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH13CylinderShapedlEPv(ptr noundef %544) #12
  br label %655

636:                                              ; preds = %561
  %637 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH27TaperedCapsuleShapeSettingsdlEPv(ptr noundef %560) #12
  br label %655

638:                                              ; preds = %565
  %639 = landingpad { ptr, i32 }
          cleanup
  br label %654

640:                                              ; preds = %591, %566
  %641 = landingpad { ptr, i32 }
          cleanup
  br label %653

642:                                              ; preds = %585, %581, %577, %573, %569, %567
  %643 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #12
  br label %653

644:                                              ; preds = %610, %606, %602, %598, %594, %592
  %645 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #12
  br label %653

646:                                              ; preds = %616
  %647 = landingpad { ptr, i32 }
          cleanup
  br label %650

648:                                              ; preds = %619, %617
  %649 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %40) #12
  br label %650

650:                                              ; preds = %648, %646
  %.pn = phi { ptr, i32 } [ %649, %648 ], [ %647, %646 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %40) #12
  br label %653

651:                                              ; preds = %621
  %652 = landingpad { ptr, i32 }
          cleanup
  br label %653

653:                                              ; preds = %651, %650, %644, %642, %640
  %.pn131 = phi { ptr, i32 } [ %652, %651 ], [ %.pn, %650 ], [ %645, %644 ], [ %641, %640 ], [ %643, %642 ]
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %35) #12
  br label %654

654:                                              ; preds = %653, %638
  %.pn131.pn = phi { ptr, i32 } [ %.pn131, %653 ], [ %639, %638 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %35) #12
  br label %655

655:                                              ; preds = %654, %636, %634, %632, %630
  %.pn131.pn.pn = phi { ptr, i32 } [ %.pn131.pn, %654 ], [ %631, %630 ], [ %637, %636 ], [ %635, %634 ], [ %633, %632 ]
  call void @_ZN3JPH3RefINS_27StaticCompoundShapeSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #12
  br label %656

656:                                              ; preds = %655, %628, %626
  %.pn131.pn.pn.pn = phi { ptr, i32 } [ %.pn131.pn.pn, %655 ], [ %627, %626 ], [ %629, %628 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #12
  br label %697

default.unreachable299:                           ; preds = %247
  unreachable

657:                                              ; preds = %279, %623, %488, %433, %407, %385, %354, %327, %305, %260
  %658 = invoke noundef i64 @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEclEv(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %659 unwind label %249

659:                                              ; preds = %657
  %660 = urem i64 %658, 3
  %661 = icmp eq i64 %660, 0
  br i1 %661, label %662, label %670

662:                                              ; preds = %659
  %663 = invoke noundef ptr @_ZN3JPH11ScaledShapenwEm(i64 noundef 64)
          to label %664 unwind label %249

664:                                              ; preds = %662
  %665 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %12)
  %.sroa.04.0.copyload = load double, ptr %11, align 16
  %.sroa.25.0.copyload = load double, ptr %.sroa.269.0..sroa_idx, align 8, !tbaa !17
  invoke void @_ZN3JPH11ScaledShapeC2EPKNS_5ShapeENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %663, ptr noundef %665, double %.sroa.04.0.copyload, double %.sroa.25.0.copyload)
          to label %666 unwind label %668

666:                                              ; preds = %664
  %667 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull %663)
          to label %670 unwind label %249

668:                                              ; preds = %664
  %669 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ScaledShapedlEPv(ptr noundef %663) #12
  br label %697

670:                                              ; preds = %666, %659
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %41) #12
  %671 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %672 unwind label %689

672:                                              ; preds = %670
  %673 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %674 unwind label %689

674:                                              ; preds = %672
  %675 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %676 unwind label %689

676:                                              ; preds = %674
  %677 = fadd float %673, 1.000000e+02
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %41, float noundef %671, float noundef %677, float noundef %675)
          to label %678 unwind label %689

678:                                              ; preds = %676
  %679 = load ptr, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %42) #12
  %680 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %12)
  %.sroa.02.0.copyload = load double, ptr %41, align 16
  %.sroa.23.0.copyload = load double, ptr %.sroa.23.0..sroa_idx, align 8, !tbaa !17
  %681 = invoke { double, double } @_ZN3JPH4Quat7sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %682 unwind label %691

682:                                              ; preds = %678
  %683 = extractvalue { double, double } %681, 0
  %684 = extractvalue { double, double } %681, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %42, ptr noundef %680, double %.sroa.02.0.copyload, double %.sroa.23.0.copyload, double %683, double %684, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %685 unwind label %691

685:                                              ; preds = %682
  %686 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %679, ptr noundef nonnull align 16 dereferenceable(256) %42, i32 noundef 0)
          to label %687 unwind label %693

687:                                              ; preds = %685
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %42) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %42) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #12
  %688 = add nuw nsw i32 %.0128236, 1
  %exitcond298.not = icmp eq i32 %688, 1000
  br i1 %exitcond298.not, label %234, label %245, !llvm.loop !21

689:                                              ; preds = %676, %674, %672, %670
  %690 = landingpad { ptr, i32 }
          cleanup
  br label %696

691:                                              ; preds = %682, %678
  %692 = landingpad { ptr, i32 }
          cleanup
  br label %695

693:                                              ; preds = %685
  %694 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %42) #12
  br label %695

695:                                              ; preds = %693, %691
  %.pn159 = phi { ptr, i32 } [ %694, %693 ], [ %692, %691 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %42) #12
  br label %696

696:                                              ; preds = %695, %689
  %.pn159.pn = phi { ptr, i32 } [ %.pn159, %695 ], [ %690, %689 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #12
  br label %697

697:                                              ; preds = %357, %361, %370, %371, %359, %696, %668, %656, %509, %444, %443, %418, %417, %390, %388, %332, %330, %314, %281, %265, %263, %249
  %.pn159.pn.pn = phi { ptr, i32 } [ %.pn159.pn, %696 ], [ %250, %249 ], [ %669, %668 ], [ %.pn131.pn.pn.pn, %656 ], [ %.pn138.pn, %509 ], [ %445, %444 ], [ %.pn141.pn, %443 ], [ %419, %418 ], [ %.pn144.pn, %417 ], [ %391, %390 ], [ %389, %388 ], [ %333, %332 ], [ %331, %330 ], [ %.pn157, %314 ], [ %282, %281 ], [ %266, %265 ], [ %264, %263 ], [ %358, %357 ], [ %360, %359 ], [ %372, %371 ], [ %.pn147.pn, %370 ], [ %362, %361 ]
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #12
  br label %698

698:                                              ; preds = %697, %243
  %.pn159.pn.pn.pn = phi { ptr, i32 } [ %.pn159.pn.pn, %697 ], [ %244, %243 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #12
  br label %699

699:                                              ; preds = %698, %241
  %.pn159.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn159.pn.pn.pn, %698 ], [ %242, %241 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #12
  br label %700

700:                                              ; preds = %699, %239
  %.pn159.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn159.pn.pn.pn.pn, %699 ], [ %240, %239 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #12
  br label %701

701:                                              ; preds = %700, %237
  %.pn159.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn159.pn.pn.pn.pn.pn, %700 ], [ %238, %237 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #12
  br label %702

702:                                              ; preds = %701, %235
  %.pn159.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn159.pn.pn.pn.pn.pn.pn, %701 ], [ %236, %235 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #12
  br label %703

703:                                              ; preds = %702, %189
  %.pn168.pn.pn = phi { ptr, i32 } [ %.pn168.pn, %189 ], [ %.pn159.pn.pn.pn.pn.pn.pn.pn, %702 ]
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #12
  br label %704

704:                                              ; preds = %703, %53
  %.pn168.pn.pn.pn = phi { ptr, i32 } [ %.pn168.pn.pn, %703 ], [ %54, %53 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #12
  resume { ptr, i32 } %.pn168.pn.pn.pn
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #8 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef, double, double) local_unnamed_addr #3

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

declare void @_ZNK3JPH23ConvexHullShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #6

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33)) unnamed_addr #9 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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #7

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #10

declare void @_ZN3JPH27TaperedCapsuleShapeSettingsC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88), float noundef, float noundef, float noundef, ptr noundef) unnamed_addr #6

declare void @_ZNK3JPH27TaperedCapsuleShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #6

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

declare void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56), float noundef, float noundef, float noundef, ptr noundef) unnamed_addr #6

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

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

declare void @_ZN3JPH28TaperedCylinderShapeSettingsC1EffffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(96), float noundef, float noundef, float noundef, float noundef, ptr noundef) unnamed_addr #6

declare void @_ZNK3JPH28TaperedCylinderShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #6

; 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 uwtable
declare dso_local void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #5 align 2

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

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

declare void @_ZNK3JPH27StaticCompoundShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #6

; 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: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH27StaticCompoundShapeSettingsnwEm(i64 noundef) local_unnamed_addr #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { 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 #5 = { 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 #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="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 #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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #12 = { 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, !7, i64 24}
!6 = !{!"_ZTS4Test", !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !11, i64 56}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !12, i64 0}
!12 = !{!"_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", !7, i64 0, !13, i64 8, !14, i64 16, !13, i64 24, !15, i64 32, !7, i64 48}
!13 = !{!"long", !8, i64 0}
!14 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !16, i64 0, !13, i64 8}
!16 = !{!"float", !8, i64 0}
!17 = !{!8, !8, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!16, !16, i64 0}
!21 = distinct !{!21, !19}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,LCSSAPass,LICMPass,LoopRotatePass,LoopUnrollPass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass