; LLVM IR from jrouwe/JoltPhysics :: Samples/SamplesApp.ll (ZN10SamplesApp22CreateShootObjectShapeEv)

; 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::Result" = type <{ %union.anon.80, i8, [7 x i8] }>
%union.anon.80 = 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.0 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.0 = type { i64, [8 x i8] }
%"class.JPH::RefConst.74" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::UVec4" = type { %union.anon.87 }
%union.anon.87 = type { <2 x i64> }
%"class.JPH::Array.77" = type { i64, i64, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.JPH::STLAllocator.78" = type { i8 }
%"class.JPH::ConvexHullShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Array.77", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShapeSettings.base" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::RefConst.76", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.82", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.82" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.76" = type { ptr }
%"class.JPH::BoxShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Vec3", float, [12 x i8] }>
%"struct.JPH::AssertLastParam" = type { i8 }
%class.SamplesApp = type <{ %class.Application, i32, float, i32, [4 x i8], ptr, ptr, ptr, %class.BPLayerInterfaceImpl, %class.ObjectVsBroadPhaseLayerFilterImpl, %class.ObjectLayerPairFilterImpl, ptr, ptr, %"struct.JPH::PhysicsSettings", [4 x i8], %"class.JPH::UnorderedMap", ptr, ptr, ptr, i32, i8, [3 x i8], float, i8, i8, i8, i8, %"class.JPH::Array", i32, i32, i32, i32, i8, [15 x i8], %"class.JPH::Vec3", i8, i8, i8, i8, float, i8, i8, i8, i8, i32, i8, [3 x i8], i32, float, i8, [3 x i8], float, float, i8, [7 x i8], %"class.JPH::Vec3", i8, [7 x i8], ptr, %"class.JPH::BodyID", [4 x i8], %"class.JPH::Ref", i32, float, float, i32, %"class.std::chrono::duration.3", [8 x i8] }>
%class.Application = type { ptr, [8 x i8], %struct.CameraState, %struct.CameraState, ptr, ptr, ptr, %"class.JPH::RefConst", ptr, ptr, ptr, ptr, %"class.std::__cxx11::basic_string", %"class.std::chrono::time_point", i8, i8, i8, i8, float, float, float, float, i32 }
%struct.CameraState = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::RefConst" = type { ptr }
%"class.std::chrono::time_point" = type { %"class.std::chrono::duration" }
%"class.std::chrono::duration" = type { i64 }
%class.BPLayerInterfaceImpl = type <{ %"class.JPH::BroadPhaseLayerInterface", [2 x %"class.JPH::BroadPhaseLayer"], [6 x i8] }>
%"class.JPH::BroadPhaseLayerInterface" = type { ptr }
%"class.JPH::BroadPhaseLayer" = type { i8 }
%class.ObjectVsBroadPhaseLayerFilterImpl = type { %"class.JPH::ObjectVsBroadPhaseLayerFilter" }
%"class.JPH::ObjectVsBroadPhaseLayerFilter" = type { ptr }
%class.ObjectLayerPairFilterImpl = type { %"class.JPH::ObjectLayerPairFilter" }
%"class.JPH::ObjectLayerPairFilter" = type { ptr }
%"struct.JPH::PhysicsSettings" = type <{ i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, i32, i32, float, float, float, i8, i8, i8, i8, i8, i8, i8, i8 }>
%"class.JPH::UnorderedMap" = type { %"class.JPH::HashTable.base", [4 x i8] }
%"class.JPH::HashTable.base" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::Ref" = type { ptr }
%"class.std::chrono::duration.3" = type { i64 }

@.str.147 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.149 = external hidden unnamed_addr constant [6 x i8], align 1

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #4 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 nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) #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: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef) #7

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10SamplesApp22CreateShootObjectShapeEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::RefConst.74") align 8 %0, ptr noundef nonnull align 16 dereferenceable(712) %1) #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::Vec3", align 16
  %9 = alloca %"class.JPH::UVec4", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::UVec4", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca i1, align 1
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca %"class.JPH::Array.77", align 8
  %23 = alloca %"class.std::initializer_list", align 8
  %24 = alloca [23 x %"class.JPH::Vec3"], align 16
  %25 = alloca %"class.JPH::STLAllocator.78", align 1
  %26 = alloca float, align 4
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"class.JPH::Result", align 8
  %32 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %33 = alloca %"class.JPH::Result", align 8
  %34 = alloca %"class.JPH::BoxShapeSettings", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"struct.JPH::AssertLastParam", align 1
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  %39 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #11
  %40 = getelementptr inbounds %class.SamplesApp, ptr %39, i32 0, i32 53
  %41 = load i8, ptr %40, align 8, !tbaa !9, !range !44, !noundef !45
  %42 = trunc i8 %41 to i1
  br i1 %42, label %43, label %45

43:                                               ; preds = %2
  %44 = getelementptr inbounds %class.SamplesApp, ptr %39, i32 0, i32 55
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %5, ptr align 16 %44, i64 16, i1 false), !tbaa.struct !46
  br label %53

45:                                               ; preds = %2
  %46 = call { double, double } @_ZN3JPH4Vec34sOneEv()
  %47 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i32 0, i32 0
  %48 = getelementptr inbounds %union.anon, ptr %47, i32 0, i32 0
  %49 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 0
  %50 = extractvalue { double, double } %46, 0
  store double %50, ptr %49, align 16
  %51 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 1
  %52 = extractvalue { double, double } %46, 1
  store double %52, ptr %51, align 8
  br label %53

53:                                               ; preds = %45, %43
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #11
  %54 = call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0xBFB99999A0000000)
  %55 = getelementptr inbounds %"class.JPH::Vec3", ptr %7, i32 0, i32 0
  %56 = getelementptr inbounds %union.anon, ptr %55, i32 0, i32 0
  %57 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 0
  %58 = extractvalue { double, double } %54, 0
  store double %58, ptr %57, align 16
  %59 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 1
  %60 = extractvalue { double, double } %54, 1
  store double %60, ptr %59, align 8
  %61 = call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3FB99999A0000000)
  %62 = getelementptr inbounds %"class.JPH::Vec3", ptr %8, i32 0, i32 0
  %63 = getelementptr inbounds %union.anon, ptr %62, i32 0, i32 0
  %64 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 0
  %65 = extractvalue { double, double } %61, 0
  store double %65, ptr %64, align 16
  %66 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 1
  %67 = extractvalue { double, double } %61, 1
  store double %67, ptr %66, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %10, ptr align 16 %5, i64 16, i1 false), !tbaa.struct !46
  %68 = call { double, double } @_ZN3JPH4Vec35sZeroEv()
  %69 = getelementptr inbounds %"class.JPH::Vec3", ptr %11, i32 0, i32 0
  %70 = getelementptr inbounds %union.anon, ptr %69, i32 0, i32 0
  %71 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 0
  %72 = extractvalue { double, double } %68, 0
  store double %72, ptr %71, align 16
  %73 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 1
  %74 = extractvalue { double, double } %68, 1
  store double %74, ptr %73, align 8
  %75 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 0
  %76 = load double, ptr %75, align 16
  %77 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 1
  %78 = load double, ptr %77, align 8
  %79 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %80 = load double, ptr %79, align 16
  %81 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %82 = load double, ptr %81, align 8
  %83 = call { i64, i64 } @_ZN3JPH4Vec315sGreaterOrEqualES0_S0_(double %76, double %78, double %80, double %82)
  %84 = getelementptr inbounds %"class.JPH::UVec4", ptr %9, i32 0, i32 0
  %85 = getelementptr inbounds %union.anon.87, ptr %84, i32 0, i32 0
  %86 = getelementptr inbounds { i64, i64 }, ptr %85, i32 0, i32 0
  %87 = extractvalue { i64, i64 } %83, 0
  store i64 %87, ptr %86, align 16
  %88 = getelementptr inbounds { i64, i64 }, ptr %85, i32 0, i32 1
  %89 = extractvalue { i64, i64 } %83, 1
  store i64 %89, ptr %88, align 8
  %90 = getelementptr inbounds { double, double }, ptr %7, i32 0, i32 0
  %91 = load double, ptr %90, align 16
  %92 = getelementptr inbounds { double, double }, ptr %7, i32 0, i32 1
  %93 = load double, ptr %92, align 8
  %94 = getelementptr inbounds { double, double }, ptr %8, i32 0, i32 0
  %95 = load double, ptr %94, align 16
  %96 = getelementptr inbounds { double, double }, ptr %8, i32 0, i32 1
  %97 = load double, ptr %96, align 8
  %98 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 0
  %99 = load i64, ptr %98, align 16
  %100 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 1
  %101 = load i64, ptr %100, align 8
  %102 = call { double, double } @_ZN3JPH4Vec37sSelectES0_S0_NS_5UVec4E(double %91, double %93, double %95, double %97, i64 %99, i64 %101)
  %103 = getelementptr inbounds %"class.JPH::Vec3", ptr %6, i32 0, i32 0
  %104 = getelementptr inbounds %union.anon, ptr %103, i32 0, i32 0
  %105 = getelementptr inbounds { double, double }, ptr %104, i32 0, i32 0
  %106 = extractvalue { double, double } %102, 0
  store double %106, ptr %105, align 16
  %107 = getelementptr inbounds { double, double }, ptr %104, i32 0, i32 1
  %108 = extractvalue { double, double } %102, 1
  store double %108, ptr %107, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %13, ptr align 16 %5, i64 16, i1 false), !tbaa.struct !46
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %14, ptr align 16 %6, i64 16, i1 false), !tbaa.struct !46
  %109 = call { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16) %5)
  %110 = getelementptr inbounds %"class.JPH::Vec3", ptr %16, i32 0, i32 0
  %111 = getelementptr inbounds %union.anon, ptr %110, i32 0, i32 0
  %112 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 0
  %113 = extractvalue { double, double } %109, 0
  store double %113, ptr %112, align 16
  %114 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 1
  %115 = extractvalue { double, double } %109, 1
  store double %115, ptr %114, align 8
  %116 = call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3FB99999A0000000)
  %117 = getelementptr inbounds %"class.JPH::Vec3", ptr %17, i32 0, i32 0
  %118 = getelementptr inbounds %union.anon, ptr %117, i32 0, i32 0
  %119 = getelementptr inbounds { double, double }, ptr %118, i32 0, i32 0
  %120 = extractvalue { double, double } %116, 0
  store double %120, ptr %119, align 16
  %121 = getelementptr inbounds { double, double }, ptr %118, i32 0, i32 1
  %122 = extractvalue { double, double } %116, 1
  store double %122, ptr %121, align 8
  %123 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 0
  %124 = load double, ptr %123, align 16
  %125 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 1
  %126 = load double, ptr %125, align 8
  %127 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %128 = load double, ptr %127, align 16
  %129 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %130 = load double, ptr %129, align 8
  %131 = call { i64, i64 } @_ZN3JPH4Vec35sLessES0_S0_(double %124, double %126, double %128, double %130)
  %132 = getelementptr inbounds %"class.JPH::UVec4", ptr %15, i32 0, i32 0
  %133 = getelementptr inbounds %union.anon.87, ptr %132, i32 0, i32 0
  %134 = getelementptr inbounds { i64, i64 }, ptr %133, i32 0, i32 0
  %135 = extractvalue { i64, i64 } %131, 0
  store i64 %135, ptr %134, align 16
  %136 = getelementptr inbounds { i64, i64 }, ptr %133, i32 0, i32 1
  %137 = extractvalue { i64, i64 } %131, 1
  store i64 %137, ptr %136, align 8
  %138 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %139 = load double, ptr %138, align 16
  %140 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %141 = load double, ptr %140, align 8
  %142 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %143 = load double, ptr %142, align 16
  %144 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %145 = load double, ptr %144, align 8
  %146 = getelementptr inbounds { i64, i64 }, ptr %15, i32 0, i32 0
  %147 = load i64, ptr %146, align 16
  %148 = getelementptr inbounds { i64, i64 }, ptr %15, i32 0, i32 1
  %149 = load i64, ptr %148, align 8
  %150 = call { double, double } @_ZN3JPH4Vec37sSelectES0_S0_NS_5UVec4E(double %139, double %141, double %143, double %145, i64 %147, i64 %149)
  %151 = getelementptr inbounds %"class.JPH::Vec3", ptr %12, i32 0, i32 0
  %152 = getelementptr inbounds %union.anon, ptr %151, i32 0, i32 0
  %153 = getelementptr inbounds { double, double }, ptr %152, i32 0, i32 0
  %154 = extractvalue { double, double } %150, 0
  store double %154, ptr %153, align 16
  %155 = getelementptr inbounds { double, double }, ptr %152, i32 0, i32 1
  %156 = extractvalue { double, double } %150, 1
  store double %156, ptr %155, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %5, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !46
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #11
  store i1 false, ptr %18, align 1
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %157 = getelementptr inbounds %class.SamplesApp, ptr %39, i32 0, i32 47
  %158 = load i32, ptr %157, align 4, !tbaa !48
  switch i32 %158, label %353 [
    i32 0, label %159
    i32 1, label %190
    i32 2, label %319
    i32 3, label %345
  ]

159:                                              ; preds = %53
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #11
  %160 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %5)
          to label %161 unwind label %178

161:                                              ; preds = %159
  %162 = getelementptr inbounds %"class.JPH::Vec3", ptr %19, i32 0, i32 0
  %163 = getelementptr inbounds %union.anon, ptr %162, i32 0, i32 0
  %164 = getelementptr inbounds { double, double }, ptr %163, i32 0, i32 0
  %165 = extractvalue { double, double } %160, 0
  store double %165, ptr %164, align 16
  %166 = getelementptr inbounds { double, double }, ptr %163, i32 0, i32 1
  %167 = extractvalue { double, double } %160, 1
  store double %167, ptr %166, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %5, ptr align 16 %19, i64 16, i1 false), !tbaa.struct !46
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #11
  %168 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %169 unwind label %182

169:                                              ; preds = %161
  %170 = load ptr, ptr %39, align 16, !tbaa !49
  %171 = getelementptr inbounds ptr, ptr %170, i64 5
  %172 = load ptr, ptr %171, align 8
  %173 = invoke noundef float %172(ptr noundef nonnull align 16 dereferenceable(712) %39)
          to label %174 unwind label %186

174:                                              ; preds = %169
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %168, float noundef %173, ptr noundef null)
          to label %175 unwind label %186

175:                                              ; preds = %174
  %176 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %168)
          to label %177 unwind label %182

177:                                              ; preds = %175
  br label %353

178:                                              ; preds = %159
  %179 = landingpad { ptr, i32 }
          cleanup
  %180 = extractvalue { ptr, i32 } %179, 0
  store ptr %180, ptr %20, align 8
  %181 = extractvalue { ptr, i32 } %179, 1
  store i32 %181, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #11
  br label %388

182:                                              ; preds = %377, %368, %355, %353, %346, %175, %161
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %20, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %21, align 4
  br label %388

186:                                              ; preds = %174, %169
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %20, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %21, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %168) #11
  br label %388

190:                                              ; preds = %53
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #11
  call void @llvm.lifetime.start.p0(i64 368, ptr %24) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %24, float noundef 0xBFA6DDCE80000000, float noundef 0x3F5426FE80000000, float noundef 0x3F6FC2A880000000)
          to label %191 unwind label %260

191:                                              ; preds = %190
  %192 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 1
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %192, float noundef 0xBF99563AA0000000, float noundef 0xBFA5CAAFC0000000, float noundef 0x3F6FC2A880000000)
          to label %193 unwind label %260

193:                                              ; preds = %191
  %194 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 2
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %194, float noundef 0xBF89439DE0000000, float noundef 0xBF95942920000000, float noundef 0x3FA8D2E520000000)
          to label %195 unwind label %260

195:                                              ; preds = %193
  %196 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 3
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %196, float noundef 0x3F90739B00000000, float noundef 0x3F9CCBC060000000, float noundef 0xBFA98D0460000000)
          to label %197 unwind label %260

197:                                              ; preds = %195
  %198 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 4
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %198, float noundef 0xBF984DB9C0000000, float noundef 0x3FA6282400000000, float noundef 0xBF98BB9060000000)
          to label %199 unwind label %260

199:                                              ; preds = %197
  %200 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 5
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %200, float noundef 0x3F954FBDA0000000, float noundef 0x3FA29B49A0000000, float noundef 0xBF93FFAC20000000)
          to label %201 unwind label %260

201:                                              ; preds = %199
  %202 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 6
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %202, float noundef 0x3F8996FA80000000, float noundef 0x3F96766400000000, float noundef 0x3FA72FFD20000000)
          to label %203 unwind label %260

203:                                              ; preds = %201
  %204 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 7
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %204, float noundef 0x3F9B645A20000000, float noundef 0x3F5426FE80000000, float noundef 0x3FA93A4F80000000)
          to label %205 unwind label %260

205:                                              ; preds = %203
  %206 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 8
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %206, float noundef 0x3FA74B1EE0000000, float noundef 0x3F5426FE80000000, float noundef 0xBF969B5A60000000)
          to label %207 unwind label %260

207:                                              ; preds = %205
  %208 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %208, float noundef 0x3F96B9C300000000, float noundef 0xBFA2928180000000, float noundef 0xBF95A20DE0000000)
          to label %209 unwind label %260

209:                                              ; preds = %207
  %210 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 10
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %210, float noundef 0x3F9753E700000000, float noundef 0xBFA317CE60000000, float noundef 0x3F9E4473C0000000)
          to label %211 unwind label %260

211:                                              ; preds = %209
  %212 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %212, float noundef 0x3F8E1650A0000000, float noundef 0xBF97D6B660000000, float noundef 0x3FAB1550C0000000)
          to label %213 unwind label %260

213:                                              ; preds = %211
  %214 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 12
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %214, float noundef 0xBF88F57F80000000, float noundef 0xBF95508700000000, float noundef 0xBFA496EDE0000000)
          to label %215 unwind label %260

215:                                              ; preds = %213
  %216 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 13
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %216, float noundef 0x3F41BA3CA0000000, float noundef 0x3F5426FE80000000, float noundef 0xBFACC96460000000)
          to label %217 unwind label %260

217:                                              ; preds = %215
  %218 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 14
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %218, float noundef 0xBFA46B69E0000000, float noundef 0x3F5426FE80000000, float noundef 0xBF93ED95A0000000)
          to label %219 unwind label %260

219:                                              ; preds = %217
  %220 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 15
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %220, float noundef 0x3F41BA3CA0000000, float noundef 0x3F5426FE80000000, float noundef 0x3FACAEEA60000000)
          to label %221 unwind label %260

221:                                              ; preds = %219
  %222 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 16
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %222, float noundef 0xBF951BD620000000, float noundef 0xBFA2216400000000, float noundef 0xBF950B5240000000)
          to label %223 unwind label %260

223:                                              ; preds = %221
  %224 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 17
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %224, float noundef 0xBF93F3E040000000, float noundef 0x3FA2639500000000, float noundef 0x3F9BA62660000000)
          to label %225 unwind label %260

225:                                              ; preds = %223
  %226 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 18
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %226, float noundef 0xBF988B1140000000, float noundef 0x3FA65D39A0000000, float noundef 0x3F6FC2A880000000)
          to label %227 unwind label %260

227:                                              ; preds = %225
  %228 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 19
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %228, float noundef 0xBF94883FE0000000, float noundef 0x3F5426FE80000000, float noundef 0x3FA43EFAE0000000)
          to label %229 unwind label %260

229:                                              ; preds = %227
  %230 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 20
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %230, float noundef 0x3F9AD794A0000000, float noundef 0x3F5426FE80000000, float noundef 0xBFA4C814E0000000)
          to label %231 unwind label %260

231:                                              ; preds = %229
  %232 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 21
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %232, float noundef 0xBF861CBCC0000000, float noundef 0x3F955E6BC0000000, float noundef 0x3FA61804E0000000)
          to label %233 unwind label %260

233:                                              ; preds = %231
  %234 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i64 22
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %234, float noundef 0xBF8959A300000000, float noundef 0x3F982C6F00000000, float noundef 0xBFA4EDB300000000)
          to label %235 unwind label %260

235:                                              ; preds = %233
  %236 = getelementptr inbounds %"class.std::initializer_list", ptr %23, i32 0, i32 0
  store ptr %24, ptr %236, align 8, !tbaa !51
  %237 = getelementptr inbounds %"class.std::initializer_list", ptr %23, i32 0, i32 1
  store i64 23, ptr %237, align 8, !tbaa !53
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #11
  %238 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 0
  %239 = load ptr, ptr %238, align 8
  %240 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 1
  %241 = load i64, ptr %240, align 8
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr %239, i64 %241, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %242 unwind label %264

242:                                              ; preds = %235
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 368, ptr %24) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #11
  %243 = load ptr, ptr %39, align 16, !tbaa !49
  %244 = getelementptr inbounds ptr, ptr %243, i64 5
  %245 = load ptr, ptr %244, align 8
  %246 = invoke noundef float %245(ptr noundef nonnull align 16 dereferenceable(712) %39)
          to label %247 unwind label %269

247:                                              ; preds = %242
  %248 = fdiv float %246, 0x3FC99999A0000000
  store float %248, ptr %26, align 4, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  store ptr %22, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #11
  %249 = load ptr, ptr %27, align 8, !tbaa !5
  %250 = invoke noundef ptr @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %249)
          to label %251 unwind label %273

251:                                              ; preds = %247
  store ptr %250, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #11
  %252 = load ptr, ptr %27, align 8, !tbaa !5
  %253 = invoke noundef ptr @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %252)
          to label %254 unwind label %277

254:                                              ; preds = %251
  store ptr %253, ptr %29, align 8, !tbaa !5
  br label %255

255:                                              ; preds = %287, %254
  %256 = load ptr, ptr %28, align 8, !tbaa !5
  %257 = load ptr, ptr %29, align 8, !tbaa !5
  %258 = icmp ne ptr %256, %257
  br i1 %258, label %281, label %259

259:                                              ; preds = %255
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  br label %296

260:                                              ; preds = %233, %231, %229, %227, %225, %223, %221, %219, %217, %215, %213, %211, %209, %207, %205, %203, %201, %199, %197, %195, %193, %191, %190
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %20, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %21, align 4
  br label %268

264:                                              ; preds = %235
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %20, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #11
  br label %268

268:                                              ; preds = %264, %260
  call void @llvm.lifetime.end.p0(i64 368, ptr %24) #11
  br label %318

269:                                              ; preds = %242
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %20, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %21, align 4
  br label %317

273:                                              ; preds = %247
  %274 = landingpad { ptr, i32 }
          cleanup
  %275 = extractvalue { ptr, i32 } %274, 0
  store ptr %275, ptr %20, align 8
  %276 = extractvalue { ptr, i32 } %274, 1
  store i32 %276, ptr %21, align 4
  br label %295

277:                                              ; preds = %251
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %20, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %21, align 4
  br label %294

281:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #11
  %282 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %282, ptr %30, align 8, !tbaa !5
  %283 = load float, ptr %26, align 4, !tbaa !54
  %284 = load ptr, ptr %30, align 8, !tbaa !5
  %285 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3mLEf(ptr noundef nonnull align 16 dereferenceable(16) %284, float noundef %283)
          to label %286 unwind label %290

286:                                              ; preds = %281
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  br label %287

287:                                              ; preds = %286
  %288 = load ptr, ptr %28, align 8, !tbaa !5
  %289 = getelementptr inbounds %"class.JPH::Vec3", ptr %288, i32 1
  store ptr %289, ptr %28, align 8, !tbaa !5
  br label %255

290:                                              ; preds = %281
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %20, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  br label %294

294:                                              ; preds = %290, %277
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  br label %295

295:                                              ; preds = %294, %273
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  br label %317

296:                                              ; preds = %259
  call void @llvm.lifetime.start.p0(i64 40, ptr %31) #11
  call void @llvm.lifetime.start.p0(i64 120, ptr %32) #11
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %32, ptr noundef nonnull align 8 dereferenceable(24) %22, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %297 unwind label %303

297:                                              ; preds = %296
  invoke void @_ZNK3JPH23ConvexHullShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %31, ptr noundef nonnull align 8 dereferenceable(120) %32)
          to label %298 unwind label %307

298:                                              ; preds = %297
  %299 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %31)
          to label %300 unwind label %311

300:                                              ; preds = %298
  %301 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %299)
          to label %302 unwind label %311

302:                                              ; preds = %300
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %31) #11
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %32) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #11
  br label %353

303:                                              ; preds = %296
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %20, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %21, align 4
  br label %316

307:                                              ; preds = %297
  %308 = landingpad { ptr, i32 }
          cleanup
  %309 = extractvalue { ptr, i32 } %308, 0
  store ptr %309, ptr %20, align 8
  %310 = extractvalue { ptr, i32 } %308, 1
  store i32 %310, ptr %21, align 4
  br label %315

311:                                              ; preds = %300, %298
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %20, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %21, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %31) #11
  br label %315

315:                                              ; preds = %311, %307
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %32) #11
  br label %316

316:                                              ; preds = %315, %303
  call void @llvm.lifetime.end.p0(i64 120, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #11
  br label %317

317:                                              ; preds = %316, %295, %269
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #11
  br label %318

318:                                              ; preds = %317, %268
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #11
  br label %388

319:                                              ; preds = %53
  call void @llvm.lifetime.start.p0(i64 40, ptr %33) #11
  call void @llvm.lifetime.start.p0(i64 112, ptr %34) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %35, float noundef 0x3FA99999A0000000, float noundef 0x3FE99999A0000000, float noundef 0x3F9EB851E0000000)
          to label %320 unwind label %331

320:                                              ; preds = %319
  %321 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %322 = load double, ptr %321, align 16
  %323 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %324 = load double, ptr %323, align 8
  invoke void @_ZN3JPH16BoxShapeSettingsC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(112) %34, double %322, double %324, float noundef 0x3F8EB851E0000000, ptr noundef null)
          to label %325 unwind label %331

325:                                              ; preds = %320
  invoke void @_ZNK3JPH16BoxShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %33, ptr noundef nonnull align 16 dereferenceable(112) %34)
          to label %326 unwind label %335

326:                                              ; preds = %325
  %327 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %33)
          to label %328 unwind label %339

328:                                              ; preds = %326
  %329 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %327)
          to label %330 unwind label %339

330:                                              ; preds = %328
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %33) #11
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %34) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #11
  br label %353

331:                                              ; preds = %320, %319
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %20, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %21, align 4
  br label %344

335:                                              ; preds = %325
  %336 = landingpad { ptr, i32 }
          cleanup
  %337 = extractvalue { ptr, i32 } %336, 0
  store ptr %337, ptr %20, align 8
  %338 = extractvalue { ptr, i32 } %336, 1
  store i32 %338, ptr %21, align 4
  br label %343

339:                                              ; preds = %328, %326
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %20, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %21, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %33) #11
  br label %343

343:                                              ; preds = %339, %335
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %34) #11
  br label %344

344:                                              ; preds = %343, %331
  call void @llvm.lifetime.end.p0(i64 112, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #11
  br label %388

345:                                              ; preds = %53
  br label %346

346:                                              ; preds = %345
  %347 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.149, ptr noundef @.str.147, i32 noundef 1024)
          to label %348 unwind label %182

348:                                              ; preds = %346
  br i1 %347, label %349, label %350

349:                                              ; preds = %348
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !55
  br label %350

350:                                              ; preds = %349, %348
  br label %351

351:                                              ; preds = %350
  br label %352

352:                                              ; preds = %351
  br label %353

353:                                              ; preds = %352, %330, %302, %177, %53
  %354 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %355 unwind label %182

355:                                              ; preds = %353
  %356 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %357 = getelementptr inbounds %union.anon, 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
  %362 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %363 = load double, ptr %362, align 16
  %364 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %365 = load double, ptr %364, align 8
  %366 = invoke noundef zeroext i1 @_ZNK3JPH4Vec3neES0_(ptr noundef nonnull align 16 dereferenceable(16) %5, double %363, double %365)
          to label %367 unwind label %182

367:                                              ; preds = %355
  br i1 %366, label %368, label %384

368:                                              ; preds = %367
  %369 = invoke noundef ptr @_ZN3JPH11ScaledShapenwEm(i64 noundef 64)
          to label %370 unwind label %182

370:                                              ; preds = %368
  %371 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %372 unwind label %380

372:                                              ; preds = %370
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 %5, i64 16, i1 false), !tbaa.struct !46
  %373 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %374 = load double, ptr %373, align 16
  %375 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %376 = load double, ptr %375, align 8
  invoke void @_ZN3JPH11ScaledShapeC2EPKNS_5ShapeENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %369, ptr noundef %371, double %374, double %376)
          to label %377 unwind label %380

377:                                              ; preds = %372
  %378 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %369)
          to label %379 unwind label %182

379:                                              ; preds = %377
  br label %384

380:                                              ; preds = %372, %370
  %381 = landingpad { ptr, i32 }
          cleanup
  %382 = extractvalue { ptr, i32 } %381, 0
  store ptr %382, ptr %20, align 8
  %383 = extractvalue { ptr, i32 } %381, 1
  store i32 %383, ptr %21, align 4
  call void @_ZN3JPH11ScaledShapedlEPv(ptr noundef %369) #11
  br label %388

384:                                              ; preds = %379, %367
  store i1 true, ptr %18, align 1
  %385 = load i1, ptr %18, align 1
  br i1 %385, label %387, label %386

386:                                              ; preds = %384
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #11
  br label %387

387:                                              ; preds = %386, %384
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #11
  ret void

388:                                              ; preds = %380, %344, %318, %186, %182, %178
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #11
  br label %389

389:                                              ; preds = %388
  %390 = load ptr, ptr %20, align 8
  %391 = load i32, ptr %21, align 4
  %392 = insertvalue { ptr, i32 } poison, ptr %390, 0
  %393 = insertvalue { ptr, i32 } %392, i32 %391, 1
  resume { ptr, i32 } %393
}

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

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3mLEf(ptr noundef nonnull align 16 dereferenceable(16), float noundef) #10 align 2

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

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

; 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: alwaysinline mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Vec3neES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #1 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { 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 #8 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 632}
!10 = !{!"_ZTS10SamplesApp", !11, i64 0, !22, i64 272, !14, i64 276, !22, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !23, i64 312, !25, i64 328, !27, i64 336, !6, i64 344, !6, i64 352, !29, i64 360, !30, i64 448, !6, i64 480, !6, i64 488, !6, i64 496, !22, i64 504, !21, i64 508, !14, i64 512, !21, i64 516, !21, i64 517, !21, i64 518, !21, i64 519, !32, i64 520, !33, i64 544, !22, i64 548, !34, i64 552, !35, i64 556, !21, i64 560, !13, i64 576, !36, i64 592, !36, i64 593, !37, i64 594, !38, i64 595, !14, i64 596, !21, i64 600, !21, i64 601, !21, i64 602, !21, i64 603, !22, i64 604, !21, i64 608, !39, i64 612, !14, i64 616, !40, i64 620, !14, i64 624, !14, i64 628, !21, i64 632, !13, i64 640, !21, i64 656, !6, i64 664, !41, i64 672, !42, i64 680, !22, i64 688, !14, i64 692, !14, i64 696, !22, i64 700, !43, i64 704}
!11 = !{!"_ZTS11Application", !12, i64 16, !12, i64 80, !6, i64 144, !6, i64 152, !6, i64 160, !15, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !16, i64 208, !19, i64 240, !21, i64 248, !21, i64 249, !21, i64 250, !21, i64 251, !14, i64 252, !14, i64 256, !14, i64 260, !14, i64 264, !22, i64 268}
!12 = !{!"_ZTS11CameraState", !13, i64 0, !13, i64 16, !13, i64 32, !14, i64 48}
!13 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!"_ZTSN3JPH8RefConstI4FontEE", !6, i64 0}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !17, i64 0, !18, i64 8, !7, i64 16}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !6, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !20, i64 0}
!20 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !18, i64 0}
!21 = !{!"bool", !7, i64 0}
!22 = !{!"int", !7, i64 0}
!23 = !{!"_ZTS20BPLayerInterfaceImpl", !24, i64 0, !7, i64 8}
!24 = !{!"_ZTSN3JPH24BroadPhaseLayerInterfaceE"}
!25 = !{!"_ZTS33ObjectVsBroadPhaseLayerFilterImpl", !26, i64 0}
!26 = !{!"_ZTSN3JPH29ObjectVsBroadPhaseLayerFilterE"}
!27 = !{!"_ZTS25ObjectLayerPairFilterImpl", !28, i64 0}
!28 = !{!"_ZTSN3JPH21ObjectLayerPairFilterE"}
!29 = !{!"_ZTSN3JPH15PhysicsSettingsE", !22, i64 0, !22, i64 4, !22, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !14, i64 44, !14, i64 48, !14, i64 52, !22, i64 56, !22, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !21, i64 76, !21, i64 77, !21, i64 78, !21, i64 79, !21, i64 80, !21, i64 81, !21, i64 82}
!30 = !{!"_ZTSN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEE", !31, i64 0}
!31 = !{!"_ZTSN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EEE", !6, i64 0, !6, i64 8, !22, i64 16, !22, i64 20, !22, i64 24}
!32 = !{!"_ZTSN3JPH5ArrayIN10SamplesApp13PlayBackFrameENS_12STLAllocatorIS2_EEEE", !18, i64 0, !18, i64 8, !6, i64 16}
!33 = !{!"_ZTSN10SamplesApp13EPlaybackModeE", !7, i64 0}
!34 = !{!"_ZTSN10SamplesApp10EProbeModeE", !7, i64 0}
!35 = !{!"_ZTSN10SamplesApp11EProbeShapeE", !7, i64 0}
!36 = !{!"_ZTSN3JPH13EBackFaceModeE", !7, i64 0}
!37 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !7, i64 0}
!38 = !{!"_ZTSN3JPH17ECollectFacesModeE", !7, i64 0}
!39 = !{!"_ZTSN10SamplesApp17EShootObjectShapeE", !7, i64 0}
!40 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!41 = !{!"_ZTSN3JPH6BodyIDE", !22, i64 0}
!42 = !{!"_ZTSN3JPH3RefINS_10ConstraintEEE", !6, i64 0}
!43 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000EEEE", !18, i64 0}
!44 = !{i8 0, i8 2}
!45 = !{}
!46 = !{i64 0, i64 16, !47}
!47 = !{!7, !7, i64 0}
!48 = !{!10, !39, i64 612}
!49 = !{!50, !50, i64 0}
!50 = !{!"vtable pointer", !8, i64 0}
!51 = !{!52, !6, i64 0}
!52 = !{!"_ZTSSt16initializer_listIN3JPH4Vec3EE", !6, i64 0, !18, i64 8}
!53 = !{!52, !18, i64 8}
!54 = !{!14, !14, i64 0}
!55 = !{i64 2161775576}


; 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::Result" = type <{ %union.anon.80, i8, [7 x i8] }>
%union.anon.80 = 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.0 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.0 = type { i64, [8 x i8] }
%"class.JPH::RefConst.74" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Array.77" = type { i64, i64, ptr }
%"class.JPH::STLAllocator.78" = type { i8 }
%"class.JPH::ConvexHullShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Array.77", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShapeSettings.base" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::RefConst.76", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.82", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.82" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.76" = type { ptr }
%"class.JPH::BoxShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Vec3", float, [12 x i8] }>

@.str.147 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.149 = external hidden unnamed_addr constant [6 x i8], align 1

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #7

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10SamplesApp22CreateShootObjectShapeEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::RefConst.74") align 8 %0, ptr noundef nonnull align 16 dereferenceable(712) %1) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::Array.77", align 8
  %5 = alloca [23 x %"class.JPH::Vec3"], align 16
  %6 = alloca %"class.JPH::STLAllocator.78", align 1
  %7 = alloca %"class.JPH::Result", align 8
  %8 = alloca %"class.JPH::ConvexHullShapeSettings", align 8
  %9 = alloca %"class.JPH::Result", align 8
  %10 = alloca %"class.JPH::BoxShapeSettings", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #11
  %12 = getelementptr inbounds i8, ptr %1, i64 632
  %13 = load i8, ptr %12, align 8, !tbaa !5, !range !43, !noundef !44
  %14 = trunc nuw i8 %13 to i1
  %.sroa.229.0..sroa_idx.phi.trans.insert = getelementptr inbounds i8, ptr %3, i64 8
  br i1 %14, label %15, label %17

15:                                               ; preds = %2
  %16 = getelementptr inbounds i8, ptr %1, i64 640
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %3, ptr noundef nonnull align 16 dereferenceable(16) %16, i64 16, i1 false), !tbaa.struct !45
  %.sroa.028.0.copyload.pre = load double, ptr %3, align 16
  %.sroa.229.0.copyload.pre = load double, ptr %.sroa.229.0..sroa_idx.phi.trans.insert, align 8, !tbaa !46
  br label %21

17:                                               ; preds = %2
  %18 = tail call { double, double } @_ZN3JPH4Vec34sOneEv()
  %19 = extractvalue { double, double } %18, 0
  store double %19, ptr %3, align 16
  %20 = extractvalue { double, double } %18, 1
  store double %20, ptr %.sroa.229.0..sroa_idx.phi.trans.insert, align 8
  br label %21

21:                                               ; preds = %17, %15
  %.sroa.224.0.copyload = phi double [ %20, %17 ], [ %.sroa.229.0.copyload.pre, %15 ]
  %.sroa.023.0.copyload = phi double [ %19, %17 ], [ %.sroa.028.0.copyload.pre, %15 ]
  %22 = tail call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0xBFB99999A0000000)
  %23 = extractvalue { double, double } %22, 0
  %24 = extractvalue { double, double } %22, 1
  %25 = tail call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3FB99999A0000000)
  %26 = extractvalue { double, double } %25, 0
  %27 = extractvalue { double, double } %25, 1
  %.sroa.229.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 8
  %28 = tail call { double, double } @_ZN3JPH4Vec35sZeroEv()
  %29 = extractvalue { double, double } %28, 0
  %30 = extractvalue { double, double } %28, 1
  %31 = tail call { i64, i64 } @_ZN3JPH4Vec315sGreaterOrEqualES0_S0_(double %.sroa.023.0.copyload, double %.sroa.224.0.copyload, double %29, double %30)
  %32 = extractvalue { i64, i64 } %31, 0
  %33 = extractvalue { i64, i64 } %31, 1
  %34 = tail call { double, double } @_ZN3JPH4Vec37sSelectES0_S0_NS_5UVec4E(double %23, double %24, double %26, double %27, i64 %32, i64 %33)
  %35 = extractvalue { double, double } %34, 0
  %36 = extractvalue { double, double } %34, 1
  %37 = call { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16) %3)
  %38 = extractvalue { double, double } %37, 0
  %39 = extractvalue { double, double } %37, 1
  %40 = call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3FB99999A0000000)
  %41 = extractvalue { double, double } %40, 0
  %42 = extractvalue { double, double } %40, 1
  %43 = call { i64, i64 } @_ZN3JPH4Vec35sLessES0_S0_(double %38, double %39, double %41, double %42)
  %44 = extractvalue { i64, i64 } %43, 0
  %45 = extractvalue { i64, i64 } %43, 1
  %46 = call { double, double } @_ZN3JPH4Vec37sSelectES0_S0_NS_5UVec4E(double %.sroa.023.0.copyload, double %.sroa.224.0.copyload, double %35, double %36, i64 %44, i64 %45)
  %47 = extractvalue { double, double } %46, 0
  %48 = extractvalue { double, double } %46, 1
  store double %47, ptr %3, align 16
  store double %48, ptr %.sroa.229.0..sroa_idx, align 8, !tbaa !46
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %49 = getelementptr inbounds i8, ptr %1, i64 612
  %50 = load i32, ptr %49, align 4, !tbaa !47
  switch i32 %50, label %174 [
    i32 0, label %51
    i32 1, label %71
    i32 2, label %151
    i32 3, label %170
  ]

51:                                               ; preds = %21
  %52 = invoke { double, double } @_ZNK3JPH4Vec37SwizzleILj0ELj0ELj0EEES0_v(ptr noundef nonnull align 16 dereferenceable(16) %3)
          to label %53 unwind label %65

53:                                               ; preds = %51
  %54 = extractvalue { double, double } %52, 0
  %55 = extractvalue { double, double } %52, 1
  store double %54, ptr %3, align 16
  store double %55, ptr %.sroa.229.0..sroa_idx, align 8, !tbaa !46
  %56 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %57 unwind label %67

57:                                               ; preds = %53
  %58 = load ptr, ptr %1, align 16, !tbaa !48
  %59 = getelementptr inbounds i8, ptr %58, i64 40
  %60 = load ptr, ptr %59, align 8
  %61 = invoke noundef float %60(ptr noundef nonnull align 16 dereferenceable(712) %1)
          to label %62 unwind label %69

62:                                               ; preds = %57
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %56, float noundef %61, ptr noundef null)
          to label %63 unwind label %69

63:                                               ; preds = %62
  %64 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %56)
          to label %174 unwind label %67

65:                                               ; preds = %51
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %190

67:                                               ; preds = %185, %181, %176, %174, %170, %63, %53
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %190

69:                                               ; preds = %62, %57
  %70 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %56) #11
  br label %190

71:                                               ; preds = %21
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #11
  call void @llvm.lifetime.start.p0(i64 368, ptr nonnull %5) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %5, float noundef 0xBFA6DDCE80000000, float noundef 0x3F5426FE80000000, float noundef 0x3F6FC2A880000000)
          to label %72 unwind label %126

72:                                               ; preds = %71
  %73 = getelementptr inbounds i8, ptr %5, i64 16
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %73, float noundef 0xBF99563AA0000000, float noundef 0xBFA5CAAFC0000000, float noundef 0x3F6FC2A880000000)
          to label %74 unwind label %126

74:                                               ; preds = %72
  %75 = getelementptr inbounds i8, ptr %5, i64 32
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %75, float noundef 0xBF89439DE0000000, float noundef 0xBF95942920000000, float noundef 0x3FA8D2E520000000)
          to label %76 unwind label %126

76:                                               ; preds = %74
  %77 = getelementptr inbounds i8, ptr %5, i64 48
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %77, float noundef 0x3F90739B00000000, float noundef 0x3F9CCBC060000000, float noundef 0xBFA98D0460000000)
          to label %78 unwind label %126

78:                                               ; preds = %76
  %79 = getelementptr inbounds i8, ptr %5, i64 64
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %79, float noundef 0xBF984DB9C0000000, float noundef 0x3FA6282400000000, float noundef 0xBF98BB9060000000)
          to label %80 unwind label %126

80:                                               ; preds = %78
  %81 = getelementptr inbounds i8, ptr %5, i64 80
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %81, float noundef 0x3F954FBDA0000000, float noundef 0x3FA29B49A0000000, float noundef 0xBF93FFAC20000000)
          to label %82 unwind label %126

82:                                               ; preds = %80
  %83 = getelementptr inbounds i8, ptr %5, i64 96
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %83, float noundef 0x3F8996FA80000000, float noundef 0x3F96766400000000, float noundef 0x3FA72FFD20000000)
          to label %84 unwind label %126

84:                                               ; preds = %82
  %85 = getelementptr inbounds i8, ptr %5, i64 112
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %85, float noundef 0x3F9B645A20000000, float noundef 0x3F5426FE80000000, float noundef 0x3FA93A4F80000000)
          to label %86 unwind label %126

86:                                               ; preds = %84
  %87 = getelementptr inbounds i8, ptr %5, i64 128
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %87, float noundef 0x3FA74B1EE0000000, float noundef 0x3F5426FE80000000, float noundef 0xBF969B5A60000000)
          to label %88 unwind label %126

88:                                               ; preds = %86
  %89 = getelementptr inbounds i8, ptr %5, i64 144
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %89, float noundef 0x3F96B9C300000000, float noundef 0xBFA2928180000000, float noundef 0xBF95A20DE0000000)
          to label %90 unwind label %126

90:                                               ; preds = %88
  %91 = getelementptr inbounds i8, ptr %5, i64 160
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %91, float noundef 0x3F9753E700000000, float noundef 0xBFA317CE60000000, float noundef 0x3F9E4473C0000000)
          to label %92 unwind label %126

92:                                               ; preds = %90
  %93 = getelementptr inbounds i8, ptr %5, i64 176
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %93, float noundef 0x3F8E1650A0000000, float noundef 0xBF97D6B660000000, float noundef 0x3FAB1550C0000000)
          to label %94 unwind label %126

94:                                               ; preds = %92
  %95 = getelementptr inbounds i8, ptr %5, i64 192
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %95, float noundef 0xBF88F57F80000000, float noundef 0xBF95508700000000, float noundef 0xBFA496EDE0000000)
          to label %96 unwind label %126

96:                                               ; preds = %94
  %97 = getelementptr inbounds i8, ptr %5, i64 208
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %97, float noundef 0x3F41BA3CA0000000, float noundef 0x3F5426FE80000000, float noundef 0xBFACC96460000000)
          to label %98 unwind label %126

98:                                               ; preds = %96
  %99 = getelementptr inbounds i8, ptr %5, i64 224
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %99, float noundef 0xBFA46B69E0000000, float noundef 0x3F5426FE80000000, float noundef 0xBF93ED95A0000000)
          to label %100 unwind label %126

100:                                              ; preds = %98
  %101 = getelementptr inbounds i8, ptr %5, i64 240
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %101, float noundef 0x3F41BA3CA0000000, float noundef 0x3F5426FE80000000, float noundef 0x3FACAEEA60000000)
          to label %102 unwind label %126

102:                                              ; preds = %100
  %103 = getelementptr inbounds i8, ptr %5, i64 256
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %103, float noundef 0xBF951BD620000000, float noundef 0xBFA2216400000000, float noundef 0xBF950B5240000000)
          to label %104 unwind label %126

104:                                              ; preds = %102
  %105 = getelementptr inbounds i8, ptr %5, i64 272
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %105, float noundef 0xBF93F3E040000000, float noundef 0x3FA2639500000000, float noundef 0x3F9BA62660000000)
          to label %106 unwind label %126

106:                                              ; preds = %104
  %107 = getelementptr inbounds i8, ptr %5, i64 288
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %107, float noundef 0xBF988B1140000000, float noundef 0x3FA65D39A0000000, float noundef 0x3F6FC2A880000000)
          to label %108 unwind label %126

108:                                              ; preds = %106
  %109 = getelementptr inbounds i8, ptr %5, i64 304
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %109, float noundef 0xBF94883FE0000000, float noundef 0x3F5426FE80000000, float noundef 0x3FA43EFAE0000000)
          to label %110 unwind label %126

110:                                              ; preds = %108
  %111 = getelementptr inbounds i8, ptr %5, i64 320
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %111, float noundef 0x3F9AD794A0000000, float noundef 0x3F5426FE80000000, float noundef 0xBFA4C814E0000000)
          to label %112 unwind label %126

112:                                              ; preds = %110
  %113 = getelementptr inbounds i8, ptr %5, i64 336
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %113, float noundef 0xBF861CBCC0000000, float noundef 0x3F955E6BC0000000, float noundef 0x3FA61804E0000000)
          to label %114 unwind label %126

114:                                              ; preds = %112
  %115 = getelementptr inbounds i8, ptr %5, i64 352
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %115, float noundef 0xBF8959A300000000, float noundef 0x3F982C6F00000000, float noundef 0xBFA4EDB300000000)
          to label %116 unwind label %126

116:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #11
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2ESt16initializer_listIS1_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr nonnull %5, i64 23, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %117 unwind label %128

117:                                              ; preds = %116
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 368, ptr nonnull %5) #11
  %118 = load ptr, ptr %1, align 16, !tbaa !48
  %119 = getelementptr inbounds i8, ptr %118, i64 40
  %120 = load ptr, ptr %119, align 8
  %121 = invoke noundef float %120(ptr noundef nonnull align 16 dereferenceable(712) %1)
          to label %122 unwind label %131

122:                                              ; preds = %117
  %123 = fdiv float %121, 0x3FC99999A0000000
  %124 = call noundef ptr @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %125 = call noundef ptr @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %.not59 = icmp eq ptr %124, %125
  br i1 %.not59, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %122
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #11
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %8) #11
  invoke void @_ZN3JPH23ConvexHullShapeSettingsC2ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEEfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(120) %8, ptr noundef nonnull align 8 dereferenceable(24) %4, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %135 unwind label %141

126:                                              ; preds = %114, %112, %110, %108, %106, %104, %102, %100, %98, %96, %94, %92, %90, %88, %86, %84, %82, %80, %78, %76, %74, %72, %71
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %130

128:                                              ; preds = %116
  %129 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #11
  br label %130

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

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

.lr.ph:                                           ; preds = %122, %.lr.ph
  %.04760 = phi ptr [ %134, %.lr.ph ], [ %124, %122 ]
  %133 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3mLEf(ptr noundef nonnull align 16 dereferenceable(16) %.04760, float noundef %123)
  %134 = getelementptr inbounds i8, ptr %.04760, i64 16
  %.not = icmp eq ptr %134, %125
  br i1 %.not, label %._crit_edge, label %.lr.ph

135:                                              ; preds = %._crit_edge
  invoke void @_ZNK3JPH23ConvexHullShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %7, ptr noundef nonnull align 8 dereferenceable(120) %8)
          to label %136 unwind label %143

136:                                              ; preds = %135
  %137 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %7)
          to label %138 unwind label %145

138:                                              ; preds = %136
  %139 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %137)
          to label %140 unwind label %145

140:                                              ; preds = %138
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %7) #11
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %8) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #11
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #11
  br label %174

141:                                              ; preds = %._crit_edge
  %142 = landingpad { ptr, i32 }
          cleanup
  br label %148

143:                                              ; preds = %135
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %147

145:                                              ; preds = %138, %136
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %7) #11
  br label %147

147:                                              ; preds = %145, %143
  %.pn52 = phi { ptr, i32 } [ %146, %145 ], [ %144, %143 ]
  call void @_ZN3JPH23ConvexHullShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %8) #11
  br label %148

148:                                              ; preds = %147, %141
  %.pn52.pn = phi { ptr, i32 } [ %.pn52, %147 ], [ %142, %141 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #11
  br label %149

149:                                              ; preds = %148, %131
  %.pn52.pn.pn = phi { ptr, i32 } [ %.pn52.pn, %148 ], [ %132, %131 ]
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  br label %150

150:                                              ; preds = %149, %130
  %.pn52.pn.pn.pn = phi { ptr, i32 } [ %.pn52.pn.pn, %149 ], [ %.pn50, %130 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #11
  br label %190

151:                                              ; preds = %21
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %9) #11
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %10) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef 0x3FA99999A0000000, float noundef 0x3FE99999A0000000, float noundef 0x3F9EB851E0000000)
          to label %152 unwind label %162

152:                                              ; preds = %151
  %153 = load double, ptr %11, align 16
  %154 = getelementptr inbounds i8, ptr %11, i64 8
  %155 = load double, ptr %154, align 8
  invoke void @_ZN3JPH16BoxShapeSettingsC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(112) %10, double %153, double %155, float noundef 0x3F8EB851E0000000, ptr noundef null)
          to label %156 unwind label %162

156:                                              ; preds = %152
  invoke void @_ZNK3JPH16BoxShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %9, ptr noundef nonnull align 16 dereferenceable(112) %10)
          to label %157 unwind label %164

157:                                              ; preds = %156
  %158 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %9)
          to label %159 unwind label %166

159:                                              ; preds = %157
  %160 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSERKNS_3RefIS1_EE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %158)
          to label %161 unwind label %166

161:                                              ; preds = %159
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %9) #11
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %10) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #11
  br label %174

162:                                              ; preds = %152, %151
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %169

164:                                              ; preds = %156
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %168

166:                                              ; preds = %159, %157
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %9) #11
  br label %168

168:                                              ; preds = %166, %164
  %.pn = phi { ptr, i32 } [ %167, %166 ], [ %165, %164 ]
  call void @_ZN3JPH19ConvexShapeSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %10) #11
  br label %169

169:                                              ; preds = %168, %162
  %.pn.pn = phi { ptr, i32 } [ %.pn, %168 ], [ %163, %162 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #11
  br label %190

170:                                              ; preds = %21
  %171 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.149, ptr noundef nonnull @.str.147, i32 noundef 1024)
          to label %172 unwind label %67

172:                                              ; preds = %170
  br i1 %171, label %173, label %174

173:                                              ; preds = %172
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !50
  br label %174

174:                                              ; preds = %172, %173, %63, %161, %140, %21
  %175 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %176 unwind label %67

176:                                              ; preds = %174
  %177 = extractvalue { double, double } %175, 0
  %178 = extractvalue { double, double } %175, 1
  %179 = invoke noundef zeroext i1 @_ZNK3JPH4Vec3neES0_(ptr noundef nonnull align 16 dereferenceable(16) %3, double %177, double %178)
          to label %180 unwind label %67

180:                                              ; preds = %176
  br i1 %179, label %181, label %189

181:                                              ; preds = %180
  %182 = invoke noundef ptr @_ZN3JPH11ScaledShapenwEm(i64 noundef 64)
          to label %183 unwind label %67

183:                                              ; preds = %181
  %184 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %.sroa.0.0.copyload = load double, ptr %3, align 16
  %.sroa.2.0.copyload = load double, ptr %.sroa.229.0..sroa_idx, align 8, !tbaa !46
  invoke void @_ZN3JPH11ScaledShapeC2EPKNS_5ShapeENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %182, ptr noundef %184, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload)
          to label %185 unwind label %187

185:                                              ; preds = %183
  %186 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %182)
          to label %189 unwind label %67

187:                                              ; preds = %183
  %188 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ScaledShapedlEPv(ptr noundef %182) #11
  br label %190

189:                                              ; preds = %180, %185
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #11
  ret void

190:                                              ; preds = %187, %169, %150, %69, %67, %65
  %.pn57 = phi { ptr, i32 } [ %68, %67 ], [ %188, %187 ], [ %.pn.pn, %169 ], [ %.pn52.pn.pn.pn, %150 ], [ %70, %69 ], [ %66, %65 ]
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #11
  resume { ptr, i32 } %.pn57
}

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

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3mLEf(ptr noundef nonnull align 16 dereferenceable(16), float noundef) local_unnamed_addr #10 align 2

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

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

; 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: alwaysinline mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Vec3neES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #1 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { 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 #8 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 632}
!6 = !{!"_ZTS10SamplesApp", !7, i64 0, !21, i64 272, !12, i64 276, !21, i64 280, !13, i64 288, !13, i64 296, !13, i64 304, !22, i64 312, !24, i64 328, !26, i64 336, !13, i64 344, !13, i64 352, !28, i64 360, !29, i64 448, !13, i64 480, !13, i64 488, !13, i64 496, !21, i64 504, !20, i64 508, !12, i64 512, !20, i64 516, !20, i64 517, !20, i64 518, !20, i64 519, !31, i64 520, !32, i64 544, !21, i64 548, !33, i64 552, !34, i64 556, !20, i64 560, !9, i64 576, !35, i64 592, !35, i64 593, !36, i64 594, !37, i64 595, !12, i64 596, !20, i64 600, !20, i64 601, !20, i64 602, !20, i64 603, !21, i64 604, !20, i64 608, !38, i64 612, !12, i64 616, !39, i64 620, !12, i64 624, !12, i64 628, !20, i64 632, !9, i64 640, !20, i64 656, !13, i64 664, !40, i64 672, !41, i64 680, !21, i64 688, !12, i64 692, !12, i64 696, !21, i64 700, !42, i64 704}
!7 = !{!"_ZTS11Application", !8, i64 16, !8, i64 80, !13, i64 144, !13, i64 152, !13, i64 160, !14, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !13, i64 200, !15, i64 208, !18, i64 240, !20, i64 248, !20, i64 249, !20, i64 250, !20, i64 251, !12, i64 252, !12, i64 256, !12, i64 260, !12, i64 264, !21, i64 268}
!8 = !{!"_ZTS11CameraState", !9, i64 0, !9, i64 16, !9, i64 32, !12, i64 48}
!9 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"float", !10, i64 0}
!13 = !{!"any pointer", !10, i64 0}
!14 = !{!"_ZTSN3JPH8RefConstI4FontEE", !13, i64 0}
!15 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !16, i64 0, !17, i64 8, !10, i64 16}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !13, i64 0}
!17 = !{!"long", !10, i64 0}
!18 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !19, i64 0}
!19 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !17, i64 0}
!20 = !{!"bool", !10, i64 0}
!21 = !{!"int", !10, i64 0}
!22 = !{!"_ZTS20BPLayerInterfaceImpl", !23, i64 0, !10, i64 8}
!23 = !{!"_ZTSN3JPH24BroadPhaseLayerInterfaceE"}
!24 = !{!"_ZTS33ObjectVsBroadPhaseLayerFilterImpl", !25, i64 0}
!25 = !{!"_ZTSN3JPH29ObjectVsBroadPhaseLayerFilterE"}
!26 = !{!"_ZTS25ObjectLayerPairFilterImpl", !27, i64 0}
!27 = !{!"_ZTSN3JPH21ObjectLayerPairFilterE"}
!28 = !{!"_ZTSN3JPH15PhysicsSettingsE", !21, i64 0, !21, i64 4, !21, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !21, i64 56, !21, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !20, i64 76, !20, i64 77, !20, i64 78, !20, i64 79, !20, i64 80, !20, i64 81, !20, i64 82}
!29 = !{!"_ZTSN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEE", !30, i64 0}
!30 = !{!"_ZTSN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EEE", !13, i64 0, !13, i64 8, !21, i64 16, !21, i64 20, !21, i64 24}
!31 = !{!"_ZTSN3JPH5ArrayIN10SamplesApp13PlayBackFrameENS_12STLAllocatorIS2_EEEE", !17, i64 0, !17, i64 8, !13, i64 16}
!32 = !{!"_ZTSN10SamplesApp13EPlaybackModeE", !10, i64 0}
!33 = !{!"_ZTSN10SamplesApp10EProbeModeE", !10, i64 0}
!34 = !{!"_ZTSN10SamplesApp11EProbeShapeE", !10, i64 0}
!35 = !{!"_ZTSN3JPH13EBackFaceModeE", !10, i64 0}
!36 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !10, i64 0}
!37 = !{!"_ZTSN3JPH17ECollectFacesModeE", !10, i64 0}
!38 = !{!"_ZTSN10SamplesApp17EShootObjectShapeE", !10, i64 0}
!39 = !{!"_ZTSN3JPH14EMotionQualityE", !10, i64 0}
!40 = !{!"_ZTSN3JPH6BodyIDE", !21, i64 0}
!41 = !{!"_ZTSN3JPH3RefINS_10ConstraintEEE", !13, i64 0}
!42 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000EEEE", !17, i64 0}
!43 = !{i8 0, i8 2}
!44 = !{}
!45 = !{i64 0, i64 16, !46}
!46 = !{!10, !10, i64 0}
!47 = !{!6, !38, i64 612}
!48 = !{!49, !49, i64 0}
!49 = !{!"vtable pointer", !11, i64 0}
!50 = !{i64 2161775576}


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