; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/SoftBody/SoftBodyShapesTest.ll (ZN18SoftBodyShapesTest10InitializeEv)

; 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::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::SoftBodyCreationSettings" = type <{ %"class.JPH::RefConst.6", [8 x i8], %"class.JPH::Vec3", %"class.JPH::Quat", i64, i16, [6 x i8], %"class.JPH::CollisionGroup", i32, float, float, float, float, float, float, i8, i8, i8, i8 }>
%"class.JPH::RefConst.6" = type { ptr }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::Ref" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"struct.JPH::SoftBodySharedSettings::VertexAttributes" = type { float, float, float, i32, float }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.10", %"class.JPH::RefConst" }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.10" = type { ptr }
%"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.9", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.11", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.11" = type { %"struct.std::atomic.7" }
%"struct.std::atomic.7" = type { %"struct.std::__atomic_base.8" }
%"struct.std::__atomic_base.8" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.12, i8, [7 x i8] }>
%union.anon.12 = 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.14 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.14 = type { i64, [8 x i8] }
%"class.JPH::RefConst.9" = type { ptr }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.JPH::STLAllocator.15" = type { i8 }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.17" }
%"class.JPH::Array.17" = type { i64, i64, ptr }
%"class.JPH::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.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 @_ZN18SoftBodyShapesTest10InitializeEv(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::Quat", align 16
  %4 = alloca %"class.JPH::Vec3", align 16
  %5 = alloca %"class.JPH::SoftBodyCreationSettings", align 16
  %6 = alloca %"class.JPH::Ref", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Quat", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::BodyID", align 4
  %13 = alloca %"class.JPH::SoftBodyCreationSettings", align 16
  %14 = alloca %"class.JPH::Ref", align 8
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Quat", align 16
  %17 = alloca %"class.JPH::BodyID", align 4
  %18 = alloca %"class.JPH::SoftBodyCreationSettings", align 16
  %19 = alloca %"class.JPH::Ref", align 8
  %20 = alloca %"struct.JPH::SoftBodySharedSettings::VertexAttributes", align 4
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Quat", align 16
  %23 = alloca %"class.JPH::BodyID", align 4
  %24 = alloca %"class.JPH::RefConst", align 8
  %25 = alloca %"class.JPH::BodyCreationSettings", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Quat", align 16
  %28 = alloca %"class.JPH::BodyID", align 4
  %29 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %30 = alloca %"class.JPH::Array", align 8
  %31 = alloca %"class.std::initializer_list", align 8
  %32 = alloca [4 x %"class.JPH::Vec3"], align 16
  %33 = alloca %"class.JPH::STLAllocator.15", align 1
  %34 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %35 = alloca %"class.JPH::Quat", align 16
  %36 = alloca %"class.JPH::Vec3", align 16
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Quat", align 16
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Quat", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Quat", align 16
  %43 = alloca [8 x %"class.JPH::RefConst"], align 16
  %44 = alloca ptr, align 8
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::Quat", align 16
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::Quat", align 16
  %50 = alloca %"class.JPH::Result", align 8
  %51 = alloca %"class.JPH::TaperedCapsuleShapeSettings", align 8
  %52 = alloca i1, align 1
  %53 = alloca %"class.JPH::Vec3", align 16
  %54 = alloca %"class.JPH::Quat", align 16
  %55 = alloca %"class.JPH::Vec3", align 16
  %56 = alloca %"class.JPH::Quat", align 16
  %57 = alloca %"class.JPH::Result", align 8
  %58 = alloca %"class.JPH::TaperedCylinderShapeSettings", align 8
  %59 = alloca i1, align 1
  %60 = alloca %"class.JPH::Result", align 8
  %61 = alloca %"class.JPH::Result", align 8
  %62 = alloca i1, align 1
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca %"class.JPH::Vec3", align 16
  %66 = alloca %"class.JPH::BodyID", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %67 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %3) #11
  %68 = call noundef float @_ZSt4sqrtf(float noundef 0x3FD5555560000000)
  %69 = call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef %68)
  %70 = getelementptr inbounds %"class.JPH::Vec3", ptr %4, i32 0, i32 0
  %71 = getelementptr inbounds %union.anon.4, ptr %70, i32 0, i32 0
  %72 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 0
  %73 = extractvalue { double, double } %69, 0
  store double %73, ptr %72, align 16
  %74 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 1
  %75 = extractvalue { double, double } %69, 1
  store double %75, ptr %74, align 8
  %76 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 4.500000e+01)
  %77 = getelementptr inbounds { double, double }, ptr %4, i32 0, i32 0
  %78 = load double, ptr %77, align 16
  %79 = getelementptr inbounds { double, double }, ptr %4, i32 0, i32 1
  %80 = load double, ptr %79, align 8
  %81 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %78, double %80, float noundef %76)
  %82 = getelementptr inbounds %"class.JPH::Quat", ptr %3, i32 0, i32 0
  %83 = getelementptr inbounds %"class.JPH::Vec4", ptr %82, i32 0, i32 0
  %84 = getelementptr inbounds %union.anon, ptr %83, i32 0, i32 0
  %85 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 0
  %86 = extractvalue { double, double } %81, 0
  store double %86, ptr %85, align 16
  %87 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 1
  %88 = extractvalue { double, double } %81, 1
  store double %88, ptr %87, align 8
  %89 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112) %67)
  call void @llvm.lifetime.start.p0(i64 112, ptr %5) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #11
  call void @_ZN15SoftBodyCreator29CreateClothWithFixatedCornersEjjf(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8 %6, i32 noundef 30, i32 noundef 30, float noundef 7.500000e-01)
  %90 = invoke noundef ptr @_ZNK3JPH3RefINS_22SoftBodySharedSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %91 unwind label %446

91:                                               ; preds = %1
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef 0.000000e+00, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %92 unwind label %446

92:                                               ; preds = %91
  %93 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %94 unwind label %446

94:                                               ; preds = %92
  %95 = getelementptr inbounds %"class.JPH::Vec3", ptr %11, i32 0, i32 0
  %96 = getelementptr inbounds %union.anon.4, ptr %95, i32 0, i32 0
  %97 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 0
  %98 = extractvalue { double, double } %93, 0
  store double %98, ptr %97, align 16
  %99 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 1
  %100 = extractvalue { double, double } %93, 1
  store double %100, ptr %99, align 8
  %101 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %102 = load double, ptr %101, align 16
  %103 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %104 = load double, ptr %103, align 8
  %105 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %102, double %104, float noundef 0x3FE921FB60000000)
          to label %106 unwind label %446

106:                                              ; preds = %94
  %107 = getelementptr inbounds %"class.JPH::Quat", ptr %10, i32 0, i32 0
  %108 = getelementptr inbounds %"class.JPH::Vec4", ptr %107, i32 0, i32 0
  %109 = getelementptr inbounds %union.anon, ptr %108, i32 0, i32 0
  %110 = getelementptr inbounds { double, double }, ptr %109, i32 0, i32 0
  %111 = extractvalue { double, double } %105, 0
  store double %111, ptr %110, align 16
  %112 = getelementptr inbounds { double, double }, ptr %109, i32 0, i32 1
  %113 = extractvalue { double, double } %105, 1
  store double %113, ptr %112, align 8
  %114 = getelementptr inbounds { double, double }, ptr %9, i32 0, i32 0
  %115 = load double, ptr %114, align 16
  %116 = getelementptr inbounds { double, double }, ptr %9, i32 0, i32 1
  %117 = load double, ptr %116, align 8
  %118 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 0
  %119 = load double, ptr %118, align 16
  %120 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 1
  %121 = load double, ptr %120, align 8
  invoke void @_ZN3JPH24SoftBodyCreationSettingsC2EPKNS_22SoftBodySharedSettingsENS_4Vec3ENS_4QuatEt(ptr noundef nonnull align 16 dereferenceable(111) %5, ptr noundef %90, double %115, double %117, double %119, double %121, i16 noundef zeroext 1)
          to label %122 unwind label %446

122:                                              ; preds = %106
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #11
  %123 = getelementptr inbounds %"class.JPH::SoftBodyCreationSettings", ptr %5, i32 0, i32 15
  store i8 0, ptr %123, align 4, !tbaa !9
  %124 = getelementptr inbounds %"class.JPH::SoftBodyCreationSettings", ptr %5, i32 0, i32 16
  store i8 0, ptr %124, align 1, !tbaa !22
  %125 = getelementptr inbounds %class.Test, ptr %67, i32 0, i32 3
  %126 = load ptr, ptr %125, align 8, !tbaa !23
  %127 = invoke i32 @_ZN3JPH13BodyInterface20CreateAndAddSoftBodyERKNS_24SoftBodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %126, ptr noundef nonnull align 16 dereferenceable(111) %5, i32 noundef 0)
          to label %128 unwind label %450

128:                                              ; preds = %122
  %129 = getelementptr inbounds %"class.JPH::BodyID", ptr %12, i32 0, i32 0
  store i32 %127, ptr %129, align 4
  call void @llvm.lifetime.start.p0(i64 112, ptr %13) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #11
  invoke void @_ZN3JPH22SoftBodySharedSettings11sCreateCubeEjf(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8 %14, i32 noundef 5, float noundef 5.000000e-01)
          to label %130 unwind label %454

130:                                              ; preds = %128
  %131 = invoke noundef ptr @_ZNK3JPH3RefINS_22SoftBodySharedSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %132 unwind label %458

132:                                              ; preds = %130
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 2.000000e+01, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %133 unwind label %458

133:                                              ; preds = %132
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %16, ptr align 16 %3, i64 16, i1 false), !tbaa.struct !29
  %134 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 0
  %135 = load double, ptr %134, align 16
  %136 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 1
  %137 = load double, ptr %136, align 8
  %138 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 0
  %139 = load double, ptr %138, align 16
  %140 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 1
  %141 = load double, ptr %140, align 8
  invoke void @_ZN3JPH24SoftBodyCreationSettingsC2EPKNS_22SoftBodySharedSettingsENS_4Vec3ENS_4QuatEt(ptr noundef nonnull align 16 dereferenceable(111) %13, ptr noundef %131, double %135, double %137, double %139, double %141, i16 noundef zeroext 1)
          to label %142 unwind label %458

142:                                              ; preds = %133
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  %143 = getelementptr inbounds %"class.JPH::SoftBodyCreationSettings", ptr %13, i32 0, i32 11
  store float 0.000000e+00, ptr %143, align 4, !tbaa !31
  %144 = getelementptr inbounds %class.Test, ptr %67, i32 0, i32 3
  %145 = load ptr, ptr %144, align 8, !tbaa !23
  %146 = invoke i32 @_ZN3JPH13BodyInterface20CreateAndAddSoftBodyERKNS_24SoftBodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %145, ptr noundef nonnull align 16 dereferenceable(111) %13, i32 noundef 0)
          to label %147 unwind label %463

147:                                              ; preds = %142
  %148 = getelementptr inbounds %"class.JPH::BodyID", ptr %17, i32 0, i32 0
  store i32 %146, ptr %148, align 4
  call void @llvm.lifetime.start.p0(i64 112, ptr %18) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.start.p0(i64 20, ptr %20) #11
  invoke void @_ZN3JPH22SoftBodySharedSettings16VertexAttributesC2EfffNS0_8ELRATypeEf(ptr noundef nonnull align 4 dereferenceable(20) %20, float noundef 0x3F1A36E2E0000000, float noundef 0x3F1A36E2E0000000, float noundef 0x3F50624DE0000000, i32 noundef 0, float noundef 1.000000e+00)
          to label %149 unwind label %467

149:                                              ; preds = %147
  invoke void @_ZN15SoftBodyCreator12CreateSphereEfjjN3JPH22SoftBodySharedSettings9EBendTypeERKNS1_16VertexAttributesE(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8 %19, float noundef 1.000000e+00, i32 noundef 10, i32 noundef 20, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(20) %20)
          to label %150 unwind label %467

150:                                              ; preds = %149
  %151 = invoke noundef ptr @_ZNK3JPH3RefINS_22SoftBodySharedSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %152 unwind label %471

152:                                              ; preds = %150
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 1.500000e+01, float noundef 1.000000e+01, float noundef 1.500000e+01)
          to label %153 unwind label %471

153:                                              ; preds = %152
  %154 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %155 unwind label %471

155:                                              ; preds = %153
  %156 = getelementptr inbounds %"class.JPH::Quat", ptr %22, i32 0, i32 0
  %157 = getelementptr inbounds %"class.JPH::Vec4", ptr %156, i32 0, i32 0
  %158 = getelementptr inbounds %union.anon, ptr %157, i32 0, i32 0
  %159 = getelementptr inbounds { double, double }, ptr %158, i32 0, i32 0
  %160 = extractvalue { double, double } %154, 0
  store double %160, ptr %159, align 16
  %161 = getelementptr inbounds { double, double }, ptr %158, i32 0, i32 1
  %162 = extractvalue { double, double } %154, 1
  store double %162, ptr %161, align 8
  %163 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %164 = load double, ptr %163, align 16
  %165 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %166 = load double, ptr %165, align 8
  %167 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %168 = load double, ptr %167, align 16
  %169 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %170 = load double, ptr %169, align 8
  invoke void @_ZN3JPH24SoftBodyCreationSettingsC2EPKNS_22SoftBodySharedSettingsENS_4Vec3ENS_4QuatEt(ptr noundef nonnull align 16 dereferenceable(111) %18, ptr noundef %151, double %164, double %166, double %168, double %170, i16 noundef zeroext 1)
          to label %171 unwind label %471

171:                                              ; preds = %155
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #11
  call void @llvm.lifetime.end.p0(i64 20, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  %172 = getelementptr inbounds %"class.JPH::SoftBodyCreationSettings", ptr %18, i32 0, i32 13
  store float 2.000000e+03, ptr %172, align 4, !tbaa !32
  %173 = getelementptr inbounds %class.Test, ptr %67, i32 0, i32 3
  %174 = load ptr, ptr %173, align 8, !tbaa !23
  %175 = invoke i32 @_ZN3JPH13BodyInterface20CreateAndAddSoftBodyERKNS_24SoftBodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %174, ptr noundef nonnull align 16 dereferenceable(111) %18, i32 noundef 0)
          to label %176 unwind label %476

176:                                              ; preds = %171
  %177 = getelementptr inbounds %"class.JPH::BodyID", ptr %23, i32 0, i32 0
  store i32 %175, ptr %177, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #11
  %178 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %179 unwind label %480

179:                                              ; preds = %176
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %178, float noundef 1.000000e+00, ptr noundef null)
          to label %180 unwind label %484

180:                                              ; preds = %179
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef %178)
          to label %181 unwind label %480

181:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 256, ptr %25) #11
  %182 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %183 unwind label %488

183:                                              ; preds = %181
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %26, float noundef 1.550000e+01, float noundef 7.000000e+00, float noundef 1.500000e+01)
          to label %184 unwind label %488

184:                                              ; preds = %183
  %185 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %186 unwind label %488

186:                                              ; preds = %184
  %187 = getelementptr inbounds %"class.JPH::Quat", ptr %27, i32 0, i32 0
  %188 = getelementptr inbounds %"class.JPH::Vec4", ptr %187, i32 0, i32 0
  %189 = getelementptr inbounds %union.anon, ptr %188, i32 0, i32 0
  %190 = getelementptr inbounds { double, double }, ptr %189, i32 0, i32 0
  %191 = extractvalue { double, double } %185, 0
  store double %191, ptr %190, align 16
  %192 = getelementptr inbounds { double, double }, ptr %189, i32 0, i32 1
  %193 = extractvalue { double, double } %185, 1
  store double %193, ptr %192, align 8
  %194 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %195 = load double, ptr %194, align 16
  %196 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %197 = load double, ptr %196, align 8
  %198 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %199 = load double, ptr %198, align 16
  %200 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %201 = load double, ptr %200, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %25, ptr noundef %182, double %195, double %197, double %199, double %201, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %202 unwind label %488

202:                                              ; preds = %186
  %203 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %25, i32 0, i32 26
  store i8 1, ptr %203, align 16, !tbaa !33
  %204 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %25, i32 0, i32 28
  %205 = getelementptr inbounds %"class.JPH::MassProperties", ptr %204, i32 0, i32 0
  store float 1.000000e+02, ptr %205, align 16, !tbaa !43
  %206 = getelementptr inbounds %class.Test, ptr %67, i32 0, i32 3
  %207 = load ptr, ptr %206, align 8, !tbaa !23
  %208 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %207, ptr noundef nonnull align 16 dereferenceable(256) %25, i32 noundef 0)
          to label %209 unwind label %492

209:                                              ; preds = %202
  %210 = getelementptr inbounds %"class.JPH::BodyID", ptr %28, i32 0, i32 0
  store i32 %208, ptr %210, align 4
  call void @llvm.lifetime.start.p0(i64 120, ptr %29) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %32) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef -2.000000e+00, float noundef -2.000000e+00, float noundef -2.000000e+00)
          to label %211 unwind label %496

211:                                              ; preds = %209
  %212 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i64 1
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %212, float noundef 0.000000e+00, float noundef -2.000000e+00, float noundef 2.000000e+00)
          to label %213 unwind label %496

213:                                              ; preds = %211
  %214 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i64 2
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %214, float noundef 2.000000e+00, float noundef -2.000000e+00, float noundef -2.000000e+00)
          to label %215 unwind label %496

215:                                              ; preds = %213
  %216 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i64 3
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %216, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
          to label %217 unwind label %496

217:                                              ; preds = %215
  %218 = getelementptr inbounds %"class.std::initializer_list", ptr %31, i32 0, i32 0
  store ptr %32, ptr %218, align 8, !tbaa !44
  %219 = getelementptr inbounds %"class.std::initializer_list", ptr %31, i32 0, i32 1
  store i64 4, ptr %219, align 8, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #11
  %220 = getelementptr inbounds { ptr, i64 }, ptr %31, i32 0, i32 0
  %221 = load ptr, ptr %220, align 8
  %222 = getelementptr inbounds { ptr, i64 }, ptr %31, i32 0, i32 1
  %223 = load i64, ptr %222, align 8
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %30, ptr %221, i64 %223, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %224 unwind label %500

224:                                              ; preds = %217
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %29, ptr noundef nonnull align 8 dereferenceable(24) %30, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %225 unwind label %504

225:                                              ; preds = %224
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #11
  %226 = getelementptr inbounds i8, ptr %29, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %226)
          to label %227 unwind label %510

227:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 88, ptr %34) #11
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %34)
          to label %228 unwind label %514

228:                                              ; preds = %227
  %229 = getelementptr inbounds i8, ptr %34, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %229)
          to label %230 unwind label %518

230:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #11
  %231 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %232 unwind label %522

232:                                              ; preds = %230
  %233 = getelementptr inbounds %"class.JPH::Vec3", ptr %36, i32 0, i32 0
  %234 = getelementptr inbounds %union.anon.4, ptr %233, i32 0, i32 0
  %235 = getelementptr inbounds { double, double }, ptr %234, i32 0, i32 0
  %236 = extractvalue { double, double } %231, 0
  store double %236, ptr %235, align 16
  %237 = getelementptr inbounds { double, double }, ptr %234, i32 0, i32 1
  %238 = extractvalue { double, double } %231, 1
  store double %238, ptr %237, align 8
  %239 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %240 = load double, ptr %239, align 16
  %241 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %242 = load double, ptr %241, align 8
  %243 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %240, double %242, float noundef 0x3FF921FB60000000)
          to label %244 unwind label %522

244:                                              ; preds = %232
  %245 = getelementptr inbounds %"class.JPH::Quat", ptr %35, i32 0, i32 0
  %246 = getelementptr inbounds %"class.JPH::Vec4", ptr %245, i32 0, i32 0
  %247 = getelementptr inbounds %union.anon, ptr %246, i32 0, i32 0
  %248 = getelementptr inbounds { double, double }, ptr %247, i32 0, i32 0
  %249 = extractvalue { double, double } %243, 0
  store double %249, ptr %248, align 16
  %250 = getelementptr inbounds { double, double }, ptr %247, i32 0, i32 1
  %251 = extractvalue { double, double } %243, 1
  store double %251, ptr %250, align 8
  %252 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %253 unwind label %522

253:                                              ; preds = %244
  %254 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %255 = getelementptr inbounds %union.anon.4, ptr %254, i32 0, i32 0
  %256 = getelementptr inbounds { double, double }, ptr %255, i32 0, i32 0
  %257 = extractvalue { double, double } %252, 0
  store double %257, ptr %256, align 16
  %258 = getelementptr inbounds { double, double }, ptr %255, i32 0, i32 1
  %259 = extractvalue { double, double } %252, 1
  store double %259, ptr %258, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !29
  %260 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %261 unwind label %522

261:                                              ; preds = %253
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %260, float noundef 2.000000e+00, float noundef 5.000000e-01, ptr noundef null)
          to label %262 unwind label %526

262:                                              ; preds = %261
  %263 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %264 = load double, ptr %263, align 16
  %265 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %266 = load double, ptr %265, align 8
  %267 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %268 = load double, ptr %267, align 16
  %269 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %270 = load double, ptr %269, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %34, double %264, double %266, double %268, double %270, ptr noundef %260, i32 noundef 0)
          to label %271 unwind label %522

271:                                              ; preds = %262
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %39, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef -2.000000e+00)
          to label %272 unwind label %522

272:                                              ; preds = %271
  %273 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %274 unwind label %522

274:                                              ; preds = %272
  %275 = getelementptr inbounds %"class.JPH::Quat", ptr %40, i32 0, i32 0
  %276 = getelementptr inbounds %"class.JPH::Vec4", ptr %275, i32 0, i32 0
  %277 = getelementptr inbounds %union.anon, ptr %276, i32 0, i32 0
  %278 = getelementptr inbounds { double, double }, ptr %277, i32 0, i32 0
  %279 = extractvalue { double, double } %273, 0
  store double %279, ptr %278, align 16
  %280 = getelementptr inbounds { double, double }, ptr %277, i32 0, i32 1
  %281 = extractvalue { double, double } %273, 1
  store double %281, ptr %280, align 8
  %282 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %283 unwind label %522

283:                                              ; preds = %274
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %282, float noundef 1.000000e+00, ptr noundef null)
          to label %284 unwind label %530

284:                                              ; preds = %283
  %285 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %286 = load double, ptr %285, align 16
  %287 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %288 = load double, ptr %287, align 8
  %289 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %290 = load double, ptr %289, align 16
  %291 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %292 = load double, ptr %291, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %34, double %286, double %288, double %290, double %292, ptr noundef %282, i32 noundef 0)
          to label %293 unwind label %522

293:                                              ; preds = %284
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %41, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 2.000000e+00)
          to label %294 unwind label %522

294:                                              ; preds = %293
  %295 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %296 unwind label %522

296:                                              ; preds = %294
  %297 = getelementptr inbounds %"class.JPH::Quat", ptr %42, i32 0, i32 0
  %298 = getelementptr inbounds %"class.JPH::Vec4", ptr %297, i32 0, i32 0
  %299 = getelementptr inbounds %union.anon, ptr %298, i32 0, i32 0
  %300 = getelementptr inbounds { double, double }, ptr %299, i32 0, i32 0
  %301 = extractvalue { double, double } %295, 0
  store double %301, ptr %300, align 16
  %302 = getelementptr inbounds { double, double }, ptr %299, i32 0, i32 1
  %303 = extractvalue { double, double } %295, 1
  store double %303, ptr %302, align 8
  %304 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %305 unwind label %522

305:                                              ; preds = %296
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %304, float noundef 1.000000e+00, ptr noundef null)
          to label %306 unwind label %534

306:                                              ; preds = %305
  %307 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %308 = load double, ptr %307, align 16
  %309 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %310 = load double, ptr %309, align 8
  %311 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %312 = load double, ptr %311, align 16
  %313 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %314 = load double, ptr %313, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %34, double %308, double %310, double %312, double %314, ptr noundef %304, i32 noundef 0)
          to label %315 unwind label %522

315:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 64, ptr %43) #11
  store i1 true, ptr %62, align 1
  store ptr %43, ptr %44, align 8
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %316 unwind label %538

316:                                              ; preds = %315
  %317 = getelementptr inbounds %"class.JPH::RefConst", ptr %43, i64 1
  store ptr %317, ptr %44, align 8
  %318 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %319 unwind label %538

319:                                              ; preds = %316
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %45, float noundef 7.500000e-01, float noundef 1.000000e+00, float noundef 1.250000e+00)
          to label %320 unwind label %542

320:                                              ; preds = %319
  %321 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 0
  %322 = load double, ptr %321, align 16
  %323 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 1
  %324 = load double, ptr %323, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %318, double %322, double %324, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %325 unwind label %542

325:                                              ; preds = %320
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %317, ptr noundef %318)
          to label %326 unwind label %538

326:                                              ; preds = %325
  %327 = getelementptr inbounds %"class.JPH::RefConst", ptr %43, i64 2
  store ptr %327, ptr %44, align 8
  %328 = invoke noundef ptr @_ZN3JPH22RotatedTranslatedShapenwEm(i64 noundef 80)
          to label %329 unwind label %538

329:                                              ; preds = %326
  %330 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %331 unwind label %546

331:                                              ; preds = %329
  %332 = getelementptr inbounds %"class.JPH::Vec3", ptr %46, i32 0, i32 0
  %333 = getelementptr inbounds %union.anon.4, ptr %332, i32 0, i32 0
  %334 = getelementptr inbounds { double, double }, ptr %333, i32 0, i32 0
  %335 = extractvalue { double, double } %330, 0
  store double %335, ptr %334, align 16
  %336 = getelementptr inbounds { double, double }, ptr %333, i32 0, i32 1
  %337 = extractvalue { double, double } %330, 1
  store double %337, ptr %336, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %47, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !29
  %338 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %339 unwind label %546

339:                                              ; preds = %331
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %338, float noundef 1.000000e+00, float noundef 5.000000e-01, ptr noundef null)
          to label %340 unwind label %550

340:                                              ; preds = %339
  %341 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 0
  %342 = load double, ptr %341, align 16
  %343 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 1
  %344 = load double, ptr %343, align 8
  %345 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 0
  %346 = load double, ptr %345, align 16
  %347 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 1
  %348 = load double, ptr %347, align 8
  invoke void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80) %328, double %342, double %344, double %346, double %348, ptr noundef %338)
          to label %349 unwind label %546

349:                                              ; preds = %340
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %327, ptr noundef %328)
          to label %350 unwind label %538

350:                                              ; preds = %349
  %351 = getelementptr inbounds %"class.JPH::RefConst", ptr %43, i64 3
  store ptr %351, ptr %44, align 8
  %352 = invoke noundef ptr @_ZN3JPH22RotatedTranslatedShapenwEm(i64 noundef 80)
          to label %353 unwind label %538

353:                                              ; preds = %350
  store i1 true, ptr %52, align 1
  %354 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %355 unwind label %555

355:                                              ; preds = %353
  %356 = getelementptr inbounds %"class.JPH::Vec3", ptr %48, i32 0, i32 0
  %357 = getelementptr inbounds %union.anon.4, ptr %356, i32 0, i32 0
  %358 = getelementptr inbounds { double, double }, ptr %357, i32 0, i32 0
  %359 = extractvalue { double, double } %354, 0
  store double %359, ptr %358, align 16
  %360 = getelementptr inbounds { double, double }, ptr %357, i32 0, i32 1
  %361 = extractvalue { double, double } %354, 1
  store double %361, ptr %360, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %49, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !29
  call void @llvm.lifetime.start.p0(i64 40, ptr %50) #11
  call void @llvm.lifetime.start.p0(i64 88, ptr %51) #11
  invoke void @_ZN3JPH27TaperedCapsuleShapeSettingsC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %51, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 5.000000e-01, ptr noundef null)
          to label %362 unwind label %559

362:                                              ; preds = %355
  invoke void @_ZNK3JPH27TaperedCapsuleShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %50, ptr noundef nonnull align 8 dereferenceable(88) %51)
          to label %363 unwind label %563

363:                                              ; preds = %362
  %364 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %50)
          to label %365 unwind label %567

365:                                              ; preds = %363
  %366 = invoke noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %364)
          to label %367 unwind label %567

367:                                              ; preds = %365
  %368 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 0
  %369 = load double, ptr %368, align 16
  %370 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 1
  %371 = load double, ptr %370, align 8
  %372 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %373 = load double, ptr %372, align 16
  %374 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %375 = load double, ptr %374, align 8
  invoke void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80) %352, double %369, double %371, double %373, double %375, ptr noundef %366)
          to label %376 unwind label %567

376:                                              ; preds = %367
  store i1 false, ptr %52, align 1
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %351, ptr noundef %352)
          to label %377 unwind label %567

377:                                              ; preds = %376
  %378 = getelementptr inbounds %"class.JPH::RefConst", ptr %43, i64 4
  store ptr %378, ptr %44, align 8
  %379 = invoke noundef ptr @_ZN3JPH22RotatedTranslatedShapenwEm(i64 noundef 80)
          to label %380 unwind label %567

380:                                              ; preds = %377
  %381 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %382 unwind label %571

382:                                              ; preds = %380
  %383 = getelementptr inbounds %"class.JPH::Vec3", ptr %53, i32 0, i32 0
  %384 = getelementptr inbounds %union.anon.4, ptr %383, i32 0, i32 0
  %385 = getelementptr inbounds { double, double }, ptr %384, i32 0, i32 0
  %386 = extractvalue { double, double } %381, 0
  store double %386, ptr %385, align 16
  %387 = getelementptr inbounds { double, double }, ptr %384, i32 0, i32 1
  %388 = extractvalue { double, double } %381, 1
  store double %388, ptr %387, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !29
  %389 = invoke noundef ptr @_ZN3JPH13CylinderShapenwEm(i64 noundef 56)
          to label %390 unwind label %571

390:                                              ; preds = %382
  invoke void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %389, float noundef 1.000000e+00, float noundef 5.000000e-01, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %391 unwind label %575

391:                                              ; preds = %390
  %392 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 0
  %393 = load double, ptr %392, align 16
  %394 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 1
  %395 = load double, ptr %394, align 8
  %396 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 0
  %397 = load double, ptr %396, align 16
  %398 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 1
  %399 = load double, ptr %398, align 8
  invoke void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80) %379, double %393, double %395, double %397, double %399, ptr noundef %389)
          to label %400 unwind label %571

400:                                              ; preds = %391
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %378, ptr noundef %379)
          to label %401 unwind label %567

401:                                              ; preds = %400
  %402 = getelementptr inbounds %"class.JPH::RefConst", ptr %43, i64 5
  store ptr %402, ptr %44, align 8
  %403 = invoke noundef ptr @_ZN3JPH22RotatedTranslatedShapenwEm(i64 noundef 80)
          to label %404 unwind label %567

404:                                              ; preds = %401
  store i1 true, ptr %59, align 1
  %405 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %406 unwind label %580

406:                                              ; preds = %404
  %407 = getelementptr inbounds %"class.JPH::Vec3", ptr %55, i32 0, i32 0
  %408 = getelementptr inbounds %union.anon.4, ptr %407, i32 0, i32 0
  %409 = getelementptr inbounds { double, double }, ptr %408, i32 0, i32 0
  %410 = extractvalue { double, double } %405, 0
  store double %410, ptr %409, align 16
  %411 = getelementptr inbounds { double, double }, ptr %408, i32 0, i32 1
  %412 = extractvalue { double, double } %405, 1
  store double %412, ptr %411, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %56, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !29
  call void @llvm.lifetime.start.p0(i64 40, ptr %57) #11
  call void @llvm.lifetime.start.p0(i64 96, ptr %58) #11
  invoke void @_ZN3JPH28TaperedCylinderShapeSettingsC1EffffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(96) %58, float noundef 1.000000e+00, float noundef 5.000000e-01, float noundef 1.000000e+00, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %413 unwind label %584

413:                                              ; preds = %406
  invoke void @_ZNK3JPH28TaperedCylinderShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %57, ptr noundef nonnull align 8 dereferenceable(96) %58)
          to label %414 unwind label %588

414:                                              ; preds = %413
  %415 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %57)
          to label %416 unwind label %592

416:                                              ; preds = %414
  %417 = invoke noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %415)
          to label %418 unwind label %592

418:                                              ; preds = %416
  %419 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 0
  %420 = load double, ptr %419, align 16
  %421 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 1
  %422 = load double, ptr %421, align 8
  %423 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 0
  %424 = load double, ptr %423, align 16
  %425 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 1
  %426 = load double, ptr %425, align 8
  invoke void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80) %403, double %420, double %422, double %424, double %426, ptr noundef %417)
          to label %427 unwind label %592

427:                                              ; preds = %418
  store i1 false, ptr %59, align 1
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %402, ptr noundef %403)
          to label %428 unwind label %592

428:                                              ; preds = %427
  %429 = getelementptr inbounds %"class.JPH::RefConst", ptr %43, i64 6
  store ptr %429, ptr %44, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %60) #11
  invoke void @_ZNK3JPH23ConvexHullShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %60, ptr noundef nonnull align 8 dereferenceable(120) %29)
          to label %430 unwind label %596

430:                                              ; preds = %428
  %431 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %60)
          to label %432 unwind label %600

432:                                              ; preds = %430
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2ERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %429, ptr noundef nonnull align 8 dereferenceable(8) %431)
          to label %433 unwind label %600

433:                                              ; preds = %432
  %434 = getelementptr inbounds %"class.JPH::RefConst", ptr %43, i64 7
  store ptr %434, ptr %44, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %61) #11
  invoke void @_ZNK3JPH27StaticCompoundShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %61, ptr noundef nonnull align 8 dereferenceable(88) %34)
          to label %435 unwind label %604

435:                                              ; preds = %433
  %436 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %61)
          to label %437 unwind label %608

437:                                              ; preds = %435
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2ERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %434, ptr noundef nonnull align 8 dereferenceable(8) %436)
          to label %438 unwind label %608

438:                                              ; preds = %437
  store i1 false, ptr %62, align 1
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %61) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %61) #11
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %60) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %60) #11
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %57) #11
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %58) #11
  call void @llvm.lifetime.end.p0(i64 96, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %57) #11
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %50) #11
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %51) #11
  call void @llvm.lifetime.end.p0(i64 88, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %50) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #11
  %439 = call noundef i64 @_ZSt4sizeIN3JPH8RefConstINS0_5ShapeEEELm8EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(64) %43) #11
  %440 = trunc i64 %439 to i32
  store i32 %440, ptr %63, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #11
  store i32 0, ptr %64, align 4, !tbaa !47
  br label %441

441:                                              ; preds = %662, %438
  %442 = load i32, ptr %64, align 4, !tbaa !47
  %443 = load i32, ptr %63, align 4, !tbaa !47
  %444 = icmp slt i32 %442, %443
  br i1 %444, label %640, label %445

445:                                              ; preds = %441
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #11
  br label %676

446:                                              ; preds = %106, %94, %92, %91, %1
  %447 = landingpad { ptr, i32 }
          cleanup
  %448 = extractvalue { ptr, i32 } %447, 0
  store ptr %448, ptr %7, align 8
  %449 = extractvalue { ptr, i32 } %447, 1
  store i32 %449, ptr %8, align 4
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #11
  br label %703

450:                                              ; preds = %122
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %7, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %8, align 4
  br label %702

454:                                              ; preds = %128
  %455 = landingpad { ptr, i32 }
          cleanup
  %456 = extractvalue { ptr, i32 } %455, 0
  store ptr %456, ptr %7, align 8
  %457 = extractvalue { ptr, i32 } %455, 1
  store i32 %457, ptr %8, align 4
  br label %462

458:                                              ; preds = %133, %132, %130
  %459 = landingpad { ptr, i32 }
          cleanup
  %460 = extractvalue { ptr, i32 } %459, 0
  store ptr %460, ptr %7, align 8
  %461 = extractvalue { ptr, i32 } %459, 1
  store i32 %461, ptr %8, align 4
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #11
  br label %462

462:                                              ; preds = %458, %454
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  br label %701

463:                                              ; preds = %142
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %7, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %8, align 4
  br label %700

467:                                              ; preds = %149, %147
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %7, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %8, align 4
  br label %475

471:                                              ; preds = %155, %153, %152, %150
  %472 = landingpad { ptr, i32 }
          cleanup
  %473 = extractvalue { ptr, i32 } %472, 0
  store ptr %473, ptr %7, align 8
  %474 = extractvalue { ptr, i32 } %472, 1
  store i32 %474, ptr %8, align 4
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #11
  br label %475

475:                                              ; preds = %471, %467
  call void @llvm.lifetime.end.p0(i64 20, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  br label %699

476:                                              ; preds = %171
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %7, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %8, align 4
  br label %698

480:                                              ; preds = %180, %176
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %7, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %8, align 4
  br label %697

484:                                              ; preds = %179
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %7, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %8, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %178) #11
  br label %697

488:                                              ; preds = %186, %184, %183, %181
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %7, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %8, align 4
  br label %696

492:                                              ; preds = %202
  %493 = landingpad { ptr, i32 }
          cleanup
  %494 = extractvalue { ptr, i32 } %493, 0
  store ptr %494, ptr %7, align 8
  %495 = extractvalue { ptr, i32 } %493, 1
  store i32 %495, ptr %8, align 4
  br label %695

496:                                              ; preds = %215, %213, %211, %209
  %497 = landingpad { ptr, i32 }
          cleanup
  %498 = extractvalue { ptr, i32 } %497, 0
  store ptr %498, ptr %7, align 8
  %499 = extractvalue { ptr, i32 } %497, 1
  store i32 %499, ptr %8, align 4
  br label %509

500:                                              ; preds = %217
  %501 = landingpad { ptr, i32 }
          cleanup
  %502 = extractvalue { ptr, i32 } %501, 0
  store ptr %502, ptr %7, align 8
  %503 = extractvalue { ptr, i32 } %501, 1
  store i32 %503, ptr %8, align 4
  br label %508

504:                                              ; preds = %224
  %505 = landingpad { ptr, i32 }
          cleanup
  %506 = extractvalue { ptr, i32 } %505, 0
  store ptr %506, ptr %7, align 8
  %507 = extractvalue { ptr, i32 } %505, 1
  store i32 %507, ptr %8, align 4
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #11
  br label %508

508:                                              ; preds = %504, %500
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #11
  br label %509

509:                                              ; preds = %508, %496
  call void @llvm.lifetime.end.p0(i64 64, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #11
  br label %694

510:                                              ; preds = %225
  %511 = landingpad { ptr, i32 }
          cleanup
  %512 = extractvalue { ptr, i32 } %511, 0
  store ptr %512, ptr %7, align 8
  %513 = extractvalue { ptr, i32 } %511, 1
  store i32 %513, ptr %8, align 4
  br label %693

514:                                              ; preds = %227
  %515 = landingpad { ptr, i32 }
          cleanup
  %516 = extractvalue { ptr, i32 } %515, 0
  store ptr %516, ptr %7, align 8
  %517 = extractvalue { ptr, i32 } %515, 1
  store i32 %517, ptr %8, align 4
  br label %692

518:                                              ; preds = %228
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %7, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %8, align 4
  br label %691

522:                                              ; preds = %306, %296, %294, %293, %284, %274, %272, %271, %262, %253, %244, %232, %230
  %523 = landingpad { ptr, i32 }
          cleanup
  %524 = extractvalue { ptr, i32 } %523, 0
  store ptr %524, ptr %7, align 8
  %525 = extractvalue { ptr, i32 } %523, 1
  store i32 %525, ptr %8, align 4
  br label %690

526:                                              ; preds = %261
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %7, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %8, align 4
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %260) #11
  br label %690

530:                                              ; preds = %283
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %7, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, ptr %8, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %282) #11
  br label %690

534:                                              ; preds = %305
  %535 = landingpad { ptr, i32 }
          cleanup
  %536 = extractvalue { ptr, i32 } %535, 0
  store ptr %536, ptr %7, align 8
  %537 = extractvalue { ptr, i32 } %535, 1
  store i32 %537, ptr %8, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %304) #11
  br label %690

538:                                              ; preds = %350, %349, %326, %325, %316, %315
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %7, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %8, align 4
  br label %629

542:                                              ; preds = %320, %319
  %543 = landingpad { ptr, i32 }
          cleanup
  %544 = extractvalue { ptr, i32 } %543, 0
  store ptr %544, ptr %7, align 8
  %545 = extractvalue { ptr, i32 } %543, 1
  store i32 %545, ptr %8, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %318) #11
  br label %629

546:                                              ; preds = %340, %331, %329
  %547 = landingpad { ptr, i32 }
          cleanup
  %548 = extractvalue { ptr, i32 } %547, 0
  store ptr %548, ptr %7, align 8
  %549 = extractvalue { ptr, i32 } %547, 1
  store i32 %549, ptr %8, align 4
  br label %554

550:                                              ; preds = %339
  %551 = landingpad { ptr, i32 }
          cleanup
  %552 = extractvalue { ptr, i32 } %551, 0
  store ptr %552, ptr %7, align 8
  %553 = extractvalue { ptr, i32 } %551, 1
  store i32 %553, ptr %8, align 4
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %338) #11
  br label %554

554:                                              ; preds = %550, %546
  call void @_ZN3JPH22RotatedTranslatedShapedlEPv(ptr noundef %328) #11
  br label %629

555:                                              ; preds = %353
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %7, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %8, align 4
  br label %625

559:                                              ; preds = %355
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %7, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %8, align 4
  br label %624

563:                                              ; preds = %362
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %7, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %8, align 4
  br label %623

567:                                              ; preds = %401, %400, %377, %376, %367, %365, %363
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %7, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %8, align 4
  br label %622

571:                                              ; preds = %391, %382, %380
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %7, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %8, align 4
  br label %579

575:                                              ; preds = %390
  %576 = landingpad { ptr, i32 }
          cleanup
  %577 = extractvalue { ptr, i32 } %576, 0
  store ptr %577, ptr %7, align 8
  %578 = extractvalue { ptr, i32 } %576, 1
  store i32 %578, ptr %8, align 4
  call void @_ZN3JPH13CylinderShapedlEPv(ptr noundef %389) #11
  br label %579

579:                                              ; preds = %575, %571
  call void @_ZN3JPH22RotatedTranslatedShapedlEPv(ptr noundef %379) #11
  br label %622

580:                                              ; preds = %404
  %581 = landingpad { ptr, i32 }
          cleanup
  %582 = extractvalue { ptr, i32 } %581, 0
  store ptr %582, ptr %7, align 8
  %583 = extractvalue { ptr, i32 } %581, 1
  store i32 %583, ptr %8, align 4
  br label %618

584:                                              ; preds = %406
  %585 = landingpad { ptr, i32 }
          cleanup
  %586 = extractvalue { ptr, i32 } %585, 0
  store ptr %586, ptr %7, align 8
  %587 = extractvalue { ptr, i32 } %585, 1
  store i32 %587, ptr %8, align 4
  br label %617

588:                                              ; preds = %413
  %589 = landingpad { ptr, i32 }
          cleanup
  %590 = extractvalue { ptr, i32 } %589, 0
  store ptr %590, ptr %7, align 8
  %591 = extractvalue { ptr, i32 } %589, 1
  store i32 %591, ptr %8, align 4
  br label %616

592:                                              ; preds = %427, %418, %416, %414
  %593 = landingpad { ptr, i32 }
          cleanup
  %594 = extractvalue { ptr, i32 } %593, 0
  store ptr %594, ptr %7, align 8
  %595 = extractvalue { ptr, i32 } %593, 1
  store i32 %595, ptr %8, align 4
  br label %615

596:                                              ; preds = %428
  %597 = landingpad { ptr, i32 }
          cleanup
  %598 = extractvalue { ptr, i32 } %597, 0
  store ptr %598, ptr %7, align 8
  %599 = extractvalue { ptr, i32 } %597, 1
  store i32 %599, ptr %8, align 4
  br label %614

600:                                              ; preds = %432, %430
  %601 = landingpad { ptr, i32 }
          cleanup
  %602 = extractvalue { ptr, i32 } %601, 0
  store ptr %602, ptr %7, align 8
  %603 = extractvalue { ptr, i32 } %601, 1
  store i32 %603, ptr %8, align 4
  br label %613

604:                                              ; preds = %433
  %605 = landingpad { ptr, i32 }
          cleanup
  %606 = extractvalue { ptr, i32 } %605, 0
  store ptr %606, ptr %7, align 8
  %607 = extractvalue { ptr, i32 } %605, 1
  store i32 %607, ptr %8, align 4
  br label %612

608:                                              ; preds = %437, %435
  %609 = landingpad { ptr, i32 }
          cleanup
  %610 = extractvalue { ptr, i32 } %609, 0
  store ptr %610, ptr %7, align 8
  %611 = extractvalue { ptr, i32 } %609, 1
  store i32 %611, ptr %8, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %61) #11
  br label %612

612:                                              ; preds = %608, %604
  call void @llvm.lifetime.end.p0(i64 40, ptr %61) #11
  br label %613

613:                                              ; preds = %612, %600
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %60) #11
  br label %614

614:                                              ; preds = %613, %596
  call void @llvm.lifetime.end.p0(i64 40, ptr %60) #11
  br label %615

615:                                              ; preds = %614, %592
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %57) #11
  br label %616

616:                                              ; preds = %615, %588
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %58) #11
  br label %617

617:                                              ; preds = %616, %584
  call void @llvm.lifetime.end.p0(i64 96, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %57) #11
  br label %618

618:                                              ; preds = %617, %580
  %619 = load i1, ptr %59, align 1
  br i1 %619, label %620, label %621

620:                                              ; preds = %618
  call void @_ZN3JPH22RotatedTranslatedShapedlEPv(ptr noundef %403) #11
  br label %621

621:                                              ; preds = %620, %618
  br label %622

622:                                              ; preds = %621, %579, %567
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %50) #11
  br label %623

623:                                              ; preds = %622, %563
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %51) #11
  br label %624

624:                                              ; preds = %623, %559
  call void @llvm.lifetime.end.p0(i64 88, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %50) #11
  br label %625

625:                                              ; preds = %624, %555
  %626 = load i1, ptr %52, align 1
  br i1 %626, label %627, label %628

627:                                              ; preds = %625
  call void @_ZN3JPH22RotatedTranslatedShapedlEPv(ptr noundef %352) #11
  br label %628

628:                                              ; preds = %627, %625
  br label %629

629:                                              ; preds = %628, %554, %542, %538
  %630 = load i1, ptr %62, align 1
  br i1 %630, label %631, label %639

631:                                              ; preds = %629
  %632 = load ptr, ptr %44, align 8
  %633 = icmp eq ptr %43, %632
  br i1 %633, label %638, label %634

634:                                              ; preds = %634, %631
  %635 = phi ptr [ %632, %631 ], [ %636, %634 ]
  %636 = getelementptr inbounds %"class.JPH::RefConst", ptr %635, i64 -1
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %636) #11
  %637 = icmp eq ptr %636, %43
  br i1 %637, label %638, label %634

638:                                              ; preds = %634, %631
  br label %639

639:                                              ; preds = %638, %629
  br label %689

640:                                              ; preds = %441
  %641 = load i32, ptr %64, align 4, !tbaa !47
  %642 = load i32, ptr %63, align 4, !tbaa !47
  %643 = srem i32 %641, %642
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds [8 x %"class.JPH::RefConst"], ptr %43, i64 0, i64 %644
  %646 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %645)
          to label %647 unwind label %665

647:                                              ; preds = %640
  invoke void @_ZN3JPH20BodyCreationSettings8SetShapeEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(256) %25, ptr noundef %646)
          to label %648 unwind label %665

648:                                              ; preds = %647
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #11
  %649 = load i32, ptr %63, align 4, !tbaa !47
  %650 = sitofp i32 %649 to float
  %651 = fneg float %650
  %652 = load i32, ptr %64, align 4, !tbaa !47
  %653 = sitofp i32 %652 to float
  %654 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %653, float %651)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %65, float noundef %654, float noundef 1.500000e+01, float noundef 0.000000e+00)
          to label %655 unwind label %669

655:                                              ; preds = %648
  %656 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %25, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %656, ptr align 16 %65, i64 16, i1 false), !tbaa.struct !29
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #11
  %657 = getelementptr inbounds %class.Test, ptr %67, i32 0, i32 3
  %658 = load ptr, ptr %657, align 8, !tbaa !23
  %659 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %658, ptr noundef nonnull align 16 dereferenceable(256) %25, i32 noundef 0)
          to label %660 unwind label %665

660:                                              ; preds = %655
  %661 = getelementptr inbounds %"class.JPH::BodyID", ptr %66, i32 0, i32 0
  store i32 %659, ptr %661, align 4
  br label %662

662:                                              ; preds = %660
  %663 = load i32, ptr %64, align 4, !tbaa !47
  %664 = add nsw i32 %663, 1
  store i32 %664, ptr %64, align 4, !tbaa !47
  br label %441, !llvm.loop !48

665:                                              ; preds = %655, %647, %640
  %666 = landingpad { ptr, i32 }
          cleanup
  %667 = extractvalue { ptr, i32 } %666, 0
  store ptr %667, ptr %7, align 8
  %668 = extractvalue { ptr, i32 } %666, 1
  store i32 %668, ptr %8, align 4
  br label %673

669:                                              ; preds = %648
  %670 = landingpad { ptr, i32 }
          cleanup
  %671 = extractvalue { ptr, i32 } %670, 0
  store ptr %671, ptr %7, align 8
  %672 = extractvalue { ptr, i32 } %670, 1
  store i32 %672, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #11
  br label %673

673:                                              ; preds = %669, %665
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #11
  %674 = getelementptr inbounds [8 x %"class.JPH::RefConst"], ptr %43, i32 0, i32 0
  %675 = getelementptr inbounds %"class.JPH::RefConst", ptr %674, i64 8
  br label %684

676:                                              ; preds = %445
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #11
  %677 = getelementptr inbounds [8 x %"class.JPH::RefConst"], ptr %43, i32 0, i32 0
  %678 = getelementptr inbounds %"class.JPH::RefConst", ptr %677, i64 8
  br label %679

679:                                              ; preds = %679, %676
  %680 = phi ptr [ %678, %676 ], [ %681, %679 ]
  %681 = getelementptr inbounds %"class.JPH::RefConst", ptr %680, i64 -1
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %681) #11
  %682 = icmp eq ptr %681, %677
  br i1 %682, label %683, label %679

683:                                              ; preds = %679
  call void @llvm.lifetime.end.p0(i64 64, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #11
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %34) #11
  call void @llvm.lifetime.end.p0(i64 88, ptr %34) #11
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %29) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr %29) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %25) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %25) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %18) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr %18) #11
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %13) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr %13) #11
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %5) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %3) #11
  ret void

684:                                              ; preds = %684, %673
  %685 = phi ptr [ %675, %673 ], [ %686, %684 ]
  %686 = getelementptr inbounds %"class.JPH::RefConst", ptr %685, i64 -1
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %686) #11
  %687 = icmp eq ptr %686, %674
  br i1 %687, label %688, label %684

688:                                              ; preds = %684
  br label %689

689:                                              ; preds = %688, %639
  call void @llvm.lifetime.end.p0(i64 64, ptr %43) #11
  br label %690

690:                                              ; preds = %689, %534, %530, %526, %522
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #11
  br label %691

691:                                              ; preds = %690, %518
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %34) #11
  br label %692

692:                                              ; preds = %691, %514
  call void @llvm.lifetime.end.p0(i64 88, ptr %34) #11
  br label %693

693:                                              ; preds = %692, %510
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %29) #11
  br label %694

694:                                              ; preds = %693, %509
  call void @llvm.lifetime.end.p0(i64 120, ptr %29) #11
  br label %695

695:                                              ; preds = %694, %492
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %25) #11
  br label %696

696:                                              ; preds = %695, %488
  call void @llvm.lifetime.end.p0(i64 256, ptr %25) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #11
  br label %697

697:                                              ; preds = %696, %484, %480
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  br label %698

698:                                              ; preds = %697, %476
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %18) #11
  br label %699

699:                                              ; preds = %698, %475
  call void @llvm.lifetime.end.p0(i64 112, ptr %18) #11
  br label %700

700:                                              ; preds = %699, %463
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %13) #11
  br label %701

701:                                              ; preds = %700, %462
  call void @llvm.lifetime.end.p0(i64 112, ptr %13) #11
  br label %702

702:                                              ; preds = %701, %450
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %5) #11
  br label %703

703:                                              ; preds = %702, %446
  call void @llvm.lifetime.end.p0(i64 112, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %3) #11
  br label %704

704:                                              ; preds = %703
  %705 = load ptr, ptr %7, align 8
  %706 = load i32, ptr %8, align 4
  %707 = insertvalue { ptr, i32 } poison, ptr %705, 0
  %708 = insertvalue { ptr, i32 } %707, i32 %706, 1
  resume { ptr, i32 } %708
}

; 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 } @_ZN3JPH4Vec310sReplicateEf(float noundef) #3 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef) #5

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112)) #6

declare void @_ZN15SoftBodyCreator29CreateClothWithFixatedCornersEjjf(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8, i32 noundef, i32 noundef, float noundef) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH3RefINS_22SoftBodySharedSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) #4 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: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec36sAxisYEv() #2 align 2

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

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

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

declare void @_ZN3JPH22SoftBodySharedSettings11sCreateCubeEjf(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8, i32 noundef, float noundef) #6

; 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) #7

declare void @_ZN15SoftBodyCreator12CreateSphereEfjjN3JPH22SoftBodySharedSettings9EBendTypeERKNS1_16VertexAttributesE(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8, float noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(20)) #6

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

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

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

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

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 uwtable
declare dso_local void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr, i64, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #9 align 2

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec36sAxisXEv() #2 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 } @_ZN3JPH4Vec35sZeroEv() #3 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) #5 align 2

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

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

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

declare void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80), double, double, double, double, ptr noundef) unnamed_addr #6

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

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: 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 nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

; 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) #5 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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeIN3JPH8RefConstINS0_5ShapeEEELm8EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(64)) #8

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

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

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

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

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

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

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

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


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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN18SoftBodyShapesTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::SoftBodyCreationSettings", align 16
  %3 = alloca %"class.JPH::Ref", align 8
  %4 = alloca %"class.JPH::Vec3", align 16
  %5 = alloca %"class.JPH::SoftBodyCreationSettings", align 16
  %6 = alloca %"class.JPH::Ref", align 8
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::SoftBodyCreationSettings", align 16
  %9 = alloca %"class.JPH::Ref", align 8
  %10 = alloca %"struct.JPH::SoftBodySharedSettings::VertexAttributes", align 4
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::RefConst", align 8
  %13 = alloca %"class.JPH::BodyCreationSettings", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %16 = alloca %"class.JPH::Array", align 8
  %17 = alloca [4 x %"class.JPH::Vec3"], align 16
  %18 = alloca %"class.JPH::STLAllocator.15", align 1
  %19 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca [8 x %"class.JPH::RefConst"], align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Result", align 8
  %25 = alloca %"class.JPH::TaperedCapsuleShapeSettings", align 8
  %26 = alloca %"class.JPH::Result", align 8
  %27 = alloca %"class.JPH::TaperedCylinderShapeSettings", align 8
  %28 = alloca %"class.JPH::Result", align 8
  %29 = alloca %"class.JPH::Result", align 8
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = tail call noundef float @_ZSt4sqrtf(float noundef 0x3FD5555560000000)
  %32 = tail call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef %31)
  %33 = extractvalue { double, double } %32, 0
  %34 = extractvalue { double, double } %32, 1
  %35 = tail call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 4.500000e+01)
  %36 = tail call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %33, double %34, float noundef %35)
  %37 = extractvalue { double, double } %36, 0
  %38 = extractvalue { double, double } %36, 1
  %39 = tail call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112) %0)
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %2) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #11
  call void @_ZN15SoftBodyCreator29CreateClothWithFixatedCornersEjjf(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref") align 8 %3, i32 noundef 30, i32 noundef 30, float noundef 7.500000e-01)
  %40 = call noundef ptr @_ZNK3JPH3RefINS_22SoftBodySharedSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %4, float noundef 0.000000e+00, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %41 unwind label %243

41:                                               ; preds = %1
  %42 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %43 unwind label %243

43:                                               ; preds = %41
  %44 = extractvalue { double, double } %42, 0
  %45 = extractvalue { double, double } %42, 1
  %46 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %44, double %45, float noundef 0x3FE921FB60000000)
          to label %47 unwind label %243

