; LLVM IR from Try/Tempest :: Engine/thirdparty/spirv_cross (spirv_msl)

; 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.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::allocator.71" = type { i8 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 x i8] }>
%"class.spirv_cross::CompilerMSL" = type <{ %"class.spirv_cross::CompilerGLSL", %"class.std::unordered_map.277", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, [2 x i8], %"struct.spirv_cross::CompilerMSL::Options", %"class.std::set", %"class.std::map", %"class.std::unordered_map.299", %"class.std::map", %"class.std::unordered_map.299", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.213", %"class.std::unordered_map.213", %"class.std::unordered_map.213", %"class.std::set.313", %"class.std::set.313", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.319", %"class.std::unordered_map.336", i32, i32, i32, [8 x i32], %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, [4 x i8], %"class.std::map.351", %"class.std::unordered_map.357", %"class.std::unordered_set", %"class.spirv_cross::SmallVector.374", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::SmallVector.377", %"class.std::map.380", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_set.386", [8 x i32], i32, i32, i8, i8, [6 x i8] }>
%"class.spirv_cross::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.159", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_map.185", %"class.std::unordered_map.145", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.199", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.27", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.227", i32, i32, i32, i8, i8, %"class.std::vector.230", %"class.std::vector.230", %"class.std::vector.235", %"class.std::vector.240", %"class.std::unordered_map.213", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.245", %"class.std::unordered_set", ptr, %"class.std::unordered_map.263" }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_set.245" = type { %"class.std::_Hashtable.246" }
%"class.std::_Hashtable.246" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.263" = type { %"class.std::_Hashtable.264" }
%"class.std::_Hashtable.264" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.277" = type { %"class.std::_Hashtable.278" }
%"class.std::_Hashtable.278" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerMSL::Options" = type <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8], i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8] }>
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<spirv_cross::CompilerMSL::SPVFuncImpl, spirv_cross::CompilerMSL::SPVFuncImpl, std::_Identity<spirv_cross::CompilerMSL::SPVFuncImpl>, std::less<spirv_cross::CompilerMSL::SPVFuncImpl>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::CompilerMSL::SPVFuncImpl, spirv_cross::CompilerMSL::SPVFuncImpl, std::_Identity<spirv_cross::CompilerMSL::SPVFuncImpl>, std::less<spirv_cross::CompilerMSL::SPVFuncImpl>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map" = type { %"class.std::_Rb_tree.294" }
%"class.std::_Rb_tree.294" = type { %"struct.std::_Rb_tree<spirv_cross::LocationComponentPair, std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>, std::_Select1st<std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>>, std::less<spirv_cross::LocationComponentPair>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::LocationComponentPair, std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>, std::_Select1st<std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>>, std::less<spirv_cross::LocationComponentPair>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.299" = type { %"class.std::_Hashtable.300" }
%"class.std::_Hashtable.300" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.213" = type { %"class.std::_Hashtable.214" }
%"class.std::_Hashtable.214" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::set.313" = type { %"class.std::_Rb_tree.314" }
%"class.std::_Rb_tree.314" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.319" = type { %"class.std::_Hashtable.320" }
%"class.std::_Hashtable.320" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.336" = type { %"class.std::_Hashtable.337" }
%"class.std::_Hashtable.337" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.std::map.351" = type { %"class.std::_Rb_tree.352" }
%"class.std::_Rb_tree.352" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.357" = type { %"class.std::_Hashtable.358" }
%"class.std::_Hashtable.358" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.374" = type { %"class.spirv_cross::VectorView.375", i64, %"class.spirv_cross::AlignedBuffer.376" }
%"class.spirv_cross::VectorView.375" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.376" = type { [64 x i8] }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.377" = type { %"class.spirv_cross::VectorView.378", i64, %"class.spirv_cross::AlignedBuffer.379" }
%"class.spirv_cross::VectorView.378" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.379" = type { [64 x i8] }
%"class.std::map.380" = type { %"class.std::_Rb_tree.381" }
%"class.std::_Rb_tree.381" = type { %"struct.std::_Rb_tree<spirv_cross::SetBindingPair, std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>, std::_Select1st<std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>>, std::less<spirv_cross::SetBindingPair>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::SetBindingPair, std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>, std::_Select1st<std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>>, std::less<spirv_cross::SetBindingPair>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_set.386" = type { %"class.std::_Hashtable.387" }
%"class.std::_Hashtable.387" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.156 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.167 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.168 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.169 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.290 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1303 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.1304 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1305 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1306 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1307 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1308 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1309 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1310 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1311 = external hidden unnamed_addr constant [25 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross11CompilerMSL23get_resource_array_sizeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options6is_iosEv(ptr noundef nonnull align 4 dereferenceable(137)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482)) #2 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137), i32 noundef, i32 noundef, i32 noundef) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #6

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #0 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef) #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #6

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #6

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #4

declare void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #6

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef) #2 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef) #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler30has_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482), i8 noundef zeroext) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL16add_typedef_lineERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL16to_struct_memberERKNS_8SPIRTypeEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3, i32 noundef %4, ptr noundef nonnull align 8 dereferenceable(32) %5) #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i8, align 1
  %20 = alloca %"class.spirv_cross::TypedID.414", align 4
  %21 = alloca %"struct.spirv_cross::SPIRType", align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.spirv_cross::TypedID.414", align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::allocator.71", align 1
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::allocator.71", align 1
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.spirv_cross::TypedID.413", align 4
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca i32, align 4
  %45 = alloca i8, align 1
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca i32, align 4
  %48 = alloca %"class.std::allocator.71", align 1
  %49 = alloca i32, align 4
  %50 = alloca %"struct.spirv_cross::SPIRType", align 8
  %51 = alloca i1, align 1
  %52 = alloca %"class.spirv_cross::TypedID.414", align 4
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca ptr, align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"struct.spirv_cross::SPIRType", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca ptr, align 8
  %69 = alloca i1, align 1
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %7, align 8
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i32 %3, ptr %10, align 4, !tbaa !9
  store i32 %4, ptr %11, align 4, !tbaa !9
  store ptr %5, ptr %12, align 8, !tbaa !5
  %72 = load ptr, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %73 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %73, ptr %13, align 4, !tbaa !9
  %74 = load ptr, ptr %9, align 8, !tbaa !5
  %75 = load i32, ptr %11, align 4, !tbaa !9
  %76 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL32member_is_remapped_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %72, ptr noundef nonnull align 8 dereferenceable(336) %74, i32 noundef %75)
  br i1 %76, label %77, label %83

77:                                               ; preds = %6
  %78 = load ptr, ptr %9, align 8, !tbaa !5
  %79 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %78, i32 0, i32 1
  %80 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %79)
  %81 = load i32, ptr %11, align 4, !tbaa !9
  %82 = call noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 noundef %80, i32 noundef %81, i32 noundef 1)
  store i32 %82, ptr %10, align 4, !tbaa !9
  br label %83

83:                                               ; preds = %77, %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %84 = load i32, ptr %10, align 4, !tbaa !9
  %85 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 noundef %84)
  store ptr %85, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store i32 0, ptr %16, align 4, !tbaa !9
  %86 = load ptr, ptr %9, align 8, !tbaa !5
  %87 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %86, i32 0, i32 1
  %88 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %87)
          to label %89 unwind label %101

89:                                               ; preds = %83
  %90 = load i32, ptr %11, align 4, !tbaa !9
  %91 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler30has_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 noundef %88, i32 noundef %90, i32 noundef 5)
          to label %92 unwind label %101

92:                                               ; preds = %89
  br i1 %91, label %93, label %105

93:                                               ; preds = %92
  %94 = load ptr, ptr %9, align 8, !tbaa !5
  %95 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %94, i32 0, i32 1
  %96 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %95)
          to label %97 unwind label %101

97:                                               ; preds = %93
  %98 = load i32, ptr %11, align 4, !tbaa !9
  %99 = invoke noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 noundef %96, i32 noundef %98, i32 noundef 5)
          to label %100 unwind label %101

100:                                              ; preds = %97
  store i32 %99, ptr %16, align 4, !tbaa !9
  br label %105

101:                                              ; preds = %97, %93, %89, %83
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %17, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %18, align 4
  br label %757

105:                                              ; preds = %100, %92
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #7
  store i8 0, ptr %19, align 1, !tbaa !11
  %106 = load ptr, ptr %14, align 8, !tbaa !5
  %107 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %106)
          to label %108 unwind label %121

108:                                              ; preds = %105
  br i1 %107, label %109, label %125

109:                                              ; preds = %108
  %110 = load ptr, ptr %9, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %110, i32 0, i32 1
  %112 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %111)
          to label %113 unwind label %121

113:                                              ; preds = %109
  %114 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %20, i32 0, i32 0
  store i32 %112, ptr %114, align 4
  %115 = load i32, ptr %11, align 4, !tbaa !9
  %116 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %20, i32 0, i32 0
  %117 = load i32, ptr %116, align 4
  %118 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 %117, i32 noundef %115, i32 noundef 4)
          to label %119 unwind label %121

119:                                              ; preds = %113
  %120 = zext i1 %118 to i8
  store i8 %120, ptr %19, align 1, !tbaa !11
  br label %125

121:                                              ; preds = %113, %109, %105
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %17, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %18, align 4
  br label %756

125:                                              ; preds = %119, %108
  call void @llvm.lifetime.start.p0(i64 336, ptr %21) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %21, i32 noundef 24)
          to label %126 unwind label %140

126:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %127 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %127, ptr %22, align 8, !tbaa !5
  %128 = load ptr, ptr %9, align 8, !tbaa !5
  %129 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %128, i32 0, i32 1
  %130 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %129)
          to label %131 unwind label %144

131:                                              ; preds = %126
  %132 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %23, i32 0, i32 0
  store i32 %130, ptr %132, align 4
  %133 = load i32, ptr %11, align 4, !tbaa !9
  %134 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %23, i32 0, i32 0
  %135 = load i32, ptr %134, align 4
  %136 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 %135, i32 noundef %133, i32 noundef 35)
          to label %137 unwind label %144

137:                                              ; preds = %131
  br i1 %136, label %138, label %148

138:                                              ; preds = %137
  %139 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 74
  store i8 1, ptr %139, align 2, !tbaa !13
  br label %159

140:                                              ; preds = %125
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %17, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %18, align 4
  br label %755

144:                                              ; preds = %382, %375, %373, %364, %345, %339, %337, %334, %330, %326, %322, %316, %312, %176, %171, %159, %152, %148, %131, %126
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %17, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %18, align 4
  br label %754

148:                                              ; preds = %137
  %149 = load ptr, ptr %9, align 8, !tbaa !5
  %150 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %149, i32 0, i32 1
  %151 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %150)
          to label %152 unwind label %144

152:                                              ; preds = %148
  %153 = load i32, ptr %11, align 4, !tbaa !9
  %154 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler30has_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 noundef %151, i32 noundef %153, i32 noundef 6)
          to label %155 unwind label %144

155:                                              ; preds = %152
  br i1 %154, label %156, label %158

156:                                              ; preds = %155
  %157 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 74
  store i8 1, ptr %157, align 2, !tbaa !13
  br label %158

158:                                              ; preds = %156, %155
  br label %159

159:                                              ; preds = %158, %138
  %160 = load ptr, ptr %9, align 8, !tbaa !5
  %161 = load i32, ptr %11, align 4, !tbaa !9
  %162 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30member_is_packed_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %72, ptr noundef nonnull align 8 dereferenceable(336) %160, i32 noundef %161)
          to label %163 unwind label %144

163:                                              ; preds = %159
  br i1 %162, label %164, label %322

164:                                              ; preds = %163
  %165 = load ptr, ptr %14, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %165, i32 0, i32 2
  %167 = load i32, ptr %166, align 8, !tbaa !175
  %168 = icmp eq i32 %167, 15
  br i1 %168, label %169, label %176

169:                                              ; preds = %164
  %170 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %170, ptr noundef @.str.1303)
          to label %171 unwind label %172

171:                                              ; preds = %169
  invoke void @__cxa_throw(ptr %170, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %763 unwind label %144

172:                                              ; preds = %169
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %17, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %18, align 4
  call void @__cxa_free_exception(ptr %170) #7
  br label %754

176:                                              ; preds = %164
  %177 = load ptr, ptr %14, align 8, !tbaa !5
  %178 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %177)
          to label %179 unwind label %144

179:                                              ; preds = %176
  br i1 %178, label %180, label %312

180:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %181 = load ptr, ptr %14, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %181, i32 0, i32 4
  %183 = load i32, ptr %182, align 8, !tbaa !188
  store i32 %183, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %184 = load ptr, ptr %14, align 8, !tbaa !5
  %185 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %184, i32 0, i32 5
  %186 = load i32, ptr %185, align 4, !tbaa !189
  store i32 %186, ptr %25, align 4, !tbaa !9
  %187 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef @.str.156)
          to label %188 unwind label %200

188:                                              ; preds = %180
  %189 = load i8, ptr %19, align 1, !tbaa !11, !range !190, !noundef !191
  %190 = trunc i8 %189 to i1
  br i1 %190, label %191, label %204

191:                                              ; preds = %188
  %192 = load ptr, ptr %14, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %192, i32 0, i32 5
  %194 = load i32, ptr %193, align 4, !tbaa !189
  store i32 %194, ptr %24, align 4, !tbaa !9
  %195 = load ptr, ptr %14, align 8, !tbaa !5
  %196 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %195, i32 0, i32 4
  %197 = load i32, ptr %196, align 8, !tbaa !188
  store i32 %197, ptr %25, align 4, !tbaa !9
  %198 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef @.str.1304)
          to label %199 unwind label %200

199:                                              ; preds = %191
  br label %204

200:                                              ; preds = %191, %180
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %17, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %18, align 4
  br label %311

204:                                              ; preds = %199, %188
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #7
  %205 = load ptr, ptr %14, align 8, !tbaa !5
  %206 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %205, i32 0, i32 3
  %207 = load i32, ptr %206, align 4, !tbaa !192
  %208 = icmp eq i32 %207, 16
  %209 = zext i1 %208 to i64
  %210 = select i1 %208, ptr @.str.167, ptr @.str.168
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef %210, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %211 unwind label %240

211:                                              ; preds = %204
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.1305, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %212 unwind label %244

212:                                              ; preds = %211
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef @.str.156, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %213 unwind label %248

213:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #7
  %214 = load i32, ptr %24, align 4, !tbaa !9
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, i32 noundef %214) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %215 unwind label %252

215:                                              ; preds = %213
  %216 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %217 unwind label %256

217:                                              ; preds = %215
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %218 unwind label %262

218:                                              ; preds = %217
  %219 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %33)
          to label %220 unwind label %266

220:                                              ; preds = %218
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #7
  %221 = load ptr, ptr %14, align 8, !tbaa !5
  %222 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %221, i32 0, i32 5
  %223 = load i32, ptr %222, align 4, !tbaa !189
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, i32 noundef %223) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %224 unwind label %271

224:                                              ; preds = %220
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef @.str.169)
          to label %225 unwind label %275

225:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #7
  %226 = load ptr, ptr %14, align 8, !tbaa !5
  %227 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %226, i32 0, i32 4
  %228 = load i32, ptr %227, align 8, !tbaa !188
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %38, i32 noundef %228) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %229 unwind label %279

229:                                              ; preds = %225
  %230 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %231 unwind label %283

231:                                              ; preds = %229
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #7
  %232 = load i32, ptr %25, align 4, !tbaa !9
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, i32 noundef %232) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %233 unwind label %290

233:                                              ; preds = %231
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.69)
          to label %234 unwind label %294

234:                                              ; preds = %233
  %235 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %236 unwind label %298

236:                                              ; preds = %234
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  %237 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.57)
          to label %238 unwind label %304

238:                                              ; preds = %236
  invoke void @_ZN11spirv_cross11CompilerMSL16add_typedef_lineERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %239 unwind label %304

239:                                              ; preds = %238
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %320

240:                                              ; preds = %204
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %17, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  br label %310

244:                                              ; preds = %211
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %17, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #7
  br label %309

248:                                              ; preds = %212
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %17, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %18, align 4
  br label %261

252:                                              ; preds = %213
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %17, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %18, align 4
  br label %260

256:                                              ; preds = %215
  %257 = landingpad { ptr, i32 }
          cleanup
  %258 = extractvalue { ptr, i32 } %257, 0
  store ptr %258, ptr %17, align 8
  %259 = extractvalue { ptr, i32 } %257, 1
  store i32 %259, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br label %260

260:                                              ; preds = %256, %252
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  br label %261

261:                                              ; preds = %260, %248
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  br label %308

262:                                              ; preds = %217
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %17, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %18, align 4
  br label %270

266:                                              ; preds = %218
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %17, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  br label %270

270:                                              ; preds = %266, %262
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  br label %308

271:                                              ; preds = %220
  %272 = landingpad { ptr, i32 }
          cleanup
  %273 = extractvalue { ptr, i32 } %272, 0
  store ptr %273, ptr %17, align 8
  %274 = extractvalue { ptr, i32 } %272, 1
  store i32 %274, ptr %18, align 4
  br label %289

275:                                              ; preds = %224
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %17, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %18, align 4
  br label %288

279:                                              ; preds = %225
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %17, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %18, align 4
  br label %287

283:                                              ; preds = %229
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %17, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %287

287:                                              ; preds = %283, %279
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br label %288

288:                                              ; preds = %287, %275
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  br label %289

289:                                              ; preds = %288, %271
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #7
  br label %308

290:                                              ; preds = %231
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %17, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %18, align 4
  br label %303

294:                                              ; preds = %233
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %17, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %18, align 4
  br label %302

298:                                              ; preds = %234
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %17, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  br label %302

302:                                              ; preds = %298, %294
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  br label %303

303:                                              ; preds = %302, %290
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  br label %308

304:                                              ; preds = %238, %236
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %17, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %18, align 4
  br label %308

308:                                              ; preds = %304, %303, %289, %270, %261
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  br label %309

309:                                              ; preds = %308, %244
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br label %310

310:                                              ; preds = %309, %240
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  br label %311

311:                                              ; preds = %310, %200
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %754

312:                                              ; preds = %179
  %313 = load ptr, ptr %14, align 8, !tbaa !5
  %314 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %313)
          to label %315 unwind label %144

315:                                              ; preds = %312
  br i1 %314, label %319, label %316

316:                                              ; preds = %315
  %317 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef @.str.156)
          to label %318 unwind label %144

318:                                              ; preds = %316
  br label %319

319:                                              ; preds = %318, %315
  br label %320

320:                                              ; preds = %319, %239
  br label %321

321:                                              ; preds = %320
  br label %353

322:                                              ; preds = %163
  %323 = load ptr, ptr %14, align 8, !tbaa !5
  %324 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %323)
          to label %325 unwind label %144

325:                                              ; preds = %322
  br i1 %324, label %326, label %352

326:                                              ; preds = %325
  %327 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 37
  %328 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %327, i32 noundef 3, i32 noundef 0, i32 noundef 0)
          to label %329 unwind label %144

329:                                              ; preds = %326
  br i1 %328, label %342, label %330

330:                                              ; preds = %329
  %331 = load ptr, ptr %9, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %331, i32 0, i32 1
  %333 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %332)
          to label %334 unwind label %144

334:                                              ; preds = %330
  %335 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 noundef %333, i32 noundef 16)
          to label %336 unwind label %144

336:                                              ; preds = %334
  br i1 %335, label %337, label %342

337:                                              ; preds = %336
  %338 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef @.str.1306)
          to label %339 unwind label %144

339:                                              ; preds = %337
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %72, i8 noundef zeroext 19)
          to label %340 unwind label %144

340:                                              ; preds = %339
  %341 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 74
  store i8 1, ptr %341, align 2, !tbaa !13
  br label %342

342:                                              ; preds = %340, %336, %329
  %343 = load i8, ptr %19, align 1, !tbaa !11, !range !190, !noundef !191
  %344 = trunc i8 %343 to i1
  br i1 %344, label %345, label %351

345:                                              ; preds = %342
  %346 = load ptr, ptr %14, align 8, !tbaa !5
  %347 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %21, ptr noundef nonnull align 8 dereferenceable(336) %346)
          to label %348 unwind label %144

348:                                              ; preds = %345
  %349 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %21, i32 0, i32 4
  %350 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %21, i32 0, i32 5
  call void @_ZSt4swapIjENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 4 dereferenceable(4) %349, ptr noundef nonnull align 4 dereferenceable(4) %350) #7
  store ptr %21, ptr %22, align 8, !tbaa !5
  br label %351

351:                                              ; preds = %348, %342
  br label %352

352:                                              ; preds = %351, %325
  br label %353

353:                                              ; preds = %352, %321
  %354 = load ptr, ptr %14, align 8, !tbaa !5
  %355 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %354, i32 0, i32 2
  %356 = load i32, ptr %355, align 8, !tbaa !175
  %357 = icmp eq i32 %356, 16
  br i1 %357, label %358, label %387

358:                                              ; preds = %353
  %359 = load ptr, ptr %14, align 8, !tbaa !5
  %360 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %359, i32 0, i32 14
  %361 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %360, i32 0, i32 5
  %362 = load i32, ptr %361, align 4, !tbaa !193
  %363 = icmp eq i32 %362, 2
  br i1 %363, label %364, label %387

364:                                              ; preds = %358
  %365 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 37
  %366 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options6is_iosEv(ptr noundef nonnull align 4 dereferenceable(137) %365)
          to label %367 unwind label %144

367:                                              ; preds = %364
  br i1 %366, label %368, label %387

368:                                              ; preds = %367
  %369 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 37
  %370 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %369, i32 0, i32 34
  %371 = load i32, ptr %370, align 4, !tbaa !194
  %372 = icmp sle i32 %371, 0
  br i1 %372, label %373, label %387

373:                                              ; preds = %368
  %374 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %42, i32 noundef %374)
          to label %375 unwind label %144

375:                                              ; preds = %373
  %376 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %42, i32 0, i32 0
  %377 = load i32, ptr %376, align 4
  %378 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 %377, i32 noundef 24)
          to label %379 unwind label %144

379:                                              ; preds = %375
  br i1 %378, label %387, label %380

380:                                              ; preds = %379
  %381 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %381, ptr noundef @.str.1307)
          to label %382 unwind label %383

382:                                              ; preds = %380
  invoke void @__cxa_throw(ptr %381, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %763 unwind label %144

383:                                              ; preds = %380
  %384 = landingpad { ptr, i32 }
          cleanup
  %385 = extractvalue { ptr, i32 } %384, 0
  store ptr %385, ptr %17, align 8
  %386 = extractvalue { ptr, i32 } %384, 1
  store i32 %386, ptr %18, align 4
  call void @__cxa_free_exception(ptr %381) #7
  br label %754

387:                                              ; preds = %379, %368, %367, %358, %353
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  %388 = load ptr, ptr %14, align 8, !tbaa !5
  %389 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %388, i32 0, i32 2
  %390 = load i32, ptr %389, align 8, !tbaa !175
  %391 = icmp ne i32 %390, 16
  br i1 %391, label %392, label %472

392:                                              ; preds = %387
  %393 = load ptr, ptr %14, align 8, !tbaa !5
  %394 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %393, i32 0, i32 2
  %395 = load i32, ptr %394, align 8, !tbaa !175
  %396 = icmp ne i32 %395, 18
  br i1 %396, label %397, label %472

397:                                              ; preds = %392
  %398 = load ptr, ptr %14, align 8, !tbaa !5
  %399 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %398, i32 0, i32 2
  %400 = load i32, ptr %399, align 8, !tbaa !175
  %401 = icmp ne i32 %400, 17
  br i1 %401, label %402, label %472

402:                                              ; preds = %397
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  store i32 2147483647, ptr %44, align 4, !tbaa !195
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #7
  %403 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 60
  %404 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %403)
          to label %405 unwind label %455

405:                                              ; preds = %402
  %406 = icmp ne i32 %404, 0
  br i1 %406, label %407, label %421

407:                                              ; preds = %405
  %408 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %72)
          to label %409 unwind label %455

409:                                              ; preds = %407
  %410 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %408, i32 0, i32 1
  %411 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %410)
          to label %412 unwind label %455

412:                                              ; preds = %409
  %413 = load ptr, ptr %9, align 8, !tbaa !5
  %414 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %413, i32 0, i32 1
  %415 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %414)
          to label %416 unwind label %455

416:                                              ; preds = %412
  %417 = icmp eq i32 %411, %415
  br i1 %417, label %418, label %421

418:                                              ; preds = %416
  %419 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %72, i32 noundef 3)
          to label %420 unwind label %455

420:                                              ; preds = %418
  br i1 %419, label %443, label %421

421:                                              ; preds = %420, %416, %405
  %422 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 59
  %423 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %422)
          to label %424 unwind label %455

424:                                              ; preds = %421
  %425 = icmp ne i32 %423, 0
  br i1 %425, label %426, label %440

426:                                              ; preds = %424
  %427 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %72)
          to label %428 unwind label %455

428:                                              ; preds = %426
  %429 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %427, i32 0, i32 1
  %430 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %429)
          to label %431 unwind label %455

431:                                              ; preds = %428
  %432 = load ptr, ptr %9, align 8, !tbaa !5
  %433 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %432, i32 0, i32 1
  %434 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %433)
          to label %435 unwind label %455

435:                                              ; preds = %431
  %436 = icmp eq i32 %430, %434
  br i1 %436, label %437, label %440

437:                                              ; preds = %435
  %438 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %72, i32 noundef 1)
          to label %439 unwind label %455

439:                                              ; preds = %437
  br i1 %438, label %443, label %440

440:                                              ; preds = %439, %435, %424
  %441 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %72)
          to label %442 unwind label %455

442:                                              ; preds = %440
  br label %443

443:                                              ; preds = %442, %439, %420
  %444 = phi i1 [ true, %439 ], [ true, %420 ], [ %441, %442 ]
  %445 = zext i1 %444 to i8
  store i8 %445, ptr %45, align 1, !tbaa !11
  %446 = load i8, ptr %45, align 1, !tbaa !11, !range !190, !noundef !191
  %447 = trunc i8 %446 to i1
  br i1 %447, label %448, label %459

448:                                              ; preds = %443
  %449 = load ptr, ptr %9, align 8, !tbaa !5
  %450 = load i32, ptr %11, align 4, !tbaa !9
  %451 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %449, i32 noundef %450, ptr noundef %44)
          to label %452 unwind label %455

452:                                              ; preds = %448
  br i1 %451, label %453, label %459

453:                                              ; preds = %452
  %454 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 74
  store i8 1, ptr %454, align 2, !tbaa !13
  br label %459

455:                                              ; preds = %448, %440, %437, %431, %428, %426, %421, %418, %412, %409, %407, %402
  %456 = landingpad { ptr, i32 }
          cleanup
  %457 = extractvalue { ptr, i32 } %456, 0
  store ptr %457, ptr %17, align 8
  %458 = extractvalue { ptr, i32 } %456, 1
  store i32 %458, ptr %18, align 4
  br label %471

459:                                              ; preds = %453, %452, %443
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #7
  %460 = load ptr, ptr %14, align 8, !tbaa !5
  %461 = load i32, ptr %16, align 4, !tbaa !9
  %462 = load ptr, ptr %72, align 8, !tbaa !197
  %463 = getelementptr inbounds ptr, ptr %462, i64 38
  %464 = load ptr, ptr %463, align 8
  invoke void %464(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(336) %460, i32 noundef %461)
          to label %465 unwind label %467

465:                                              ; preds = %459
  %466 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  br label %472

467:                                              ; preds = %459
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %17, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  br label %471

471:                                              ; preds = %467, %455
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  br label %753

472:                                              ; preds = %465, %397, %392, %387
  %473 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %72)
          to label %474 unwind label %486

474:                                              ; preds = %472
  br i1 %473, label %475, label %613

475:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #7
  store i32 2147483647, ptr %47, align 4, !tbaa !195
  %476 = load ptr, ptr %9, align 8, !tbaa !5
  %477 = load i32, ptr %11, align 4, !tbaa !9
  %478 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %476, i32 noundef %477, ptr noundef %47)
          to label %479 unwind label %490

479:                                              ; preds = %475
  br i1 %478, label %480, label %608

480:                                              ; preds = %479
  %481 = load i32, ptr %47, align 4, !tbaa !195
  %482 = icmp eq i32 %481, 4432
  br i1 %482, label %483, label %498

483:                                              ; preds = %480
  %484 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 74
  store i8 0, ptr %484, align 2, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %485 unwind label %494

485:                                              ; preds = %483
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  store i32 1, ptr %49, align 4
  br label %609

486:                                              ; preds = %472
  %487 = landingpad { ptr, i32 }
          cleanup
  %488 = extractvalue { ptr, i32 } %487, 0
  store ptr %488, ptr %17, align 8
  %489 = extractvalue { ptr, i32 } %487, 1
  store i32 %489, ptr %18, align 4
  br label %753

490:                                              ; preds = %475
  %491 = landingpad { ptr, i32 }
          cleanup
  %492 = extractvalue { ptr, i32 } %491, 0
  store ptr %492, ptr %17, align 8
  %493 = extractvalue { ptr, i32 } %491, 1
  store i32 %493, ptr %18, align 4
  br label %612

494:                                              ; preds = %483
  %495 = landingpad { ptr, i32 }
          cleanup
  %496 = extractvalue { ptr, i32 } %495, 0
  store ptr %496, ptr %17, align 8
  %497 = extractvalue { ptr, i32 } %495, 1
  store i32 %497, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  br label %612

498:                                              ; preds = %480
  call void @llvm.lifetime.start.p0(i64 336, ptr %50) #7
  %499 = load ptr, ptr %22, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %50, ptr noundef nonnull align 8 dereferenceable(336) %499)
          to label %500 unwind label %505

500:                                              ; preds = %498
  %501 = load i32, ptr %47, align 4, !tbaa !195
  %502 = icmp eq i32 %501, 5299
  br i1 %502, label %503, label %509

503:                                              ; preds = %500
  %504 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %50, i32 0, i32 2
  store i32 2, ptr %504, align 8, !tbaa !175
  br label %521

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

509:                                              ; preds = %500
  %510 = load i32, ptr %47, align 4, !tbaa !195
  %511 = icmp eq i32 %510, 7
  br i1 %511, label %518, label %512

512:                                              ; preds = %509
  %513 = load i32, ptr %47, align 4, !tbaa !195
  %514 = icmp eq i32 %513, 9
  br i1 %514, label %518, label %515

515:                                              ; preds = %512
  %516 = load i32, ptr %47, align 4, !tbaa !195
  %517 = icmp eq i32 %516, 10
  br i1 %517, label %518, label %520

518:                                              ; preds = %515, %512, %509
  %519 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %50, i32 0, i32 2
  store i32 8, ptr %519, align 8, !tbaa !175
  br label %520

520:                                              ; preds = %518, %515
  br label %521

521:                                              ; preds = %520, %503
  %522 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 74
  store i8 1, ptr %522, align 2, !tbaa !13
  store i1 false, ptr %51, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  %523 = load ptr, ptr %9, align 8, !tbaa !5
  %524 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %523, i32 0, i32 1
  %525 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %524)
          to label %526 unwind label %547

526:                                              ; preds = %521
  %527 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %52, i32 0, i32 0
  store i32 %525, ptr %527, align 4
  %528 = load i32, ptr %16, align 4, !tbaa !9
  %529 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %52, i32 0, i32 0
  %530 = load i32, ptr %529, align 4
  %531 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 %530, i32 noundef %528, i32 noundef 11)
          to label %532 unwind label %547

532:                                              ; preds = %526
  br i1 %531, label %533, label %570

533:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #7
  %534 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(336) %50, i32 noundef %534, i1 noundef zeroext false)
          to label %535 unwind label %551

535:                                              ; preds = %533
  %536 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #7
  %537 = load i32, ptr %47, align 4, !tbaa !195
  %538 = load ptr, ptr %72, align 8, !tbaa !197
  %539 = getelementptr inbounds ptr, ptr %538, i64 20
  %540 = load ptr, ptr %539, align 8
  invoke void %540(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(12482) %72, i32 noundef %537, i32 noundef 3)
          to label %541 unwind label %555

541:                                              ; preds = %535
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #7
  %542 = load ptr, ptr %9, align 8, !tbaa !5
  %543 = load i32, ptr %11, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL26member_attribute_qualifierB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(336) %542, i32 noundef %543)
          to label %544 unwind label %559

544:                                              ; preds = %541
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRKS6_S6_S6_RS6_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %536, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %545 unwind label %563

545:                                              ; preds = %544
  %546 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #7
  br label %601

547:                                              ; preds = %526, %521
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %17, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %18, align 4
  br label %606

551:                                              ; preds = %533
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %17, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %18, align 4
  br label %569

555:                                              ; preds = %535
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %17, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %18, align 4
  br label %568

559:                                              ; preds = %541
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %17, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %18, align 4
  br label %567

563:                                              ; preds = %544
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %17, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  br label %567

567:                                              ; preds = %563, %559
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  br label %568

568:                                              ; preds = %567, %555
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  br label %569

569:                                              ; preds = %568, %551
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #7
  br label %606

570:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #7
  %571 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(336) %50, i32 noundef %571, i1 noundef zeroext false)
          to label %572 unwind label %582

572:                                              ; preds = %570
  %573 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #7
  %574 = load ptr, ptr %9, align 8, !tbaa !5
  %575 = load i32, ptr %11, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %72, ptr noundef nonnull align 8 dereferenceable(336) %574, i32 noundef %575)
          to label %576 unwind label %586

576:                                              ; preds = %572
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #7
  %577 = load ptr, ptr %9, align 8, !tbaa !5
  %578 = load i32, ptr %11, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL26member_attribute_qualifierB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(336) %577, i32 noundef %578)
          to label %579 unwind label %590

579:                                              ; preds = %576
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRKS6_S6_S6_RS6_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %573, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %580 unwind label %594

580:                                              ; preds = %579
  %581 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #7
  br label %601

582:                                              ; preds = %570
  %583 = landingpad { ptr, i32 }
          cleanup
  %584 = extractvalue { ptr, i32 } %583, 0
  store ptr %584, ptr %17, align 8
  %585 = extractvalue { ptr, i32 } %583, 1
  store i32 %585, ptr %18, align 4
  br label %600

586:                                              ; preds = %572
  %587 = landingpad { ptr, i32 }
          cleanup
  %588 = extractvalue { ptr, i32 } %587, 0
  store ptr %588, ptr %17, align 8
  %589 = extractvalue { ptr, i32 } %587, 1
  store i32 %589, ptr %18, align 4
  br label %599

590:                                              ; preds = %576
  %591 = landingpad { ptr, i32 }
          cleanup
  %592 = extractvalue { ptr, i32 } %591, 0
  store ptr %592, ptr %17, align 8
  %593 = extractvalue { ptr, i32 } %591, 1
  store i32 %593, ptr %18, align 4
  br label %598

594:                                              ; preds = %579
  %595 = landingpad { ptr, i32 }
          cleanup
  %596 = extractvalue { ptr, i32 } %595, 0
  store ptr %596, ptr %17, align 8
  %597 = extractvalue { ptr, i32 } %595, 1
  store i32 %597, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  br label %598

598:                                              ; preds = %594, %590
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  br label %599

599:                                              ; preds = %598, %586
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  br label %600

600:                                              ; preds = %599, %582
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #7
  br label %606

601:                                              ; preds = %580, %545
  %602 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 74
  store i8 0, ptr %602, align 2, !tbaa !13
  store i1 true, ptr %51, align 1
  store i32 1, ptr %49, align 4
  %603 = load i1, ptr %51, align 1
  br i1 %603, label %605, label %604

604:                                              ; preds = %601
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  br label %605

605:                                              ; preds = %604, %601
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %50) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %50) #7
  br label %609

606:                                              ; preds = %600, %569, %547
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %50) #7
  br label %607

607:                                              ; preds = %606, %505
  call void @llvm.lifetime.end.p0(i64 336, ptr %50) #7
  br label %612

608:                                              ; preds = %479
  store i32 0, ptr %49, align 4
  br label %609

609:                                              ; preds = %608, %605, %485
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #7
  %610 = load i32, ptr %49, align 4
  switch i32 %610, label %752 [
    i32 0, label %611
  ]

611:                                              ; preds = %609
  br label %613

612:                                              ; preds = %607, %494, %490
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #7
  br label %753

613:                                              ; preds = %611, %474
  %614 = load i32, ptr %16, align 4, !tbaa !9
  %615 = icmp ne i32 %614, 0
  br i1 %615, label %616, label %643

616:                                              ; preds = %613
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  %617 = load ptr, ptr %22, align 8, !tbaa !5
  store ptr %617, ptr %61, align 8, !tbaa !5
  %618 = load ptr, ptr %61, align 8, !tbaa !5
  %619 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %618)
          to label %620 unwind label %625

620:                                              ; preds = %616
  br i1 %619, label %621, label %629

621:                                              ; preds = %620
  %622 = load ptr, ptr %61, align 8, !tbaa !5
  %623 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %622)
          to label %624 unwind label %625

624:                                              ; preds = %621
  store ptr %623, ptr %61, align 8, !tbaa !5
  br label %629

625:                                              ; preds = %639, %633, %629, %621, %616
  %626 = landingpad { ptr, i32 }
          cleanup
  %627 = extractvalue { ptr, i32 } %626, 0
  store ptr %627, ptr %17, align 8
  %628 = extractvalue { ptr, i32 } %626, 1
  store i32 %628, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  br label %753

629:                                              ; preds = %624, %620
  %630 = load ptr, ptr %61, align 8, !tbaa !5
  %631 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %630)
          to label %632 unwind label %625

632:                                              ; preds = %629
  br i1 %631, label %633, label %642

633:                                              ; preds = %632
  %634 = load ptr, ptr %61, align 8, !tbaa !5
  %635 = load i32, ptr %16, align 4, !tbaa !9
  %636 = invoke noundef i32 @_ZNK11spirv_cross11CompilerMSL23get_resource_array_sizeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(336) %634, i32 noundef %635)
          to label %637 unwind label %625

637:                                              ; preds = %633
  %638 = icmp eq i32 %636, 0
  br i1 %638, label %639, label %642

639:                                              ; preds = %637
  %640 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef @.str.1308)
          to label %641 unwind label %625

641:                                              ; preds = %639
  br label %642

642:                                              ; preds = %641, %637, %632
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  br label %643

643:                                              ; preds = %642, %613
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  %644 = load ptr, ptr %22, align 8, !tbaa !5
  %645 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %644, i32 0, i32 4
  %646 = load i32, ptr %645, align 8, !tbaa !188
  %647 = icmp ugt i32 %646, 4
  br i1 %647, label %648, label %701

648:                                              ; preds = %643
  call void @llvm.lifetime.start.p0(i64 336, ptr %63) #7
  %649 = load i32, ptr %13, align 4, !tbaa !9
  %650 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 noundef %649)
          to label %651 unwind label %661

651:                                              ; preds = %648
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %63, ptr noundef nonnull align 8 dereferenceable(336) %650)
          to label %652 unwind label %661

652:                                              ; preds = %651
  %653 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %72, ptr noundef nonnull align 8 dereferenceable(336) %63)
          to label %654 unwind label %665

654:                                              ; preds = %652
  br i1 %653, label %655, label %669

655:                                              ; preds = %654
  %656 = load i8, ptr %19, align 1, !tbaa !11, !range !190, !noundef !191
  %657 = trunc i8 %656 to i1
  br i1 %657, label %658, label %669

658:                                              ; preds = %655
  %659 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %63, i32 0, i32 4
  %660 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %63, i32 0, i32 5
  call void @_ZSt4swapIjENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 4 dereferenceable(4) %659, ptr noundef nonnull align 4 dereferenceable(4) %660) #7
  br label %669

661:                                              ; preds = %651, %648
  %662 = landingpad { ptr, i32 }
          cleanup
  %663 = extractvalue { ptr, i32 } %662, 0
  store ptr %663, ptr %17, align 8
  %664 = extractvalue { ptr, i32 } %662, 1
  store i32 %664, ptr %18, align 4
  br label %700

665:                                              ; preds = %652
  %666 = landingpad { ptr, i32 }
          cleanup
  %667 = extractvalue { ptr, i32 } %666, 0
  store ptr %667, ptr %17, align 8
  %668 = extractvalue { ptr, i32 } %666, 1
  store i32 %668, ptr %18, align 4
  br label %699

669:                                              ; preds = %658, %655, %654
  %670 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %63, i32 0, i32 5
  store i32 1, ptr %670, align 4, !tbaa !189
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #7
  %671 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(336) %63, i32 noundef %671, i1 noundef zeroext true)
          to label %672 unwind label %683

672:                                              ; preds = %669
  %673 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #7
  %674 = load ptr, ptr %22, align 8, !tbaa !5
  %675 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %674, i32 0, i32 5
  %676 = load i32, ptr %675, align 4, !tbaa !189
  %677 = icmp ugt i32 %676, 1
  br i1 %677, label %678, label %691

678:                                              ; preds = %672
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #7
  %679 = load ptr, ptr %22, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %679, i32 0, i32 5
  invoke void @_ZN11spirv_cross4joinIJRA23_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RKjRA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 1 dereferenceable(23) @.str.1309, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 4 dereferenceable(4) %680, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %681 unwind label %687

681:                                              ; preds = %678
  %682 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #7
  br label %698

683:                                              ; preds = %669
  %684 = landingpad { ptr, i32 }
          cleanup
  %685 = extractvalue { ptr, i32 } %684, 0
  store ptr %685, ptr %17, align 8
  %686 = extractvalue { ptr, i32 } %684, 1
  store i32 %686, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #7
  br label %699

687:                                              ; preds = %678
  %688 = landingpad { ptr, i32 }
          cleanup
  %689 = extractvalue { ptr, i32 } %688, 0
  store ptr %689, ptr %17, align 8
  %690 = extractvalue { ptr, i32 } %688, 1
  store i32 %690, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #7
  br label %699

691:                                              ; preds = %672
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #7
  invoke void @_ZN11spirv_cross4joinIJRA17_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 1 dereferenceable(17) @.str.1310, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %692 unwind label %694

692:                                              ; preds = %691
  %693 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #7
  br label %698

694:                                              ; preds = %691
  %695 = landingpad { ptr, i32 }
          cleanup
  %696 = extractvalue { ptr, i32 } %695, 0
  store ptr %696, ptr %17, align 8
  %697 = extractvalue { ptr, i32 } %695, 1
  store i32 %697, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #7
  br label %699

698:                                              ; preds = %692, %681
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %63) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %63) #7
  br label %710

699:                                              ; preds = %694, %687, %683, %665
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %63) #7
  br label %700

700:                                              ; preds = %699, %661
  call void @llvm.lifetime.end.p0(i64 336, ptr %63) #7
  br label %751

701:                                              ; preds = %643
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #7
  %702 = load ptr, ptr %22, align 8, !tbaa !5
  %703 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(336) %702, i32 noundef %703, i1 noundef zeroext true)
          to label %704 unwind label %706

704:                                              ; preds = %701
  %705 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #7
  br label %710

706:                                              ; preds = %701
  %707 = landingpad { ptr, i32 }
          cleanup
  %708 = extractvalue { ptr, i32 } %707, 0
  store ptr %708, ptr %17, align 8
  %709 = extractvalue { ptr, i32 } %707, 1
  store i32 %709, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #7
  br label %751

710:                                              ; preds = %704, %698
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #7
  %711 = load ptr, ptr %9, align 8, !tbaa !5
  %712 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %711, i32 0, i32 1
  %713 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %712)
          to label %714 unwind label %730

714:                                              ; preds = %710
  %715 = load i32, ptr %11, align 4, !tbaa !9
  %716 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler30has_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %72, i32 noundef %713, i32 noundef %715, i32 noundef 17)
          to label %717 unwind label %730

717:                                              ; preds = %714
  %718 = zext i1 %716 to i64
  %719 = select i1 %716, ptr @.str.1311, ptr @.str.35
  store ptr %719, ptr %68, align 8, !tbaa !5
  store i1 false, ptr %69, align 1
  %720 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #7
  %721 = load ptr, ptr %9, align 8, !tbaa !5
  %722 = load i32, ptr %11, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(9848) %72, ptr noundef nonnull align 8 dereferenceable(336) %721, i32 noundef %722)
          to label %723 unwind label %734

723:                                              ; preds = %717
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #7
  %724 = load ptr, ptr %9, align 8, !tbaa !5
  %725 = load i32, ptr %11, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL26member_attribute_qualifierB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(12482) %72, ptr noundef nonnull align 8 dereferenceable(336) %724, i32 noundef %725)
          to label %726 unwind label %738

726:                                              ; preds = %723
  invoke void @_ZN11spirv_cross4joinIJRPKcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_RA2_S1_RKS9_S9_S9_SA_SC_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %720, ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %727 unwind label %742

727:                                              ; preds = %726
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #7
  %728 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %72, i32 0, i32 74
  store i8 0, ptr %728, align 2, !tbaa !13
  store i1 true, ptr %69, align 1
  store i32 1, ptr %49, align 4
  %729 = load i1, ptr %69, align 1
  br i1 %729, label %749, label %748

730:                                              ; preds = %714, %710
  %731 = landingpad { ptr, i32 }
          cleanup
  %732 = extractvalue { ptr, i32 } %731, 0
  store ptr %732, ptr %17, align 8
  %733 = extractvalue { ptr, i32 } %731, 1
  store i32 %733, ptr %18, align 4
  br label %750

734:                                              ; preds = %717
  %735 = landingpad { ptr, i32 }
          cleanup
  %736 = extractvalue { ptr, i32 } %735, 0
  store ptr %736, ptr %17, align 8
  %737 = extractvalue { ptr, i32 } %735, 1
  store i32 %737, ptr %18, align 4
  br label %747

738:                                              ; preds = %723
  %739 = landingpad { ptr, i32 }
          cleanup
  %740 = extractvalue { ptr, i32 } %739, 0
  store ptr %740, ptr %17, align 8
  %741 = extractvalue { ptr, i32 } %739, 1
  store i32 %741, ptr %18, align 4
  br label %746

742:                                              ; preds = %726
  %743 = landingpad { ptr, i32 }
          cleanup
  %744 = extractvalue { ptr, i32 } %743, 0
  store ptr %744, ptr %17, align 8
  %745 = extractvalue { ptr, i32 } %743, 1
  store i32 %745, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #7
  br label %746

746:                                              ; preds = %742, %738
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  br label %747

747:                                              ; preds = %746, %734
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #7
  br label %750

748:                                              ; preds = %727
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  br label %749

749:                                              ; preds = %748, %727
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #7
  br label %752

750:                                              ; preds = %747, %730
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #7
  br label %751

751:                                              ; preds = %750, %706, %700
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #7
  br label %753

752:                                              ; preds = %749, %609
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %21) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  ret void

753:                                              ; preds = %751, %625, %612, %486, %471
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  br label %754

754:                                              ; preds = %753, %383, %311, %172, %144
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %21) #7
  br label %755

755:                                              ; preds = %754, %140
  call void @llvm.lifetime.end.p0(i64 336, ptr %21) #7
  br label %756

756:                                              ; preds = %755, %121
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  br label %757

757:                                              ; preds = %756, %101
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %758

758:                                              ; preds = %757
  %759 = load ptr, ptr %17, align 8
  %760 = load i32, ptr %18, align 4
  %761 = insertvalue { ptr, i32 } poison, ptr %759, 0
  %762 = insertvalue { ptr, i32 } %761, i32 %760, 1
  resume { ptr, i32 } %762

763:                                              ; preds = %382, %171
  unreachable
}

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL32member_is_remapped_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #6

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30member_is_packed_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRKS6_S6_S6_RS6_S9_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, i1 noundef zeroext) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL26member_attribute_qualifierB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA23_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RKjRA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(23), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA17_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_RA2_S1_RKS9_S9_S9_SA_SC_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #2

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { noreturn }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !12, i64 11186}
!14 = !{!"_ZTSN11spirv_cross11CompilerMSLE", !15, i64 0, !122, i64 9848, !10, i64 9904, !10, i64 9908, !10, i64 9912, !10, i64 9916, !10, i64 9920, !10, i64 9924, !10, i64 9928, !10, i64 9932, !10, i64 9936, !10, i64 9940, !10, i64 9944, !10, i64 9948, !10, i64 9952, !10, i64 9956, !10, i64 9960, !10, i64 9964, !10, i64 9968, !10, i64 9972, !10, i64 9976, !10, i64 9980, !10, i64 9984, !10, i64 9988, !10, i64 9992, !10, i64 9996, !10, i64 10000, !10, i64 10004, !10, i64 10008, !10, i64 10012, !10, i64 10016, !10, i64 10020, !10, i64 10024, !10, i64 10028, !12, i64 10032, !12, i64 10033, !124, i64 10036, !128, i64 10176, !136, i64 10224, !141, i64 10272, !136, i64 10328, !141, i64 10376, !62, i64 10432, !62, i64 10488, !62, i64 10544, !62, i64 10600, !101, i64 10656, !101, i64 10712, !101, i64 10768, !143, i64 10824, !143, i64 10872, !64, i64 10920, !148, i64 10976, !150, i64 11032, !10, i64 11088, !10, i64 11092, !10, i64 11096, !7, i64 11100, !152, i64 11132, !152, i64 11136, !152, i64 11140, !152, i64 11144, !152, i64 11148, !152, i64 11152, !152, i64 11156, !152, i64 11160, !152, i64 11164, !152, i64 11168, !152, i64 11172, !153, i64 11176, !153, i64 11180, !12, i64 11184, !12, i64 11185, !12, i64 11186, !12, i64 11187, !12, i64 11188, !12, i64 11189, !12, i64 11190, !12, i64 11191, !12, i64 11192, !12, i64 11193, !12, i64 11194, !12, i64 11195, !12, i64 11196, !59, i64 11200, !59, i64 11232, !59, i64 11264, !59, i64 11296, !59, i64 11328, !59, i64 11360, !59, i64 11392, !59, i64 11424, !59, i64 11456, !59, i64 11488, !59, i64 11520, !59, i64 11552, !59, i64 11584, !59, i64 11616, !59, i64 11648, !59, i64 11680, !154, i64 11712, !155, i64 11720, !160, i64 11768, !62, i64 11824, !162, i64 11880, !64, i64 11968, !62, i64 12024, !62, i64 12080, !62, i64 12136, !165, i64 12192, !168, i64 12280, !64, i64 12328, !173, i64 12384, !7, i64 12440, !10, i64 12472, !10, i64 12476, !12, i64 12480, !12, i64 12481}
!15 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !16, i64 0, !6, i64 3176, !80, i64 3184, !12, i64 3272, !83, i64 3280, !6, i64 7616, !6, i64 7624, !12, i64 7632, !12, i64 7633, !88, i64 7636, !92, i64 7680, !92, i64 7736, !92, i64 7792, !92, i64 7848, !92, i64 7904, !92, i64 7960, !92, i64 8016, !94, i64 8072, !78, i64 8128, !12, i64 8184, !96, i64 8192, !10, i64 8416, !62, i64 8424, !62, i64 8480, !62, i64 8536, !98, i64 8592, !100, i64 8648, !101, i64 8656, !45, i64 8712, !45, i64 8992, !101, i64 9272, !103, i64 9328, !10, i64 9384, !10, i64 9388, !10, i64 9392, !12, i64 9396, !12, i64 9397, !106, i64 9400, !106, i64 9424, !110, i64 9448, !114, i64 9472, !101, i64 9496, !62, i64 9552, !62, i64 9608, !7, i64 9664, !118, i64 9672, !62, i64 9728, !6, i64 9784, !120, i64 9792}
!16 = !{!"_ZTSN11spirv_cross8CompilerE", !17, i64 8, !64, i64 1928, !64, i64 1984, !6, i64 2040, !6, i64 2048, !10, i64 2056, !67, i64 2064, !12, i64 2120, !62, i64 2128, !12, i64 2184, !12, i64 2185, !69, i64 2192, !64, i64 2312, !72, i64 2368, !62, i64 2400, !62, i64 2456, !62, i64 2512, !62, i64 2568, !62, i64 2624, !61, i64 2680, !61, i64 2744, !10, i64 2808, !10, i64 2812, !12, i64 2816, !62, i64 2824, !12, i64 2880, !12, i64 2881, !10, i64 2884, !74, i64 2888, !64, i64 2944, !76, i64 3000, !62, i64 3056, !12, i64 3112, !78, i64 3120}
!17 = !{!"_ZTSN11spirv_cross8ParsedIRE", !18, i64 0, !24, i64 8, !28, i64 32, !32, i64 248, !7, i64 304, !37, i64 1088, !37, i64 1144, !40, i64 1200, !42, i64 1256, !45, i64 1312, !48, i64 1592, !51, i64 1624, !53, i64 1680, !55, i64 1736, !56, i64 1740, !57, i64 1748, !58, i64 1752, !10, i64 1756, !10, i64 1760, !59, i64 1768, !61, i64 1800, !62, i64 1864}
!18 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !19, i64 0}
!19 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !20, i64 0}
!20 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !22, i64 0}
!22 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !23, i64 0}
!23 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!24 = !{!"_ZTSSt6vectorIjSaIjEE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !29, i64 0, !30, i64 16, !31, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !30, i64 8}
!30 = !{!"long", !7, i64 0}
!31 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!32 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !33, i64 0}
!33 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!34 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!35 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !36, i64 0, !30, i64 8}
!36 = !{!"float", !7, i64 0}
!37 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !38, i64 0, !30, i64 16, !39, i64 24}
!38 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !30, i64 8}
!39 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!40 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !41, i64 0}
!41 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!42 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !43, i64 0, !30, i64 16, !44, i64 24}
!43 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !30, i64 8}
!44 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!45 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !46, i64 0, !30, i64 16, !47, i64 24}
!46 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !30, i64 8}
!47 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!48 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !49, i64 0, !30, i64 16, !50, i64 24}
!49 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !30, i64 8}
!50 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!51 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !52, i64 0}
!52 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!53 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !54, i64 0}
!54 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!55 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !10, i64 0}
!56 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !10, i64 0, !12, i64 4, !12, i64 5, !12, i64 6}
!57 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!58 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!59 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !60, i64 0, !30, i64 8, !7, i64 16}
!60 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!61 = !{!"_ZTSN11spirv_cross6BitsetE", !30, i64 0, !62, i64 8}
!62 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !63, i64 0}
!63 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!64 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !65, i64 0, !30, i64 16, !66, i64 24}
!65 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !30, i64 8}
!66 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!67 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !68, i64 0}
!68 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!69 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !70, i64 0, !30, i64 16, !71, i64 24}
!70 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !30, i64 8}
!71 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!72 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !73, i64 0, !6, i64 24}
!73 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!74 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !75, i64 0}
!75 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!76 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !77, i64 0}
!77 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!78 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !79, i64 0}
!79 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!80 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !81, i64 0, !30, i64 16, !82, i64 24}
!81 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, i64 0, !30, i64 8}
!82 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!83 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !84, i64 0, !7, i64 24, !85, i64 4120}
!84 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !6, i64 0, !30, i64 8, !30, i64 16}
!85 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !86, i64 0, !30, i64 16, !87, i64 24}
!86 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !6, i64 0, !30, i64 8}
!87 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!88 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !10, i64 0, !12, i64 4, !12, i64 5, !10, i64 8, !12, i64 12, !12, i64 13, !12, i64 14, !12, i64 15, !12, i64 16, !12, i64 17, !12, i64 18, !12, i64 19, !12, i64 20, !12, i64 21, !12, i64 22, !12, i64 23, !10, i64 24, !89, i64 28, !90, i64 32}
!89 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !12, i64 0, !12, i64 1, !12, i64 2}
!90 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !91, i64 0, !91, i64 4}
!91 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!92 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !93, i64 0}
!93 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!94 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !95, i64 0}
!95 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!96 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !59, i64 0, !59, i64 32, !59, i64 64, !12, i64 96, !12, i64 97, !12, i64 98, !12, i64 99, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !97, i64 184, !12, i64 188, !12, i64 189, !12, i64 190, !12, i64 191, !12, i64 192, !12, i64 193, !12, i64 194, !12, i64 195, !12, i64 196, !12, i64 197, !12, i64 198, !12, i64 199, !12, i64 200, !12, i64 201, !12, i64 202, !12, i64 203, !12, i64 204, !12, i64 205, !12, i64 206, !12, i64 207, !12, i64 208, !12, i64 209, !12, i64 210, !12, i64 211, !12, i64 212, !12, i64 213, !12, i64 214, !12, i64 215, !12, i64 216, !12, i64 217, !12, i64 218, !12, i64 219}
!97 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!98 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !99, i64 0}
!99 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!100 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !10, i64 0}
!101 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !102, i64 0}
!102 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!103 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !104, i64 0, !30, i64 16, !105, i64 24}
!104 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !30, i64 8}
!105 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!106 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !107, i64 0}
!107 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !108, i64 0}
!108 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !109, i64 0}
!109 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!110 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !111, i64 0}
!111 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !112, i64 0}
!112 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !113, i64 0}
!113 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!114 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !115, i64 0}
!115 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !116, i64 0}
!116 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !117, i64 0}
!117 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!118 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !119, i64 0}
!119 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!120 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !121, i64 0}
!121 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!122 = !{!"_ZTSSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEE", !123, i64 0}
!123 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt3setIjSt4lessIjESaIjEEESaIS7_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!124 = !{!"_ZTSN11spirv_cross11CompilerMSL7OptionsE", !125, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !12, i64 80, !12, i64 81, !12, i64 82, !12, i64 83, !12, i64 84, !12, i64 85, !12, i64 86, !12, i64 87, !12, i64 88, !12, i64 89, !12, i64 90, !12, i64 91, !12, i64 92, !126, i64 96, !12, i64 100, !12, i64 101, !12, i64 102, !12, i64 103, !12, i64 104, !12, i64 105, !12, i64 106, !12, i64 107, !12, i64 108, !12, i64 109, !12, i64 110, !12, i64 111, !12, i64 112, !12, i64 113, !12, i64 114, !12, i64 115, !12, i64 116, !12, i64 117, !12, i64 118, !10, i64 120, !127, i64 124, !12, i64 128, !12, i64 129, !12, i64 130, !12, i64 131, !12, i64 132, !12, i64 133, !12, i64 134, !12, i64 135, !12, i64 136}
!125 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options8PlatformE", !7, i64 0}
!126 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options19ArgumentBuffersTierE", !7, i64 0}
!127 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options9IndexTypeE", !7, i64 0}
!128 = !{!"_ZTSSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE", !129, i64 0}
!129 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE", !130, i64 0}
!130 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !131, i64 0, !133, i64 8}
!131 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEEE", !132, i64 0}
!132 = !{!"_ZTSSt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEE"}
!133 = !{!"_ZTSSt15_Rb_tree_header", !134, i64 0, !30, i64 32}
!134 = !{!"_ZTSSt18_Rb_tree_node_base", !135, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!135 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!136 = !{!"_ZTSSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE", !137, i64 0}
!137 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !138, i64 0}
!138 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !139, i64 0, !133, i64 8}
!139 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross21LocationComponentPairEEE", !140, i64 0}
!140 = !{!"_ZTSSt4lessIN11spirv_cross21LocationComponentPairEE"}
!141 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE", !142, i64 0}
!142 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross26MSLShaderInterfaceVariableEESaIS4_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!143 = !{!"_ZTSSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE", !144, i64 0}
!144 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE", !145, i64 0}
!145 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !146, i64 0, !133, i64 8}
!146 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !147, i64 0}
!147 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!148 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingESt4pairINS0_18MSLResourceBindingEbENS0_14InternalHasherESt8equal_toIS1_ESaIS2_IKS1_S4_EEE", !149, i64 0}
!149 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_S2_INS0_18MSLResourceBindingEbEESaIS6_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!150 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingEjNS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_jEEE", !151, i64 0}
!151 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_jESaIS4_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!152 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !10, i64 0}
!153 = !{!"_ZTSN11spirv_cross11CompilerMSL8TriStateE", !7, i64 0}
!154 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!155 = !{!"_ZTSSt3mapIjN11spirv_cross19MSLConstexprSamplerESt4lessIjESaISt4pairIKjS1_EEE", !156, i64 0}
!156 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE", !157, i64 0}
!157 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !158, i64 0, !133, i64 8}
!158 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIjEE", !159, i64 0}
!159 = !{!"_ZTSSt4lessIjE"}
!160 = !{!"_ZTSSt13unordered_mapIN11spirv_cross14SetBindingPairENS0_19MSLConstexprSamplerENS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_S2_EEE", !161, i64 0}
!161 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairESt4pairIKS1_NS0_19MSLConstexprSamplerEESaIS5_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!162 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !163, i64 0, !30, i64 16, !164, i64 24}
!163 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !6, i64 0, !30, i64 8}
!164 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !7, i64 0}
!165 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEE", !166, i64 0, !30, i64 16, !167, i64 24}
!166 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_12SPIRVariableEEE", !6, i64 0, !30, i64 8}
!167 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_12SPIRVariableELm8EEE", !7, i64 0}
!168 = !{!"_ZTSSt3mapIN11spirv_cross14SetBindingPairESt4pairIjjESt4lessIS1_ESaIS2_IKS1_S3_EEE", !169, i64 0}
!169 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !170, i64 0}
!170 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !171, i64 0, !133, i64 8}
!171 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross14SetBindingPairEEE", !172, i64 0}
!172 = !{!"_ZTSSt4lessIN11spirv_cross14SetBindingPairEE"}
!173 = !{!"_ZTSSt13unordered_setIN11spirv_cross14SetBindingPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !174, i64 0}
!174 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !6, i64 48}
!175 = !{!176, !97, i64 16}
!176 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !177, i64 0, !154, i64 12, !97, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !64, i64 32, !179, i64 88, !10, i64 120, !12, i64 124, !12, i64 125, !182, i64 128, !103, i64 136, !64, i64 192, !183, i64 248, !184, i64 272, !184, i64 276, !92, i64 280}
!177 = !{!"_ZTSN11spirv_cross8IVariantE", !178, i64 8}
!178 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!179 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !180, i64 0, !30, i64 16, !181, i64 24}
!180 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !30, i64 8}
!181 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!182 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!183 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !184, i64 0, !185, i64 4, !12, i64 8, !12, i64 9, !12, i64 10, !10, i64 12, !186, i64 16, !187, i64 20}
!184 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!185 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!186 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!187 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!188 = !{!176, !10, i64 24}
!189 = !{!176, !10, i64 28}
!190 = !{i8 0, i8 2}
!191 = !{}
!192 = !{!176, !10, i64 20}
!193 = !{!176, !10, i64 260}
!194 = !{!14, !126, i64 10132}
!195 = !{!196, !196, i64 0}
!196 = !{!"_ZTSN3spv7BuiltInE", !7, i64 0}
!197 = !{!198, !198, i64 0}
!198 = !{!"vtable pointer", !8, i64 0}


; 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.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::allocator.71" = type { i8 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.156 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.167 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.168 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.169 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.290 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1303 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.1304 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1305 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1306 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1307 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1308 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1309 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1310 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1311 = external hidden unnamed_addr constant [25 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross11CompilerMSL23get_resource_array_sizeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options6is_iosEv(ptr noundef nonnull align 4 dereferenceable(137)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) local_unnamed_addr #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef) local_unnamed_addr #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) local_unnamed_addr #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #6

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #6

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

declare void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef) local_unnamed_addr #2 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler30has_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482), i8 noundef zeroext) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL16add_typedef_lineERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL16to_struct_memberERKNS_8SPIRTypeEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3, i32 noundef %4, ptr noundef nonnull align 8 dereferenceable(32) %5) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"struct.spirv_cross::SPIRType", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::allocator.71", align 1
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::allocator.71", align 1
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.spirv_cross::TypedID.413", align 4
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca i32, align 4
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca i32, align 4
  %30 = alloca %"class.std::allocator.71", align 1
  %31 = alloca %"struct.spirv_cross::SPIRType", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"struct.spirv_cross::SPIRType", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca ptr, align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL32member_is_remapped_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %4)
  br i1 %49, label %50, label %54

50:                                               ; preds = %6
  %51 = getelementptr inbounds i8, ptr %2, i64 8
  %52 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
  %53 = tail call noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %52, i32 noundef %4, i32 noundef 1)
  br label %54

54:                                               ; preds = %50, %6
  %.097 = phi i32 [ %53, %50 ], [ %3, %6 ]
  %55 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %.097)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  %56 = getelementptr inbounds i8, ptr %2, i64 8
  %57 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
  %58 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler30has_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %57, i32 noundef %4, i32 noundef 5)
          to label %59 unwind label %63

59:                                               ; preds = %54
  br i1 %58, label %60, label %65

60:                                               ; preds = %59
  %61 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
  %62 = invoke noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %61, i32 noundef %4, i32 noundef 5)
          to label %65 unwind label %63

63:                                               ; preds = %60, %54
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %441

65:                                               ; preds = %60, %59
  %.099 = phi i32 [ 0, %59 ], [ %62, %60 ]
  %66 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %55)
          to label %67 unwind label %72

67:                                               ; preds = %65
  br i1 %66, label %68, label %74

68:                                               ; preds = %67
  %69 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
          to label %70 unwind label %72

70:                                               ; preds = %68
  %71 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %69, i32 noundef %4, i32 noundef 4)
          to label %74 unwind label %72

72:                                               ; preds = %70, %68, %65
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %441

74:                                               ; preds = %70, %67
  %.0137 = phi i1 [ false, %67 ], [ %71, %70 ]
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %8) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %8, i32 noundef 24)
          to label %75 unwind label %80

75:                                               ; preds = %74
  %76 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
          to label %77 unwind label %82

77:                                               ; preds = %75
  %78 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %76, i32 noundef %4, i32 noundef 35)
          to label %79 unwind label %82

79:                                               ; preds = %77
  br i1 %78, label %.sink.split, label %84

80:                                               ; preds = %74
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %440

82:                                               ; preds = %.invoke, %224, %206, %202, %200, %196, %190, %188, %185, %100, %89, %84, %77, %75
  %83 = landingpad { ptr, i32 }
          cleanup
  br label %439

84:                                               ; preds = %79
  %85 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
  %86 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler30has_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %85, i32 noundef %4, i32 noundef 6)
          to label %87 unwind label %82

87:                                               ; preds = %84
  br i1 %86, label %.sink.split, label %89

.sink.split:                                      ; preds = %87, %79
  %88 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 1, ptr %88, align 2, !tbaa !5
  br label %89

89:                                               ; preds = %.sink.split, %87
  %90 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30member_is_packed_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %4)
          to label %91 unwind label %82

91:                                               ; preds = %89
  br i1 %90, label %92, label %190

92:                                               ; preds = %91
  %93 = getelementptr inbounds i8, ptr %55, i64 16
  %94 = load i32, ptr %93, align 8, !tbaa !172
  %95 = icmp eq i32 %94, 15
  br i1 %95, label %96, label %100

96:                                               ; preds = %92
  %97 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %97, ptr noundef nonnull @.str.1303)
          to label %.invoke unwind label %98

98:                                               ; preds = %96
  %99 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %97) #7
  br label %439

100:                                              ; preds = %92
  %101 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %55)
          to label %102 unwind label %82

102:                                              ; preds = %100
  br i1 %101, label %103, label %185

103:                                              ; preds = %102
  %104 = getelementptr inbounds i8, ptr %55, i64 24
  %105 = load i32, ptr %104, align 8, !tbaa !185
  %106 = getelementptr inbounds i8, ptr %55, i64 28
  %107 = load i32, ptr %106, align 4, !tbaa !186
  %108 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.156)
          to label %109 unwind label %114

109:                                              ; preds = %103
  br i1 %.0137, label %110, label %116

110:                                              ; preds = %109
  %111 = load i32, ptr %106, align 4, !tbaa !186
  %112 = load i32, ptr %104, align 8, !tbaa !185
  %113 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.1304)
          to label %116 unwind label %114

114:                                              ; preds = %110, %103
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %439

116:                                              ; preds = %110, %109
  %.0101 = phi i32 [ %111, %110 ], [ %105, %109 ]
  %.0100 = phi i32 [ %112, %110 ], [ %107, %109 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  %117 = getelementptr inbounds i8, ptr %55, i64 20
  %118 = load i32, ptr %117, align 4, !tbaa !187
  %119 = icmp eq i32 %118, 16
  %120 = select i1 %119, ptr @.str.167, ptr @.str.168
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull %120, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %121 unwind label %144

121:                                              ; preds = %116
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.1305, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %122 unwind label %146

122:                                              ; preds = %121
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull @.str.156, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %123 unwind label %148

123:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, i32 noundef %.0101) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %124 unwind label %150

124:                                              ; preds = %123
  %125 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %126 unwind label %152

126:                                              ; preds = %124
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %127 unwind label %156

127:                                              ; preds = %126
  %128 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %129 unwind label %158

129:                                              ; preds = %127
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #7
  %130 = load i32, ptr %106, align 4, !tbaa !186
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, i32 noundef %130) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %131 unwind label %161

131:                                              ; preds = %129
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull @.str.169)
          to label %132 unwind label %163

132:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #7
  %133 = load i32, ptr %104, align 8, !tbaa !185
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, i32 noundef %133) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %134 unwind label %165

134:                                              ; preds = %132
  %135 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %136 unwind label %167

136:                                              ; preds = %134
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #7
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, i32 noundef %.0100) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %137 unwind label %172

137:                                              ; preds = %136
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull @.str.69)
          to label %138 unwind label %174

138:                                              ; preds = %137
  %139 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %140 unwind label %176

140:                                              ; preds = %138
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  %141 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.57)
          to label %142 unwind label %180

142:                                              ; preds = %140
  invoke void @_ZN11spirv_cross11CompilerMSL16add_typedef_lineERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %143 unwind label %180

143:                                              ; preds = %142
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %211

144:                                              ; preds = %116
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #7
  br label %184

146:                                              ; preds = %121
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #7
  br label %183

148:                                              ; preds = %122
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %155

150:                                              ; preds = %123
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %154

152:                                              ; preds = %124
  %153 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  br label %154

154:                                              ; preds = %152, %150
  %.pn = phi { ptr, i32 } [ %153, %152 ], [ %151, %150 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %155

155:                                              ; preds = %154, %148
  %.pn.pn = phi { ptr, i32 } [ %.pn, %154 ], [ %149, %148 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  br label %182

156:                                              ; preds = %126
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %160

158:                                              ; preds = %127
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  br label %160

160:                                              ; preds = %158, %156
  %.pn142 = phi { ptr, i32 } [ %159, %158 ], [ %157, %156 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  br label %182

161:                                              ; preds = %129
  %162 = landingpad { ptr, i32 }
          cleanup
  br label %171

163:                                              ; preds = %131
  %164 = landingpad { ptr, i32 }
          cleanup
  br label %170

165:                                              ; preds = %132
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %169

167:                                              ; preds = %134
  %168 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %169

169:                                              ; preds = %167, %165
  %.pn144 = phi { ptr, i32 } [ %168, %167 ], [ %166, %165 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %170

170:                                              ; preds = %169, %163
  %.pn144.pn = phi { ptr, i32 } [ %.pn144, %169 ], [ %164, %163 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  br label %171

171:                                              ; preds = %170, %161
  %.pn144.pn.pn = phi { ptr, i32 } [ %.pn144.pn, %170 ], [ %162, %161 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %182

172:                                              ; preds = %136
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %179

174:                                              ; preds = %137
  %175 = landingpad { ptr, i32 }
          cleanup
  br label %178

176:                                              ; preds = %138
  %177 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  br label %178

178:                                              ; preds = %176, %174
  %.pn148 = phi { ptr, i32 } [ %177, %176 ], [ %175, %174 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  br label %179

179:                                              ; preds = %178, %172
  %.pn148.pn = phi { ptr, i32 } [ %.pn148, %178 ], [ %173, %172 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  br label %182

180:                                              ; preds = %142, %140
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %182

182:                                              ; preds = %180, %179, %171, %160, %155
  %.pn151 = phi { ptr, i32 } [ %181, %180 ], [ %.pn148.pn, %179 ], [ %.pn144.pn.pn, %171 ], [ %.pn142, %160 ], [ %.pn.pn, %155 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  br label %183

183:                                              ; preds = %182, %146
  %.pn151.pn = phi { ptr, i32 } [ %.pn151, %182 ], [ %147, %146 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  br label %184

184:                                              ; preds = %183, %144
  %.pn151.pn.pn = phi { ptr, i32 } [ %.pn151.pn, %183 ], [ %145, %144 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %439

185:                                              ; preds = %102
  %186 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %55)
          to label %187 unwind label %82

187:                                              ; preds = %185
  br i1 %186, label %211, label %188

188:                                              ; preds = %187
  %189 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.156)
          to label %211 unwind label %82

190:                                              ; preds = %91
  %191 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %55)
          to label %192 unwind label %82

192:                                              ; preds = %190
  br i1 %191, label %193, label %211

193:                                              ; preds = %192
  %194 = getelementptr inbounds i8, ptr %1, i64 10036
  %195 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %194, i32 noundef 3, i32 noundef 0, i32 noundef 0)
  br i1 %195, label %205, label %196

196:                                              ; preds = %193
  %197 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
  %198 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %197, i32 noundef 16)
          to label %199 unwind label %82

199:                                              ; preds = %196
  br i1 %198, label %200, label %205

200:                                              ; preds = %199
  %201 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.1306)
          to label %202 unwind label %82

202:                                              ; preds = %200
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i8 noundef zeroext 19)
          to label %203 unwind label %82

203:                                              ; preds = %202
  %204 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 1, ptr %204, align 2, !tbaa !5
  br label %205

205:                                              ; preds = %203, %199, %193
  br i1 %.0137, label %206, label %211

206:                                              ; preds = %205
  %207 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %8, ptr noundef nonnull align 8 dereferenceable(336) %55)
          to label %208 unwind label %82

208:                                              ; preds = %206
  %209 = getelementptr inbounds i8, ptr %8, i64 24
  %210 = getelementptr inbounds i8, ptr %8, i64 28
  call void @_ZSt4swapIjENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 4 dereferenceable(4) %209, ptr noundef nonnull align 4 dereferenceable(4) %210) #7
  br label %211

211:                                              ; preds = %192, %208, %205, %187, %188, %143
  %.0103 = phi ptr [ %55, %143 ], [ %55, %187 ], [ %55, %188 ], [ %8, %208 ], [ %55, %205 ], [ %55, %192 ]
  %212 = getelementptr inbounds i8, ptr %55, i64 16
  %213 = load i32, ptr %212, align 8, !tbaa !172
  %214 = icmp eq i32 %213, 16
  %215 = getelementptr inbounds i8, ptr %55, i64 260
  %216 = load i32, ptr %215, align 4
  %217 = icmp eq i32 %216, 2
  %or.cond = select i1 %214, i1 %217, i1 false
  br i1 %or.cond, label %218, label %233

218:                                              ; preds = %211
  %219 = getelementptr inbounds i8, ptr %1, i64 10036
  %220 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options6is_iosEv(ptr noundef nonnull align 4 dereferenceable(137) %219)
  %221 = getelementptr inbounds i8, ptr %1, i64 10132
  %222 = load i32, ptr %221, align 4
  %223 = icmp slt i32 %222, 1
  %or.cond193 = select i1 %220, i1 %223, i1 false
  br i1 %or.cond193, label %224, label %233

224:                                              ; preds = %218
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %25, i32 noundef %.099)
  %225 = load i32, ptr %25, align 4
  %226 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %225, i32 noundef 24)
          to label %227 unwind label %82

227:                                              ; preds = %224
  br i1 %226, label %233, label %228

228:                                              ; preds = %227
  %229 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %229, ptr noundef nonnull @.str.1307)
          to label %.invoke unwind label %231

.invoke:                                          ; preds = %228, %96
  %230 = phi ptr [ %97, %96 ], [ %229, %228 ]
  invoke void @__cxa_throw(ptr nonnull %230, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont unwind label %82

.cont:                                            ; preds = %.invoke
  unreachable

231:                                              ; preds = %228
  %232 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %229) #7
  br label %439

233:                                              ; preds = %227, %218, %211
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  %234 = load i32, ptr %212, align 8, !tbaa !172
  %.off = add i32 %234, -16
  %switch = icmp ult i32 %.off, 3
  br i1 %switch, label %279, label %235

235:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #7
  store i32 2147483647, ptr %27, align 4, !tbaa !188
  %236 = getelementptr inbounds i8, ptr %1, i64 11136
  %237 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %236)
  %.not158 = icmp eq i32 %237, 0
  br i1 %.not158, label %248, label %238

238:                                              ; preds = %235
  %239 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %1)
          to label %240 unwind label %268

240:                                              ; preds = %238
  %241 = getelementptr inbounds i8, ptr %239, i64 8
  %242 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %241)
  %243 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
  %244 = icmp eq i32 %242, %243
  br i1 %244, label %245, label %248

245:                                              ; preds = %240
  %246 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef 3)
          to label %247 unwind label %268

247:                                              ; preds = %245
  br i1 %246, label %.critedge, label %248

248:                                              ; preds = %247, %240, %235
  %249 = getelementptr inbounds i8, ptr %1, i64 11132
  %250 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %249)
  %.not159 = icmp eq i32 %250, 0
  br i1 %.not159, label %261, label %251

251:                                              ; preds = %248
  %252 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %1)
          to label %253 unwind label %268

253:                                              ; preds = %251
  %254 = getelementptr inbounds i8, ptr %252, i64 8
  %255 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %254)
  %256 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
  %257 = icmp eq i32 %255, %256
  br i1 %257, label %258, label %261

258:                                              ; preds = %253
  %259 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef 1)
          to label %260 unwind label %268

260:                                              ; preds = %258
  br i1 %259, label %.critedge, label %261

261:                                              ; preds = %260, %253, %248
  %262 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %1)
          to label %263 unwind label %268

263:                                              ; preds = %261
  br i1 %262, label %.critedge, label %270

.critedge:                                        ; preds = %260, %247, %263
  %264 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %4, ptr noundef nonnull %27)
          to label %265 unwind label %268

265:                                              ; preds = %.critedge
  br i1 %264, label %266, label %270

266:                                              ; preds = %265
  %267 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 1, ptr %267, align 2, !tbaa !5
  br label %270

268:                                              ; preds = %.critedge, %261, %258, %251, %245, %238
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %278

270:                                              ; preds = %266, %265, %263
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #7
  %271 = load ptr, ptr %1, align 8, !tbaa !190
  %272 = getelementptr inbounds i8, ptr %271, i64 304
  %273 = load ptr, ptr %272, align 8
  invoke void %273(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %55, i32 noundef %.099)
          to label %274 unwind label %276

274:                                              ; preds = %270
  %275 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #7
  br label %279

276:                                              ; preds = %270
  %277 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %278

278:                                              ; preds = %276, %268
  %.pn160 = phi { ptr, i32 } [ %277, %276 ], [ %269, %268 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #7
  br label %438

279:                                              ; preds = %233, %274
  %280 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %1)
          to label %281 unwind label %291

281:                                              ; preds = %279
  br i1 %280, label %282, label %355

282:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #7
  store i32 2147483647, ptr %29, align 4, !tbaa !188
  %283 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %4, ptr noundef nonnull %29)
          to label %284 unwind label %293

284:                                              ; preds = %282
  br i1 %283, label %285, label %.critedge195

285:                                              ; preds = %284
  %286 = load i32, ptr %29, align 4, !tbaa !188
  %287 = icmp eq i32 %286, 4432
  br i1 %287, label %288, label %297

288:                                              ; preds = %285
  %289 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 0, ptr %289, align 2, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %290 unwind label %295

290:                                              ; preds = %288
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #7
  br label %353

291:                                              ; preds = %279
  %292 = landingpad { ptr, i32 }
          cleanup
  br label %438

293:                                              ; preds = %282
  %294 = landingpad { ptr, i32 }
          cleanup
  br label %354

295:                                              ; preds = %288
  %296 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #7
  br label %354

297:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %31) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %31, ptr noundef nonnull align 8 dereferenceable(336) %.0103)
          to label %298 unwind label %300

298:                                              ; preds = %297
  %299 = load i32, ptr %29, align 4
  switch i32 %299, label %304 [
    i32 5299, label %.sink.split196
    i32 10, label %302
    i32 9, label %302
    i32 7, label %302
  ]

300:                                              ; preds = %297
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %352

302:                                              ; preds = %298, %298, %298
  br label %.sink.split196

.sink.split196:                                   ; preds = %298, %302
  %.sink = phi i32 [ 8, %302 ], [ 2, %298 ]
  %303 = getelementptr inbounds i8, ptr %31, i64 16
  store i32 %.sink, ptr %303, align 8, !tbaa !172
  br label %304

304:                                              ; preds = %.sink.split196, %298
  %305 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 1, ptr %305, align 2, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  %306 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
          to label %307 unwind label %320

307:                                              ; preds = %304
  %308 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %306, i32 noundef %.099, i32 noundef 11)
          to label %309 unwind label %320

309:                                              ; preds = %307
  br i1 %308, label %310, label %333

310:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #7
  invoke void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %31, i32 noundef %.099, i1 noundef zeroext false)
          to label %311 unwind label %322

311:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #7
  %312 = load i32, ptr %29, align 4, !tbaa !188
  %313 = load ptr, ptr %1, align 8, !tbaa !190
  %314 = getelementptr inbounds i8, ptr %313, i64 160
  %315 = load ptr, ptr %314, align 8
  invoke void %315(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %312, i32 noundef 3)
          to label %316 unwind label %324

316:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #7
  invoke void @_ZN11spirv_cross11CompilerMSL26member_attribute_qualifierB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %4)
          to label %317 unwind label %326

317:                                              ; preds = %316
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRKS6_S6_S6_RS6_S9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %318 unwind label %328

318:                                              ; preds = %317
  %319 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  br label %350

320:                                              ; preds = %307, %304
  %321 = landingpad { ptr, i32 }
          cleanup
  br label %351

322:                                              ; preds = %310
  %323 = landingpad { ptr, i32 }
          cleanup
  br label %332

324:                                              ; preds = %311
  %325 = landingpad { ptr, i32 }
          cleanup
  br label %331

326:                                              ; preds = %316
  %327 = landingpad { ptr, i32 }
          cleanup
  br label %330

328:                                              ; preds = %317
  %329 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br label %330

330:                                              ; preds = %328, %326
  %.pn166 = phi { ptr, i32 } [ %329, %328 ], [ %327, %326 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %331

331:                                              ; preds = %330, %324
  %.pn166.pn = phi { ptr, i32 } [ %.pn166, %330 ], [ %325, %324 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  br label %332

332:                                              ; preds = %331, %322
  %.pn166.pn.pn = phi { ptr, i32 } [ %.pn166.pn, %331 ], [ %323, %322 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  br label %351

333:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #7
  invoke void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %31, i32 noundef %.099, i1 noundef zeroext false)
          to label %334 unwind label %339

334:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %4)
          to label %335 unwind label %341

335:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  invoke void @_ZN11spirv_cross11CompilerMSL26member_attribute_qualifierB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %4)
          to label %336 unwind label %343

336:                                              ; preds = %335
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRKS6_S6_S6_RS6_S9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %337 unwind label %345

337:                                              ; preds = %336
  %338 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  br label %350

339:                                              ; preds = %333
  %340 = landingpad { ptr, i32 }
          cleanup
  br label %349

341:                                              ; preds = %334
  %342 = landingpad { ptr, i32 }
          cleanup
  br label %348

343:                                              ; preds = %335
  %344 = landingpad { ptr, i32 }
          cleanup
  br label %347

345:                                              ; preds = %336
  %346 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  br label %347

347:                                              ; preds = %345, %343
  %.pn162 = phi { ptr, i32 } [ %346, %345 ], [ %344, %343 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  br label %348

348:                                              ; preds = %347, %341
  %.pn162.pn = phi { ptr, i32 } [ %.pn162, %347 ], [ %342, %341 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  br label %349

349:                                              ; preds = %348, %339
  %.pn162.pn.pn = phi { ptr, i32 } [ %.pn162.pn, %348 ], [ %340, %339 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  br label %351

350:                                              ; preds = %337, %318
  store i8 0, ptr %305, align 2, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %31) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %31) #7
  br label %353

351:                                              ; preds = %349, %332, %320
  %.pn166.pn.pn.pn = phi { ptr, i32 } [ %.pn166.pn.pn, %332 ], [ %.pn162.pn.pn, %349 ], [ %321, %320 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %31) #7
  br label %352

352:                                              ; preds = %351, %300
  %.pn166.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn166.pn.pn.pn, %351 ], [ %301, %300 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %31) #7
  br label %354

353:                                              ; preds = %350, %290
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  br label %437

354:                                              ; preds = %352, %295, %293
  %.pn172 = phi { ptr, i32 } [ %296, %295 ], [ %.pn166.pn.pn.pn.pn, %352 ], [ %294, %293 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  br label %438

.critedge195:                                     ; preds = %284
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  br label %355

355:                                              ; preds = %.critedge195, %281
  %.not174 = icmp eq i32 %.099, 0
  br i1 %.not174, label %372, label %356

356:                                              ; preds = %355
  %357 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0103)
          to label %358 unwind label %361

358:                                              ; preds = %356
  br i1 %357, label %359, label %363

359:                                              ; preds = %358
  %360 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0103)
          to label %363 unwind label %361

361:                                              ; preds = %370, %366, %363, %359, %356
  %362 = landingpad { ptr, i32 }
          cleanup
  br label %438

363:                                              ; preds = %359, %358
  %.0 = phi ptr [ %.0103, %358 ], [ %360, %359 ]
  %364 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0)
          to label %365 unwind label %361

365:                                              ; preds = %363
  br i1 %364, label %366, label %372

366:                                              ; preds = %365
  %367 = invoke noundef i32 @_ZNK11spirv_cross11CompilerMSL23get_resource_array_sizeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0, i32 noundef %.099)
          to label %368 unwind label %361

368:                                              ; preds = %366
  %369 = icmp eq i32 %367, 0
  br i1 %369, label %370, label %372

370:                                              ; preds = %368
  %371 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull @.str.1308)
          to label %372 unwind label %361

372:                                              ; preds = %365, %368, %370, %355
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  %373 = getelementptr inbounds i8, ptr %.0103, i64 24
  %374 = load i32, ptr %373, align 8, !tbaa !185
  %375 = icmp ugt i32 %374, 4
  br i1 %375, label %376, label %411

376:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %41) #7
  %377 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %3)
          to label %378 unwind label %385

378:                                              ; preds = %376
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %41, ptr noundef nonnull align 8 dereferenceable(336) %377)
          to label %379 unwind label %385

379:                                              ; preds = %378
  %380 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %41)
          to label %381 unwind label %387

381:                                              ; preds = %379
  %brmerge.demorgan = and i1 %.0137, %380
  br i1 %brmerge.demorgan, label %382, label %389

382:                                              ; preds = %381
  %383 = getelementptr inbounds i8, ptr %41, i64 24
  %384 = getelementptr inbounds i8, ptr %41, i64 28
  call void @_ZSt4swapIjENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 4 dereferenceable(4) %383, ptr noundef nonnull align 4 dereferenceable(4) %384) #7
  br label %389

385:                                              ; preds = %378, %376
  %386 = landingpad { ptr, i32 }
          cleanup
  br label %410

387:                                              ; preds = %379
  %388 = landingpad { ptr, i32 }
          cleanup
  br label %409

389:                                              ; preds = %381, %382
  %390 = getelementptr inbounds i8, ptr %41, i64 28
  store i32 1, ptr %390, align 4, !tbaa !186
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #7
  invoke void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %41, i32 noundef %.099, i1 noundef zeroext true)
          to label %391 unwind label %399

391:                                              ; preds = %389
  %392 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #7
  %393 = getelementptr inbounds i8, ptr %.0103, i64 28
  %394 = load i32, ptr %393, align 4, !tbaa !186
  %395 = icmp ugt i32 %394, 1
  br i1 %395, label %396, label %403

396:                                              ; preds = %391
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #7
  invoke void @_ZN11spirv_cross4joinIJRA23_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RKjRA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 1 dereferenceable(23) @.str.1309, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 4 dereferenceable(4) %393, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %397 unwind label %401

397:                                              ; preds = %396
  %398 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %408

399:                                              ; preds = %389
  %400 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #7
  br label %409

401:                                              ; preds = %396
  %402 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %409

403:                                              ; preds = %391
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #7
  invoke void @_ZN11spirv_cross4joinIJRA17_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 1 dereferenceable(17) @.str.1310, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %404 unwind label %406

404:                                              ; preds = %403
  %405 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  br label %408

406:                                              ; preds = %403
  %407 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  br label %409

408:                                              ; preds = %404, %397
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %41) #7
  br label %416

409:                                              ; preds = %406, %401, %399, %387
  %.pn175 = phi { ptr, i32 } [ %402, %401 ], [ %407, %406 ], [ %400, %399 ], [ %388, %387 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #7
  br label %410

410:                                              ; preds = %409, %385
  %.pn175.pn = phi { ptr, i32 } [ %.pn175, %409 ], [ %386, %385 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %41) #7
  br label %436

411:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #7
  invoke void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0103, i32 noundef %.099, i1 noundef zeroext true)
          to label %412 unwind label %414

412:                                              ; preds = %411
  %413 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  br label %416

414:                                              ; preds = %411
  %415 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  br label %436

416:                                              ; preds = %412, %408
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #7
  %417 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
  %418 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler30has_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %417, i32 noundef %4, i32 noundef 17)
          to label %419 unwind label %425

419:                                              ; preds = %416
  %420 = select i1 %418, ptr @.str.1311, ptr @.str.35
  store ptr %420, ptr %46, align 8, !tbaa !192
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %4)
          to label %421 unwind label %427

421:                                              ; preds = %419
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #7
  invoke void @_ZN11spirv_cross11CompilerMSL26member_attribute_qualifierB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %4)
          to label %422 unwind label %429

422:                                              ; preds = %421
  invoke void @_ZN11spirv_cross4joinIJRPKcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_RA2_S1_RKS9_S9_S9_SA_SC_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %423 unwind label %431

423:                                              ; preds = %422
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  %424 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 0, ptr %424, align 2, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  br label %437

425:                                              ; preds = %416
  %426 = landingpad { ptr, i32 }
          cleanup
  br label %435

427:                                              ; preds = %419
  %428 = landingpad { ptr, i32 }
          cleanup
  br label %434

429:                                              ; preds = %421
  %430 = landingpad { ptr, i32 }
          cleanup
  br label %433

431:                                              ; preds = %422
  %432 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  br label %433

433:                                              ; preds = %431, %429
  %.pn178 = phi { ptr, i32 } [ %432, %431 ], [ %430, %429 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  br label %434

434:                                              ; preds = %433, %427
  %.pn178.pn = phi { ptr, i32 } [ %.pn178, %433 ], [ %428, %427 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  br label %435

435:                                              ; preds = %434, %425
  %.pn178.pn.pn = phi { ptr, i32 } [ %.pn178.pn, %434 ], [ %426, %425 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #7
  br label %436

436:                                              ; preds = %435, %414, %410
  %.pn178.pn.pn.pn = phi { ptr, i32 } [ %.pn178.pn.pn, %435 ], [ %.pn175.pn, %410 ], [ %415, %414 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  br label %438

437:                                              ; preds = %353, %423
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %8) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %8) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  ret void

438:                                              ; preds = %436, %361, %354, %291, %278
  %.pn178.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn178.pn.pn.pn, %436 ], [ %362, %361 ], [ %.pn172, %354 ], [ %292, %291 ], [ %.pn160, %278 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  br label %439

439:                                              ; preds = %114, %184, %438, %231, %98, %82
  %.pn184 = phi { ptr, i32 } [ %83, %82 ], [ %99, %98 ], [ %.pn178.pn.pn.pn.pn, %438 ], [ %232, %231 ], [ %.pn151.pn.pn, %184 ], [ %115, %114 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %8) #7
  br label %440

440:                                              ; preds = %439, %80
  %.pn184.pn = phi { ptr, i32 } [ %.pn184, %439 ], [ %81, %80 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %8) #7
  br label %441

441:                                              ; preds = %72, %440, %63
  %.pn184.pn.pn.pn = phi { ptr, i32 } [ %64, %63 ], [ %.pn184.pn, %440 ], [ %73, %72 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  resume { ptr, i32 } %.pn184.pn.pn.pn
}

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL32member_is_remapped_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) local_unnamed_addr #6

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30member_is_packed_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRKS6_S6_S6_RS6_S9_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, i1 noundef zeroext) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL26member_attribute_qualifierB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA23_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RKjRA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(23), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA17_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_RA2_S1_RKS9_S9_S9_SA_SC_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #2

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { noreturn }

!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, !53, i64 11186}
!6 = !{!"_ZTSN11spirv_cross11CompilerMSLE", !7, i64 0, !119, i64 9848, !51, i64 9904, !51, i64 9908, !51, i64 9912, !51, i64 9916, !51, i64 9920, !51, i64 9924, !51, i64 9928, !51, i64 9932, !51, i64 9936, !51, i64 9940, !51, i64 9944, !51, i64 9948, !51, i64 9952, !51, i64 9956, !51, i64 9960, !51, i64 9964, !51, i64 9968, !51, i64 9972, !51, i64 9976, !51, i64 9980, !51, i64 9984, !51, i64 9988, !51, i64 9992, !51, i64 9996, !51, i64 10000, !51, i64 10004, !51, i64 10008, !51, i64 10012, !51, i64 10016, !51, i64 10020, !51, i64 10024, !51, i64 10028, !53, i64 10032, !53, i64 10033, !121, i64 10036, !125, i64 10176, !133, i64 10224, !138, i64 10272, !133, i64 10328, !138, i64 10376, !59, i64 10432, !59, i64 10488, !59, i64 10544, !59, i64 10600, !98, i64 10656, !98, i64 10712, !98, i64 10768, !140, i64 10824, !140, i64 10872, !61, i64 10920, !145, i64 10976, !147, i64 11032, !51, i64 11088, !51, i64 11092, !51, i64 11096, !17, i64 11100, !149, i64 11132, !149, i64 11136, !149, i64 11140, !149, i64 11144, !149, i64 11148, !149, i64 11152, !149, i64 11156, !149, i64 11160, !149, i64 11164, !149, i64 11168, !149, i64 11172, !150, i64 11176, !150, i64 11180, !53, i64 11184, !53, i64 11185, !53, i64 11186, !53, i64 11187, !53, i64 11188, !53, i64 11189, !53, i64 11190, !53, i64 11191, !53, i64 11192, !53, i64 11193, !53, i64 11194, !53, i64 11195, !53, i64 11196, !56, i64 11200, !56, i64 11232, !56, i64 11264, !56, i64 11296, !56, i64 11328, !56, i64 11360, !56, i64 11392, !56, i64 11424, !56, i64 11456, !56, i64 11488, !56, i64 11520, !56, i64 11552, !56, i64 11584, !56, i64 11616, !56, i64 11648, !56, i64 11680, !151, i64 11712, !152, i64 11720, !157, i64 11768, !59, i64 11824, !159, i64 11880, !61, i64 11968, !59, i64 12024, !59, i64 12080, !59, i64 12136, !162, i64 12192, !165, i64 12280, !61, i64 12328, !170, i64 12384, !17, i64 12440, !51, i64 12472, !51, i64 12476, !53, i64 12480, !53, i64 12481}
!7 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !8, i64 0, !16, i64 3176, !77, i64 3184, !53, i64 3272, !80, i64 3280, !16, i64 7616, !16, i64 7624, !53, i64 7632, !53, i64 7633, !85, i64 7636, !89, i64 7680, !89, i64 7736, !89, i64 7792, !89, i64 7848, !89, i64 7904, !89, i64 7960, !89, i64 8016, !91, i64 8072, !75, i64 8128, !53, i64 8184, !93, i64 8192, !51, i64 8416, !59, i64 8424, !59, i64 8480, !59, i64 8536, !95, i64 8592, !97, i64 8648, !98, i64 8656, !40, i64 8712, !40, i64 8992, !98, i64 9272, !100, i64 9328, !51, i64 9384, !51, i64 9388, !51, i64 9392, !53, i64 9396, !53, i64 9397, !103, i64 9400, !103, i64 9424, !107, i64 9448, !111, i64 9472, !98, i64 9496, !59, i64 9552, !59, i64 9608, !17, i64 9664, !115, i64 9672, !59, i64 9728, !16, i64 9784, !117, i64 9792}
!8 = !{!"_ZTSN11spirv_cross8CompilerE", !9, i64 8, !61, i64 1928, !61, i64 1984, !16, i64 2040, !16, i64 2048, !51, i64 2056, !64, i64 2064, !53, i64 2120, !59, i64 2128, !53, i64 2184, !53, i64 2185, !66, i64 2192, !61, i64 2312, !69, i64 2368, !59, i64 2400, !59, i64 2456, !59, i64 2512, !59, i64 2568, !59, i64 2624, !58, i64 2680, !58, i64 2744, !51, i64 2808, !51, i64 2812, !53, i64 2816, !59, i64 2824, !53, i64 2880, !53, i64 2881, !51, i64 2884, !71, i64 2888, !61, i64 2944, !73, i64 3000, !59, i64 3056, !53, i64 3112, !75, i64 3120}
!9 = !{!"_ZTSN11spirv_cross8ParsedIRE", !10, i64 0, !19, i64 8, !23, i64 32, !27, i64 248, !17, i64 304, !32, i64 1088, !32, i64 1144, !35, i64 1200, !37, i64 1256, !40, i64 1312, !43, i64 1592, !46, i64 1624, !48, i64 1680, !50, i64 1736, !52, i64 1740, !54, i64 1748, !55, i64 1752, !51, i64 1756, !51, i64 1760, !56, i64 1768, !58, i64 1800, !59, i64 1864}
!10 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !11, i64 0}
!11 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !12, i64 0}
!12 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !13, i64 0}
!13 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !14, i64 0}
!14 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !15, i64 0}
!15 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !16, i64 0}
!16 = !{!"any pointer", !17, i64 0}
!17 = !{!"omnipotent char", !18, i64 0}
!18 = !{!"Simple C++ TBAA"}
!19 = !{!"_ZTSSt6vectorIjSaIjEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!23 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !24, i64 0, !25, i64 16, !26, i64 24}
!24 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !16, i64 0, !25, i64 8}
!25 = !{!"long", !17, i64 0}
!26 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !17, i64 0}
!27 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !28, i64 0}
!28 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!29 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !16, i64 0}
!30 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !31, i64 0, !25, i64 8}
!31 = !{!"float", !17, i64 0}
!32 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !33, i64 0, !25, i64 16, !34, i64 24}
!33 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !16, i64 0, !25, i64 8}
!34 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !17, i64 0}
!35 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !36, i64 0}
!36 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!37 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !38, i64 0, !25, i64 16, !39, i64 24}
!38 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !16, i64 0, !25, i64 8}
!39 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !17, i64 0}
!40 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !41, i64 0, !25, i64 16, !42, i64 24}
!41 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !16, i64 0, !25, i64 8}
!42 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !17, i64 0}
!43 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !44, i64 0, !25, i64 16, !45, i64 24}
!44 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !16, i64 0, !25, i64 8}
!45 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !17, i64 0}
!46 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !47, i64 0}
!47 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!48 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !49, i64 0}
!49 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!50 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !51, i64 0}
!51 = !{!"int", !17, i64 0}
!52 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !51, i64 0, !53, i64 4, !53, i64 5, !53, i64 6}
!53 = !{!"bool", !17, i64 0}
!54 = !{!"_ZTSN3spv15AddressingModelE", !17, i64 0}
!55 = !{!"_ZTSN3spv11MemoryModelE", !17, i64 0}
!56 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !57, i64 0, !25, i64 8, !17, i64 16}
!57 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !16, i64 0}
!58 = !{!"_ZTSN11spirv_cross6BitsetE", !25, i64 0, !59, i64 8}
!59 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !60, i64 0}
!60 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!61 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !62, i64 0, !25, i64 16, !63, i64 24}
!62 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !16, i64 0, !25, i64 8}
!63 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !17, i64 0}
!64 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !65, i64 0}
!65 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!66 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !67, i64 0, !25, i64 16, !68, i64 24}
!67 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !16, i64 0, !25, i64 8}
!68 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !17, i64 0}
!69 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !70, i64 0, !16, i64 24}
!70 = !{!"_ZTSSt14_Function_base", !17, i64 0, !16, i64 16}
!71 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !72, i64 0}
!72 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!73 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !74, i64 0}
!74 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!75 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !76, i64 0}
!76 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!77 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !78, i64 0, !25, i64 16, !79, i64 24}
!78 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !16, i64 0, !25, i64 8}
!79 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !17, i64 0}
!80 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !81, i64 0, !17, i64 24, !82, i64 4120}
!81 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !16, i64 0, !25, i64 8, !25, i64 16}
!82 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !83, i64 0, !25, i64 16, !84, i64 24}
!83 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !16, i64 0, !25, i64 8}
!84 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !17, i64 0}
!85 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !51, i64 0, !53, i64 4, !53, i64 5, !51, i64 8, !53, i64 12, !53, i64 13, !53, i64 14, !53, i64 15, !53, i64 16, !53, i64 17, !53, i64 18, !53, i64 19, !53, i64 20, !53, i64 21, !53, i64 22, !53, i64 23, !51, i64 24, !86, i64 28, !87, i64 32}
!86 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !53, i64 0, !53, i64 1, !53, i64 2}
!87 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !88, i64 0, !88, i64 4}
!88 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !17, i64 0}
!89 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !90, i64 0}
!90 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!91 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !92, i64 0}
!92 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!93 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !56, i64 0, !56, i64 32, !56, i64 64, !53, i64 96, !53, i64 97, !53, i64 98, !53, i64 99, !16, i64 104, !16, i64 112, !16, i64 120, !16, i64 128, !16, i64 136, !16, i64 144, !16, i64 152, !16, i64 160, !16, i64 168, !16, i64 176, !94, i64 184, !53, i64 188, !53, i64 189, !53, i64 190, !53, i64 191, !53, i64 192, !53, i64 193, !53, i64 194, !53, i64 195, !53, i64 196, !53, i64 197, !53, i64 198, !53, i64 199, !53, i64 200, !53, i64 201, !53, i64 202, !53, i64 203, !53, i64 204, !53, i64 205, !53, i64 206, !53, i64 207, !53, i64 208, !53, i64 209, !53, i64 210, !53, i64 211, !53, i64 212, !53, i64 213, !53, i64 214, !53, i64 215, !53, i64 216, !53, i64 217, !53, i64 218, !53, i64 219}
!94 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !17, i64 0}
!95 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !96, i64 0}
!96 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!97 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !51, i64 0}
!98 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !99, i64 0}
!99 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!100 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !101, i64 0, !25, i64 16, !102, i64 24}
!101 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !16, i64 0, !25, i64 8}
!102 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !17, i64 0}
!103 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !104, i64 0}
!104 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !105, i64 0}
!105 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !106, i64 0}
!106 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!107 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !108, i64 0}
!108 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !109, i64 0}
!109 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !110, i64 0}
!110 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!111 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !112, i64 0}
!112 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !113, i64 0}
!113 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !114, i64 0}
!114 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!115 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !116, i64 0}
!116 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!117 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !118, i64 0}
!118 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!119 = !{!"_ZTSSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEE", !120, i64 0}
!120 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt3setIjSt4lessIjESaIjEEESaIS7_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!121 = !{!"_ZTSN11spirv_cross11CompilerMSL7OptionsE", !122, i64 0, !51, i64 4, !51, i64 8, !51, i64 12, !51, i64 16, !51, i64 20, !51, i64 24, !51, i64 28, !51, i64 32, !51, i64 36, !51, i64 40, !51, i64 44, !51, i64 48, !51, i64 52, !51, i64 56, !51, i64 60, !51, i64 64, !51, i64 68, !51, i64 72, !51, i64 76, !53, i64 80, !53, i64 81, !53, i64 82, !53, i64 83, !53, i64 84, !53, i64 85, !53, i64 86, !53, i64 87, !53, i64 88, !53, i64 89, !53, i64 90, !53, i64 91, !53, i64 92, !123, i64 96, !53, i64 100, !53, i64 101, !53, i64 102, !53, i64 103, !53, i64 104, !53, i64 105, !53, i64 106, !53, i64 107, !53, i64 108, !53, i64 109, !53, i64 110, !53, i64 111, !53, i64 112, !53, i64 113, !53, i64 114, !53, i64 115, !53, i64 116, !53, i64 117, !53, i64 118, !51, i64 120, !124, i64 124, !53, i64 128, !53, i64 129, !53, i64 130, !53, i64 131, !53, i64 132, !53, i64 133, !53, i64 134, !53, i64 135, !53, i64 136}
!122 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options8PlatformE", !17, i64 0}
!123 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options19ArgumentBuffersTierE", !17, i64 0}
!124 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options9IndexTypeE", !17, i64 0}
!125 = !{!"_ZTSSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE", !126, i64 0}
!126 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE", !127, i64 0}
!127 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !128, i64 0, !130, i64 8}
!128 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEEE", !129, i64 0}
!129 = !{!"_ZTSSt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEE"}
!130 = !{!"_ZTSSt15_Rb_tree_header", !131, i64 0, !25, i64 32}
!131 = !{!"_ZTSSt18_Rb_tree_node_base", !132, i64 0, !16, i64 8, !16, i64 16, !16, i64 24}
!132 = !{!"_ZTSSt14_Rb_tree_color", !17, i64 0}
!133 = !{!"_ZTSSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE", !134, i64 0}
!134 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !135, i64 0}
!135 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !136, i64 0, !130, i64 8}
!136 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross21LocationComponentPairEEE", !137, i64 0}
!137 = !{!"_ZTSSt4lessIN11spirv_cross21LocationComponentPairEE"}
!138 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE", !139, i64 0}
!139 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross26MSLShaderInterfaceVariableEESaIS4_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!140 = !{!"_ZTSSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE", !141, i64 0}
!141 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE", !142, i64 0}
!142 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !143, i64 0, !130, i64 8}
!143 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !144, i64 0}
!144 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!145 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingESt4pairINS0_18MSLResourceBindingEbENS0_14InternalHasherESt8equal_toIS1_ESaIS2_IKS1_S4_EEE", !146, i64 0}
!146 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_S2_INS0_18MSLResourceBindingEbEESaIS6_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!147 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingEjNS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_jEEE", !148, i64 0}
!148 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_jESaIS4_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!149 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !51, i64 0}
!150 = !{!"_ZTSN11spirv_cross11CompilerMSL8TriStateE", !17, i64 0}
!151 = !{!"_ZTSN3spv2OpE", !17, i64 0}
!152 = !{!"_ZTSSt3mapIjN11spirv_cross19MSLConstexprSamplerESt4lessIjESaISt4pairIKjS1_EEE", !153, i64 0}
!153 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE", !154, i64 0}
!154 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !155, i64 0, !130, i64 8}
!155 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIjEE", !156, i64 0}
!156 = !{!"_ZTSSt4lessIjE"}
!157 = !{!"_ZTSSt13unordered_mapIN11spirv_cross14SetBindingPairENS0_19MSLConstexprSamplerENS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_S2_EEE", !158, i64 0}
!158 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairESt4pairIKS1_NS0_19MSLConstexprSamplerEESaIS5_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!159 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !160, i64 0, !25, i64 16, !161, i64 24}
!160 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !16, i64 0, !25, i64 8}
!161 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !17, i64 0}
!162 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEE", !163, i64 0, !25, i64 16, !164, i64 24}
!163 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_12SPIRVariableEEE", !16, i64 0, !25, i64 8}
!164 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_12SPIRVariableELm8EEE", !17, i64 0}
!165 = !{!"_ZTSSt3mapIN11spirv_cross14SetBindingPairESt4pairIjjESt4lessIS1_ESaIS2_IKS1_S3_EEE", !166, i64 0}
!166 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !167, i64 0}
!167 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !168, i64 0, !130, i64 8}
!168 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross14SetBindingPairEEE", !169, i64 0}
!169 = !{!"_ZTSSt4lessIN11spirv_cross14SetBindingPairEE"}
!170 = !{!"_ZTSSt13unordered_setIN11spirv_cross14SetBindingPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !171, i64 0}
!171 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !16, i64 0, !25, i64 8, !29, i64 16, !25, i64 24, !30, i64 32, !16, i64 48}
!172 = !{!173, !94, i64 16}
!173 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !174, i64 0, !151, i64 12, !94, i64 16, !51, i64 20, !51, i64 24, !51, i64 28, !61, i64 32, !176, i64 88, !51, i64 120, !53, i64 124, !53, i64 125, !179, i64 128, !100, i64 136, !61, i64 192, !180, i64 248, !181, i64 272, !181, i64 276, !89, i64 280}
!174 = !{!"_ZTSN11spirv_cross8IVariantE", !175, i64 8}
!175 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !51, i64 0}
!176 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !177, i64 0, !25, i64 16, !178, i64 24}
!177 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !16, i64 0, !25, i64 8}
!178 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !17, i64 0}
!179 = !{!"_ZTSN3spv12StorageClassE", !17, i64 0}
!180 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !181, i64 0, !182, i64 4, !53, i64 8, !53, i64 9, !53, i64 10, !51, i64 12, !183, i64 16, !184, i64 20}
!181 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !51, i64 0}
!182 = !{!"_ZTSN3spv3DimE", !17, i64 0}
!183 = !{!"_ZTSN3spv11ImageFormatE", !17, i64 0}
!184 = !{!"_ZTSN3spv15AccessQualifierE", !17, i64 0}
!185 = !{!173, !51, i64 24}
!186 = !{!173, !51, i64 28}
!187 = !{!173, !51, i64 20}
!188 = !{!189, !189, i64 0}
!189 = !{!"_ZTSN3spv7BuiltInE", !17, i64 0}
!190 = !{!191, !191, i64 0}
!191 = !{!"vtable pointer", !18, i64 0}
!192 = !{!16, !16, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass