; 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.413" = type { i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.std::allocator.71" = type { i8 }
%"class.std::function.489" = 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.anon.499 = type { ptr, ptr, i8, i8, i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }
%class.anon.500 = type { ptr, i8, ptr, i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", ptr, i32, i8, %"class.std::__cxx11::basic_string" }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"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.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.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.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.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] }
%"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.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.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::CompilerMSL::InterfaceBlockMeta" = type <{ %"class.std::unordered_map.473", i8, i8, [6 x i8] }>
%"class.std::unordered_map.473" = type { %"class.std::_Hashtable.474" }
%"class.std::_Hashtable.474" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"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::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] }
%"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.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::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 }
%"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.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.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.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 }
%"struct.spirv_cross::SPIREntryPoint" = type <{ %"class.spirv_cross::TypedID", [4 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::SmallVector.419", %"class.spirv_cross::Bitset", %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", i32, i32, i32, i32, i8, [3 x i8] }>
%"class.spirv_cross::SmallVector.419" = type { %"class.spirv_cross::VectorView.420", i64, %"class.spirv_cross::AlignedBuffer.421" }
%"class.spirv_cross::VectorView.420" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.421" = type { [32 x i8] }
%"struct.spirv_cross::SPIREntryPoint::WorkgroupSize" = type { i32, i32, i32, i32, i32, i32, i32 }
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", i32, i32, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.415", i8, i8, i8, ptr }
%"class.spirv_cross::TypedID.415" = type { i32 }
%"struct.spirv_cross::MSLShaderInterfaceVariable" = type { i32, i32, i32, i32, i32, i32 }
%"struct.spirv_cross::SPIRFunction" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", [4 x i8], %"class.spirv_cross::SmallVector.430", %"class.spirv_cross::SmallVector.430", %"class.spirv_cross::SmallVector.419", %"class.spirv_cross::TypedID.415", [4 x i8], %"class.spirv_cross::SmallVector.433", %"class.spirv_cross::SmallVector.436", %"struct.spirv_cross::SPIRFunction::EntryLine", %"class.spirv_cross::SmallVector.439", %"class.spirv_cross::SmallVector.439", %"class.spirv_cross::SmallVector.7", i8, i8, i8, [5 x i8] }>
%"class.spirv_cross::SmallVector.430" = type { %"class.spirv_cross::VectorView.431", i64, %"class.spirv_cross::AlignedBuffer.432" }
%"class.spirv_cross::VectorView.431" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.432" = type { [160 x i8] }
%"class.spirv_cross::SmallVector.433" = type { %"class.spirv_cross::VectorView.434", i64, %"class.spirv_cross::AlignedBuffer.435" }
%"class.spirv_cross::VectorView.434" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.435" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.436" = type { %"class.spirv_cross::VectorView.437", i64, %"class.spirv_cross::AlignedBuffer.438" }
%"class.spirv_cross::VectorView.437" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.438" = type { [128 x i8] }
%"struct.spirv_cross::SPIRFunction::EntryLine" = type { i32, i32 }
%"class.spirv_cross::SmallVector.439" = type <{ %"class.spirv_cross::VectorView.440", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.440" = type { ptr, i64 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.67 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [64 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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #2 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 #4

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #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

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) #5

declare noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) #6 align 2

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

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

declare noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

declare void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176), i32, ptr noundef nonnull align 8 dereferenceable(32)) #5

; 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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) #5

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

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

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler25get_variable_element_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) #5

; 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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795), i32) #0 align 2

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

declare void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) #5

declare void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #5

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

declare noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176), i32) #5

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

declare void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef, i32 noundef) #5

declare void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef, i32 noundef) #5

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(58) %5) #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i8, align 1
  %20 = alloca i32, align 4
  %21 = alloca %"class.spirv_cross::TypedID.413", align 4
  %22 = alloca i8, align 1
  %23 = alloca %"class.spirv_cross::TypedID.413", align 4
  %24 = alloca i8, align 1
  %25 = alloca %"class.spirv_cross::TypedID.413", align 4
  %26 = alloca i8, align 1
  %27 = alloca %"class.spirv_cross::TypedID.413", align 4
  %28 = alloca i8, align 1
  %29 = alloca %"class.spirv_cross::TypedID.413", align 4
  %30 = alloca ptr, align 8
  %31 = alloca %"class.spirv_cross::TypedID.413", align 4
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca i8, align 1
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca i32, align 4
  %36 = alloca %"class.spirv_cross::TypedID.414", align 4
  %37 = alloca %"class.spirv_cross::TypedID.414", align 4
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.spirv_cross::TypedID.414", align 4
  %40 = alloca %"class.spirv_cross::TypedID.350", align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i8, align 1
  %46 = alloca i32, align 4
  %47 = alloca %"class.spirv_cross::TypedID.413", align 4
  %48 = alloca i32, align 4
  %49 = alloca %"class.spirv_cross::TypedID.413", align 4
  %50 = alloca i32, align 4
  %51 = alloca %"class.spirv_cross::TypedID.414", align 4
  %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::allocator.71", align 1
  %58 = alloca %"class.spirv_cross::TypedID.414", align 4
  %59 = alloca %"class.spirv_cross::TypedID.413", align 4
  %60 = alloca i32, align 4
  %61 = alloca %"class.spirv_cross::TypedID.413", align 4
  %62 = alloca i32, align 4
  %63 = alloca %"class.spirv_cross::TypedID.413", align 4
  %64 = alloca %"class.spirv_cross::TypedID.414", align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca %"class.spirv_cross::TypedID.414", align 4
  %68 = alloca %"class.spirv_cross::TypedID.414", align 4
  %69 = alloca %"class.spirv_cross::TypedID.414", align 4
  %70 = alloca %"class.spirv_cross::TypedID.414", align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca %"class.spirv_cross::TypedID.414", align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca %"class.spirv_cross::TypedID.414", align 4
  %79 = alloca %"class.spirv_cross::TypedID.414", align 4
  %80 = alloca %"class.spirv_cross::TypedID.414", align 4
  %81 = alloca %"class.spirv_cross::TypedID.413", align 4
  %82 = alloca i32, align 4
  %83 = alloca %"class.spirv_cross::TypedID.413", align 4
  %84 = alloca %"class.spirv_cross::TypedID.414", align 4
  %85 = alloca i32, align 4
  %86 = alloca %"class.spirv_cross::TypedID.414", align 4
  %87 = alloca %"class.spirv_cross::TypedID.414", align 4
  %88 = alloca %"class.spirv_cross::TypedID.414", align 4
  %89 = alloca %"class.spirv_cross::TypedID.414", align 4
  %90 = alloca %"class.std::function.489", align 8
  %91 = alloca %class.anon.499, align 8
  %92 = alloca %"class.std::function.489", align 8
  %93 = alloca %class.anon.500, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  %94 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %95 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %94, i32 0, i32 1
  %96 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %95, i32 0, i32 13
  %97 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %96)
  %98 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 noundef %97)
  store ptr %98, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %99 = load ptr, ptr %12, align 8, !tbaa !5
  %100 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %99, i32 0, i32 1
  %101 = load i8, ptr %100, align 8, !tbaa !11, !range !20, !noundef !21
  %102 = trunc i8 %101 to i1
  br i1 %102, label %103, label %106

103:                                              ; preds = %6
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler25get_variable_element_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %94, ptr noundef nonnull align 8 dereferenceable(176) %104)
  br label %109

106:                                              ; preds = %6
  %107 = load ptr, ptr %11, align 8, !tbaa !5
  %108 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %94, ptr noundef nonnull align 8 dereferenceable(176) %107)
  br label %109

109:                                              ; preds = %106, %103
  %110 = phi ptr [ %105, %103 ], [ %108, %106 ]
  store ptr %110, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  store i32 0, ptr %15, align 4, !tbaa !22
  %111 = load i32, ptr %8, align 4, !tbaa !9
  %112 = load ptr, ptr %9, align 8, !tbaa !5
  %113 = load ptr, ptr %11, align 8, !tbaa !5
  %114 = load ptr, ptr %14, align 8, !tbaa !5
  %115 = load ptr, ptr %12, align 8, !tbaa !5
  %116 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL41add_component_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_12SPIRVariableERKNS_8SPIRTypeERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %111, ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef nonnull align 8 dereferenceable(176) %113, ptr noundef nonnull align 8 dereferenceable(336) %114, ptr noundef nonnull align 8 dereferenceable(58) %115)
  br i1 %116, label %117, label %118

117:                                              ; preds = %109
  store i32 1, ptr %16, align 4
  br label %976

118:                                              ; preds = %109
  %119 = load ptr, ptr %14, align 8, !tbaa !5
  %120 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %94, ptr noundef nonnull align 8 dereferenceable(336) %119)
  br i1 %120, label %121, label %135

121:                                              ; preds = %118
  %122 = load ptr, ptr %14, align 8, !tbaa !5
  %123 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %94, ptr noundef nonnull align 8 dereferenceable(336) %122)
  br i1 %123, label %124, label %131

124:                                              ; preds = %121
  %125 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %125, ptr noundef @.str.127)
          to label %126 unwind label %127

126:                                              ; preds = %124
  call void @__cxa_throw(ptr %125, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

127:                                              ; preds = %124
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %17, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %18, align 4
  call void @__cxa_free_exception(ptr %125) #8
  br label %981

131:                                              ; preds = %121
  %132 = load ptr, ptr %14, align 8, !tbaa !5
  %133 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %132, i32 0, i32 5
  %134 = load i32, ptr %133, align 4, !tbaa !24
  store i32 %134, ptr %15, align 4, !tbaa !22
  br label %154

135:                                              ; preds = %118
  %136 = load ptr, ptr %14, align 8, !tbaa !5
  %137 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %94, ptr noundef nonnull align 8 dereferenceable(336) %136)
  br i1 %137, label %138, label %153

138:                                              ; preds = %135
  %139 = load ptr, ptr %14, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %139, i32 0, i32 6
  %141 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %140) #8
  %142 = icmp ne i64 %141, 1
  br i1 %142, label %143, label %150

143:                                              ; preds = %138
  %144 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %144, ptr noundef @.str.128)
          to label %145 unwind label %146

145:                                              ; preds = %143
  call void @__cxa_throw(ptr %144, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

146:                                              ; preds = %143
  %147 = landingpad { ptr, i32 }
          cleanup
  %148 = extractvalue { ptr, i32 } %147, 0
  store ptr %148, ptr %17, align 8
  %149 = extractvalue { ptr, i32 } %147, 1
  store i32 %149, ptr %18, align 4
  call void @__cxa_free_exception(ptr %144) #8
  br label %981

150:                                              ; preds = %138
  %151 = load ptr, ptr %14, align 8, !tbaa !5
  %152 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %94, ptr noundef nonnull align 8 dereferenceable(336) %151)
  store i32 %152, ptr %15, align 4, !tbaa !22
  br label %153

153:                                              ; preds = %150, %135
  br label %154

154:                                              ; preds = %153, %131
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #8
  %155 = load ptr, ptr %11, align 8, !tbaa !5
  %156 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %94, ptr noundef nonnull align 8 dereferenceable(176) %155)
  %157 = zext i1 %156 to i8
  store i8 %157, ptr %19, align 1, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  %158 = load ptr, ptr %11, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %158, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 8 %159, i64 4, i1 false), !tbaa.struct !47
  %160 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %21, i32 0, i32 0
  %161 = load i32, ptr %160, align 4
  %162 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %161, i32 noundef 11)
  store i32 %162, ptr %20, align 4, !tbaa !48
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #8
  %163 = load ptr, ptr %11, align 8, !tbaa !5
  %164 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %163, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 8 %164, i64 4, i1 false), !tbaa.struct !47
  %165 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %23, i32 0, i32 0
  %166 = load i32, ptr %165, align 4
  %167 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %166, i32 noundef 14)
  %168 = zext i1 %167 to i8
  store i8 %168, ptr %22, align 1, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #8
  %169 = load ptr, ptr %11, align 8, !tbaa !5
  %170 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %169, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 8 %170, i64 4, i1 false), !tbaa.struct !47
  %171 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %25, i32 0, i32 0
  %172 = load i32, ptr %171, align 4
  %173 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %172, i32 noundef 13)
  %174 = zext i1 %173 to i8
  store i8 %174, ptr %24, align 1, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #8
  %175 = load ptr, ptr %11, align 8, !tbaa !5
  %176 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %175, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %27, ptr align 8 %176, i64 4, i1 false), !tbaa.struct !47
  %177 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %27, i32 0, i32 0
  %178 = load i32, ptr %177, align 4
  %179 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %178, i32 noundef 16)
  %180 = zext i1 %179 to i8
  store i8 %180, ptr %26, align 1, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #8
  %181 = load ptr, ptr %11, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %181, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %29, ptr align 8 %182, i64 4, i1 false), !tbaa.struct !47
  %183 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %29, i32 0, i32 0
  %184 = load i32, ptr %183, align 4
  %185 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %184, i32 noundef 17)
  %186 = zext i1 %185 to i8
  store i8 %186, ptr %28, align 1, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %187 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %187, ptr %30, align 8, !tbaa !5
  %188 = load ptr, ptr %30, align 8, !tbaa !5
  %189 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %188, i32 0, i32 9
  %190 = load i8, ptr %189, align 4, !tbaa !50, !range !20, !noundef !21
  %191 = trunc i8 %190 to i1
  br i1 %191, label %192, label %197

192:                                              ; preds = %154
  %193 = load ptr, ptr %30, align 8, !tbaa !5
  %194 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %193, i32 0, i32 16
  %195 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %194)
  %196 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 noundef %195)
  store ptr %196, ptr %30, align 8, !tbaa !5
  br label %197

197:                                              ; preds = %192, %154
  br label %198

198:                                              ; preds = %206, %197
  %199 = load ptr, ptr %30, align 8, !tbaa !5
  %200 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %94, ptr noundef nonnull align 8 dereferenceable(336) %199)
  br i1 %200, label %204, label %201

201:                                              ; preds = %198
  %202 = load ptr, ptr %30, align 8, !tbaa !5
  %203 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %94, ptr noundef nonnull align 8 dereferenceable(336) %202)
  br label %204

204:                                              ; preds = %201, %198
  %205 = phi i1 [ true, %198 ], [ %203, %201 ]
  br i1 %205, label %206, label %211

206:                                              ; preds = %204
  %207 = load ptr, ptr %30, align 8, !tbaa !5
  %208 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %207, i32 0, i32 16
  %209 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %208)
  %210 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 noundef %209)
  store ptr %210, ptr %30, align 8, !tbaa !5
  br label %198, !llvm.loop !51

211:                                              ; preds = %204
  %212 = load i8, ptr %19, align 1, !tbaa !46, !range !20, !noundef !21
  %213 = trunc i8 %212 to i1
  br i1 %213, label %214, label %228

214:                                              ; preds = %211
  %215 = load ptr, ptr %11, align 8, !tbaa !5
  %216 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %215, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 8 %216, i64 4, i1 false), !tbaa.struct !47
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #8
  %217 = load i32, ptr %20, align 4, !tbaa !48
  %218 = load ptr, ptr %94, align 8, !tbaa !53
  %219 = getelementptr inbounds ptr, ptr %218, i64 20
  %220 = load ptr, ptr %219, align 8
  call void %220(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %217, i32 noundef 7)
  %221 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %31, i32 0, i32 0
  %222 = load i32, ptr %221, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %222, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %223 unwind label %224

223:                                              ; preds = %214
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  br label %228

224:                                              ; preds = %214
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %17, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  br label %980

228:                                              ; preds = %223, %211
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #8
  store i8 0, ptr %33, align 1, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  %229 = load i32, ptr %8, align 4, !tbaa !9
  %230 = icmp eq i32 %229, 3
  br i1 %230, label %231, label %293

231:                                              ; preds = %228
  %232 = load i8, ptr %19, align 1, !tbaa !46, !range !20, !noundef !21
  %233 = trunc i8 %232 to i1
  br i1 %233, label %234, label %293

234:                                              ; preds = %231
  %235 = load i32, ptr %20, align 4, !tbaa !48
  %236 = icmp eq i32 %235, 3
  br i1 %236, label %237, label %293

237:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  %238 = load ptr, ptr %10, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %238, i32 0, i32 12
  %240 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %239) #8
  %241 = trunc i64 %240 to i32
  store i32 %241, ptr %35, align 4, !tbaa !22
  %242 = load ptr, ptr %10, align 8, !tbaa !5
  %243 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %242, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  %244 = load ptr, ptr %11, align 8, !tbaa !5
  %245 = invoke noundef i32 @_ZNK11spirv_cross8Compiler25get_variable_data_type_idERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %94, ptr noundef nonnull align 8 dereferenceable(176) %244)
          to label %246 unwind label %276

246:                                              ; preds = %237
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %36, i32 noundef %245)
          to label %247 unwind label %276

247:                                              ; preds = %246
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %243, ptr noundef nonnull align 4 dereferenceable(4) %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %248, i32 0, i32 1
  %250 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %249)
          to label %251 unwind label %280

251:                                              ; preds = %247
  %252 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %37, i32 0, i32 0
  store i32 %250, ptr %252, align 4
  %253 = load i32, ptr %35, align 4, !tbaa !22
  %254 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %37, i32 0, i32 0
  %255 = load i32, ptr %254, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %255, i32 noundef %253, i32 noundef 11, i32 noundef 3)
          to label %256 unwind label %280

256:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #8
  %257 = load ptr, ptr %94, align 8, !tbaa !53
  %258 = getelementptr inbounds ptr, ptr %257, i64 20
  %259 = load ptr, ptr %258, align 8
  invoke void %259(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef 3, i32 noundef 3)
          to label %260 unwind label %284

260:                                              ; preds = %256
  %261 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  %262 = load ptr, ptr %10, align 8, !tbaa !5
  %263 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %262, i32 0, i32 1
  %264 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %263)
          to label %265 unwind label %280

265:                                              ; preds = %260
  %266 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %39, i32 0, i32 0
  store i32 %264, ptr %266, align 4
  %267 = load i32, ptr %35, align 4, !tbaa !22
  %268 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %39, i32 0, i32 0
  %269 = load i32, ptr %268, align 4
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %269, i32 noundef %267, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %270 unwind label %280

270:                                              ; preds = %265
  store i8 1, ptr %33, align 1, !tbaa !46
  %271 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 37
  %272 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %271, i32 0, i32 47
  %273 = load i8, ptr %272, align 4, !tbaa !55, !range !20, !noundef !21
  %274 = trunc i8 %273 to i1
  br i1 %274, label %288, label %275

275:                                              ; preds = %270
  store i32 1, ptr %16, align 4
  br label %289

276:                                              ; preds = %246, %237
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %17, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %292

280:                                              ; preds = %265, %260, %251, %247
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %17, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %18, align 4
  br label %292

284:                                              ; preds = %256
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %17, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  br label %292

288:                                              ; preds = %270
  store i32 0, ptr %16, align 4
  br label %289

289:                                              ; preds = %288, %275
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  %290 = load i32, ptr %16, align 4
  switch i32 %290, label %975 [
    i32 0, label %291
  ]

291:                                              ; preds = %289
  br label %322

292:                                              ; preds = %284, %280, %276
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  br label %979

293:                                              ; preds = %234, %231, %228
  %294 = load ptr, ptr %12, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %294, i32 0, i32 1
  %296 = load i8, ptr %295, align 8, !tbaa !11, !range !20, !noundef !21
  %297 = trunc i8 %296 to i1
  br i1 %297, label %321, label %298

298:                                              ; preds = %293
  %299 = load ptr, ptr %13, align 8, !tbaa !5
  %300 = load ptr, ptr %11, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %300, i32 0, i32 1
  %302 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %301)
          to label %303 unwind label %313

303:                                              ; preds = %298
  %304 = getelementptr inbounds %"class.spirv_cross::TypedID.350", ptr %40, i32 0, i32 0
  store i32 %302, ptr %304, align 4
  %305 = getelementptr inbounds %"class.spirv_cross::TypedID.350", ptr %40, i32 0, i32 0
  %306 = load i32, ptr %305, align 4
  invoke void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %299, i32 %306)
          to label %307 unwind label %313

307:                                              ; preds = %303
  %308 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 52
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  %309 = load ptr, ptr %11, align 8, !tbaa !5
  %310 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %309, i32 0, i32 1
  %311 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %310)
          to label %312 unwind label %317

312:                                              ; preds = %307
  store i32 %311, ptr %41, align 4, !tbaa !22
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %308, ptr noundef nonnull align 4 dereferenceable(4) %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %321

313:                                              ; preds = %303, %298
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %17, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %18, align 4
  br label %979

317:                                              ; preds = %307
  %318 = landingpad { ptr, i32 }
          cleanup
  %319 = extractvalue { ptr, i32 } %318, 0
  store ptr %319, ptr %17, align 8
  %320 = extractvalue { ptr, i32 } %318, 1
  store i32 %320, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %979

321:                                              ; preds = %312, %293
  br label %322

322:                                              ; preds = %321, %291
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  store i32 0, ptr %42, align 4, !tbaa !22
  br label %323

323:                                              ; preds = %968, %322
  %324 = load i32, ptr %42, align 4, !tbaa !22
  %325 = load i32, ptr %15, align 4, !tbaa !22
  %326 = icmp ult i32 %324, %325
  br i1 %326, label %328, label %327

327:                                              ; preds = %323
  store i32 4, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %974

328:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  %329 = load ptr, ptr %10, align 8, !tbaa !5
  %330 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %329, i32 0, i32 12
  %331 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %330) #8
  %332 = trunc i64 %331 to i32
  store i32 %332, ptr %43, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  store i32 0, ptr %44, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #8
  store i8 0, ptr %45, align 1, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  %333 = load ptr, ptr %30, align 8, !tbaa !5
  %334 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %333, i32 0, i32 1
  %335 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %334)
          to label %336 unwind label %384

336:                                              ; preds = %328
  store i32 %335, ptr %46, align 4, !tbaa !22
  %337 = load ptr, ptr %11, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %337, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %47, ptr align 8 %338, i64 4, i1 false), !tbaa.struct !47
  %339 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %47, i32 0, i32 0
  %340 = load i32, ptr %339, align 4
  %341 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %340)
          to label %342 unwind label %384

342:                                              ; preds = %336
  %343 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %341, i32 noundef 30)
          to label %344 unwind label %384

344:                                              ; preds = %342
  br i1 %343, label %345, label %393

345:                                              ; preds = %344
  %346 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 37
  %347 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %346, i32 0, i32 37
  %348 = load i8, ptr %347, align 2, !tbaa !203, !range !20, !noundef !21
  %349 = trunc i8 %348 to i1
  br i1 %349, label %350, label %393

350:                                              ; preds = %345
  %351 = invoke noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %94)
          to label %352 unwind label %384

352:                                              ; preds = %350
  %353 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %351, i32 0, i32 10
  %354 = load i32, ptr %353, align 8, !tbaa !204
  %355 = icmp eq i32 %354, 4
  br i1 %355, label %356, label %393

356:                                              ; preds = %352
  %357 = load i32, ptr %8, align 4, !tbaa !9
  %358 = icmp eq i32 %357, 3
  br i1 %358, label %359, label %393

359:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  %360 = load ptr, ptr %11, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %360, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %49, ptr align 8 %361, i64 4, i1 false), !tbaa.struct !47
  %362 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %49, i32 0, i32 0
  %363 = load i32, ptr %362, align 4
  %364 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %363, i32 noundef 30)
          to label %365 unwind label %388

365:                                              ; preds = %359
  %366 = load i32, ptr %42, align 4, !tbaa !22
  %367 = add i32 %364, %366
  store i32 %367, ptr %48, align 4, !tbaa !22
  %368 = load i32, ptr %48, align 4, !tbaa !22
  %369 = invoke noundef i32 @_ZNK11spirv_cross11CompilerMSL43get_target_components_for_fragment_locationEj(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %368)
          to label %370 unwind label %388

370:                                              ; preds = %365
  store i32 %369, ptr %44, align 4, !tbaa !22
  %371 = load ptr, ptr %30, align 8, !tbaa !5
  %372 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %371, i32 0, i32 4
  %373 = load i32, ptr %372, align 8, !tbaa !211
  %374 = load i32, ptr %44, align 4, !tbaa !22
  %375 = icmp ult i32 %373, %374
  br i1 %375, label %376, label %392

376:                                              ; preds = %370
  %377 = load ptr, ptr %30, align 8, !tbaa !5
  %378 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %377, i32 0, i32 1
  %379 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %378)
          to label %380 unwind label %388

380:                                              ; preds = %376
  %381 = load i32, ptr %44, align 4, !tbaa !22
  %382 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %379, i32 noundef %381, i32 noundef 0)
          to label %383 unwind label %388

383:                                              ; preds = %380
  store i32 %382, ptr %46, align 4, !tbaa !22
  store i8 1, ptr %45, align 1, !tbaa !46
  br label %392

384:                                              ; preds = %350, %342, %336, %328
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %17, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %18, align 4
  br label %973

388:                                              ; preds = %380, %376, %365, %359
  %389 = landingpad { ptr, i32 }
          cleanup
  %390 = extractvalue { ptr, i32 } %389, 0
  store ptr %390, ptr %17, align 8
  %391 = extractvalue { ptr, i32 } %389, 1
  store i32 %391, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  br label %973

392:                                              ; preds = %383, %370
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  br label %393

393:                                              ; preds = %392, %356, %352, %345, %344
  %394 = load i32, ptr %8, align 4, !tbaa !9
  %395 = icmp eq i32 %394, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  br i1 %395, label %396, label %405

396:                                              ; preds = %393
  %397 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 110
  %398 = load ptr, ptr %11, align 8, !tbaa !5
  %399 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %398, i32 0, i32 1
  %400 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %399)
          to label %401 unwind label %418

401:                                              ; preds = %396
  store i32 %400, ptr %50, align 4, !tbaa !22
  %402 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %397, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %403 unwind label %418

403:                                              ; preds = %401
  %404 = icmp ne i64 %402, 0
  br label %405

405:                                              ; preds = %403, %393
  %406 = phi i1 [ false, %393 ], [ %404, %403 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  br i1 %406, label %407, label %426

407:                                              ; preds = %405
  %408 = load ptr, ptr %10, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %408, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %410 = load i32, ptr %46, align 4, !tbaa !22
  %411 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 noundef %410)
          to label %412 unwind label %422

412:                                              ; preds = %407
  %413 = load i8, ptr %24, align 1, !tbaa !46, !range !20, !noundef !21
  %414 = trunc i8 %413 to i1
  %415 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %411, i1 noundef zeroext %414)
          to label %416 unwind label %422

416:                                              ; preds = %412
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %51, i32 noundef %415)
          to label %417 unwind label %422

417:                                              ; preds = %416
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %409, ptr noundef nonnull align 4 dereferenceable(4) %51) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %437

418:                                              ; preds = %401, %396
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %17, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  br label %973

422:                                              ; preds = %416, %412, %407
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %17, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %973

426:                                              ; preds = %405
  %427 = load ptr, ptr %10, align 8, !tbaa !5
  %428 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %427, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %429 = load i32, ptr %46, align 4, !tbaa !22
  %430 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 noundef %429)
          to label %431 unwind label %433

431:                                              ; preds = %426
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %52, i32 noundef %430)
          to label %432 unwind label %433

432:                                              ; preds = %431
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %428, ptr noundef nonnull align 4 dereferenceable(4) %52) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %437

433:                                              ; preds = %431, %426
  %434 = landingpad { ptr, i32 }
          cleanup
  %435 = extractvalue { ptr, i32 } %434, 0
  store ptr %435, ptr %17, align 8
  %436 = extractvalue { ptr, i32 } %434, 1
  store i32 %436, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %973

437:                                              ; preds = %432, %417
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #8
  %438 = load ptr, ptr %11, align 8, !tbaa !5
  %439 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %438, i32 0, i32 1
  %440 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %439)
          to label %441 unwind label %533

441:                                              ; preds = %437
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(9848) %94, i32 noundef %440, i1 noundef zeroext true)
          to label %442 unwind label %533

442:                                              ; preds = %441
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 1 dereferenceable(2) @.str.76, ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %443 unwind label %537

443:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef @.str.67, ptr noundef nonnull align 1 dereferenceable(1) %57)
          to label %444 unwind label %541

444:                                              ; preds = %443
  invoke void @_ZN11spirv_cross11CompilerMSL17ensure_valid_nameENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(12482) %94, ptr noundef %54, ptr noundef %56)
          to label %445 unwind label %545

445:                                              ; preds = %444
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  %446 = load ptr, ptr %10, align 8, !tbaa !5
  %447 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %446, i32 0, i32 1
  %448 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %447)
          to label %449 unwind label %552

449:                                              ; preds = %445
  %450 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %58, i32 0, i32 0
  store i32 %448, ptr %450, align 4
  %451 = load i32, ptr %43, align 4, !tbaa !22
  %452 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %58, i32 0, i32 0
  %453 = load i32, ptr %452, align 4
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %453, i32 noundef %451, ptr noundef nonnull align 8 dereferenceable(32) %53)
          to label %454 unwind label %552

454:                                              ; preds = %449
  %455 = load ptr, ptr %11, align 8, !tbaa !5
  %456 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %455, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %59, ptr align 8 %456, i64 4, i1 false), !tbaa.struct !47
  %457 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %59, i32 0, i32 0
  %458 = load i32, ptr %457, align 4
  %459 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %458)
          to label %460 unwind label %552

460:                                              ; preds = %454
  %461 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %459, i32 noundef 30)
          to label %462 unwind label %552

462:                                              ; preds = %460
  br i1 %461, label %463, label %625

463:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #8
  %464 = load ptr, ptr %11, align 8, !tbaa !5
  %465 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %464, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %61, ptr align 8 %465, i64 4, i1 false), !tbaa.struct !47
  %466 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %61, i32 0, i32 0
  %467 = load i32, ptr %466, align 4
  %468 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %467, i32 noundef 30)
          to label %469 unwind label %556

469:                                              ; preds = %463
  %470 = load i32, ptr %42, align 4, !tbaa !22
  %471 = add i32 %468, %470
  store i32 %471, ptr %60, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #8
  %472 = load ptr, ptr %11, align 8, !tbaa !5
  %473 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %472, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %63, ptr align 8 %473, i64 4, i1 false), !tbaa.struct !47
  %474 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %63, i32 0, i32 0
  %475 = load i32, ptr %474, align 4
  %476 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %475, i32 noundef 31)
          to label %477 unwind label %560

477:                                              ; preds = %469
  store i32 %476, ptr %62, align 4, !tbaa !22
  %478 = load i32, ptr %8, align 4, !tbaa !9
  %479 = icmp eq i32 %478, 1
  br i1 %479, label %480, label %594

480:                                              ; preds = %477
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  %481 = load ptr, ptr %11, align 8, !tbaa !5
  %482 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %481, i32 0, i32 1
  %483 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %482)
          to label %484 unwind label %564

484:                                              ; preds = %480
  %485 = load i32, ptr %60, align 4, !tbaa !22
  %486 = load i32, ptr %62, align 4, !tbaa !22
  %487 = load ptr, ptr %12, align 8, !tbaa !5
  %488 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %487, i32 0, i32 1
  %489 = load i8, ptr %488, align 8, !tbaa !11, !range !20, !noundef !21
  %490 = trunc i8 %489 to i1
  %491 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL25ensure_correct_input_typeEjjjjb(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %483, i32 noundef %485, i32 noundef %486, i32 noundef 0, i1 noundef zeroext %490)
          to label %492 unwind label %564

492:                                              ; preds = %484
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %64, i32 noundef %491)
          to label %493 unwind label %564

493:                                              ; preds = %492
  %494 = load ptr, ptr %11, align 8, !tbaa !5
  %495 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %494, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %495, ptr align 4 %64, i64 4, i1 false), !tbaa.struct !47
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  %496 = load ptr, ptr %30, align 8, !tbaa !5
  %497 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %496, i32 0, i32 1
  %498 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %497)
          to label %499 unwind label %568

499:                                              ; preds = %493
  %500 = load i32, ptr %60, align 4, !tbaa !22
  %501 = load i32, ptr %62, align 4, !tbaa !22
  %502 = load ptr, ptr %12, align 8, !tbaa !5
  %503 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %502, i32 0, i32 1
  %504 = load i8, ptr %503, align 8, !tbaa !11, !range !20, !noundef !21
  %505 = trunc i8 %504 to i1
  %506 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL25ensure_correct_input_typeEjjjjb(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %498, i32 noundef %500, i32 noundef %501, i32 noundef 0, i1 noundef zeroext %505)
          to label %507 unwind label %568

507:                                              ; preds = %499
  store i32 %506, ptr %65, align 4, !tbaa !22
  %508 = load i32, ptr %8, align 4, !tbaa !9
  %509 = icmp eq i32 %508, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  br i1 %509, label %510, label %519

510:                                              ; preds = %507
  %511 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 110
  %512 = load ptr, ptr %11, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %512, i32 0, i32 1
  %514 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %513)
          to label %515 unwind label %572

515:                                              ; preds = %510
  store i32 %514, ptr %66, align 4, !tbaa !22
  %516 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %511, ptr noundef nonnull align 4 dereferenceable(4) %66)
          to label %517 unwind label %572

517:                                              ; preds = %515
  %518 = icmp ne i64 %516, 0
  br label %519

519:                                              ; preds = %517, %507
  %520 = phi i1 [ false, %507 ], [ %518, %517 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  br i1 %520, label %521, label %580

521:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %522 = load i32, ptr %65, align 4, !tbaa !22
  %523 = load i8, ptr %24, align 1, !tbaa !46, !range !20, !noundef !21
  %524 = trunc i8 %523 to i1
  %525 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %522, i1 noundef zeroext %524)
          to label %526 unwind label %576

526:                                              ; preds = %521
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %67, i32 noundef %525)
          to label %527 unwind label %576

527:                                              ; preds = %526
  %528 = load ptr, ptr %10, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %528, i32 0, i32 12
  %530 = load i32, ptr %43, align 4, !tbaa !22
  %531 = zext i32 %530 to i64
  %532 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %529, i64 noundef %531) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %532, ptr align 4 %67, i64 4, i1 false), !tbaa.struct !47
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %592

533:                                              ; preds = %441, %437
  %534 = landingpad { ptr, i32 }
          cleanup
  %535 = extractvalue { ptr, i32 } %534, 0
  store ptr %535, ptr %17, align 8
  %536 = extractvalue { ptr, i32 } %534, 1
  store i32 %536, ptr %18, align 4
  br label %551

537:                                              ; preds = %442
  %538 = landingpad { ptr, i32 }
          cleanup
  %539 = extractvalue { ptr, i32 } %538, 0
  store ptr %539, ptr %17, align 8
  %540 = extractvalue { ptr, i32 } %538, 1
  store i32 %540, ptr %18, align 4
  br label %550

541:                                              ; preds = %443
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %17, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, ptr %18, align 4
  br label %549

545:                                              ; preds = %444
  %546 = landingpad { ptr, i32 }
          cleanup
  %547 = extractvalue { ptr, i32 } %546, 0
  store ptr %547, ptr %17, align 8
  %548 = extractvalue { ptr, i32 } %546, 1
  store i32 %548, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  br label %549

549:                                              ; preds = %545, %541
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  br label %550

550:                                              ; preds = %549, %537
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  br label %551

551:                                              ; preds = %550, %533
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  br label %972

552:                                              ; preds = %876, %871, %867, %860, %856, %847, %843, %834, %830, %817, %813, %771, %765, %755, %751, %745, %741, %628, %460, %454, %449, %445
  %553 = landingpad { ptr, i32 }
          cleanup
  %554 = extractvalue { ptr, i32 } %553, 0
  store ptr %554, ptr %17, align 8
  %555 = extractvalue { ptr, i32 } %553, 1
  store i32 %555, ptr %18, align 4
  br label %971

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

560:                                              ; preds = %618, %611, %607, %598, %594, %469
  %561 = landingpad { ptr, i32 }
          cleanup
  %562 = extractvalue { ptr, i32 } %561, 0
  store ptr %562, ptr %17, align 8
  %563 = extractvalue { ptr, i32 } %561, 1
  store i32 %563, ptr %18, align 4
  br label %623

564:                                              ; preds = %492, %484, %480
  %565 = landingpad { ptr, i32 }
          cleanup
  %566 = extractvalue { ptr, i32 } %565, 0
  store ptr %566, ptr %17, align 8
  %567 = extractvalue { ptr, i32 } %565, 1
  store i32 %567, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  br label %623

568:                                              ; preds = %499, %493
  %569 = landingpad { ptr, i32 }
          cleanup
  %570 = extractvalue { ptr, i32 } %569, 0
  store ptr %570, ptr %17, align 8
  %571 = extractvalue { ptr, i32 } %569, 1
  store i32 %571, ptr %18, align 4
  br label %593

572:                                              ; preds = %515, %510
  %573 = landingpad { ptr, i32 }
          cleanup
  %574 = extractvalue { ptr, i32 } %573, 0
  store ptr %574, ptr %17, align 8
  %575 = extractvalue { ptr, i32 } %573, 1
  store i32 %575, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  br label %593

576:                                              ; preds = %526, %521
  %577 = landingpad { ptr, i32 }
          cleanup
  %578 = extractvalue { ptr, i32 } %577, 0
  store ptr %578, ptr %17, align 8
  %579 = extractvalue { ptr, i32 } %577, 1
  store i32 %579, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %593

580:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  %581 = load i32, ptr %65, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %68, i32 noundef %581)
          to label %582 unwind label %588

582:                                              ; preds = %580
  %583 = load ptr, ptr %10, align 8, !tbaa !5
  %584 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %583, i32 0, i32 12
  %585 = load i32, ptr %43, align 4, !tbaa !22
  %586 = zext i32 %585 to i64
  %587 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %584, i64 noundef %586) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %587, ptr align 4 %68, i64 4, i1 false), !tbaa.struct !47
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %592

588:                                              ; preds = %580
  %589 = landingpad { ptr, i32 }
          cleanup
  %590 = extractvalue { ptr, i32 } %589, 0
  store ptr %590, ptr %17, align 8
  %591 = extractvalue { ptr, i32 } %589, 1
  store i32 %591, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %593

592:                                              ; preds = %582, %527
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  br label %594

593:                                              ; preds = %588, %576, %572, %568
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  br label %623

594:                                              ; preds = %592, %477
  %595 = load ptr, ptr %10, align 8, !tbaa !5
  %596 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %595, i32 0, i32 1
  %597 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %596)
          to label %598 unwind label %560

598:                                              ; preds = %594
  %599 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %69, i32 0, i32 0
  store i32 %597, ptr %599, align 4
  %600 = load i32, ptr %43, align 4, !tbaa !22
  %601 = load i32, ptr %60, align 4, !tbaa !22
  %602 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %69, i32 0, i32 0
  %603 = load i32, ptr %602, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %603, i32 noundef %600, i32 noundef 30, i32 noundef %601)
          to label %604 unwind label %560

604:                                              ; preds = %598
  %605 = load i32, ptr %62, align 4, !tbaa !22
  %606 = icmp ne i32 %605, 0
  br i1 %606, label %607, label %618

607:                                              ; preds = %604
  %608 = load ptr, ptr %10, align 8, !tbaa !5
  %609 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %608, i32 0, i32 1
  %610 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %609)
          to label %611 unwind label %560

611:                                              ; preds = %607
  %612 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %70, i32 0, i32 0
  store i32 %610, ptr %612, align 4
  %613 = load i32, ptr %43, align 4, !tbaa !22
  %614 = load i32, ptr %62, align 4, !tbaa !22
  %615 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %70, i32 0, i32 0
  %616 = load i32, ptr %615, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %616, i32 noundef %613, i32 noundef 31, i32 noundef %614)
          to label %617 unwind label %560

617:                                              ; preds = %611
  br label %618

618:                                              ; preds = %617, %604
  %619 = load i32, ptr %60, align 4, !tbaa !22
  %620 = load ptr, ptr %30, align 8, !tbaa !5
  %621 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %619, ptr noundef nonnull align 8 dereferenceable(336) %620, i32 noundef %621, i1 noundef zeroext false)
          to label %622 unwind label %560

622:                                              ; preds = %618
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #8
  br label %765

623:                                              ; preds = %593, %564, %560
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #8
  br label %624

624:                                              ; preds = %623, %556
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #8
  br label %971

625:                                              ; preds = %462
  %626 = load i8, ptr %19, align 1, !tbaa !46, !range !20, !noundef !21
  %627 = trunc i8 %626 to i1
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #8
  br i1 %627, label %628, label %640

628:                                              ; preds = %625
  %629 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %94)
          to label %630 unwind label %552

630:                                              ; preds = %628
  br i1 %629, label %631, label %640

631:                                              ; preds = %630
  %632 = load i32, ptr %8, align 4, !tbaa !9
  %633 = icmp eq i32 %632, 1
  br i1 %633, label %634, label %640

634:                                              ; preds = %631
  %635 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 40
  %636 = load i32, ptr %20, align 4, !tbaa !48
  store i32 %636, ptr %71, align 4, !tbaa !22
  %637 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %635, ptr noundef nonnull align 4 dereferenceable(4) %71)
          to label %638 unwind label %665

638:                                              ; preds = %634
  %639 = icmp ne i64 %637, 0
  br label %640

640:                                              ; preds = %638, %631, %630, %625
  %641 = phi i1 [ false, %631 ], [ false, %630 ], [ false, %625 ], [ %639, %638 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  br i1 %641, label %642, label %678

642:                                              ; preds = %640
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #8
  %643 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 40
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #8
  %644 = load i32, ptr %20, align 4, !tbaa !48
  store i32 %644, ptr %73, align 4, !tbaa !22
  %645 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %643, ptr noundef nonnull align 4 dereferenceable(4) %73)
          to label %646 unwind label %669

646:                                              ; preds = %642
  %647 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %645, i32 0, i32 0
  %648 = load i32, ptr %647, align 4, !tbaa !212
  %649 = load i32, ptr %42, align 4, !tbaa !22
  %650 = add i32 %648, %649
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #8
  store i32 %650, ptr %72, align 4, !tbaa !22
  %651 = load ptr, ptr %10, align 8, !tbaa !5
  %652 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %651, i32 0, i32 1
  %653 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %652)
          to label %654 unwind label %673

654:                                              ; preds = %646
  %655 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %74, i32 0, i32 0
  store i32 %653, ptr %655, align 4
  %656 = load i32, ptr %43, align 4, !tbaa !22
  %657 = load i32, ptr %72, align 4, !tbaa !22
  %658 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %74, i32 0, i32 0
  %659 = load i32, ptr %658, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %659, i32 noundef %656, i32 noundef 30, i32 noundef %657)
          to label %660 unwind label %673

660:                                              ; preds = %654
  %661 = load i32, ptr %72, align 4, !tbaa !22
  %662 = load ptr, ptr %30, align 8, !tbaa !5
  %663 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %661, ptr noundef nonnull align 8 dereferenceable(336) %662, i32 noundef %663, i1 noundef zeroext false)
          to label %664 unwind label %673

664:                                              ; preds = %660
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #8
  br label %764

665:                                              ; preds = %634
  %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
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  br label %971

669:                                              ; preds = %642
  %670 = landingpad { ptr, i32 }
          cleanup
  %671 = extractvalue { ptr, i32 } %670, 0
  store ptr %671, ptr %17, align 8
  %672 = extractvalue { ptr, i32 } %670, 1
  store i32 %672, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #8
  br label %677

673:                                              ; preds = %660, %654, %646
  %674 = landingpad { ptr, i32 }
          cleanup
  %675 = extractvalue { ptr, i32 } %674, 0
  store ptr %675, ptr %17, align 8
  %676 = extractvalue { ptr, i32 } %674, 1
  store i32 %676, ptr %18, align 4
  br label %677

677:                                              ; preds = %673, %669
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #8
  br label %971

678:                                              ; preds = %640
  %679 = load i8, ptr %19, align 1, !tbaa !46, !range !20, !noundef !21
  %680 = trunc i8 %679 to i1
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  br i1 %680, label %681, label %694

681:                                              ; preds = %678
  %682 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 76
  %683 = load i8, ptr %682, align 4, !tbaa !216, !range !20, !noundef !21
  %684 = trunc i8 %683 to i1
  br i1 %684, label %685, label %694

685:                                              ; preds = %681
  %686 = load i32, ptr %8, align 4, !tbaa !9
  %687 = icmp eq i32 %686, 3
  br i1 %687, label %688, label %694

688:                                              ; preds = %685
  %689 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 42
  %690 = load i32, ptr %20, align 4, !tbaa !48
  store i32 %690, ptr %75, align 4, !tbaa !22
  %691 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %689, ptr noundef nonnull align 4 dereferenceable(4) %75)
          to label %692 unwind label %719

692:                                              ; preds = %688
  %693 = icmp ne i64 %691, 0
  br label %694

694:                                              ; preds = %692, %685, %681, %678
  %695 = phi i1 [ false, %685 ], [ false, %681 ], [ false, %678 ], [ %693, %692 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  br i1 %695, label %696, label %732

696:                                              ; preds = %694
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #8
  %697 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 42
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  %698 = load i32, ptr %20, align 4, !tbaa !48
  store i32 %698, ptr %77, align 4, !tbaa !22
  %699 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %697, ptr noundef nonnull align 4 dereferenceable(4) %77)
          to label %700 unwind label %723

700:                                              ; preds = %696
  %701 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %699, i32 0, i32 0
  %702 = load i32, ptr %701, align 4, !tbaa !212
  %703 = load i32, ptr %42, align 4, !tbaa !22
  %704 = add i32 %702, %703
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  store i32 %704, ptr %76, align 4, !tbaa !22
  %705 = load ptr, ptr %10, align 8, !tbaa !5
  %706 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %705, i32 0, i32 1
  %707 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %706)
          to label %708 unwind label %727

708:                                              ; preds = %700
  %709 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %78, i32 0, i32 0
  store i32 %707, ptr %709, align 4
  %710 = load i32, ptr %43, align 4, !tbaa !22
  %711 = load i32, ptr %76, align 4, !tbaa !22
  %712 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %78, i32 0, i32 0
  %713 = load i32, ptr %712, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %713, i32 noundef %710, i32 noundef 30, i32 noundef %711)
          to label %714 unwind label %727

714:                                              ; preds = %708
  %715 = load i32, ptr %76, align 4, !tbaa !22
  %716 = load ptr, ptr %30, align 8, !tbaa !5
  %717 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %94, i32 noundef %715, ptr noundef nonnull align 8 dereferenceable(336) %716, i32 noundef %717, i1 noundef zeroext false)
          to label %718 unwind label %727

718:                                              ; preds = %714
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  br label %763

719:                                              ; preds = %688
  %720 = landingpad { ptr, i32 }
          cleanup
  %721 = extractvalue { ptr, i32 } %720, 0
  store ptr %721, ptr %17, align 8
  %722 = extractvalue { ptr, i32 } %720, 1
  store i32 %722, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  br label %971

723:                                              ; preds = %696
  %724 = landingpad { ptr, i32 }
          cleanup
  %725 = extractvalue { ptr, i32 } %724, 0
  store ptr %725, ptr %17, align 8
  %726 = extractvalue { ptr, i32 } %724, 1
  store i32 %726, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  br label %731

727:                                              ; preds = %714, %708, %700
  %728 = landingpad { ptr, i32 }
          cleanup
  %729 = extractvalue { ptr, i32 } %728, 0
  store ptr %729, ptr %17, align 8
  %730 = extractvalue { ptr, i32 } %728, 1
  store i32 %730, ptr %18, align 4
  br label %731

731:                                              ; preds = %727, %723
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  br label %971

732:                                              ; preds = %694
  %733 = load i8, ptr %19, align 1, !tbaa !46, !range !20, !noundef !21
  %734 = trunc i8 %733 to i1
  br i1 %734, label %735, label %762

735:                                              ; preds = %732
  %736 = load i32, ptr %20, align 4, !tbaa !48
  %737 = icmp eq i32 %736, 3
  br i1 %737, label %741, label %738

738:                                              ; preds = %735
  %739 = load i32, ptr %20, align 4, !tbaa !48
  %740 = icmp eq i32 %739, 4
  br i1 %740, label %741, label %762

741:                                              ; preds = %738, %735
  %742 = load ptr, ptr %10, align 8, !tbaa !5
  %743 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %742, i32 0, i32 1
  %744 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %743)
          to label %745 unwind label %552

745:                                              ; preds = %741
  %746 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %79, i32 0, i32 0
  store i32 %744, ptr %746, align 4
  %747 = load i32, ptr %43, align 4, !tbaa !22
  %748 = load i32, ptr %20, align 4, !tbaa !48
  %749 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %79, i32 0, i32 0
  %750 = load i32, ptr %749, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %750, i32 noundef %747, i32 noundef 11, i32 noundef %748)
          to label %751 unwind label %552

751:                                              ; preds = %745
  %752 = load ptr, ptr %10, align 8, !tbaa !5
  %753 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %752, i32 0, i32 1
  %754 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %753)
          to label %755 unwind label %552

755:                                              ; preds = %751
  %756 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %80, i32 0, i32 0
  store i32 %754, ptr %756, align 4
  %757 = load i32, ptr %43, align 4, !tbaa !22
  %758 = load i32, ptr %42, align 4, !tbaa !22
  %759 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %80, i32 0, i32 0
  %760 = load i32, ptr %759, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %760, i32 noundef %757, i32 noundef 32, i32 noundef %758)
          to label %761 unwind label %552

761:                                              ; preds = %755
  br label %762

762:                                              ; preds = %761, %738, %732
  br label %763

763:                                              ; preds = %762, %718
  br label %764

764:                                              ; preds = %763, %664
  br label %765

765:                                              ; preds = %764, %622
  %766 = load ptr, ptr %11, align 8, !tbaa !5
  %767 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %766, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %81, ptr align 8 %767, i64 4, i1 false), !tbaa.struct !47
  %768 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %81, i32 0, i32 0
  %769 = load i32, ptr %768, align 4
  %770 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %769)
          to label %771 unwind label %552

771:                                              ; preds = %765
  %772 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %770, i32 noundef 32)
          to label %773 unwind label %552

773:                                              ; preds = %771
  br i1 %772, label %774, label %795

774:                                              ; preds = %773
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #8
  %775 = load ptr, ptr %11, align 8, !tbaa !5
  %776 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %775, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %83, ptr align 8 %776, i64 4, i1 false), !tbaa.struct !47
  %777 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %83, i32 0, i32 0
  %778 = load i32, ptr %777, align 4
  %779 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %778, i32 noundef 32)
          to label %780 unwind label %791

780:                                              ; preds = %774
  store i32 %779, ptr %82, align 4, !tbaa !22
  %781 = load ptr, ptr %10, align 8, !tbaa !5
  %782 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %781, i32 0, i32 1
  %783 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %782)
          to label %784 unwind label %791

784:                                              ; preds = %780
  %785 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %84, i32 0, i32 0
  store i32 %783, ptr %785, align 4
  %786 = load i32, ptr %43, align 4, !tbaa !22
  %787 = load i32, ptr %82, align 4, !tbaa !22
  %788 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %84, i32 0, i32 0
  %789 = load i32, ptr %788, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %789, i32 noundef %786, i32 noundef 32, i32 noundef %787)
          to label %790 unwind label %791

790:                                              ; preds = %784
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  br label %795

791:                                              ; preds = %784, %780, %774
  %792 = landingpad { ptr, i32 }
          cleanup
  %793 = extractvalue { ptr, i32 } %792, 0
  store ptr %793, ptr %17, align 8
  %794 = extractvalue { ptr, i32 } %792, 1
  store i32 %794, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  br label %971

795:                                              ; preds = %790, %773
  %796 = load i32, ptr %8, align 4, !tbaa !9
  %797 = icmp ne i32 %796, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #8
  br i1 %797, label %808, label %798

798:                                              ; preds = %795
  %799 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %94, i32 0, i32 110
  %800 = load ptr, ptr %11, align 8, !tbaa !5
  %801 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %800, i32 0, i32 1
  %802 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %801)
          to label %803 unwind label %823

803:                                              ; preds = %798
  store i32 %802, ptr %85, align 4, !tbaa !22
  %804 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %799, ptr noundef nonnull align 4 dereferenceable(4) %85)
          to label %805 unwind label %823

805:                                              ; preds = %803
  %806 = icmp ne i64 %804, 0
  %807 = xor i1 %806, true
  br label %808

808:                                              ; preds = %805, %795
  %809 = phi i1 [ true, %795 ], [ %807, %805 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  br i1 %809, label %810, label %867

810:                                              ; preds = %808
  %811 = load i8, ptr %22, align 1, !tbaa !46, !range !20, !noundef !21
  %812 = trunc i8 %811 to i1
  br i1 %812, label %813, label %827

813:                                              ; preds = %810
  %814 = load ptr, ptr %10, align 8, !tbaa !5
  %815 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %814, i32 0, i32 1
  %816 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %815)
          to label %817 unwind label %552

817:                                              ; preds = %813
  %818 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %86, i32 0, i32 0
  store i32 %816, ptr %818, align 4
  %819 = load i32, ptr %43, align 4, !tbaa !22
  %820 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %86, i32 0, i32 0
  %821 = load i32, ptr %820, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %821, i32 noundef %819, i32 noundef 14, i32 noundef 0)
          to label %822 unwind label %552

822:                                              ; preds = %817
  br label %827

823:                                              ; preds = %803, %798
  %824 = landingpad { ptr, i32 }
          cleanup
  %825 = extractvalue { ptr, i32 } %824, 0
  store ptr %825, ptr %17, align 8
  %826 = extractvalue { ptr, i32 } %824, 1
  store i32 %826, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  br label %971

827:                                              ; preds = %822, %810
  %828 = load i8, ptr %24, align 1, !tbaa !46, !range !20, !noundef !21
  %829 = trunc i8 %828 to i1
  br i1 %829, label %830, label %840

830:                                              ; preds = %827
  %831 = load ptr, ptr %10, align 8, !tbaa !5
  %832 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %831, i32 0, i32 1
  %833 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %832)
          to label %834 unwind label %552

834:                                              ; preds = %830
  %835 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %87, i32 0, i32 0
  store i32 %833, ptr %835, align 4
  %836 = load i32, ptr %43, align 4, !tbaa !22
  %837 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %87, i32 0, i32 0
  %838 = load i32, ptr %837, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %838, i32 noundef %836, i32 noundef 13, i32 noundef 0)
          to label %839 unwind label %552

839:                                              ; preds = %834
  br label %840

840:                                              ; preds = %839, %827
  %841 = load i8, ptr %26, align 1, !tbaa !46, !range !20, !noundef !21
  %842 = trunc i8 %841 to i1
  br i1 %842, label %843, label %853

843:                                              ; preds = %840
  %844 = load ptr, ptr %10, align 8, !tbaa !5
  %845 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %844, i32 0, i32 1
  %846 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %845)
          to label %847 unwind label %552

847:                                              ; preds = %843
  %848 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %88, i32 0, i32 0
  store i32 %846, ptr %848, align 4
  %849 = load i32, ptr %43, align 4, !tbaa !22
  %850 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %88, i32 0, i32 0
  %851 = load i32, ptr %850, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %851, i32 noundef %849, i32 noundef 16, i32 noundef 0)
          to label %852 unwind label %552

852:                                              ; preds = %847
  br label %853

853:                                              ; preds = %852, %840
  %854 = load i8, ptr %28, align 1, !tbaa !46, !range !20, !noundef !21
  %855 = trunc i8 %854 to i1
  br i1 %855, label %856, label %866

856:                                              ; preds = %853
  %857 = load ptr, ptr %10, align 8, !tbaa !5
  %858 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %857, i32 0, i32 1
  %859 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %858)
          to label %860 unwind label %552

860:                                              ; preds = %856
  %861 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %89, i32 0, i32 0
  store i32 %859, ptr %861, align 4
  %862 = load i32, ptr %43, align 4, !tbaa !22
  %863 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %89, i32 0, i32 0
  %864 = load i32, ptr %863, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 %864, i32 noundef %862, i32 noundef 17, i32 noundef 0)
          to label %865 unwind label %552

865:                                              ; preds = %860
  br label %866

866:                                              ; preds = %865, %853
  br label %867

867:                                              ; preds = %866, %808
  %868 = load ptr, ptr %10, align 8, !tbaa !5
  %869 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %868, i32 0, i32 1
  %870 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %869)
          to label %871 unwind label %552

871:                                              ; preds = %867
  %872 = load i32, ptr %43, align 4, !tbaa !22
  %873 = load ptr, ptr %11, align 8, !tbaa !5
  %874 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %873, i32 0, i32 1
  %875 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %874)
          to label %876 unwind label %552

876:                                              ; preds = %871
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %94, i32 noundef %870, i32 noundef %872, i32 noundef 5, i32 noundef %875)
          to label %877 unwind label %552

877:                                              ; preds = %876
  %878 = load ptr, ptr %12, align 8, !tbaa !5
  %879 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %878, i32 0, i32 1
  %880 = load i8, ptr %879, align 8, !tbaa !11, !range !20, !noundef !21
  %881 = trunc i8 %880 to i1
  br i1 %881, label %967, label %882

882:                                              ; preds = %877
  %883 = load i32, ptr %8, align 4, !tbaa !9
  switch i32 %883, label %965 [
    i32 1, label %884
    i32 3, label %919
  ]

884:                                              ; preds = %882
  %885 = load ptr, ptr %13, align 8, !tbaa !5
  %886 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %885, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %90) #8
  call void @llvm.lifetime.start.p0(i64 88, ptr %91) #8
  %887 = getelementptr inbounds %class.anon.499, ptr %91, i32 0, i32 0
  %888 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %888, ptr %887, align 8, !tbaa !5
  %889 = getelementptr inbounds %class.anon.499, ptr %91, i32 0, i32 1
  store ptr %94, ptr %889, align 8, !tbaa !217
  %890 = getelementptr inbounds %class.anon.499, ptr %91, i32 0, i32 2
  %891 = load i8, ptr %26, align 1, !tbaa !46, !range !20, !noundef !21
  %892 = trunc i8 %891 to i1
  %893 = zext i1 %892 to i8
  store i8 %893, ptr %890, align 8, !tbaa !219
  %894 = getelementptr inbounds %class.anon.499, ptr %91, i32 0, i32 3
  %895 = load i8, ptr %28, align 1, !tbaa !46, !range !20, !noundef !21
  %896 = trunc i8 %895 to i1
  %897 = zext i1 %896 to i8
  store i8 %897, ptr %894, align 1, !tbaa !220
  %898 = getelementptr inbounds %class.anon.499, ptr %91, i32 0, i32 4
  %899 = load i32, ptr %42, align 4, !tbaa !22
  store i32 %899, ptr %898, align 4, !tbaa !221
  %900 = getelementptr inbounds %class.anon.499, ptr %91, i32 0, i32 5
  %901 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %900, ptr noundef nonnull align 8 dereferenceable(32) %901)
          to label %902 unwind label %906

902:                                              ; preds = %884
  %903 = getelementptr inbounds %class.anon.499, ptr %91, i32 0, i32 6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %903, ptr noundef nonnull align 8 dereferenceable(32) %53)
          to label %904 unwind label %910

904:                                              ; preds = %902
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %90, ptr noundef nonnull align 8 dereferenceable(88) %91)
          to label %905 unwind label %914

905:                                              ; preds = %904
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %886, ptr noundef nonnull align 8 dereferenceable(32) %90) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #8
  call void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(88) %91) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #8
  br label %966

906:                                              ; preds = %884
  %907 = landingpad { ptr, i32 }
          cleanup
  %908 = extractvalue { ptr, i32 } %907, 0
  store ptr %908, ptr %17, align 8
  %909 = extractvalue { ptr, i32 } %907, 1
  store i32 %909, ptr %18, align 4
  br label %918

910:                                              ; preds = %902
  %911 = landingpad { ptr, i32 }
          cleanup
  %912 = extractvalue { ptr, i32 } %911, 0
  store ptr %912, ptr %17, align 8
  %913 = extractvalue { ptr, i32 } %911, 1
  store i32 %913, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %900) #8
  br label %918

914:                                              ; preds = %904
  %915 = landingpad { ptr, i32 }
          cleanup
  %916 = extractvalue { ptr, i32 } %915, 0
  store ptr %916, ptr %17, align 8
  %917 = extractvalue { ptr, i32 } %915, 1
  store i32 %917, ptr %18, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(88) %91) #8
  br label %918

918:                                              ; preds = %914, %910, %906
  call void @llvm.lifetime.end.p0(i64 88, ptr %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #8
  br label %971

919:                                              ; preds = %882
  %920 = load ptr, ptr %13, align 8, !tbaa !5
  %921 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %920, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 32, ptr %92) #8
  call void @llvm.lifetime.start.p0(i64 144, ptr %93) #8
  %922 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 0
  %923 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %923, ptr %922, align 8, !tbaa !5
  %924 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 1
  %925 = load i8, ptr %45, align 1, !tbaa !46, !range !20, !noundef !21
  %926 = trunc i8 %925 to i1
  %927 = zext i1 %926 to i8
  store i8 %927, ptr %924, align 8, !tbaa !222
  %928 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 2
  store ptr %94, ptr %928, align 8, !tbaa !224
  %929 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 3
  %930 = load i32, ptr %46, align 4, !tbaa !22
  store i32 %930, ptr %929, align 8, !tbaa !225
  %931 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 4
  %932 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %931, ptr noundef nonnull align 8 dereferenceable(32) %932)
          to label %933 unwind label %947

933:                                              ; preds = %919
  %934 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %934, ptr noundef nonnull align 8 dereferenceable(32) %53)
          to label %935 unwind label %951

935:                                              ; preds = %933
  %936 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 6
  %937 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %937, ptr %936, align 8, !tbaa !226
  %938 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 7
  %939 = load i32, ptr %42, align 4, !tbaa !22
  store i32 %939, ptr %938, align 8, !tbaa !227
  %940 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 8
  %941 = load i8, ptr %33, align 1, !tbaa !46, !range !20, !noundef !21
  %942 = trunc i8 %941 to i1
  %943 = zext i1 %942 to i8
  store i8 %943, ptr %940, align 4, !tbaa !228
  %944 = getelementptr inbounds %class.anon.500, ptr %93, i32 0, i32 9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %944, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %945 unwind label %955

945:                                              ; preds = %935
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef nonnull align 8 dereferenceable(144) %93)
          to label %946 unwind label %960

946:                                              ; preds = %945
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %921, ptr noundef nonnull align 8 dereferenceable(32) %92) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #8
  call void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(144) %93) #8
  call void @llvm.lifetime.end.p0(i64 144, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #8
  br label %966

947:                                              ; preds = %919
  %948 = landingpad { ptr, i32 }
          cleanup
  %949 = extractvalue { ptr, i32 } %948, 0
  store ptr %949, ptr %17, align 8
  %950 = extractvalue { ptr, i32 } %948, 1
  store i32 %950, ptr %18, align 4
  br label %964

951:                                              ; preds = %933
  %952 = landingpad { ptr, i32 }
          cleanup
  %953 = extractvalue { ptr, i32 } %952, 0
  store ptr %953, ptr %17, align 8
  %954 = extractvalue { ptr, i32 } %952, 1
  store i32 %954, ptr %18, align 4
  br label %959

955:                                              ; preds = %935
  %956 = landingpad { ptr, i32 }
          cleanup
  %957 = extractvalue { ptr, i32 } %956, 0
  store ptr %957, ptr %17, align 8
  %958 = extractvalue { ptr, i32 } %956, 1
  store i32 %958, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %934) #8
  br label %959

959:                                              ; preds = %955, %951
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %931) #8
  br label %964

960:                                              ; preds = %945
  %961 = landingpad { ptr, i32 }
          cleanup
  %962 = extractvalue { ptr, i32 } %961, 0
  store ptr %962, ptr %17, align 8
  %963 = extractvalue { ptr, i32 } %961, 1
  store i32 %963, ptr %18, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(144) %93) #8
  br label %964

964:                                              ; preds = %960, %959, %947
  call void @llvm.lifetime.end.p0(i64 144, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #8
  br label %971

965:                                              ; preds = %882
  br label %966

966:                                              ; preds = %965, %946, %905
  br label %967

967:                                              ; preds = %966, %877
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %968

968:                                              ; preds = %967
  %969 = load i32, ptr %42, align 4, !tbaa !22
  %970 = add i32 %969, 1
  store i32 %970, ptr %42, align 4, !tbaa !22
  br label %323, !llvm.loop !229

971:                                              ; preds = %964, %918, %823, %791, %731, %719, %677, %665, %624, %552
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  br label %972

972:                                              ; preds = %971, %551
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  br label %973

973:                                              ; preds = %972, %433, %422, %418, %388, %384
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %979

974:                                              ; preds = %327
  store i32 0, ptr %16, align 4
  br label %975

975:                                              ; preds = %974, %289
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  br label %976

976:                                              ; preds = %975, %117
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  %977 = load i32, ptr %16, align 4
  switch i32 %977, label %987 [
    i32 0, label %978
    i32 1, label %978
  ]

978:                                              ; preds = %976, %976
  ret void

979:                                              ; preds = %973, %317, %313, %292
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  br label %980

980:                                              ; preds = %979, %224
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  br label %981

981:                                              ; preds = %980, %146, %127
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  br label %982

982:                                              ; preds = %981
  %983 = load ptr, ptr %17, align 8
  %984 = load i32, ptr %18, align 4
  %985 = insertvalue { ptr, i32 } poison, ptr %983, 0
  %986 = insertvalue { ptr, i32 } %985, i32 %984, 1
  resume { ptr, i32 } %986

987:                                              ; preds = %976
  unreachable
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler25get_variable_data_type_idERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjEEES6_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 4 dereferenceable(4)) #2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(144)) unnamed_addr #2 align 2

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


; 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] }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::allocator.71" = type { i8 }
%"class.std::function.489" = 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.anon.499 = type { ptr, ptr, i8, i8, i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }
%class.anon.500 = type { ptr, i8, ptr, i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", ptr, i32, i8, %"class.std::__cxx11::basic_string" }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.67 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [64 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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 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 i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) 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

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #4

declare noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) local_unnamed_addr #4

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

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

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

declare noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #4

declare void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176), i32, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

; 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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #4

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

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler25get_variable_element_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #4

; 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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #4

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795), i32) local_unnamed_addr #0 align 2

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, 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 noundef i32 @_ZNK11spirv_cross11CompilerMSL43get_target_components_for_fragment_locationEj(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

declare void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) local_unnamed_addr #4

declare void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

; 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

declare noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176), i32) local_unnamed_addr #4

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

declare void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(58) %5) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.spirv_cross::TypedID.414", align 4
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.spirv_cross::TypedID.414", align 4
  %15 = alloca %"class.spirv_cross::TypedID.414", align 4
  %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::allocator.71", align 1
  %21 = alloca %"class.spirv_cross::TypedID.414", align 4
  %22 = alloca i32, align 4
  %23 = alloca %"class.spirv_cross::TypedID.414", align 4
  %24 = alloca %"class.spirv_cross::TypedID.414", align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %"class.std::function.489", align 8
  %31 = alloca %class.anon.499, align 8
  %32 = alloca %"class.std::function.489", align 8
  %33 = alloca %class.anon.500, align 8
  %34 = getelementptr inbounds i8, ptr %0, i64 1744
  %35 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %34)
  %36 = tail call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %35)
  %37 = getelementptr inbounds i8, ptr %5, i64 56
  %38 = load i8, ptr %37, align 8, !tbaa !5, !range !17, !noundef !18
  %39 = trunc nuw i8 %38 to i1
  br i1 %39, label %40, label %42

40:                                               ; preds = %6
  %41 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler25get_variable_element_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  br label %44

42:                                               ; preds = %6
  %43 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  br label %44

44:                                               ; preds = %42, %40
  %45 = phi ptr [ %41, %40 ], [ %43, %42 ]
  %46 = tail call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL41add_component_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_12SPIRVariableERKNS_8SPIRTypeERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(336) %45, ptr noundef nonnull align 8 dereferenceable(58) %5)
  br i1 %46, label %430, label %47

47:                                               ; preds = %44
  %48 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %45)
  %49 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %45)
  br i1 %48, label %50, label %59

50:                                               ; preds = %47
  br i1 %49, label %51, label %56

51:                                               ; preds = %50
  %52 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %52, ptr noundef nonnull @.str.127)
          to label %53 unwind label %54

53:                                               ; preds = %51
  tail call void @__cxa_throw(ptr nonnull %52, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

54:                                               ; preds = %51
  %55 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %52) #7
  br label %432

56:                                               ; preds = %50
  %57 = getelementptr inbounds i8, ptr %45, i64 28
  %58 = load i32, ptr %57, align 4, !tbaa !19
  br label %70

59:                                               ; preds = %47
  br i1 %49, label %60, label %70

60:                                               ; preds = %59
  %61 = getelementptr inbounds i8, ptr %45, i64 32
  %62 = tail call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %61) #7
  %.not = icmp eq i64 %62, 1
  br i1 %.not, label %68, label %63

63:                                               ; preds = %60
  %64 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %64, ptr noundef nonnull @.str.128)
          to label %65 unwind label %66

65:                                               ; preds = %63
  tail call void @__cxa_throw(ptr nonnull %64, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

66:                                               ; preds = %63
  %67 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %64) #7
  br label %432

68:                                               ; preds = %60
  %69 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %45)
  br label %70

70:                                               ; preds = %59, %68, %56
  %.0 = phi i32 [ %58, %56 ], [ %69, %68 ], [ 0, %59 ]
  %71 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  %72 = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.0105.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %73 = tail call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0105.0.copyload, i32 noundef 11)
  %.sroa.0103.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %74 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0103.0.copyload, i32 noundef 14)
  %.sroa.099.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %75 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.099.0.copyload, i32 noundef 13)
  %.sroa.096.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %76 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.096.0.copyload, i32 noundef 16)
  %77 = zext i1 %76 to i8
  %.sroa.093.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %78 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.093.0.copyload, i32 noundef 17)
  %79 = zext i1 %78 to i8
  %80 = getelementptr inbounds i8, ptr %45, i64 124
  %81 = load i8, ptr %80, align 4, !tbaa !44, !range !17, !noundef !18
  %82 = trunc nuw i8 %81 to i1
  br i1 %82, label %.sink.split, label %86

.sink.split:                                      ; preds = %70, %88, %86
  %.sink = phi ptr [ %.1230, %86 ], [ %.1230, %88 ], [ %45, %70 ]
  %83 = getelementptr inbounds i8, ptr %.sink, i64 276
  %84 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %83)
  %85 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %84)
  br label %86

86:                                               ; preds = %.sink.split, %70
  %.1230 = phi ptr [ %45, %70 ], [ %85, %.sink.split ]
  %87 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %.1230)
  br i1 %87, label %.sink.split, label %88, !llvm.loop !45

88:                                               ; preds = %86
  %89 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %.1230)
  br i1 %89, label %.sink.split, label %90, !llvm.loop !45

90:                                               ; preds = %88
  br i1 %71, label %91, label %98

91:                                               ; preds = %90
  %.sroa.080.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  %92 = load ptr, ptr %0, align 8, !tbaa !47
  %93 = getelementptr inbounds i8, ptr %92, i64 160
  %94 = load ptr, ptr %93, align 8
  call void %94(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %73, i32 noundef 7)
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.080.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %95 unwind label %96

95:                                               ; preds = %91
  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
  br label %98

96:                                               ; preds = %91
  %97 = landingpad { ptr, i32 }
          cleanup
  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
  br label %432

98:                                               ; preds = %95, %90
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  %99 = icmp eq i32 %1, 3
  %100 = icmp eq i32 %73, 3
  %or.cond = and i1 %71, %100
  %or.cond274 = and i1 %99, %or.cond
  br i1 %or.cond274, label %101, label %128

101:                                              ; preds = %98
  %102 = getelementptr inbounds i8, ptr %3, i64 136
  %103 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %102) #7
  %104 = trunc i64 %103 to i32
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  %105 = invoke noundef i32 @_ZNK11spirv_cross8Compiler25get_variable_data_type_idERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
          to label %106 unwind label %122

106:                                              ; preds = %101
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %9, i32 noundef %105)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %102, ptr noundef nonnull align 4 dereferenceable(4) %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  %107 = getelementptr inbounds i8, ptr %3, i64 8
  %108 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %107)
          to label %109 unwind label %124

109:                                              ; preds = %106
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %108, i32 noundef %104, i32 noundef 11, i32 noundef 3)
          to label %110 unwind label %124

110:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #7
  %111 = load ptr, ptr %0, align 8, !tbaa !47
  %112 = getelementptr inbounds i8, ptr %111, i64 160
  %113 = load ptr, ptr %112, align 8
  invoke void %113(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 3, i32 noundef 3)
          to label %114 unwind label %126

114:                                              ; preds = %110
  %115 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  %116 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %107)
          to label %117 unwind label %124

117:                                              ; preds = %114
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %116, i32 noundef %104, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %118 unwind label %124

118:                                              ; preds = %117
  %119 = getelementptr inbounds i8, ptr %0, i64 10148
  %120 = load i8, ptr %119, align 4, !tbaa !49, !range !17, !noundef !18
  %121 = trunc nuw i8 %120 to i1
  br i1 %121, label %138, label %429

122:                                              ; preds = %101
  %123 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  br label %431

124:                                              ; preds = %117, %114, %109, %106
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %431

126:                                              ; preds = %110
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  br label %431

128:                                              ; preds = %98
  %129 = load i8, ptr %37, align 8, !tbaa !5, !range !17, !noundef !18
  %130 = trunc nuw i8 %129 to i1
  br i1 %130, label %138, label %131

131:                                              ; preds = %128
  %132 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
          to label %133 unwind label %136

133:                                              ; preds = %131
  call void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %36, i32 %132)
  %134 = getelementptr inbounds i8, ptr %0, i64 10920
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #7
  %135 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  store i32 %135, ptr %11, align 4, !tbaa !43
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %134, ptr noundef nonnull align 4 dereferenceable(4) %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #7
  br label %138

136:                                              ; preds = %131
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %431

138:                                              ; preds = %128, %133, %118
  %.0231 = phi i8 [ 1, %118 ], [ 0, %128 ], [ 0, %133 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #7
  store i32 0, ptr %12, align 4, !tbaa !43
  %.not302 = icmp eq i32 %.0, 0
  br i1 %.not302, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %138
  %139 = getelementptr inbounds i8, ptr %3, i64 136
  %140 = getelementptr inbounds i8, ptr %.1230, i64 8
  %141 = getelementptr inbounds i8, ptr %0, i64 10138
  %142 = icmp eq i32 %1, 1
  %143 = getelementptr inbounds i8, ptr %0, i64 12080
  %144 = getelementptr inbounds i8, ptr %.1230, i64 24
  %145 = getelementptr inbounds i8, ptr %3, i64 8
  %146 = getelementptr inbounds i8, ptr %0, i64 11188
  %147 = getelementptr inbounds i8, ptr %0, i64 10376
  %148 = getelementptr inbounds i8, ptr %0, i64 10272
  %149 = add i32 %73, -3
  %or.cond17 = icmp ult i32 %149, 2
  %or.cond278 = and i1 %71, %or.cond17
  %150 = getelementptr inbounds i8, ptr %4, i64 12
  %151 = getelementptr inbounds i8, ptr %36, i64 672
  %152 = getelementptr inbounds i8, ptr %33, i64 8
  %153 = getelementptr inbounds i8, ptr %33, i64 16
  %154 = getelementptr inbounds i8, ptr %33, i64 24
  %155 = getelementptr inbounds i8, ptr %33, i64 32
  %156 = getelementptr inbounds i8, ptr %33, i64 64
  %157 = getelementptr inbounds i8, ptr %33, i64 96
  %158 = getelementptr inbounds i8, ptr %33, i64 104
  %159 = getelementptr inbounds i8, ptr %33, i64 108
  %160 = getelementptr inbounds i8, ptr %33, i64 112
  %161 = getelementptr inbounds i8, ptr %36, i64 704
  %162 = getelementptr inbounds i8, ptr %31, i64 8
  %163 = getelementptr inbounds i8, ptr %31, i64 16
  %164 = getelementptr inbounds i8, ptr %31, i64 17
  %165 = getelementptr inbounds i8, ptr %31, i64 20
  %166 = getelementptr inbounds i8, ptr %31, i64 24
  %167 = getelementptr inbounds i8, ptr %31, i64 56
  br label %168

._crit_edge:                                      ; preds = %422, %138
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  br label %429

168:                                              ; preds = %.lr.ph, %422
  %169 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %139) #7
  %170 = trunc i64 %169 to i32
  %171 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %140)
  %.sroa.052.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %172 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.052.0.copyload)
          to label %173 unwind label %197

173:                                              ; preds = %168
  %174 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %172, i32 noundef 30)
          to label %175 unwind label %197

175:                                              ; preds = %173
  br i1 %174, label %176, label %201

176:                                              ; preds = %175
  %177 = load i8, ptr %141, align 2, !tbaa !197, !range !17, !noundef !18
  %178 = trunc nuw i8 %177 to i1
  br i1 %178, label %179, label %201

179:                                              ; preds = %176
  %180 = invoke noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %181 unwind label %197

181:                                              ; preds = %179
  %182 = getelementptr inbounds i8, ptr %180, i64 232
  %183 = load i32, ptr %182, align 8, !tbaa !198
  %184 = icmp eq i32 %183, 4
  %or.cond3 = and i1 %99, %184
  br i1 %or.cond3, label %185, label %201

185:                                              ; preds = %181
  %.sroa.050.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %186 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.050.0.copyload, i32 noundef 30)
          to label %187 unwind label %199

187:                                              ; preds = %185
  %188 = load i32, ptr %12, align 4, !tbaa !43
  %189 = add i32 %188, %186
  %190 = invoke noundef i32 @_ZNK11spirv_cross11CompilerMSL43get_target_components_for_fragment_locationEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %189)
          to label %191 unwind label %199

191:                                              ; preds = %187
  %192 = load i32, ptr %144, align 8, !tbaa !205
  %193 = icmp ult i32 %192, %190
  br i1 %193, label %194, label %.thread

194:                                              ; preds = %191
  %195 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %140)
  %196 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %195, i32 noundef %190, i32 noundef 0)
          to label %.thread unwind label %199

197:                                              ; preds = %179, %173, %168
  %198 = landingpad { ptr, i32 }
          cleanup
  br label %428

199:                                              ; preds = %194, %187, %185
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %428

.thread:                                          ; preds = %191, %194
  %.1235.ph = phi i32 [ %196, %194 ], [ %171, %191 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #7
  br label %.critedge5

201:                                              ; preds = %181, %176, %175
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #7
  br i1 %142, label %202, label %.critedge5

202:                                              ; preds = %201
  %203 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  store i32 %203, ptr %13, align 4, !tbaa !43
  %204 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %143, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %205 unwind label %211

205:                                              ; preds = %202
  %.not241 = icmp eq i64 %204, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  br i1 %.not241, label %215, label %206

206:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #7
  %207 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %171)
          to label %208 unwind label %213

208:                                              ; preds = %206
  %209 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %207, i1 noundef zeroext %75)
          to label %210 unwind label %213

210:                                              ; preds = %208
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %14, i32 noundef %209)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %139, ptr noundef nonnull align 4 dereferenceable(4) %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  br label %221

211:                                              ; preds = %202
  %212 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  br label %428

213:                                              ; preds = %208, %206
  %214 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  br label %428

.critedge5:                                       ; preds = %.thread, %201
  %.1233286 = phi i1 [ %193, %.thread ], [ false, %201 ]
  %.1235283 = phi i32 [ %.1235.ph, %.thread ], [ %171, %201 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  br label %215

215:                                              ; preds = %.critedge5, %205
  %216 = phi i1 [ false, %.critedge5 ], [ true, %205 ]
  %.1233285 = phi i1 [ %.1233286, %.critedge5 ], [ false, %205 ]
  %.1235282 = phi i32 [ %.1235283, %.critedge5 ], [ %171, %205 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #7
  %217 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %.1235282)
          to label %218 unwind label %219

218:                                              ; preds = %215
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %15, i32 noundef %217)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %139, ptr noundef nonnull align 4 dereferenceable(4) %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  br label %221

219:                                              ; preds = %215
  %220 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  br label %428

221:                                              ; preds = %218, %210
  %222 = phi i1 [ %216, %218 ], [ true, %210 ]
  %.1233284 = phi i1 [ %.1233285, %218 ], [ false, %210 ]
  %.1235281 = phi i32 [ %.1235282, %218 ], [ %171, %210 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  %223 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %223, i1 noundef zeroext true)
          to label %224 unwind label %263

224:                                              ; preds = %221
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjEEES6_DpOT_(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 1 dereferenceable(2) @.str.76, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %225 unwind label %265

225:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull @.str.67, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %226 unwind label %267

226:                                              ; preds = %225
  invoke void @_ZN11spirv_cross11CompilerMSL17ensure_valid_nameENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull %17, ptr noundef nonnull %19)
          to label %227 unwind label %269

227:                                              ; preds = %226
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #7
  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) %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  %228 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %229 unwind label %274

229:                                              ; preds = %227
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %228, i32 noundef %170, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %230 unwind label %274

230:                                              ; preds = %229
  %.sroa.048.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %231 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.048.0.copyload)
          to label %232 unwind label %274

232:                                              ; preds = %230
  %233 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %231, i32 noundef 30)
          to label %234 unwind label %274

234:                                              ; preds = %232
  br i1 %233, label %235, label %300

235:                                              ; preds = %234
  %.sroa.043.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %236 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.043.0.copyload, i32 noundef 30)
          to label %237 unwind label %276

237:                                              ; preds = %235
  %238 = load i32, ptr %12, align 4, !tbaa !43
  %239 = add i32 %238, %236
  %.sroa.038.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %240 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.038.0.copyload, i32 noundef 31)
          to label %241 unwind label %278

241:                                              ; preds = %237
  br i1 %222, label %242, label %292

242:                                              ; preds = %241
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #7
  %243 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %150)
  %244 = load i8, ptr %37, align 8, !tbaa !5, !range !17, !noundef !18
  %245 = trunc nuw i8 %244 to i1
  %246 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL25ensure_correct_input_typeEjjjjb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %243, i32 noundef %239, i32 noundef %240, i32 noundef 0, i1 noundef zeroext %245)
          to label %247 unwind label %280

247:                                              ; preds = %242
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef %246)
  %248 = load i32, ptr %21, align 4, !tbaa !43
  store i32 %248, ptr %150, align 4, !tbaa !43
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  %249 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %140)
  %250 = load i8, ptr %37, align 8, !tbaa !5, !range !17, !noundef !18
  %251 = trunc nuw i8 %250 to i1
  %252 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL25ensure_correct_input_typeEjjjjb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %249, i32 noundef %239, i32 noundef %240, i32 noundef 0, i1 noundef zeroext %251)
          to label %253 unwind label %282

253:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #7
  %254 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  store i32 %254, ptr %22, align 4, !tbaa !43
  %255 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %143, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %256 unwind label %284

256:                                              ; preds = %253
  %.not252 = icmp eq i64 %255, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  br i1 %.not252, label %288, label %257

257:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #7
  %258 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %252, i1 noundef zeroext %75)
          to label %259 unwind label %286

259:                                              ; preds = %257
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %23, i32 noundef %258)
  %260 = and i64 %169, 4294967295
  %261 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %139, i64 noundef %260) #7
  %262 = load i32, ptr %23, align 4, !tbaa !43
  store i32 %262, ptr %261, align 4, !tbaa !43
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #7
  br label %292

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

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

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

269:                                              ; preds = %226
  %270 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  br label %271

271:                                              ; preds = %269, %267
  %.pn242 = phi { ptr, i32 } [ %270, %269 ], [ %268, %267 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %272

272:                                              ; preds = %271, %265
  %.pn242.pn = phi { ptr, i32 } [ %.pn242, %271 ], [ %266, %265 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %273

273:                                              ; preds = %272, %263
  %.pn242.pn.pn = phi { ptr, i32 } [ %.pn242.pn, %272 ], [ %264, %263 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %427

274:                                              ; preds = %386, %385, %383, %381, %379, %377, %375, %371, %369, %353, %351, %349, %347, %346, %344, %301, %232, %230, %229, %227
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %426

276:                                              ; preds = %235
  %277 = landingpad { ptr, i32 }
          cleanup
  br label %426

278:                                              ; preds = %299, %298, %296, %294, %292, %237
  %279 = landingpad { ptr, i32 }
          cleanup
  br label %426

280:                                              ; preds = %242
  %281 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  br label %426

282:                                              ; preds = %247
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %426

284:                                              ; preds = %253
  %285 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  br label %426

286:                                              ; preds = %257
  %287 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #7
  br label %426

288:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %24, i32 noundef %252)
  %289 = and i64 %169, 4294967295
  %290 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %139, i64 noundef %289) #7
  %291 = load i32, ptr %24, align 4, !tbaa !43
  store i32 %291, ptr %290, align 4, !tbaa !43
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #7
  br label %292

292:                                              ; preds = %259, %288, %241
  %293 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %294 unwind label %278

294:                                              ; preds = %292
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %293, i32 noundef %170, i32 noundef 30, i32 noundef %239)
          to label %295 unwind label %278

295:                                              ; preds = %294
  %.not255 = icmp eq i32 %240, 0
  br i1 %.not255, label %299, label %296

296:                                              ; preds = %295
  %297 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %298 unwind label %278

298:                                              ; preds = %296
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %297, i32 noundef %170, i32 noundef 31, i32 noundef %240)
          to label %299 unwind label %278

299:                                              ; preds = %298, %295
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %239, ptr noundef nonnull align 8 dereferenceable(336) %.1230, i32 noundef %1, i1 noundef zeroext false)
          to label %351 unwind label %278

300:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #7
  br i1 %71, label %301, label %.thread290

.thread290:                                       ; preds = %300
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #7
  br label %.critedge15

301:                                              ; preds = %300
  %302 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %303 unwind label %274

303:                                              ; preds = %301
  %or.cond9 = and i1 %222, %302
  br i1 %or.cond9, label %304, label %322

304:                                              ; preds = %303
  store i32 %73, ptr %25, align 4, !tbaa !43
  %305 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %148, ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %306 unwind label %316

306:                                              ; preds = %304
  %.not246 = icmp eq i64 %305, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  br i1 %.not246, label %.thread287, label %307

.thread287:                                       ; preds = %306
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #7
  br label %.critedge15

307:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #7
  store i32 %73, ptr %26, align 4, !tbaa !43
  %308 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %148, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %309 unwind label %318

309:                                              ; preds = %307
  %310 = load i32, ptr %308, align 4, !tbaa !206
  %311 = load i32, ptr %12, align 4, !tbaa !43
  %312 = add i32 %311, %310
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #7
  %313 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %314 unwind label %320

314:                                              ; preds = %309
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %313, i32 noundef %170, i32 noundef 30, i32 noundef %312)
          to label %315 unwind label %320

315:                                              ; preds = %314
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %312, ptr noundef nonnull align 8 dereferenceable(336) %.1230, i32 noundef 1, i1 noundef zeroext false)
          to label %351 unwind label %320

316:                                              ; preds = %304
  %317 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  br label %426

318:                                              ; preds = %307
  %319 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #7
  br label %426

320:                                              ; preds = %315, %314, %309
  %321 = landingpad { ptr, i32 }
          cleanup
  br label %426

322:                                              ; preds = %303
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #7
  %323 = load i8, ptr %146, align 4, !range !17
  %324 = trunc nuw i8 %323 to i1
  %or.cond13 = and i1 %99, %324
  br i1 %or.cond13, label %325, label %.critedge15

325:                                              ; preds = %322
  store i32 %73, ptr %27, align 4, !tbaa !43
  %326 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %147, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %327 unwind label %337

327:                                              ; preds = %325
  %.not247 = icmp eq i64 %326, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #7
  br i1 %.not247, label %343, label %328

328:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #7
  store i32 %73, ptr %28, align 4, !tbaa !43
  %329 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %147, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %330 unwind label %339

330:                                              ; preds = %328
  %331 = load i32, ptr %329, align 4, !tbaa !206
  %332 = load i32, ptr %12, align 4, !tbaa !43
  %333 = add i32 %332, %331
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #7
  %334 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %335 unwind label %341

335:                                              ; preds = %330
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %334, i32 noundef %170, i32 noundef 30, i32 noundef %333)
          to label %336 unwind label %341

336:                                              ; preds = %335
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %333, ptr noundef nonnull align 8 dereferenceable(336) %.1230, i32 noundef 3, i1 noundef zeroext false)
          to label %351 unwind label %341

337:                                              ; preds = %325
  %338 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #7
  br label %426

339:                                              ; preds = %328
  %340 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #7
  br label %426

341:                                              ; preds = %336, %335, %330
  %342 = landingpad { ptr, i32 }
          cleanup
  br label %426

.critedge15:                                      ; preds = %.thread290, %.thread287, %322
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #7
  br label %343

343:                                              ; preds = %.critedge15, %327
  br i1 %or.cond278, label %344, label %351

344:                                              ; preds = %343
  %345 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %346 unwind label %274

346:                                              ; preds = %344
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %345, i32 noundef %170, i32 noundef 11, i32 noundef %73)
          to label %347 unwind label %274

347:                                              ; preds = %346
  %348 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %349 unwind label %274

349:                                              ; preds = %347
  %350 = load i32, ptr %12, align 4, !tbaa !43
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %348, i32 noundef %170, i32 noundef 32, i32 noundef %350)
          to label %351 unwind label %274

351:                                              ; preds = %336, %315, %299, %343, %349
  %.sroa.025.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %352 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.025.0.copyload)
          to label %353 unwind label %274

353:                                              ; preds = %351
  %354 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %352, i32 noundef 32)
          to label %355 unwind label %274

355:                                              ; preds = %353
  br i1 %354, label %356, label %363

356:                                              ; preds = %355
  %.sroa.024.0.copyload = load i32, ptr %72, align 8, !tbaa !43
  %357 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.024.0.copyload, i32 noundef 32)
          to label %358 unwind label %361

358:                                              ; preds = %356
  %359 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %360 unwind label %361

360:                                              ; preds = %358
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %359, i32 noundef %170, i32 noundef 32, i32 noundef %357)
          to label %363 unwind label %361

361:                                              ; preds = %360, %358, %356
  %362 = landingpad { ptr, i32 }
          cleanup
  br label %426

363:                                              ; preds = %360, %355
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #7
  br i1 %222, label %364, label %.critedge19

364:                                              ; preds = %363
  %365 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  store i32 %365, ptr %29, align 4, !tbaa !43
  %366 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %143, ptr noundef nonnull align 4 dereferenceable(4) %29)
          to label %367 unwind label %372

367:                                              ; preds = %364
  %.not260 = icmp eq i64 %366, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  br i1 %.not260, label %368, label %386

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

368:                                              ; preds = %.critedge19, %367
  br i1 %74, label %369, label %374

369:                                              ; preds = %368
  %370 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %371 unwind label %274

371:                                              ; preds = %369
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %370, i32 noundef %170, i32 noundef 14, i32 noundef 0)
          to label %374 unwind label %274

372:                                              ; preds = %364
  %373 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  br label %426

374:                                              ; preds = %371, %368
  br i1 %75, label %375, label %378

375:                                              ; preds = %374
  %376 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %377 unwind label %274

377:                                              ; preds = %375
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %376, i32 noundef %170, i32 noundef 13, i32 noundef 0)
          to label %378 unwind label %274

378:                                              ; preds = %377, %374
  br i1 %76, label %379, label %382

379:                                              ; preds = %378
  %380 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %381 unwind label %274

381:                                              ; preds = %379
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %380, i32 noundef %170, i32 noundef 16, i32 noundef 0)
          to label %382 unwind label %274

382:                                              ; preds = %381, %378
  br i1 %78, label %383, label %386

383:                                              ; preds = %382
  %384 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %385 unwind label %274

385:                                              ; preds = %383
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %384, i32 noundef %170, i32 noundef 17, i32 noundef 0)
          to label %386 unwind label %274

386:                                              ; preds = %382, %385, %367
  %387 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
  %388 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %387, i32 noundef %170, i32 noundef 5, i32 noundef %388)
          to label %389 unwind label %274

389:                                              ; preds = %386
  %390 = load i8, ptr %37, align 8, !tbaa !5, !range !17, !noundef !18
  %391 = trunc nuw i8 %390 to i1
  br i1 %391, label %422, label %392

392:                                              ; preds = %389
  switch i32 %1, label %422 [
    i32 1, label %393
    i32 3, label %405
  ]

393:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #7
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %31) #7
  store ptr %4, ptr %31, align 8, !tbaa !211
  store ptr %0, ptr %162, align 8, !tbaa !212
  store i8 %77, ptr %163, align 8, !tbaa !214
  store i8 %79, ptr %164, align 1, !tbaa !215
  %394 = load i32, ptr %12, align 4, !tbaa !43
  store i32 %394, ptr %165, align 4, !tbaa !216
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %395 unwind label %398

395:                                              ; preds = %393
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %167, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %396 unwind label %400

396:                                              ; preds = %395
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(88) %31)
          to label %397 unwind label %402

397:                                              ; preds = %396
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %161, ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(88) %31) #7
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  br label %422

398:                                              ; preds = %393
  %399 = landingpad { ptr, i32 }
          cleanup
  br label %404

400:                                              ; preds = %395
  %401 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %166) #7
  br label %404

402:                                              ; preds = %396
  %403 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(88) %31) #7
  br label %404

404:                                              ; preds = %402, %400, %398
  %.pn265 = phi { ptr, i32 } [ %403, %402 ], [ %401, %400 ], [ %399, %398 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  br label %426

405:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #7
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %33) #7
  store ptr %4, ptr %33, align 8, !tbaa !211
  %406 = zext i1 %.1233284 to i8
  store i8 %406, ptr %152, align 8, !tbaa !217
  store ptr %0, ptr %153, align 8, !tbaa !219
  store i32 %.1235281, ptr %154, align 8, !tbaa !220
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %155, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %407 unwind label %412

407:                                              ; preds = %405
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %156, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %408 unwind label %414

408:                                              ; preds = %407
  store ptr %.1230, ptr %157, align 8, !tbaa !221
  %409 = load i32, ptr %12, align 4, !tbaa !43
  store i32 %409, ptr %158, align 8, !tbaa !222
  store i8 %.0231, ptr %159, align 4, !tbaa !223
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %160, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %410 unwind label %416

410:                                              ; preds = %408
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull align 8 dereferenceable(144) %33)
          to label %411 unwind label %419

411:                                              ; preds = %410
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %151, ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(144) %33) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  br label %422

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

414:                                              ; preds = %407
  %415 = landingpad { ptr, i32 }
          cleanup
  br label %418

416:                                              ; preds = %408
  %417 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #7
  br label %418

418:                                              ; preds = %416, %414
  %.pn261 = phi { ptr, i32 } [ %417, %416 ], [ %415, %414 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #7
  br label %421

419:                                              ; preds = %410
  %420 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(144) %33) #7
  br label %421

421:                                              ; preds = %419, %418, %412
  %.pn263 = phi { ptr, i32 } [ %420, %419 ], [ %.pn261, %418 ], [ %413, %412 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  br label %426

422:                                              ; preds = %397, %411, %392, %389
  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
  %423 = load i32, ptr %12, align 4, !tbaa !43
  %424 = add i32 %423, 1
  store i32 %424, ptr %12, align 4, !tbaa !43
  %425 = icmp ult i32 %424, %.0
  br i1 %425, label %168, label %._crit_edge, !llvm.loop !224

426:                                              ; preds = %339, %341, %318, %320, %276, %282, %284, %286, %280, %278, %421, %404, %372, %361, %337, %316, %274
  %.pn263.pn = phi { ptr, i32 } [ %.pn263, %421 ], [ %.pn265, %404 ], [ %275, %274 ], [ %373, %372 ], [ %362, %361 ], [ %338, %337 ], [ %317, %316 ], [ %277, %276 ], [ %279, %278 ], [ %281, %280 ], [ %287, %286 ], [ %285, %284 ], [ %283, %282 ], [ %321, %320 ], [ %319, %318 ], [ %342, %341 ], [ %340, %339 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  br label %427

427:                                              ; preds = %426, %273
  %.pn263.pn.pn = phi { ptr, i32 } [ %.pn263.pn, %426 ], [ %.pn242.pn.pn, %273 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  br label %428

428:                                              ; preds = %427, %219, %213, %211, %199, %197
  %.pn263.pn.pn.pn = phi { ptr, i32 } [ %.pn263.pn.pn, %427 ], [ %214, %213 ], [ %220, %219 ], [ %212, %211 ], [ %200, %199 ], [ %198, %197 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  br label %431

429:                                              ; preds = %118, %._crit_edge
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %430

430:                                              ; preds = %44, %429
  ret void

431:                                              ; preds = %122, %124, %126, %428, %136
  %.pn263.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn263.pn.pn.pn, %428 ], [ %137, %136 ], [ %125, %124 ], [ %127, %126 ], [ %123, %122 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %432

432:                                              ; preds = %96, %431, %66, %54
  %.pn272 = phi { ptr, i32 } [ %55, %54 ], [ %67, %66 ], [ %.pn263.pn.pn.pn.pn, %431 ], [ %97, %96 ]
  resume { ptr, i32 } %.pn272
}

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 #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler25get_variable_data_type_idERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjEEES6_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 4 dereferenceable(4)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(144)) unnamed_addr #2 align 2

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


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