47:                                               ; preds = %43
  %48 = extractvalue { double, double } %46, 0
  %49 = extractvalue { double, double } %46, 1
  %50 = load double, ptr %4, align 16
  %51 = getelementptr inbounds i8, ptr %4, i64 8
  %52 = load double, ptr %51, align 8
  invoke void @_ZN3JPH24SoftBodyCreationSettingsC2EPKNS_22SoftBodySharedSettingsENS_4Vec3ENS_4QuatEt(ptr noundef nonnull align 16 dereferenceable(111) %2, ptr noundef %40, double %50, double %52, double %48, double %49, i16 noundef zeroext 1)
          to label %53 unwind label %243

53:                                               ; preds = %47
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #11
  %54 = getelementptr inbounds i8, ptr %2, i64 108
  store i8 0, ptr %54, align 4, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %2, i64 109
  store i8 0, ptr %55, align 1, !tbaa !21
  %56 = getelementptr inbounds i8, ptr %0, i64 24
  %57 = load ptr, ptr %56, align 8, !tbaa !22
  %58 = invoke i32 @_ZN3JPH13BodyInterface20CreateAndAddSoftBodyERKNS_24SoftBodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %57, ptr noundef nonnull align 16 dereferenceable(111) %2, i32 noundef 0)
          to label %59 unwind label %245

59:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %5) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #11
  invoke void @_ZN3JPH22SoftBodySharedSettings11sCreateCubeEjf(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref") align 8 %6, i32 noundef 5, float noundef 5.000000e-01)
          to label %60 unwind label %247

60:                                               ; preds = %59
  %61 = call noundef ptr @_ZNK3JPH3RefINS_22SoftBodySharedSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %6)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %7, float noundef 2.000000e+01, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %62 unwind label %249

62:                                               ; preds = %60
  %63 = load double, ptr %7, align 16
  %64 = getelementptr inbounds i8, ptr %7, i64 8
  %65 = load double, ptr %64, align 8
  invoke void @_ZN3JPH24SoftBodyCreationSettingsC2EPKNS_22SoftBodySharedSettingsENS_4Vec3ENS_4QuatEt(ptr noundef nonnull align 16 dereferenceable(111) %5, ptr noundef %61, double %63, double %65, double %37, double %38, i16 noundef zeroext 1)
          to label %66 unwind label %249

66:                                               ; preds = %62
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  %67 = getelementptr inbounds i8, ptr %5, i64 92
  store float 0.000000e+00, ptr %67, align 4, !tbaa !28
  %68 = load ptr, ptr %56, align 8, !tbaa !22
  %69 = invoke i32 @_ZN3JPH13BodyInterface20CreateAndAddSoftBodyERKNS_24SoftBodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %68, ptr noundef nonnull align 16 dereferenceable(111) %5, i32 noundef 0)
          to label %70 unwind label %252

70:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %8) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #11
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %10) #11
  call void @_ZN3JPH22SoftBodySharedSettings16VertexAttributesC2EfffNS0_8ELRATypeEf(ptr noundef nonnull align 4 dereferenceable(20) %10, float noundef 0x3F1A36E2E0000000, float noundef 0x3F1A36E2E0000000, float noundef 0x3F50624DE0000000, i32 noundef 0, float noundef 1.000000e+00)
  invoke void @_ZN15SoftBodyCreator12CreateSphereEfjjN3JPH22SoftBodySharedSettings9EBendTypeERKNS1_16VertexAttributesE(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref") align 8 %9, float noundef 1.000000e+00, i32 noundef 10, i32 noundef 20, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(20) %10)
          to label %71 unwind label %254

71:                                               ; preds = %70
  %72 = call noundef ptr @_ZNK3JPH3RefINS_22SoftBodySharedSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef 1.500000e+01, float noundef 1.000000e+01, float noundef 1.500000e+01)
          to label %73 unwind label %256

73:                                               ; preds = %71
  %74 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %75 unwind label %256

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

81:                                               ; preds = %75
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #11
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  %82 = getelementptr inbounds i8, ptr %8, i64 100
  store float 2.000000e+03, ptr %82, align 4, !tbaa !29
  %83 = load ptr, ptr %56, align 8, !tbaa !22
  %84 = invoke i32 @_ZN3JPH13BodyInterface20CreateAndAddSoftBodyERKNS_24SoftBodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 16 dereferenceable(111) %8, i32 noundef 0)
          to label %85 unwind label %259

85:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #11
  %86 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %87 unwind label %261

87:                                               ; preds = %85
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %86, float noundef 1.000000e+00, ptr noundef null)
          to label %88 unwind label %263

88:                                               ; preds = %87
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull %86)
          to label %89 unwind label %261

89:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %13) #11
  %90 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %12)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %14, float noundef 1.550000e+01, float noundef 7.000000e+00, float noundef 1.500000e+01)
          to label %91 unwind label %265

91:                                               ; preds = %89
  %92 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %93 unwind label %265

93:                                               ; preds = %91
  %94 = extractvalue { double, double } %92, 0
  %95 = extractvalue { double, double } %92, 1
  %96 = load double, ptr %14, align 16
  %97 = getelementptr inbounds i8, ptr %14, i64 8
  %98 = load double, ptr %97, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %13, ptr noundef %90, double %96, double %98, double %94, double %95, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %99 unwind label %265

99:                                               ; preds = %93
  %100 = getelementptr inbounds i8, ptr %13, i64 144
  store i8 1, ptr %100, align 16, !tbaa !30
  %101 = getelementptr inbounds i8, ptr %13, i64 160
  store float 1.000000e+02, ptr %101, align 16, !tbaa !40
  %102 = load ptr, ptr %56, align 8, !tbaa !22
  %103 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %102, ptr noundef nonnull align 16 dereferenceable(256) %13, i32 noundef 0)
          to label %104 unwind label %267

104:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %15) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %17) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %17, float noundef -2.000000e+00, float noundef -2.000000e+00, float noundef -2.000000e+00)
          to label %105 unwind label %269

105:                                              ; preds = %104
  %106 = getelementptr inbounds i8, ptr %17, i64 16
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %106, float noundef 0.000000e+00, float noundef -2.000000e+00, float noundef 2.000000e+00)
          to label %107 unwind label %269

107:                                              ; preds = %105
  %108 = getelementptr inbounds i8, ptr %17, i64 32
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %108, float noundef 2.000000e+00, float noundef -2.000000e+00, float noundef -2.000000e+00)
          to label %109 unwind label %269

109:                                              ; preds = %107
  %110 = getelementptr inbounds i8, ptr %17, i64 48
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %110, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
          to label %111 unwind label %269

111:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #11
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr nonnull %17, i64 4, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %112 unwind label %271

112:                                              ; preds = %111
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %15, ptr noundef nonnull align 8 dereferenceable(24) %16, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %113 unwind label %273

113:                                              ; preds = %112
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #11
  %114 = getelementptr inbounds i8, ptr %15, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %114)
          to label %115 unwind label %277

115:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %19) #11
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %19)
          to label %116 unwind label %279

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

118:                                              ; preds = %116
  %119 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %120 unwind label %283

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

124:                                              ; preds = %120
  %125 = extractvalue { double, double } %123, 0
  %126 = extractvalue { double, double } %123, 1
  %127 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %128 unwind label %283

128:                                              ; preds = %124
  %129 = extractvalue { double, double } %127, 0
  %130 = extractvalue { double, double } %127, 1
  %131 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %132 unwind label %283

132:                                              ; preds = %128
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %131, float noundef 2.000000e+00, float noundef 5.000000e-01, ptr noundef null)
          to label %133 unwind label %285

133:                                              ; preds = %132
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %19, double %129, double %130, double %125, double %126, ptr noundef nonnull %131, i32 noundef 0)
          to label %134 unwind label %283

134:                                              ; preds = %133
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef -2.000000e+00)
          to label %135 unwind label %283

135:                                              ; preds = %134
  %136 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %137 unwind label %283

137:                                              ; preds = %135
  %138 = extractvalue { double, double } %136, 0
  %139 = extractvalue { double, double } %136, 1
  %140 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %141 unwind label %283

141:                                              ; preds = %137
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %140, float noundef 1.000000e+00, ptr noundef null)
          to label %142 unwind label %287

142:                                              ; preds = %141
  %143 = load double, ptr %20, align 16
  %144 = getelementptr inbounds i8, ptr %20, i64 8
  %145 = load double, ptr %144, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %19, double %143, double %145, double %138, double %139, ptr noundef nonnull %140, i32 noundef 0)
          to label %146 unwind label %283

146:                                              ; preds = %142
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 2.000000e+00)
          to label %147 unwind label %283

147:                                              ; preds = %146
  %148 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %149 unwind label %283

149:                                              ; preds = %147
  %150 = extractvalue { double, double } %148, 0
  %151 = extractvalue { double, double } %148, 1
  %152 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %153 unwind label %283

153:                                              ; preds = %149
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %152, float noundef 1.000000e+00, ptr noundef null)
          to label %154 unwind label %289

154:                                              ; preds = %153
  %155 = load double, ptr %21, align 16
  %156 = getelementptr inbounds i8, ptr %21, i64 8
  %157 = load double, ptr %156, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %19, double %155, double %157, double %150, double %151, ptr noundef nonnull %152, i32 noundef 0)
          to label %158 unwind label %283

158:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %22) #11
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %159 unwind label %291

159:                                              ; preds = %158
  %160 = getelementptr inbounds i8, ptr %22, i64 8
  %161 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %162 unwind label %291

162:                                              ; preds = %159
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %23, float noundef 7.500000e-01, float noundef 1.000000e+00, float noundef 1.250000e+00)
          to label %163 unwind label %293

163:                                              ; preds = %162
  %164 = load double, ptr %23, align 16
  %165 = getelementptr inbounds i8, ptr %23, i64 8
  %166 = load double, ptr %165, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %161, double %164, double %166, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %167 unwind label %293

167:                                              ; preds = %163
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %160, ptr noundef nonnull %161)
          to label %168 unwind label %291

168:                                              ; preds = %167
  %169 = getelementptr inbounds i8, ptr %22, i64 16
  %170 = invoke noundef ptr @_ZN3JPH22RotatedTranslatedShapenwEm(i64 noundef 80)
          to label %171 unwind label %291

171:                                              ; preds = %168
  %172 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %173 unwind label %295

173:                                              ; preds = %171
  %174 = extractvalue { double, double } %172, 0
  %175 = extractvalue { double, double } %172, 1
  %176 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %177 unwind label %295

177:                                              ; preds = %173
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %176, float noundef 1.000000e+00, float noundef 5.000000e-01, ptr noundef null)
          to label %178 unwind label %297

178:                                              ; preds = %177
  invoke void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80) %170, double %174, double %175, double %125, double %126, ptr noundef nonnull %176)
          to label %179 unwind label %295

179:                                              ; preds = %178
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %169, ptr noundef nonnull %170)
          to label %180 unwind label %291

180:                                              ; preds = %179
  %181 = getelementptr inbounds i8, ptr %22, i64 24
  %182 = invoke noundef ptr @_ZN3JPH22RotatedTranslatedShapenwEm(i64 noundef 80)
          to label %183 unwind label %291

183:                                              ; preds = %180
  %184 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %185 unwind label %.thread172

185:                                              ; preds = %183
  %186 = extractvalue { double, double } %184, 0
  %187 = extractvalue { double, double } %184, 1
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %24) #11
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %25) #11
  invoke void @_ZN3JPH27TaperedCapsuleShapeSettingsC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(88) %25, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 5.000000e-01, ptr noundef null)
          to label %188 unwind label %.thread178

188:                                              ; preds = %185
  invoke void @_ZNK3JPH27TaperedCapsuleShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %24, ptr noundef nonnull align 8 dereferenceable(88) %25)
          to label %189 unwind label %.thread182

189:                                              ; preds = %188
  %190 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %24)
          to label %191 unwind label %303

191:                                              ; preds = %189
  %192 = call noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %190)
  invoke void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80) %182, double %186, double %187, double %125, double %126, ptr noundef %192)
          to label %193 unwind label %303

193:                                              ; preds = %191
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %181, ptr noundef nonnull %182)
          to label %194 unwind label %303

194:                                              ; preds = %193
  %195 = getelementptr inbounds i8, ptr %22, i64 32
  %196 = invoke noundef ptr @_ZN3JPH22RotatedTranslatedShapenwEm(i64 noundef 80)
          to label %197 unwind label %303

197:                                              ; preds = %194
  %198 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %199 unwind label %305

199:                                              ; preds = %197
  %200 = extractvalue { double, double } %198, 0
  %201 = extractvalue { double, double } %198, 1
  %202 = invoke noundef ptr @_ZN3JPH13CylinderShapenwEm(i64 noundef 56)
          to label %203 unwind label %305

203:                                              ; preds = %199
  invoke void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %202, float noundef 1.000000e+00, float noundef 5.000000e-01, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %204 unwind label %307

204:                                              ; preds = %203
  invoke void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80) %196, double %200, double %201, double %125, double %126, ptr noundef nonnull %202)
          to label %205 unwind label %305

205:                                              ; preds = %204
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %195, ptr noundef nonnull %196)
          to label %206 unwind label %303

206:                                              ; preds = %205
  %207 = getelementptr inbounds i8, ptr %22, i64 40
  %208 = invoke noundef ptr @_ZN3JPH22RotatedTranslatedShapenwEm(i64 noundef 80)
          to label %209 unwind label %303

209:                                              ; preds = %206
  %210 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %211 unwind label %.thread

211:                                              ; preds = %209
  %212 = extractvalue { double, double } %210, 0
  %213 = extractvalue { double, double } %210, 1
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %26) #11
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %27) #11
  invoke void @_ZN3JPH28TaperedCylinderShapeSettingsC1EffffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(96) %27, float noundef 1.000000e+00, float noundef 5.000000e-01, float noundef 1.000000e+00, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %214 unwind label %.thread164

214:                                              ; preds = %211
  invoke void @_ZNK3JPH28TaperedCylinderShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %26, ptr noundef nonnull align 8 dereferenceable(96) %27)
          to label %215 unwind label %.thread168

215:                                              ; preds = %214
  %216 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %26)
          to label %217 unwind label %313

217:                                              ; preds = %215
  %218 = call noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %216)
  invoke void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80) %208, double %212, double %213, double %125, double %126, ptr noundef %218)
          to label %219 unwind label %313

219:                                              ; preds = %217
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %207, ptr noundef nonnull %208)
          to label %220 unwind label %313

220:                                              ; preds = %219
  %221 = getelementptr inbounds i8, ptr %22, i64 48
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %28) #11
  invoke void @_ZNK3JPH23ConvexHullShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %28, ptr noundef nonnull align 8 dereferenceable(120) %15)
          to label %222 unwind label %315

222:                                              ; preds = %220
  %223 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %28)
          to label %224 unwind label %317

224:                                              ; preds = %222
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2ERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %221, ptr noundef nonnull align 8 dereferenceable(8) %223)
          to label %225 unwind label %317

225:                                              ; preds = %224
  %226 = getelementptr inbounds i8, ptr %22, i64 56
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %29) #11
  invoke void @_ZNK3JPH27StaticCompoundShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %29, ptr noundef nonnull align 8 dereferenceable(88) %19)
          to label %227 unwind label %319

227:                                              ; preds = %225
  %228 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %29)
          to label %229 unwind label %321

229:                                              ; preds = %227
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2ERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %226, ptr noundef nonnull align 8 dereferenceable(8) %228)
          to label %230 unwind label %321

230:                                              ; preds = %229
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %29) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %29) #11
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %28) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #11
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %26) #11
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %27) #11
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %26) #11
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %24) #11
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %25) #11
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %24) #11
  %231 = call noundef i64 @_ZSt4sizeIN3JPH8RefConstINS0_5ShapeEEELm8EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(64) %22) #11
  %232 = trunc i64 %231 to i32
  %233 = icmp sgt i32 %232, 0
  br i1 %233, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %230
  %234 = uitofp nneg i32 %232 to float
  %235 = fneg float %234
  %wide.trip.count = and i64 %231, 2147483647
  br label %335

._crit_edge:                                      ; preds = %345, %230
  %236 = getelementptr inbounds i8, ptr %22, i64 56
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %236) #11
  %237 = getelementptr inbounds i8, ptr %22, i64 48
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %237) #11
  %238 = getelementptr inbounds i8, ptr %22, i64 40
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %238) #11
  %239 = getelementptr inbounds i8, ptr %22, i64 32
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %239) #11
  %240 = getelementptr inbounds i8, ptr %22, i64 24
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %240) #11
  %241 = getelementptr inbounds i8, ptr %22, i64 16
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %241) #11
  %242 = getelementptr inbounds i8, ptr %22, i64 8
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %242) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #11
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %19) #11
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %19) #11
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %15) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %15) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %13) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %13) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #11
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %8) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %8) #11
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %5) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %5) #11
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %2) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %2) #11
  ret void

243:                                              ; preds = %47, %43, %41, %1
  %244 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #11
  br label %369

245:                                              ; preds = %53
  %246 = landingpad { ptr, i32 }
          cleanup
  br label %368

247:                                              ; preds = %59
  %248 = landingpad { ptr, i32 }
          cleanup
  br label %251

249:                                              ; preds = %62, %60
  %250 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #11
  br label %251

251:                                              ; preds = %249, %247
  %.pn = phi { ptr, i32 } [ %250, %249 ], [ %248, %247 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  br label %367

252:                                              ; preds = %66
  %253 = landingpad { ptr, i32 }
          cleanup
  br label %366

254:                                              ; preds = %70
  %255 = landingpad { ptr, i32 }
          cleanup
  br label %258

256:                                              ; preds = %75, %73, %71
  %257 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_22SoftBodySharedSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #11
  br label %258

258:                                              ; preds = %256, %254
  %.pn120 = phi { ptr, i32 } [ %257, %256 ], [ %255, %254 ]
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  br label %365

259:                                              ; preds = %81
  %260 = landingpad { ptr, i32 }
          cleanup
  br label %364

261:                                              ; preds = %88, %85
  %262 = landingpad { ptr, i32 }
          cleanup
  br label %363

263:                                              ; preds = %87
  %264 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %86) #11
  br label %363

265:                                              ; preds = %93, %91, %89
  %266 = landingpad { ptr, i32 }
          cleanup
  br label %362

267:                                              ; preds = %99
  %268 = landingpad { ptr, i32 }
          cleanup
  br label %361

269:                                              ; preds = %109, %107, %105, %104
  %270 = landingpad { ptr, i32 }
          cleanup
  br label %276

271:                                              ; preds = %111
  %272 = landingpad { ptr, i32 }
          cleanup
  br label %275

273:                                              ; preds = %112
  %274 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #11
  br label %275

275:                                              ; preds = %273, %271
  %.pn122 = phi { ptr, i32 } [ %274, %273 ], [ %272, %271 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #11
  br label %276

276:                                              ; preds = %275, %269
  %.pn122.pn = phi { ptr, i32 } [ %.pn122, %275 ], [ %270, %269 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #11
  br label %360

277:                                              ; preds = %113
  %278 = landingpad { ptr, i32 }
          cleanup
  br label %359

279:                                              ; preds = %115
  %280 = landingpad { ptr, i32 }
          cleanup
  br label %358

281:                                              ; preds = %116
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %357

283:                                              ; preds = %154, %149, %147, %146, %142, %137, %135, %134, %133, %128, %124, %120, %118
  %284 = landingpad { ptr, i32 }
          cleanup
  br label %357

285:                                              ; preds = %132
  %286 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %131) #11
  br label %357

287:                                              ; preds = %141
  %288 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %140) #11
  br label %357

289:                                              ; preds = %153
  %290 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %152) #11
  br label %357

291:                                              ; preds = %180, %179, %168, %167, %159, %158
  %.099 = phi ptr [ %181, %180 ], [ %169, %179 ], [ %169, %168 ], [ %160, %167 ], [ %160, %159 ], [ %22, %158 ]
  %292 = landingpad { ptr, i32 }
          cleanup
  br label %330

293:                                              ; preds = %163, %162
  %294 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %161) #11
  br label %.preheader.preheader

295:                                              ; preds = %178, %173, %171
  %296 = landingpad { ptr, i32 }
          cleanup
  br label %299

297:                                              ; preds = %177
  %298 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %176) #11
  br label %299

299:                                              ; preds = %297, %295
  %.pn125 = phi { ptr, i32 } [ %296, %295 ], [ %298, %297 ]
  call void @_ZN3JPH22RotatedTranslatedShapedlEPv(ptr noundef %170) #11
  br label %.preheader.preheader

.thread172:                                       ; preds = %183
  %300 = landingpad { ptr, i32 }
          cleanup
  br label %329

.thread178:                                       ; preds = %185
  %301 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %24) #11
  br label %329

.thread182:                                       ; preds = %188
  %302 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %25) #11
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %24) #11
  br label %329

303:                                              ; preds = %206, %205, %194, %193, %191, %189
  %.0112 = phi i1 [ false, %206 ], [ false, %205 ], [ false, %194 ], [ false, %193 ], [ true, %191 ], [ true, %189 ]
  %.1100 = phi ptr [ %207, %206 ], [ %195, %205 ], [ %195, %194 ], [ %181, %193 ], [ %181, %191 ], [ %181, %189 ]
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %328

305:                                              ; preds = %204, %199, %197
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %309

307:                                              ; preds = %203
  %308 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH13CylinderShapedlEPv(ptr noundef %202) #11
  br label %309

309:                                              ; preds = %307, %305
  %.pn127 = phi { ptr, i32 } [ %306, %305 ], [ %308, %307 ]
  call void @_ZN3JPH22RotatedTranslatedShapedlEPv(ptr noundef %196) #11
  br label %328

.thread:                                          ; preds = %209
  %310 = landingpad { ptr, i32 }
          cleanup
  br label %327

.thread164:                                       ; preds = %211
  %311 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %26) #11
  br label %327

.thread168:                                       ; preds = %214
  %312 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %27) #11
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %26) #11
  br label %327

313:                                              ; preds = %219, %217, %215
  %.094 = phi i1 [ false, %219 ], [ true, %217 ], [ true, %215 ]
  %314 = landingpad { ptr, i32 }
          cleanup
  br label %326

315:                                              ; preds = %220
  %316 = landingpad { ptr, i32 }
          cleanup
  br label %325

317:                                              ; preds = %224, %222
  %318 = landingpad { ptr, i32 }
          cleanup
  br label %324

319:                                              ; preds = %225
  %320 = landingpad { ptr, i32 }
          cleanup
  br label %323

321:                                              ; preds = %229, %227
  %322 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %29) #11
  br label %323

323:                                              ; preds = %321, %319
  %.pn129 = phi { ptr, i32 } [ %322, %321 ], [ %320, %319 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %29) #11
  br label %324

324:                                              ; preds = %323, %317
  %.2101 = phi ptr [ %226, %323 ], [ %221, %317 ]
  %.pn129.pn = phi { ptr, i32 } [ %.pn129, %323 ], [ %318, %317 ]
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %28) #11
  br label %325

325:                                              ; preds = %324, %315
  %.3102 = phi ptr [ %.2101, %324 ], [ %221, %315 ]
  %.pn129.pn.pn = phi { ptr, i32 } [ %.pn129.pn, %324 ], [ %316, %315 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #11
  br label %326

326:                                              ; preds = %313, %325
  %.4103 = phi ptr [ %.3102, %325 ], [ %207, %313 ]
  %.195 = phi i1 [ false, %325 ], [ %.094, %313 ]
  %.pn129.pn.pn.pn = phi { ptr, i32 } [ %.pn129.pn.pn, %325 ], [ %314, %313 ]
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %26) #11
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %27) #11
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %26) #11
  br i1 %.195, label %327, label %328

327:                                              ; preds = %.thread168, %.thread164, %.thread, %326
  %.pn129.pn.pn.pn.pn.pn.pn163 = phi { ptr, i32 } [ %310, %.thread ], [ %.pn129.pn.pn.pn, %326 ], [ %311, %.thread164 ], [ %312, %.thread168 ]
  %.7106162 = phi ptr [ %207, %.thread ], [ %.4103, %326 ], [ %207, %.thread164 ], [ %207, %.thread168 ]
  call void @_ZN3JPH22RotatedTranslatedShapedlEPv(ptr noundef %208) #11
  br label %328

328:                                              ; preds = %303, %309, %327, %326
  %.1113 = phi i1 [ false, %327 ], [ false, %326 ], [ %.0112, %303 ], [ false, %309 ]
  %.8107 = phi ptr [ %.7106162, %327 ], [ %.4103, %326 ], [ %.1100, %303 ], [ %195, %309 ]
  %.pn129.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn129.pn.pn.pn.pn.pn.pn163, %327 ], [ %.pn129.pn.pn.pn, %326 ], [ %304, %303 ], [ %.pn127, %309 ]
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %24) #11
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %25) #11
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %24) #11
  br i1 %.1113, label %329, label %330

329:                                              ; preds = %.thread182, %.thread178, %.thread172, %328
  %.pn129.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn177 = phi { ptr, i32 } [ %300, %.thread172 ], [ %.pn129.pn.pn.pn.pn.pn.pn.pn, %328 ], [ %301, %.thread178 ], [ %302, %.thread182 ]
  %.11110176 = phi ptr [ %181, %.thread172 ], [ %.8107, %328 ], [ %181, %.thread178 ], [ %181, %.thread182 ]
  call void @_ZN3JPH22RotatedTranslatedShapedlEPv(ptr noundef %182) #11
  br label %330

330:                                              ; preds = %328, %329, %291
  %.12111 = phi ptr [ %.11110176, %329 ], [ %.8107, %328 ], [ %.099, %291 ]
  %.pn129.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn129.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn177, %329 ], [ %.pn129.pn.pn.pn.pn.pn.pn.pn, %328 ], [ %292, %291 ]
  %331 = icmp eq ptr %22, %.12111
  br i1 %331, label %.loopexit, label %.preheader.preheader

.preheader.preheader:                             ; preds = %293, %299, %330
  %.pn129.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn194 = phi { ptr, i32 } [ %.pn129.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %330 ], [ %294, %293 ], [ %.pn125, %299 ]
  %.12111193 = phi ptr [ %.12111, %330 ], [ %160, %293 ], [ %169, %299 ]
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %332 = phi ptr [ %333, %.preheader ], [ %.12111193, %.preheader.preheader ]
  %333 = getelementptr inbounds i8, ptr %332, i64 -8
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %333) #11
  %334 = icmp eq ptr %333, %22
  br i1 %334, label %.loopexit, label %.preheader

335:                                              ; preds = %.lr.ph, %345
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %345 ]
  %336 = getelementptr inbounds [8 x %"class.JPH::RefConst"], ptr %22, i64 0, i64 %indvars.iv
  %337 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %336)
  invoke void @_ZN3JPH20BodyCreationSettings8SetShapeEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(256) %13, ptr noundef %337)
          to label %338 unwind label %346

338:                                              ; preds = %335
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #11
  %339 = trunc nuw nsw i64 %indvars.iv to i32
  %340 = uitofp nneg i32 %339 to float
  %341 = call float @llvm.fmuladd.f32(float %340, float 2.000000e+00, float %235)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %30, float noundef %341, float noundef 1.500000e+01, float noundef 0.000000e+00)
          to label %342 unwind label %348

342:                                              ; preds = %338
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %13, ptr noundef nonnull align 16 dereferenceable(16) %30, i64 16, i1 false), !tbaa.struct !41
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #11
  %343 = load ptr, ptr %56, align 8, !tbaa !22
  %344 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %343, ptr noundef nonnull align 16 dereferenceable(256) %13, i32 noundef 0)
          to label %345 unwind label %346

345:                                              ; preds = %342
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %335, !llvm.loop !43

346:                                              ; preds = %342, %335
  %347 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.loopexit

348:                                              ; preds = %338
  %349 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #11
  br label %.loopexit.loopexit

.loopexit.loopexit:                               ; preds = %348, %346
  %.pn142 = phi { ptr, i32 } [ %347, %346 ], [ %349, %348 ]
  %350 = getelementptr inbounds i8, ptr %22, i64 56
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %350) #11
  %351 = getelementptr inbounds i8, ptr %22, i64 48
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %351) #11
  %352 = getelementptr inbounds i8, ptr %22, i64 40
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %352) #11
  %353 = getelementptr inbounds i8, ptr %22, i64 32
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %353) #11
  %354 = getelementptr inbounds i8, ptr %22, i64 24
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %354) #11
  %355 = getelementptr inbounds i8, ptr %22, i64 16
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %355) #11
  %356 = getelementptr inbounds i8, ptr %22, i64 8
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %356) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader, %.loopexit.loopexit, %330
  %.pn142.pn = phi { ptr, i32 } [ %.pn129.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %330 ], [ %.pn142, %.loopexit.loopexit ], [ %.pn129.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn194, %.preheader ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #11
  br label %357

357:                                              ; preds = %283, %285, %287, %289, %.loopexit, %281
  %.pn142.pn.pn.pn = phi { ptr, i32 } [ %282, %281 ], [ %.pn142.pn, %.loopexit ], [ %284, %283 ], [ %290, %289 ], [ %288, %287 ], [ %286, %285 ]
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %19) #11
  br label %358

358:                                              ; preds = %357, %279
  %.pn142.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn, %357 ], [ %280, %279 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %19) #11
  br label %359

359:                                              ; preds = %358, %277
  %.pn142.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn, %358 ], [ %278, %277 ]
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %15) #11
  br label %360

360:                                              ; preds = %359, %276
  %.pn142.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn, %359 ], [ %.pn122.pn, %276 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %15) #11
  br label %361

361:                                              ; preds = %360, %267
  %.pn142.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn.pn, %360 ], [ %268, %267 ]
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %13) #11
  br label %362

362:                                              ; preds = %361, %265
  %.pn142.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn.pn.pn, %361 ], [ %266, %265 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %13) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #11
  br label %363

363:                                              ; preds = %362, %263, %261
  %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn.pn.pn.pn, %362 ], [ %262, %261 ], [ %264, %263 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #11
  br label %364

364:                                              ; preds = %363, %259
  %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn, %363 ], [ %260, %259 ]
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %8) #11
  br label %365

365:                                              ; preds = %364, %258
  %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %364 ], [ %.pn120, %258 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %8) #11
  br label %366

366:                                              ; preds = %365, %252
  %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %365 ], [ %253, %252 ]
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %5) #11
  br label %367

367:                                              ; preds = %366, %251
  %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %366 ], [ %.pn, %251 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %5) #11
  br label %368

368:                                              ; preds = %367, %245
  %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %367 ], [ %246, %245 ]
  call void @_ZN3JPH24SoftBodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(111) %2) #11
  br label %369

369:                                              ; preds = %368, %243
  %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %368 ], [ %244, %243 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %2) #11
  resume { ptr, i32 } %.pn142.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

; 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 } @_ZN3JPH4Vec310sReplicateEf(float noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef) local_unnamed_addr #5

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #6

declare void @_ZN15SoftBodyCreator29CreateClothWithFixatedCornersEjjf(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8, i32 noundef, i32 noundef, float noundef) local_unnamed_addr #6

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

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

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

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

declare void @_ZN3JPH22SoftBodySharedSettings11sCreateCubeEjf(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8, i32 noundef, float noundef) local_unnamed_addr #6

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

declare void @_ZN15SoftBodyCreator12CreateSphereEfjjN3JPH22SoftBodySharedSettings9EBendTypeERKNS1_16VertexAttributesE(ptr dead_on_unwind writable sret(%"class.JPH::Ref") align 8, float noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(20)) local_unnamed_addr #6

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

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

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

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

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 uwtable
declare dso_local void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr, i64, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #9 align 2

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec36sAxisXEv() local_unnamed_addr #2 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 } @_ZN3JPH4Vec35sZeroEv() local_unnamed_addr #3 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 #5 align 2

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

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

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

declare void @_ZN3JPH22RotatedTranslatedShapeC1ENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(80), double, double, double, double, ptr noundef) unnamed_addr #6

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

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: 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 nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeIN3JPH8RefConstINS0_5ShapeEEELm8EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #8

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

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

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

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

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

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

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass