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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"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.501 = type { ptr, ptr, i8, i8, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }
%class.anon.502 = type { i8, ptr, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, %"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 }
%"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.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_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::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 x i8] }>
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::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 }
%"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.spirv_cross::TypedID.350" = type { i32 }
%"class.std::map.351" = type { %"class.std::_Rb_tree.352" }
%"class.std::_Rb_tree.352" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.357" = type { %"class.std::_Hashtable.358" }
%"class.std::_Hashtable.358" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.374" = type { %"class.spirv_cross::VectorView.375", i64, %"class.spirv_cross::AlignedBuffer.376" }
%"class.spirv_cross::VectorView.375" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.376" = type { [64 x i8] }
%"class.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::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::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.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] }
%"class.spirv_cross::TypedID.415" = type { i32 }
%"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.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.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
@.str.129 = external hidden unnamed_addr constant [61 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

; 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 nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #2 align 2

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

; 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

; 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_cross6BitsetC2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #0 align 2

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) #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 zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef) #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 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, i1 noundef zeroext) #2 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_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 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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetE(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(336) %5, i32 noundef %6, ptr noundef nonnull align 8 dereferenceable(58) %7, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 8 dereferenceable(64) %12) #2 align 2 personality ptr @__gxx_personality_v0 {
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i8, align 1
  %30 = alloca i8, align 1
  %31 = alloca %"class.spirv_cross::TypedID.414", align 4
  %32 = alloca %"class.spirv_cross::TypedID.413", align 4
  %33 = alloca i8, align 1
  %34 = alloca %"class.spirv_cross::TypedID.414", align 4
  %35 = alloca %"class.spirv_cross::TypedID.413", align 4
  %36 = alloca i8, align 1
  %37 = alloca %"class.spirv_cross::TypedID.414", align 4
  %38 = alloca %"class.spirv_cross::TypedID.413", align 4
  %39 = alloca i8, align 1
  %40 = alloca %"class.spirv_cross::TypedID.414", align 4
  %41 = alloca %"class.spirv_cross::TypedID.413", align 4
  %42 = alloca %"class.spirv_cross::Bitset", align 8
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca ptr, align 8
  %47 = alloca i8, align 1
  %48 = alloca i32, align 4
  %49 = alloca ptr, align 8
  %50 = alloca i8, align 1
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca i32, align 4
  %53 = alloca %"class.spirv_cross::TypedID.414", align 4
  %54 = alloca %"class.spirv_cross::TypedID.414", align 4
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.spirv_cross::TypedID.414", align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::allocator.71", align 1
  %63 = alloca i1, align 1
  %64 = alloca i1, align 1
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::allocator.71", align 1
  %69 = alloca i1, align 1
  %70 = alloca i1, align 1
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca %"class.spirv_cross::TypedID.414", align 4
  %77 = alloca %"class.spirv_cross::TypedID.414", align 4
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::allocator.71", align 1
  %83 = alloca i1, align 1
  %84 = alloca i1, align 1
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca %"class.std::allocator.71", align 1
  %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.spirv_cross::TypedID.414", align 4
  %91 = alloca %"class.spirv_cross::TypedID.414", align 4
  %92 = alloca %"class.spirv_cross::TypedID.413", align 4
  %93 = alloca %"class.spirv_cross::TypedID.414", align 4
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca %"class.spirv_cross::TypedID.414", align 4
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca %"class.spirv_cross::TypedID.414", align 4
  %100 = alloca %"class.spirv_cross::TypedID.414", align 4
  %101 = alloca %"class.spirv_cross::TypedID.414", align 4
  %102 = alloca %"class.spirv_cross::TypedID.414", align 4
  %103 = alloca i32, align 4
  %104 = alloca %"class.spirv_cross::TypedID.414", align 4
  %105 = alloca %"class.spirv_cross::TypedID.414", align 4
  %106 = alloca %"class.spirv_cross::TypedID.414", align 4
  %107 = alloca %"class.spirv_cross::TypedID.414", align 4
  %108 = alloca %"class.std::__cxx11::basic_string", align 8
  %109 = alloca %"class.std::__cxx11::basic_string", align 8
  %110 = alloca %"class.std::__cxx11::basic_string", align 8
  %111 = alloca %"class.std::allocator.71", align 1
  %112 = alloca i1, align 1
  %113 = alloca i1, align 1
  %114 = alloca %"class.std::function.489", align 8
  %115 = alloca %class.anon.501, align 8
  %116 = alloca %"class.std::function.489", align 8
  %117 = alloca %class.anon.502, align 8
  store ptr %0, ptr %14, align 8, !tbaa !5
  store i32 %1, ptr %15, align 4, !tbaa !9
  store ptr %2, ptr %16, align 8, !tbaa !5
  store ptr %3, ptr %17, align 8, !tbaa !5
  store ptr %4, ptr %18, align 8, !tbaa !5
  store ptr %5, ptr %19, align 8, !tbaa !5
  store i32 %6, ptr %20, align 4, !tbaa !11
  store ptr %7, ptr %21, align 8, !tbaa !5
  store ptr %8, ptr %22, align 8, !tbaa !5
  store ptr %9, ptr %23, align 8, !tbaa !5
  store ptr %10, ptr %24, align 8, !tbaa !5
  store ptr %11, ptr %25, align 8, !tbaa !5
  store ptr %12, ptr %26, align 8, !tbaa !5
  %118 = load ptr, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %119 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %118, i32 0, i32 1
  %120 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %119, i32 0, i32 13
  %121 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %120)
  %122 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %121)
  store ptr %122, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  store i32 2147483647, ptr %28, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #8
  %123 = load ptr, ptr %19, align 8, !tbaa !5
  %124 = load i32, ptr %20, align 4, !tbaa !11
  %125 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %123, i32 noundef %124, ptr noundef %28)
  %126 = zext i1 %125 to i8
  store i8 %126, ptr %29, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #8
  %127 = load ptr, ptr %26, align 8, !tbaa !5
  %128 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %127, i32 noundef 14)
  br i1 %128, label %144, label %129

129:                                              ; preds = %13
  %130 = load ptr, ptr %19, align 8, !tbaa !5
  %131 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %130, i32 0, i32 1
  %132 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %131)
  %133 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %31, i32 0, i32 0
  store i32 %132, ptr %133, align 4
  %134 = load i32, ptr %20, align 4, !tbaa !11
  %135 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %31, i32 0, i32 0
  %136 = load i32, ptr %135, align 4
  %137 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %136, i32 noundef %134, i32 noundef 14)
  br i1 %137, label %144, label %138

138:                                              ; preds = %129
  %139 = load ptr, ptr %18, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %139, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 8 %140, i64 4, i1 false), !tbaa.struct !17
  %141 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %32, i32 0, i32 0
  %142 = load i32, ptr %141, align 4
  %143 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %142, i32 noundef 14)
  br label %144

144:                                              ; preds = %138, %129, %13
  %145 = phi i1 [ true, %129 ], [ true, %13 ], [ %143, %138 ]
  %146 = zext i1 %145 to i8
  store i8 %146, ptr %30, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #8
  %147 = load ptr, ptr %26, align 8, !tbaa !5
  %148 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %147, i32 noundef 13)
  br i1 %148, label %164, label %149

149:                                              ; preds = %144
  %150 = load ptr, ptr %19, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %150, i32 0, i32 1
  %152 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %151)
  %153 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %34, i32 0, i32 0
  store i32 %152, ptr %153, align 4
  %154 = load i32, ptr %20, align 4, !tbaa !11
  %155 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %34, i32 0, i32 0
  %156 = load i32, ptr %155, align 4
  %157 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %156, i32 noundef %154, i32 noundef 13)
  br i1 %157, label %164, label %158

158:                                              ; preds = %149
  %159 = load ptr, ptr %18, align 8, !tbaa !5
  %160 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %159, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 8 %160, i64 4, i1 false), !tbaa.struct !17
  %161 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %35, i32 0, i32 0
  %162 = load i32, ptr %161, align 4
  %163 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %162, i32 noundef 13)
  br label %164

164:                                              ; preds = %158, %149, %144
  %165 = phi i1 [ true, %149 ], [ true, %144 ], [ %163, %158 ]
  %166 = zext i1 %165 to i8
  store i8 %166, ptr %33, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #8
  %167 = load ptr, ptr %26, align 8, !tbaa !5
  %168 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %167, i32 noundef 16)
  br i1 %168, label %184, label %169

169:                                              ; preds = %164
  %170 = load ptr, ptr %19, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %170, i32 0, i32 1
  %172 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %171)
  %173 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %37, i32 0, i32 0
  store i32 %172, ptr %173, align 4
  %174 = load i32, ptr %20, align 4, !tbaa !11
  %175 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %37, i32 0, i32 0
  %176 = load i32, ptr %175, align 4
  %177 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %176, i32 noundef %174, i32 noundef 16)
  br i1 %177, label %184, label %178

178:                                              ; preds = %169
  %179 = load ptr, ptr %18, align 8, !tbaa !5
  %180 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %179, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %38, ptr align 8 %180, i64 4, i1 false), !tbaa.struct !17
  %181 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %38, i32 0, i32 0
  %182 = load i32, ptr %181, align 4
  %183 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %182, i32 noundef 16)
  br label %184

184:                                              ; preds = %178, %169, %164
  %185 = phi i1 [ true, %169 ], [ true, %164 ], [ %183, %178 ]
  %186 = zext i1 %185 to i8
  store i8 %186, ptr %36, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #8
  %187 = load ptr, ptr %26, align 8, !tbaa !5
  %188 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %187, i32 noundef 17)
  br i1 %188, label %204, label %189

189:                                              ; preds = %184
  %190 = load ptr, ptr %19, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %190, i32 0, i32 1
  %192 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %191)
  %193 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %40, i32 0, i32 0
  store i32 %192, ptr %193, align 4
  %194 = load i32, ptr %20, align 4, !tbaa !11
  %195 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %40, i32 0, i32 0
  %196 = load i32, ptr %195, align 4
  %197 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %196, i32 noundef %194, i32 noundef 17)
  br i1 %197, label %204, label %198

198:                                              ; preds = %189
  %199 = load ptr, ptr %18, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %199, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %41, ptr align 8 %200, i64 4, i1 false), !tbaa.struct !17
  %201 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %41, i32 0, i32 0
  %202 = load i32, ptr %201, align 4
  %203 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %202, i32 noundef 17)
  br label %204

204:                                              ; preds = %198, %189, %184
  %205 = phi i1 [ true, %189 ], [ true, %184 ], [ %203, %198 ]
  %206 = zext i1 %205 to i8
  store i8 %206, ptr %39, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 64, ptr %42) #8
  call void @_ZN11spirv_cross6BitsetC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %42) #8
  %207 = load i8, ptr %30, align 1, !tbaa !15, !range !18, !noundef !19
  %208 = trunc i8 %207 to i1
  br i1 %208, label %209, label %215

209:                                              ; preds = %204
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %42, i32 noundef 14)
          to label %210 unwind label %211

210:                                              ; preds = %209
  br label %215

211:                                              ; preds = %228, %223, %218, %209
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %43, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %44, align 4
  br label %1168

215:                                              ; preds = %210, %204
  %216 = load i8, ptr %33, align 1, !tbaa !15, !range !18, !noundef !19
  %217 = trunc i8 %216 to i1
  br i1 %217, label %218, label %220

218:                                              ; preds = %215
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %42, i32 noundef 13)
          to label %219 unwind label %211

219:                                              ; preds = %218
  br label %220

220:                                              ; preds = %219, %215
  %221 = load i8, ptr %36, align 1, !tbaa !15, !range !18, !noundef !19
  %222 = trunc i8 %221 to i1
  br i1 %222, label %223, label %225

223:                                              ; preds = %220
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %42, i32 noundef 16)
          to label %224 unwind label %211

224:                                              ; preds = %223
  br label %225

225:                                              ; preds = %224, %220
  %226 = load i8, ptr %39, align 1, !tbaa !15, !range !18, !noundef !19
  %227 = trunc i8 %226 to i1
  br i1 %227, label %228, label %230

228:                                              ; preds = %225
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %42, i32 noundef 17)
          to label %229 unwind label %211

229:                                              ; preds = %228
  br label %230

230:                                              ; preds = %229, %225
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #8
  %231 = load ptr, ptr %19, align 8, !tbaa !5
  %232 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %231, i32 0, i32 12
  %233 = load i32, ptr %20, align 4, !tbaa !11
  %234 = zext i32 %233 to i64
  %235 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %232, i64 noundef %234) #8
  %236 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %235)
          to label %237 unwind label %251

237:                                              ; preds = %230
  store i32 %236, ptr %45, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %238 = load i32, ptr %45, align 4, !tbaa !11
  %239 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %238)
          to label %240 unwind label %255

240:                                              ; preds = %237
  store ptr %239, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #8
  store i8 0, ptr %47, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  store i32 1, ptr %48, align 4, !tbaa !11
  %241 = load ptr, ptr %46, align 8, !tbaa !5
  %242 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %241)
          to label %243 unwind label %259

243:                                              ; preds = %240
  br i1 %242, label %244, label %271

244:                                              ; preds = %243
  %245 = load ptr, ptr %46, align 8, !tbaa !5
  %246 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %245)
          to label %247 unwind label %259

247:                                              ; preds = %244
  br i1 %246, label %248, label %267

248:                                              ; preds = %247
  %249 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %249, ptr noundef @.str.127)
          to label %250 unwind label %263

250:                                              ; preds = %248
  invoke void @__cxa_throw(ptr %249, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1174 unwind label %259

251:                                              ; preds = %230
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %43, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %44, align 4
  br label %1167

255:                                              ; preds = %237
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %43, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %44, align 4
  br label %1166

259:                                              ; preds = %287, %282, %271, %250, %244, %240
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %43, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %44, align 4
  br label %1165

263:                                              ; preds = %248
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %43, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %44, align 4
  call void @__cxa_free_exception(ptr %249) #8
  br label %1165

267:                                              ; preds = %247
  store i8 1, ptr %47, align 1, !tbaa !15
  %268 = load ptr, ptr %46, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %268, i32 0, i32 5
  %270 = load i32, ptr %269, align 4, !tbaa !20
  store i32 %270, ptr %48, align 4, !tbaa !11
  br label %292

271:                                              ; preds = %243
  %272 = load ptr, ptr %46, align 8, !tbaa !5
  %273 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %272)
          to label %274 unwind label %259

274:                                              ; preds = %271
  br i1 %273, label %275, label %291

275:                                              ; preds = %274
  %276 = load ptr, ptr %46, align 8, !tbaa !5
  %277 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %276, i32 0, i32 6
  %278 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %277) #8
  %279 = icmp ne i64 %278, 1
  br i1 %279, label %280, label %287

280:                                              ; preds = %275
  %281 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %281, ptr noundef @.str.128)
          to label %282 unwind label %283

282:                                              ; preds = %280
  invoke void @__cxa_throw(ptr %281, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1174 unwind label %259

283:                                              ; preds = %280
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %43, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %44, align 4
  call void @__cxa_free_exception(ptr %281) #8
  br label %1165

287:                                              ; preds = %275
  store i8 1, ptr %47, align 1, !tbaa !15
  %288 = load ptr, ptr %46, align 8, !tbaa !5
  %289 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %288)
          to label %290 unwind label %259

290:                                              ; preds = %287
  store i32 %289, ptr %48, align 4, !tbaa !11
  br label %291

291:                                              ; preds = %290, %274
  br label %292

292:                                              ; preds = %291, %267
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %293 = load ptr, ptr %46, align 8, !tbaa !5
  store ptr %293, ptr %49, align 8, !tbaa !5
  %294 = load ptr, ptr %49, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %294, i32 0, i32 9
  %296 = load i8, ptr %295, align 4, !tbaa !46, !range !18, !noundef !19
  %297 = trunc i8 %296 to i1
  br i1 %297, label %298, label %309

298:                                              ; preds = %292
  %299 = load ptr, ptr %49, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %299, i32 0, i32 16
  %301 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %300)
          to label %302 unwind label %305

302:                                              ; preds = %298
  %303 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %301)
          to label %304 unwind label %305

304:                                              ; preds = %302
  store ptr %303, ptr %49, align 8, !tbaa !5
  br label %309

305:                                              ; preds = %324, %320, %314, %310, %302, %298
  %306 = landingpad { ptr, i32 }
          cleanup
  %307 = extractvalue { ptr, i32 } %306, 0
  store ptr %307, ptr %43, align 8
  %308 = extractvalue { ptr, i32 } %306, 1
  store i32 %308, ptr %44, align 4
  br label %1164

309:                                              ; preds = %304, %292
  br label %310

310:                                              ; preds = %326, %309
  %311 = load ptr, ptr %49, align 8, !tbaa !5
  %312 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %311)
          to label %313 unwind label %305

313:                                              ; preds = %310
  br i1 %312, label %318, label %314

314:                                              ; preds = %313
  %315 = load ptr, ptr %49, align 8, !tbaa !5
  %316 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %315)
          to label %317 unwind label %305

317:                                              ; preds = %314
  br label %318

318:                                              ; preds = %317, %313
  %319 = phi i1 [ true, %313 ], [ %316, %317 ]
  br i1 %319, label %320, label %327

320:                                              ; preds = %318
  %321 = load ptr, ptr %49, align 8, !tbaa !5
  %322 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %321, i32 0, i32 16
  %323 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %322)
          to label %324 unwind label %305

324:                                              ; preds = %320
  %325 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %323)
          to label %326 unwind label %305

326:                                              ; preds = %324
  store ptr %325, ptr %49, align 8, !tbaa !5
  br label %310, !llvm.loop !47

327:                                              ; preds = %318
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #8
  store i8 0, ptr %50, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  %328 = load i32, ptr %15, align 4, !tbaa !9
  %329 = icmp eq i32 %328, 3
  br i1 %329, label %330, label %390

330:                                              ; preds = %327
  %331 = load i8, ptr %29, align 1, !tbaa !15, !range !18, !noundef !19
  %332 = trunc i8 %331 to i1
  br i1 %332, label %333, label %390

333:                                              ; preds = %330
  %334 = load i32, ptr %28, align 4, !tbaa !13
  %335 = icmp eq i32 %334, 3
  br i1 %335, label %336, label %390

336:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %337 = load ptr, ptr %17, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %337, i32 0, i32 12
  %339 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %338) #8
  %340 = trunc i64 %339 to i32
  store i32 %340, ptr %52, align 4, !tbaa !11
  %341 = load ptr, ptr %17, align 8, !tbaa !5
  %342 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %341, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  %343 = load i32, ptr %45, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %53, i32 noundef %343)
          to label %344 unwind label %373

344:                                              ; preds = %336
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %342, ptr noundef nonnull align 4 dereferenceable(4) %53) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  %345 = load ptr, ptr %17, align 8, !tbaa !5
  %346 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %345, i32 0, i32 1
  %347 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %346)
          to label %348 unwind label %377

348:                                              ; preds = %344
  %349 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %54, i32 0, i32 0
  store i32 %347, ptr %349, align 4
  %350 = load i32, ptr %52, align 4, !tbaa !11
  %351 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %54, i32 0, i32 0
  %352 = load i32, ptr %351, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %352, i32 noundef %350, i32 noundef 11, i32 noundef 3)
          to label %353 unwind label %377

353:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #8
  %354 = load ptr, ptr %118, align 8, !tbaa !49
  %355 = getelementptr inbounds ptr, ptr %354, i64 20
  %356 = load ptr, ptr %355, align 8
  invoke void %356(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(12482) %118, i32 noundef 3, i32 noundef 3)
          to label %357 unwind label %381

357:                                              ; preds = %353
  %358 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(32) %55) #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
  %359 = load ptr, ptr %17, align 8, !tbaa !5
  %360 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %359, i32 0, i32 1
  %361 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %360)
          to label %362 unwind label %377

362:                                              ; preds = %357
  %363 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %56, i32 0, i32 0
  store i32 %361, ptr %363, align 4
  %364 = load i32, ptr %52, align 4, !tbaa !11
  %365 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %56, i32 0, i32 0
  %366 = load i32, ptr %365, align 4
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %366, i32 noundef %364, ptr noundef nonnull align 8 dereferenceable(32) %51)
          to label %367 unwind label %377

367:                                              ; preds = %362
  store i8 1, ptr %50, align 1, !tbaa !15
  %368 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 37
  %369 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %368, i32 0, i32 47
  %370 = load i8, ptr %369, align 4, !tbaa !51, !range !18, !noundef !19
  %371 = trunc i8 %370 to i1
  br i1 %371, label %385, label %372

372:                                              ; preds = %367
  store i32 1, ptr %57, align 4
  br label %386

373:                                              ; preds = %336
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %43, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  br label %389

377:                                              ; preds = %362, %357, %348, %344
  %378 = landingpad { ptr, i32 }
          cleanup
  %379 = extractvalue { ptr, i32 } %378, 0
  store ptr %379, ptr %43, align 8
  %380 = extractvalue { ptr, i32 } %378, 1
  store i32 %380, ptr %44, align 4
  br label %389

381:                                              ; preds = %353
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %43, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  br label %389

385:                                              ; preds = %367
  store i32 0, ptr %57, align 4
  br label %386

386:                                              ; preds = %385, %372
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  %387 = load i32, ptr %57, align 4
  switch i32 %387, label %1160 [
    i32 0, label %388
  ]

388:                                              ; preds = %386
  br label %390

389:                                              ; preds = %381, %377, %373
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %1163

390:                                              ; preds = %388, %333, %330, %327
  %391 = load ptr, ptr %46, align 8, !tbaa !5
  %392 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %391, i32 0, i32 2
  %393 = load i32, ptr %392, align 8, !tbaa !199
  %394 = icmp eq i32 %393, 15
  br i1 %394, label %395, label %525

395:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  store i32 0, ptr %58, align 4, !tbaa !11
  br label %396

396:                                              ; preds = %519, %395
  %397 = load i32, ptr %58, align 4, !tbaa !11
  %398 = load i32, ptr %48, align 4, !tbaa !11
  %399 = icmp ult i32 %397, %398
  br i1 %399, label %401, label %400

400:                                              ; preds = %396
  store i32 4, ptr %57, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %524

401:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #8
  %402 = load ptr, ptr %22, align 8, !tbaa !5
  %403 = load ptr, ptr %19, align 8, !tbaa !5
  %404 = load i32, ptr %20, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross11CompilerMSL18append_member_nameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(32) %402, ptr noundef nonnull align 8 dereferenceable(336) %403, i32 noundef %404)
          to label %405 unwind label %447

405:                                              ; preds = %401
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #8
  %406 = load i8, ptr %47, align 1, !tbaa !15, !range !18, !noundef !19
  %407 = trunc i8 %406 to i1
  store i1 false, ptr %63, align 1
  store i1 false, ptr %64, align 1
  br i1 %407, label %408, label %410

408:                                              ; preds = %405
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 1 dereferenceable(2) @.str.76, ptr noundef nonnull align 4 dereferenceable(4) %58)
          to label %409 unwind label %451

409:                                              ; preds = %408
  br label %412

410:                                              ; preds = %405
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #8
  store i1 true, ptr %63, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #8
  store i1 true, ptr %64, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %62)
          to label %411 unwind label %455

411:                                              ; preds = %410
  br label %412

412:                                              ; preds = %411, %409
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %413 unwind label %459

413:                                              ; preds = %412
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  %414 = load i1, ptr %64, align 1
  br i1 %414, label %415, label %416

415:                                              ; preds = %413
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #8
  br label %416

416:                                              ; preds = %415, %413
  %417 = load i1, ptr %63, align 1
  br i1 %417, label %418, label %419

418:                                              ; preds = %416
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #8
  br label %419

419:                                              ; preds = %418, %416
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #8
  %420 = load ptr, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #8
  %421 = load ptr, ptr %19, align 8, !tbaa !5
  %422 = load i32, ptr %20, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %421, i32 noundef %422)
          to label %423 unwind label %472

423:                                              ; preds = %419
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #8
  %424 = load i8, ptr %47, align 1, !tbaa !15, !range !18, !noundef !19
  %425 = trunc i8 %424 to i1
  store i1 false, ptr %69, align 1
  store i1 false, ptr %70, align 1
  br i1 %425, label %426, label %428

426:                                              ; preds = %423
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %58, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %427 unwind label %476

427:                                              ; preds = %426
  br label %430

428:                                              ; preds = %423
  call void @llvm.lifetime.start.p0(i64 1, ptr %68) #8
  store i1 true, ptr %69, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #8
  store i1 true, ptr %70, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %68)
          to label %429 unwind label %480

429:                                              ; preds = %428
  br label %430

430:                                              ; preds = %429, %427
  invoke void @_ZN11spirv_cross4joinIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(32) %420, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 8 dereferenceable(32) %67)
          to label %431 unwind label %484

431:                                              ; preds = %430
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  %432 = load i1, ptr %70, align 1
  br i1 %432, label %433, label %434

433:                                              ; preds = %431
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #8
  br label %434

434:                                              ; preds = %433, %431
  %435 = load i1, ptr %69, align 1
  br i1 %435, label %436, label %437

436:                                              ; preds = %434
  call void @llvm.lifetime.end.p0(i64 1, ptr %68) #8
  br label %437

437:                                              ; preds = %436, %434
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #8
  %438 = load ptr, ptr %46, align 8, !tbaa !5
  %439 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %438, i32 0, i32 12
  %440 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %439) #8
  %441 = trunc i64 %440 to i32
  store i32 %441, ptr %71, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #8
  store i32 0, ptr %72, align 4, !tbaa !11
  br label %442

442:                                              ; preds = %511, %437
  %443 = load i32, ptr %72, align 4, !tbaa !11
  %444 = load i32, ptr %71, align 4, !tbaa !11
  %445 = icmp ult i32 %443, %444
  br i1 %445, label %497, label %446

446:                                              ; preds = %442
  store i32 7, ptr %57, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #8
  br label %518

447:                                              ; preds = %401
  %448 = landingpad { ptr, i32 }
          cleanup
  %449 = extractvalue { ptr, i32 } %448, 0
  store ptr %449, ptr %43, align 8
  %450 = extractvalue { ptr, i32 } %448, 1
  store i32 %450, ptr %44, align 4
  br label %471

451:                                              ; preds = %408
  %452 = landingpad { ptr, i32 }
          cleanup
  %453 = extractvalue { ptr, i32 } %452, 0
  store ptr %453, ptr %43, align 8
  %454 = extractvalue { ptr, i32 } %452, 1
  store i32 %454, ptr %44, align 4
  br label %470

455:                                              ; preds = %410
  %456 = landingpad { ptr, i32 }
          cleanup
  %457 = extractvalue { ptr, i32 } %456, 0
  store ptr %457, ptr %43, align 8
  %458 = extractvalue { ptr, i32 } %456, 1
  store i32 %458, ptr %44, align 4
  br label %463

459:                                              ; preds = %412
  %460 = landingpad { ptr, i32 }
          cleanup
  %461 = extractvalue { ptr, i32 } %460, 0
  store ptr %461, ptr %43, align 8
  %462 = extractvalue { ptr, i32 } %460, 1
  store i32 %462, ptr %44, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  br label %463

463:                                              ; preds = %459, %455
  %464 = load i1, ptr %64, align 1
  br i1 %464, label %465, label %466

465:                                              ; preds = %463
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #8
  br label %466

466:                                              ; preds = %465, %463
  %467 = load i1, ptr %63, align 1
  br i1 %467, label %468, label %469

468:                                              ; preds = %466
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #8
  br label %469

469:                                              ; preds = %468, %466
  br label %470

470:                                              ; preds = %469, %451
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %471

471:                                              ; preds = %470, %447
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  br label %523

472:                                              ; preds = %419
  %473 = landingpad { ptr, i32 }
          cleanup
  %474 = extractvalue { ptr, i32 } %473, 0
  store ptr %474, ptr %43, align 8
  %475 = extractvalue { ptr, i32 } %473, 1
  store i32 %475, ptr %44, align 4
  br label %496

476:                                              ; preds = %426
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %43, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %44, align 4
  br label %495

480:                                              ; preds = %428
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %43, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %44, align 4
  br label %488

484:                                              ; preds = %430
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %43, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %44, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  br label %488

488:                                              ; preds = %484, %480
  %489 = load i1, ptr %70, align 1
  br i1 %489, label %490, label %491

490:                                              ; preds = %488
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #8
  br label %491

491:                                              ; preds = %490, %488
  %492 = load i1, ptr %69, align 1
  br i1 %492, label %493, label %494

493:                                              ; preds = %491
  call void @llvm.lifetime.end.p0(i64 1, ptr %68) #8
  br label %494

494:                                              ; preds = %493, %491
  br label %495

495:                                              ; preds = %494, %476
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  br label %496

496:                                              ; preds = %495, %472
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  br label %522

497:                                              ; preds = %442
  %498 = load i32, ptr %15, align 4, !tbaa !9
  %499 = load ptr, ptr %16, align 8, !tbaa !5
  %500 = load ptr, ptr %17, align 8, !tbaa !5
  %501 = load ptr, ptr %18, align 8, !tbaa !5
  %502 = load ptr, ptr %46, align 8, !tbaa !5
  %503 = load i32, ptr %72, align 4, !tbaa !11
  %504 = load ptr, ptr %21, align 8, !tbaa !5
  %505 = load ptr, ptr %24, align 8, !tbaa !5
  %506 = load ptr, ptr %25, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(12482) %118, i32 noundef %498, ptr noundef nonnull align 8 dereferenceable(32) %499, ptr noundef nonnull align 8 dereferenceable(336) %500, ptr noundef nonnull align 8 dereferenceable(176) %501, ptr noundef nonnull align 8 dereferenceable(336) %502, i32 noundef %503, ptr noundef nonnull align 8 dereferenceable(58) %504, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull align 4 dereferenceable(4) %505, ptr noundef nonnull align 4 dereferenceable(4) %506, ptr noundef nonnull align 8 dereferenceable(64) %42)
          to label %507 unwind label %514

507:                                              ; preds = %497
  %508 = load ptr, ptr %25, align 8, !tbaa !5
  %509 = load i32, ptr %508, align 4, !tbaa !11
  %510 = add i32 %509, 1
  store i32 %510, ptr %508, align 4, !tbaa !11
  br label %511

511:                                              ; preds = %507
  %512 = load i32, ptr %72, align 4, !tbaa !11
  %513 = add i32 %512, 1
  store i32 %513, ptr %72, align 4, !tbaa !11
  br label %442, !llvm.loop !200

514:                                              ; preds = %497
  %515 = landingpad { ptr, i32 }
          cleanup
  %516 = extractvalue { ptr, i32 } %515, 0
  store ptr %516, ptr %43, align 8
  %517 = extractvalue { ptr, i32 } %515, 1
  store i32 %517, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %522

518:                                              ; preds = %446
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #8
  br label %519

519:                                              ; preds = %518
  %520 = load i32, ptr %58, align 4, !tbaa !11
  %521 = add i32 %520, 1
  store i32 %521, ptr %58, align 4, !tbaa !11
  br label %396, !llvm.loop !201

522:                                              ; preds = %514, %496
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %523

523:                                              ; preds = %522, %471
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %1163

524:                                              ; preds = %400
  store i32 1, ptr %57, align 4
  br label %1160

525:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #8
  store i32 0, ptr %73, align 4, !tbaa !11
  br label %526

526:                                              ; preds = %1153, %525
  %527 = load i32, ptr %73, align 4, !tbaa !11
  %528 = load i32, ptr %48, align 4, !tbaa !11
  %529 = icmp ult i32 %527, %528
  br i1 %529, label %531, label %530

530:                                              ; preds = %526
  store i32 10, ptr %57, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #8
  br label %1159

531:                                              ; preds = %526
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #8
  %532 = load ptr, ptr %17, align 8, !tbaa !5
  %533 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %532, i32 0, i32 12
  %534 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %533) #8
  %535 = trunc i64 %534 to i32
  store i32 %535, ptr %74, align 4, !tbaa !11
  %536 = load i32, ptr %15, align 4, !tbaa !9
  %537 = icmp eq i32 %536, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  br i1 %537, label %538, label %547

538:                                              ; preds = %531
  %539 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 110
  %540 = load ptr, ptr %18, align 8, !tbaa !5
  %541 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %540, i32 0, i32 1
  %542 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %541)
          to label %543 unwind label %561

543:                                              ; preds = %538
  store i32 %542, ptr %75, align 4, !tbaa !11
  %544 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %539, ptr noundef nonnull align 4 dereferenceable(4) %75)
          to label %545 unwind label %561

545:                                              ; preds = %543
  %546 = icmp ne i64 %544, 0
  br label %547

547:                                              ; preds = %545, %531
  %548 = phi i1 [ false, %531 ], [ %546, %545 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  br i1 %548, label %549, label %569

549:                                              ; preds = %547
  %550 = load ptr, ptr %17, align 8, !tbaa !5
  %551 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %550, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #8
  %552 = load ptr, ptr %49, align 8, !tbaa !5
  %553 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %552, i32 0, i32 1
  %554 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %553)
          to label %555 unwind label %565

555:                                              ; preds = %549
  %556 = load i8, ptr %33, align 1, !tbaa !15, !range !18, !noundef !19
  %557 = trunc i8 %556 to i1
  %558 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %118, i32 noundef %554, i1 noundef zeroext %557)
          to label %559 unwind label %565

559:                                              ; preds = %555
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %76, i32 noundef %558)
          to label %560 unwind label %565

560:                                              ; preds = %559
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %551, ptr noundef nonnull align 4 dereferenceable(4) %76) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  br label %581

561:                                              ; preds = %543, %538
  %562 = landingpad { ptr, i32 }
          cleanup
  %563 = extractvalue { ptr, i32 } %562, 0
  store ptr %563, ptr %43, align 8
  %564 = extractvalue { ptr, i32 } %562, 1
  store i32 %564, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  br label %1158

565:                                              ; preds = %559, %555, %549
  %566 = landingpad { ptr, i32 }
          cleanup
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %43, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  br label %1158

569:                                              ; preds = %547
  %570 = load ptr, ptr %17, align 8, !tbaa !5
  %571 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %570, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  %572 = load ptr, ptr %49, align 8, !tbaa !5
  %573 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %572, i32 0, i32 1
  %574 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %573)
          to label %575 unwind label %577

575:                                              ; preds = %569
  %576 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %77, i32 0, i32 0
  store i32 %574, ptr %576, align 4
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %571, ptr noundef nonnull align 4 dereferenceable(4) %77) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  br label %581

577:                                              ; preds = %569
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %43, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  br label %1158

581:                                              ; preds = %575, %560
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #8
  %582 = load ptr, ptr %22, align 8, !tbaa !5
  %583 = load ptr, ptr %19, align 8, !tbaa !5
  %584 = load i32, ptr %20, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross11CompilerMSL18append_member_nameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(32) %582, ptr noundef nonnull align 8 dereferenceable(336) %583, i32 noundef %584)
          to label %585 unwind label %637

585:                                              ; preds = %581
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #8
  %586 = load i8, ptr %47, align 1, !tbaa !15, !range !18, !noundef !19
  %587 = trunc i8 %586 to i1
  store i1 false, ptr %83, align 1
  store i1 false, ptr %84, align 1
  br i1 %587, label %588, label %590

588:                                              ; preds = %585
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 1 dereferenceable(2) @.str.76, ptr noundef nonnull align 4 dereferenceable(4) %73)
          to label %589 unwind label %641

589:                                              ; preds = %588
  br label %592

590:                                              ; preds = %585
  call void @llvm.lifetime.start.p0(i64 1, ptr %82) #8
  store i1 true, ptr %83, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %82) #8
  store i1 true, ptr %84, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %82)
          to label %591 unwind label %645

591:                                              ; preds = %590
  br label %592

592:                                              ; preds = %591, %589
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 8 dereferenceable(32) %81)
          to label %593 unwind label %649

593:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 1, ptr %86) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %86) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef @.str.67, ptr noundef nonnull align 1 dereferenceable(1) %86)
          to label %594 unwind label %653

594:                                              ; preds = %593
  invoke void @_ZN11spirv_cross11CompilerMSL17ensure_valid_nameENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef %79, ptr noundef %85)
          to label %595 unwind label %657

595:                                              ; preds = %594
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %86) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  %596 = load i1, ptr %84, align 1
  br i1 %596, label %597, label %598

597:                                              ; preds = %595
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %82) #8
  br label %598

598:                                              ; preds = %597, %595
  %599 = load i1, ptr %83, align 1
  br i1 %599, label %600, label %601

600:                                              ; preds = %598
  call void @llvm.lifetime.end.p0(i64 1, ptr %82) #8
  br label %601

601:                                              ; preds = %600, %598
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  %602 = load ptr, ptr %17, align 8, !tbaa !5
  %603 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %602, i32 0, i32 1
  %604 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %603)
          to label %605 unwind label %672

605:                                              ; preds = %601
  %606 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %87, i32 0, i32 0
  store i32 %604, ptr %606, align 4
  %607 = load i32, ptr %74, align 4, !tbaa !11
  %608 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %87, i32 0, i32 0
  %609 = load i32, ptr %608, align 4
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %609, i32 noundef %607, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %610 unwind label %672

610:                                              ; preds = %605
  %611 = load i8, ptr %29, align 1, !tbaa !15, !range !18, !noundef !19
  %612 = trunc i8 %611 to i1
  br i1 %612, label %676, label %613

613:                                              ; preds = %610
  %614 = load ptr, ptr %24, align 8, !tbaa !5
  %615 = load i32, ptr %614, align 4, !tbaa !11
  %616 = icmp ne i32 %615, -1
  br i1 %616, label %617, label %676

617:                                              ; preds = %613
  %618 = load ptr, ptr %17, align 8, !tbaa !5
  %619 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %618, i32 0, i32 1
  %620 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %619)
          to label %621 unwind label %672

621:                                              ; preds = %617
  %622 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %88, i32 0, i32 0
  store i32 %620, ptr %622, align 4
  %623 = load i32, ptr %74, align 4, !tbaa !11
  %624 = load ptr, ptr %24, align 8, !tbaa !5
  %625 = load i32, ptr %624, align 4, !tbaa !11
  %626 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %88, i32 0, i32 0
  %627 = load i32, ptr %626, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %627, i32 noundef %623, i32 noundef 30, i32 noundef %625)
          to label %628 unwind label %672

628:                                              ; preds = %621
  %629 = load ptr, ptr %24, align 8, !tbaa !5
  %630 = load i32, ptr %629, align 4, !tbaa !11
  %631 = load ptr, ptr %49, align 8, !tbaa !5
  %632 = load i32, ptr %15, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %118, i32 noundef %630, ptr noundef nonnull align 8 dereferenceable(336) %631, i32 noundef %632, i1 noundef zeroext false)
          to label %633 unwind label %672

633:                                              ; preds = %628
  %634 = load ptr, ptr %24, align 8, !tbaa !5
  %635 = load i32, ptr %634, align 4, !tbaa !11
  %636 = add i32 %635, 1
  store i32 %636, ptr %634, align 4, !tbaa !11
  br label %902

637:                                              ; preds = %581
  %638 = landingpad { ptr, i32 }
          cleanup
  %639 = extractvalue { ptr, i32 } %638, 0
  store ptr %639, ptr %43, align 8
  %640 = extractvalue { ptr, i32 } %638, 1
  store i32 %640, ptr %44, align 4
  br label %671

641:                                              ; preds = %588
  %642 = landingpad { ptr, i32 }
          cleanup
  %643 = extractvalue { ptr, i32 } %642, 0
  store ptr %643, ptr %43, align 8
  %644 = extractvalue { ptr, i32 } %642, 1
  store i32 %644, ptr %44, align 4
  br label %670

645:                                              ; preds = %590
  %646 = landingpad { ptr, i32 }
          cleanup
  %647 = extractvalue { ptr, i32 } %646, 0
  store ptr %647, ptr %43, align 8
  %648 = extractvalue { ptr, i32 } %646, 1
  store i32 %648, ptr %44, align 4
  br label %663

649:                                              ; preds = %592
  %650 = landingpad { ptr, i32 }
          cleanup
  %651 = extractvalue { ptr, i32 } %650, 0
  store ptr %651, ptr %43, align 8
  %652 = extractvalue { ptr, i32 } %650, 1
  store i32 %652, ptr %44, align 4
  br label %662

653:                                              ; preds = %593
  %654 = landingpad { ptr, i32 }
          cleanup
  %655 = extractvalue { ptr, i32 } %654, 0
  store ptr %655, ptr %43, align 8
  %656 = extractvalue { ptr, i32 } %654, 1
  store i32 %656, ptr %44, align 4
  br label %661

657:                                              ; preds = %594
  %658 = landingpad { ptr, i32 }
          cleanup
  %659 = extractvalue { ptr, i32 } %658, 0
  store ptr %659, ptr %43, align 8
  %660 = extractvalue { ptr, i32 } %658, 1
  store i32 %660, ptr %44, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  br label %661

661:                                              ; preds = %657, %653
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %86) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  br label %662

662:                                              ; preds = %661, %649
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  br label %663

663:                                              ; preds = %662, %645
  %664 = load i1, ptr %84, align 1
  br i1 %664, label %665, label %666

665:                                              ; preds = %663
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %82) #8
  br label %666

666:                                              ; preds = %665, %663
  %667 = load i1, ptr %83, align 1
  br i1 %667, label %668, label %669

668:                                              ; preds = %666
  call void @llvm.lifetime.end.p0(i64 1, ptr %82) #8
  br label %669

669:                                              ; preds = %668, %666
  br label %670

670:                                              ; preds = %669, %641
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  br label %671

671:                                              ; preds = %670, %637
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  br label %1157

672:                                              ; preds = %1006, %1002, %1001, %996, %992, %985, %981, %972, %968, %959, %955, %942, %938, %915, %906, %902, %890, %886, %880, %876, %850, %843, %834, %795, %788, %779, %761, %749, %742, %735, %727, %720, %711, %704, %697, %691, %687, %680, %676, %628, %621, %617, %605, %601
  %673 = landingpad { ptr, i32 }
          cleanup
  %674 = extractvalue { ptr, i32 } %673, 0
  store ptr %674, ptr %43, align 8
  %675 = extractvalue { ptr, i32 } %673, 1
  store i32 %675, ptr %44, align 4
  br label %1156

676:                                              ; preds = %613, %610
  %677 = load ptr, ptr %19, align 8, !tbaa !5
  %678 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %677, i32 0, i32 1
  %679 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %678)
          to label %680 unwind label %672

680:                                              ; preds = %676
  %681 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %89, i32 0, i32 0
  store i32 %679, ptr %681, align 4
  %682 = load i32, ptr %20, align 4, !tbaa !11
  %683 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %89, i32 0, i32 0
  %684 = load i32, ptr %683, align 4
  %685 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %684, i32 noundef %682, i32 noundef 30)
          to label %686 unwind label %672

686:                                              ; preds = %680
  br i1 %685, label %687, label %720

687:                                              ; preds = %686
  %688 = load ptr, ptr %19, align 8, !tbaa !5
  %689 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %688, i32 0, i32 1
  %690 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %689)
          to label %691 unwind label %672

691:                                              ; preds = %687
  %692 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %90, i32 0, i32 0
  store i32 %690, ptr %692, align 4
  %693 = load i32, ptr %20, align 4, !tbaa !11
  %694 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %90, i32 0, i32 0
  %695 = load i32, ptr %694, align 4
  %696 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %695, i32 noundef %693, i32 noundef 30)
          to label %697 unwind label %672

697:                                              ; preds = %691
  %698 = load i32, ptr %73, align 4, !tbaa !11
  %699 = add i32 %696, %698
  %700 = load ptr, ptr %24, align 8, !tbaa !5
  store i32 %699, ptr %700, align 4, !tbaa !11
  %701 = load ptr, ptr %17, align 8, !tbaa !5
  %702 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %701, i32 0, i32 1
  %703 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %702)
          to label %704 unwind label %672

704:                                              ; preds = %697
  %705 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %91, i32 0, i32 0
  store i32 %703, ptr %705, align 4
  %706 = load i32, ptr %74, align 4, !tbaa !11
  %707 = load ptr, ptr %24, align 8, !tbaa !5
  %708 = load i32, ptr %707, align 4, !tbaa !11
  %709 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %91, i32 0, i32 0
  %710 = load i32, ptr %709, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %710, i32 noundef %706, i32 noundef 30, i32 noundef %708)
          to label %711 unwind label %672

711:                                              ; preds = %704
  %712 = load ptr, ptr %24, align 8, !tbaa !5
  %713 = load i32, ptr %712, align 4, !tbaa !11
  %714 = load ptr, ptr %49, align 8, !tbaa !5
  %715 = load i32, ptr %15, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %118, i32 noundef %713, ptr noundef nonnull align 8 dereferenceable(336) %714, i32 noundef %715, i1 noundef zeroext false)
          to label %716 unwind label %672

716:                                              ; preds = %711
  %717 = load ptr, ptr %24, align 8, !tbaa !5
  %718 = load i32, ptr %717, align 4, !tbaa !11
  %719 = add i32 %718, 1
  store i32 %719, ptr %717, align 4, !tbaa !11
  br label %901

720:                                              ; preds = %686
  %721 = load ptr, ptr %18, align 8, !tbaa !5
  %722 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %721, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %92, ptr align 8 %722, i64 4, i1 false), !tbaa.struct !17
  %723 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %92, i32 0, i32 0
  %724 = load i32, ptr %723, align 4
  %725 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %724, i32 noundef 30)
          to label %726 unwind label %672

726:                                              ; preds = %720
  br i1 %725, label %727, label %758

727:                                              ; preds = %726
  %728 = load ptr, ptr %18, align 8, !tbaa !5
  %729 = load i32, ptr %20, align 4, !tbaa !11
  %730 = load ptr, ptr %21, align 8, !tbaa !5
  %731 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %730, i32 0, i32 1
  %732 = load i8, ptr %731, align 8, !tbaa !202, !range !18, !noundef !19
  %733 = trunc i8 %732 to i1
  %734 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL31get_accumulated_member_locationERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(176) %728, i32 noundef %729, i1 noundef zeroext %733)
          to label %735 unwind label %672

735:                                              ; preds = %727
  %736 = load i32, ptr %73, align 4, !tbaa !11
  %737 = add i32 %734, %736
  %738 = load ptr, ptr %24, align 8, !tbaa !5
  store i32 %737, ptr %738, align 4, !tbaa !11
  %739 = load ptr, ptr %17, align 8, !tbaa !5
  %740 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %739, i32 0, i32 1
  %741 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %740)
          to label %742 unwind label %672

742:                                              ; preds = %735
  %743 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %93, i32 0, i32 0
  store i32 %741, ptr %743, align 4
  %744 = load i32, ptr %74, align 4, !tbaa !11
  %745 = load ptr, ptr %24, align 8, !tbaa !5
  %746 = load i32, ptr %745, align 4, !tbaa !11
  %747 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %93, i32 0, i32 0
  %748 = load i32, ptr %747, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %748, i32 noundef %744, i32 noundef 30, i32 noundef %746)
          to label %749 unwind label %672

749:                                              ; preds = %742
  %750 = load ptr, ptr %24, align 8, !tbaa !5
  %751 = load i32, ptr %750, align 4, !tbaa !11
  %752 = load ptr, ptr %49, align 8, !tbaa !5
  %753 = load i32, ptr %15, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %118, i32 noundef %751, ptr noundef nonnull align 8 dereferenceable(336) %752, i32 noundef %753, i1 noundef zeroext false)
          to label %754 unwind label %672

754:                                              ; preds = %749
  %755 = load ptr, ptr %24, align 8, !tbaa !5
  %756 = load i32, ptr %755, align 4, !tbaa !11
  %757 = add i32 %756, 1
  store i32 %757, ptr %755, align 4, !tbaa !11
  br label %900

758:                                              ; preds = %726
  %759 = load i8, ptr %29, align 1, !tbaa !15, !range !18, !noundef !19
  %760 = trunc i8 %759 to i1
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #8
  br i1 %760, label %761, label %773

761:                                              ; preds = %758
  %762 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %118)
          to label %763 unwind label %672

763:                                              ; preds = %761
  br i1 %762, label %764, label %773

764:                                              ; preds = %763
  %765 = load i32, ptr %15, align 4, !tbaa !9
  %766 = icmp eq i32 %765, 1
  br i1 %766, label %767, label %773

767:                                              ; preds = %764
  %768 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 40
  %769 = load i32, ptr %28, align 4, !tbaa !13
  store i32 %769, ptr %94, align 4, !tbaa !11
  %770 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %768, ptr noundef nonnull align 4 dereferenceable(4) %94)
          to label %771 unwind label %804

771:                                              ; preds = %767
  %772 = icmp ne i64 %770, 0
  br label %773

773:                                              ; preds = %771, %764, %763, %758
  %774 = phi i1 [ false, %764 ], [ false, %763 ], [ false, %758 ], [ %772, %771 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #8
  br i1 %774, label %775, label %812

775:                                              ; preds = %773
  %776 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 40
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #8
  %777 = load i32, ptr %28, align 4, !tbaa !13
  store i32 %777, ptr %95, align 4, !tbaa !11
  %778 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %776, ptr noundef nonnull align 4 dereferenceable(4) %95)
          to label %779 unwind label %808

779:                                              ; preds = %775
  %780 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %778, i32 0, i32 0
  %781 = load i32, ptr %780, align 4, !tbaa !206
  %782 = load i32, ptr %73, align 4, !tbaa !11
  %783 = add i32 %781, %782
  %784 = load ptr, ptr %24, align 8, !tbaa !5
  store i32 %783, ptr %784, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #8
  %785 = load ptr, ptr %17, align 8, !tbaa !5
  %786 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %785, i32 0, i32 1
  %787 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %786)
          to label %788 unwind label %672

788:                                              ; preds = %779
  %789 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %96, i32 0, i32 0
  store i32 %787, ptr %789, align 4
  %790 = load i32, ptr %74, align 4, !tbaa !11
  %791 = load ptr, ptr %24, align 8, !tbaa !5
  %792 = load i32, ptr %791, align 4, !tbaa !11
  %793 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %96, i32 0, i32 0
  %794 = load i32, ptr %793, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %794, i32 noundef %790, i32 noundef 30, i32 noundef %792)
          to label %795 unwind label %672

795:                                              ; preds = %788
  %796 = load ptr, ptr %24, align 8, !tbaa !5
  %797 = load i32, ptr %796, align 4, !tbaa !11
  %798 = load ptr, ptr %49, align 8, !tbaa !5
  %799 = load i32, ptr %15, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %118, i32 noundef %797, ptr noundef nonnull align 8 dereferenceable(336) %798, i32 noundef %799, i1 noundef zeroext false)
          to label %800 unwind label %672

800:                                              ; preds = %795
  %801 = load ptr, ptr %24, align 8, !tbaa !5
  %802 = load i32, ptr %801, align 4, !tbaa !11
  %803 = add i32 %802, 1
  store i32 %803, ptr %801, align 4, !tbaa !11
  br label %899

804:                                              ; preds = %767
  %805 = landingpad { ptr, i32 }
          cleanup
  %806 = extractvalue { ptr, i32 } %805, 0
  store ptr %806, ptr %43, align 8
  %807 = extractvalue { ptr, i32 } %805, 1
  store i32 %807, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #8
  br label %1156

808:                                              ; preds = %775
  %809 = landingpad { ptr, i32 }
          cleanup
  %810 = extractvalue { ptr, i32 } %809, 0
  store ptr %810, ptr %43, align 8
  %811 = extractvalue { ptr, i32 } %809, 1
  store i32 %811, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #8
  br label %1156

812:                                              ; preds = %773
  %813 = load i8, ptr %29, align 1, !tbaa !15, !range !18, !noundef !19
  %814 = trunc i8 %813 to i1
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #8
  br i1 %814, label %815, label %828

815:                                              ; preds = %812
  %816 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 76
  %817 = load i8, ptr %816, align 4, !tbaa !210, !range !18, !noundef !19
  %818 = trunc i8 %817 to i1
  br i1 %818, label %819, label %828

819:                                              ; preds = %815
  %820 = load i32, ptr %15, align 4, !tbaa !9
  %821 = icmp eq i32 %820, 3
  br i1 %821, label %822, label %828

822:                                              ; preds = %819
  %823 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 42
  %824 = load i32, ptr %28, align 4, !tbaa !13
  store i32 %824, ptr %97, align 4, !tbaa !11
  %825 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %823, ptr noundef nonnull align 4 dereferenceable(4) %97)
          to label %826 unwind label %859

826:                                              ; preds = %822
  %827 = icmp ne i64 %825, 0
  br label %828

828:                                              ; preds = %826, %819, %815, %812
  %829 = phi i1 [ false, %819 ], [ false, %815 ], [ false, %812 ], [ %827, %826 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #8
  br i1 %829, label %830, label %867

830:                                              ; preds = %828
  %831 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 42
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #8
  %832 = load i32, ptr %28, align 4, !tbaa !13
  store i32 %832, ptr %98, align 4, !tbaa !11
  %833 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %831, ptr noundef nonnull align 4 dereferenceable(4) %98)
          to label %834 unwind label %863

834:                                              ; preds = %830
  %835 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %833, i32 0, i32 0
  %836 = load i32, ptr %835, align 4, !tbaa !206
  %837 = load i32, ptr %73, align 4, !tbaa !11
  %838 = add i32 %836, %837
  %839 = load ptr, ptr %24, align 8, !tbaa !5
  store i32 %838, ptr %839, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #8
  %840 = load ptr, ptr %17, align 8, !tbaa !5
  %841 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %840, i32 0, i32 1
  %842 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %841)
          to label %843 unwind label %672

843:                                              ; preds = %834
  %844 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %99, i32 0, i32 0
  store i32 %842, ptr %844, align 4
  %845 = load i32, ptr %74, align 4, !tbaa !11
  %846 = load ptr, ptr %24, align 8, !tbaa !5
  %847 = load i32, ptr %846, align 4, !tbaa !11
  %848 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %99, i32 0, i32 0
  %849 = load i32, ptr %848, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %849, i32 noundef %845, i32 noundef 30, i32 noundef %847)
          to label %850 unwind label %672

850:                                              ; preds = %843
  %851 = load ptr, ptr %24, align 8, !tbaa !5
  %852 = load i32, ptr %851, align 4, !tbaa !11
  %853 = load ptr, ptr %49, align 8, !tbaa !5
  %854 = load i32, ptr %15, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %118, i32 noundef %852, ptr noundef nonnull align 8 dereferenceable(336) %853, i32 noundef %854, i1 noundef zeroext false)
          to label %855 unwind label %672

855:                                              ; preds = %850
  %856 = load ptr, ptr %24, align 8, !tbaa !5
  %857 = load i32, ptr %856, align 4, !tbaa !11
  %858 = add i32 %857, 1
  store i32 %858, ptr %856, align 4, !tbaa !11
  br label %898

859:                                              ; preds = %822
  %860 = landingpad { ptr, i32 }
          cleanup
  %861 = extractvalue { ptr, i32 } %860, 0
  store ptr %861, ptr %43, align 8
  %862 = extractvalue { ptr, i32 } %860, 1
  store i32 %862, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #8
  br label %1156

863:                                              ; preds = %830
  %864 = landingpad { ptr, i32 }
          cleanup
  %865 = extractvalue { ptr, i32 } %864, 0
  store ptr %865, ptr %43, align 8
  %866 = extractvalue { ptr, i32 } %864, 1
  store i32 %866, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #8
  br label %1156

867:                                              ; preds = %828
  %868 = load i8, ptr %29, align 1, !tbaa !15, !range !18, !noundef !19
  %869 = trunc i8 %868 to i1
  br i1 %869, label %870, label %897

870:                                              ; preds = %867
  %871 = load i32, ptr %28, align 4, !tbaa !13
  %872 = icmp eq i32 %871, 3
  br i1 %872, label %876, label %873

873:                                              ; preds = %870
  %874 = load i32, ptr %28, align 4, !tbaa !13
  %875 = icmp eq i32 %874, 4
  br i1 %875, label %876, label %897

876:                                              ; preds = %873, %870
  %877 = load ptr, ptr %17, align 8, !tbaa !5
  %878 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %877, i32 0, i32 1
  %879 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %878)
          to label %880 unwind label %672

880:                                              ; preds = %876
  %881 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %100, i32 0, i32 0
  store i32 %879, ptr %881, align 4
  %882 = load i32, ptr %74, align 4, !tbaa !11
  %883 = load i32, ptr %28, align 4, !tbaa !13
  %884 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %100, i32 0, i32 0
  %885 = load i32, ptr %884, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %885, i32 noundef %882, i32 noundef 11, i32 noundef %883)
          to label %886 unwind label %672

886:                                              ; preds = %880
  %887 = load ptr, ptr %17, align 8, !tbaa !5
  %888 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %887, i32 0, i32 1
  %889 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %888)
          to label %890 unwind label %672

890:                                              ; preds = %886
  %891 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %101, i32 0, i32 0
  store i32 %889, ptr %891, align 4
  %892 = load i32, ptr %74, align 4, !tbaa !11
  %893 = load i32, ptr %73, align 4, !tbaa !11
  %894 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %101, i32 0, i32 0
  %895 = load i32, ptr %894, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %895, i32 noundef %892, i32 noundef 32, i32 noundef %893)
          to label %896 unwind label %672

896:                                              ; preds = %890
  br label %897

897:                                              ; preds = %896, %873, %867
  br label %898

898:                                              ; preds = %897, %855
  br label %899

899:                                              ; preds = %898, %800
  br label %900

900:                                              ; preds = %899, %754
  br label %901

901:                                              ; preds = %900, %716
  br label %902

902:                                              ; preds = %901, %633
  %903 = load ptr, ptr %19, align 8, !tbaa !5
  %904 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %903, i32 0, i32 1
  %905 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %904)
          to label %906 unwind label %672

906:                                              ; preds = %902
  %907 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %102, i32 0, i32 0
  store i32 %905, ptr %907, align 4
  %908 = load i32, ptr %20, align 4, !tbaa !11
  %909 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %102, i32 0, i32 0
  %910 = load i32, ptr %909, align 4
  %911 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %910, i32 noundef %908, i32 noundef 31)
          to label %912 unwind label %672

912:                                              ; preds = %906
  br i1 %911, label %913, label %920

913:                                              ; preds = %912
  %914 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %914, ptr noundef @.str.129)
          to label %915 unwind label %916

915:                                              ; preds = %913
  invoke void @__cxa_throw(ptr %914, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1174 unwind label %672

916:                                              ; preds = %913
  %917 = landingpad { ptr, i32 }
          cleanup
  %918 = extractvalue { ptr, i32 } %917, 0
  store ptr %918, ptr %43, align 8
  %919 = extractvalue { ptr, i32 } %917, 1
  store i32 %919, ptr %44, align 4
  call void @__cxa_free_exception(ptr %914) #8
  br label %1156

920:                                              ; preds = %912
  %921 = load i32, ptr %15, align 4, !tbaa !9
  %922 = icmp ne i32 %921, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #8
  br i1 %922, label %933, label %923

923:                                              ; preds = %920
  %924 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 110
  %925 = load ptr, ptr %18, align 8, !tbaa !5
  %926 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %925, i32 0, i32 1
  %927 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %926)
          to label %928 unwind label %948

928:                                              ; preds = %923
  store i32 %927, ptr %103, align 4, !tbaa !11
  %929 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %924, ptr noundef nonnull align 4 dereferenceable(4) %103)
          to label %930 unwind label %948

930:                                              ; preds = %928
  %931 = icmp ne i64 %929, 0
  %932 = xor i1 %931, true
  br label %933

933:                                              ; preds = %930, %920
  %934 = phi i1 [ true, %920 ], [ %932, %930 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #8
  br i1 %934, label %935, label %992

935:                                              ; preds = %933
  %936 = load i8, ptr %30, align 1, !tbaa !15, !range !18, !noundef !19
  %937 = trunc i8 %936 to i1
  br i1 %937, label %938, label %952

938:                                              ; preds = %935
  %939 = load ptr, ptr %17, align 8, !tbaa !5
  %940 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %939, i32 0, i32 1
  %941 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %940)
          to label %942 unwind label %672

942:                                              ; preds = %938
  %943 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %104, i32 0, i32 0
  store i32 %941, ptr %943, align 4
  %944 = load i32, ptr %74, align 4, !tbaa !11
  %945 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %104, i32 0, i32 0
  %946 = load i32, ptr %945, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %946, i32 noundef %944, i32 noundef 14, i32 noundef 0)
          to label %947 unwind label %672

947:                                              ; preds = %942
  br label %952

948:                                              ; preds = %928, %923
  %949 = landingpad { ptr, i32 }
          cleanup
  %950 = extractvalue { ptr, i32 } %949, 0
  store ptr %950, ptr %43, align 8
  %951 = extractvalue { ptr, i32 } %949, 1
  store i32 %951, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #8
  br label %1156

952:                                              ; preds = %947, %935
  %953 = load i8, ptr %33, align 1, !tbaa !15, !range !18, !noundef !19
  %954 = trunc i8 %953 to i1
  br i1 %954, label %955, label %965

955:                                              ; preds = %952
  %956 = load ptr, ptr %17, align 8, !tbaa !5
  %957 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %956, i32 0, i32 1
  %958 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %957)
          to label %959 unwind label %672

959:                                              ; preds = %955
  %960 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %105, i32 0, i32 0
  store i32 %958, ptr %960, align 4
  %961 = load i32, ptr %74, align 4, !tbaa !11
  %962 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %105, i32 0, i32 0
  %963 = load i32, ptr %962, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %963, i32 noundef %961, i32 noundef 13, i32 noundef 0)
          to label %964 unwind label %672

964:                                              ; preds = %959
  br label %965

965:                                              ; preds = %964, %952
  %966 = load i8, ptr %36, align 1, !tbaa !15, !range !18, !noundef !19
  %967 = trunc i8 %966 to i1
  br i1 %967, label %968, label %978

968:                                              ; preds = %965
  %969 = load ptr, ptr %17, align 8, !tbaa !5
  %970 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %969, i32 0, i32 1
  %971 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %970)
          to label %972 unwind label %672

972:                                              ; preds = %968
  %973 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %106, i32 0, i32 0
  store i32 %971, ptr %973, align 4
  %974 = load i32, ptr %74, align 4, !tbaa !11
  %975 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %106, i32 0, i32 0
  %976 = load i32, ptr %975, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %976, i32 noundef %974, i32 noundef 16, i32 noundef 0)
          to label %977 unwind label %672

977:                                              ; preds = %972
  br label %978

978:                                              ; preds = %977, %965
  %979 = load i8, ptr %39, align 1, !tbaa !15, !range !18, !noundef !19
  %980 = trunc i8 %979 to i1
  br i1 %980, label %981, label %991

981:                                              ; preds = %978
  %982 = load ptr, ptr %17, align 8, !tbaa !5
  %983 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %982, i32 0, i32 1
  %984 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %983)
          to label %985 unwind label %672

985:                                              ; preds = %981
  %986 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %107, i32 0, i32 0
  store i32 %984, ptr %986, align 4
  %987 = load i32, ptr %74, align 4, !tbaa !11
  %988 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %107, i32 0, i32 0
  %989 = load i32, ptr %988, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %989, i32 noundef %987, i32 noundef 17, i32 noundef 0)
          to label %990 unwind label %672

990:                                              ; preds = %985
  br label %991

991:                                              ; preds = %990, %978
  br label %992

992:                                              ; preds = %991, %933
  %993 = load ptr, ptr %17, align 8, !tbaa !5
  %994 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %993, i32 0, i32 1
  %995 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %994)
          to label %996 unwind label %672

996:                                              ; preds = %992
  %997 = load i32, ptr %74, align 4, !tbaa !11
  %998 = load ptr, ptr %18, align 8, !tbaa !5
  %999 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %998, i32 0, i32 1
  %1000 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %999)
          to label %1001 unwind label %672

1001:                                             ; preds = %996
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %995, i32 noundef %997, i32 noundef 5, i32 noundef %1000)
          to label %1002 unwind label %672

1002:                                             ; preds = %1001
  %1003 = load ptr, ptr %17, align 8, !tbaa !5
  %1004 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1003, i32 0, i32 1
  %1005 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1004)
          to label %1006 unwind label %672

1006:                                             ; preds = %1002
  %1007 = load i32, ptr %74, align 4, !tbaa !11
  %1008 = load ptr, ptr %25, align 8, !tbaa !5
  %1009 = load i32, ptr %1008, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %1005, i32 noundef %1007, i32 noundef 4, i32 noundef %1009)
          to label %1010 unwind label %672

1010:                                             ; preds = %1006
  %1011 = load ptr, ptr %21, align 8, !tbaa !5
  %1012 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %1011, i32 0, i32 1
  %1013 = load i8, ptr %1012, align 8, !tbaa !202, !range !18, !noundef !19
  %1014 = trunc i8 %1013 to i1
  br i1 %1014, label %1152, label %1015

1015:                                             ; preds = %1010
  %1016 = load ptr, ptr %21, align 8, !tbaa !5
  %1017 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %1016, i32 0, i32 2
  %1018 = load i8, ptr %1017, align 1, !tbaa !211, !range !18, !noundef !19
  %1019 = trunc i8 %1018 to i1
  br i1 %1019, label %1020, label %1152

1020:                                             ; preds = %1015
  call void @llvm.lifetime.start.p0(i64 32, ptr %108) #8
  %1021 = load ptr, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #8
  %1022 = load ptr, ptr %19, align 8, !tbaa !5
  %1023 = load i32, ptr %20, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %1022, i32 noundef %1023)
          to label %1024 unwind label %1040

1024:                                             ; preds = %1020
  call void @llvm.lifetime.start.p0(i64 32, ptr %110) #8
  %1025 = load i8, ptr %47, align 1, !tbaa !15, !range !18, !noundef !19
  %1026 = trunc i8 %1025 to i1
  store i1 false, ptr %112, align 1
  store i1 false, ptr %113, align 1
  br i1 %1026, label %1027, label %1029

1027:                                             ; preds = %1024
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %110, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %73, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %1028 unwind label %1044

1028:                                             ; preds = %1027
  br label %1031

1029:                                             ; preds = %1024
  call void @llvm.lifetime.start.p0(i64 1, ptr %111) #8
  store i1 true, ptr %112, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %111) #8
  store i1 true, ptr %113, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %110, ptr noundef @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %111)
          to label %1030 unwind label %1048

1030:                                             ; preds = %1029
  br label %1031

1031:                                             ; preds = %1030, %1028
  invoke void @_ZN11spirv_cross4joinIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %108, ptr noundef nonnull align 8 dereferenceable(32) %1021, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef nonnull align 8 dereferenceable(32) %110)
          to label %1032 unwind label %1052

1032:                                             ; preds = %1031
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  %1033 = load i1, ptr %113, align 1
  br i1 %1033, label %1034, label %1035

1034:                                             ; preds = %1032
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %111) #8
  br label %1035

1035:                                             ; preds = %1034, %1032
  %1036 = load i1, ptr %112, align 1
  br i1 %1036, label %1037, label %1038

1037:                                             ; preds = %1035
  call void @llvm.lifetime.end.p0(i64 1, ptr %111) #8
  br label %1038

1038:                                             ; preds = %1037, %1035
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  %1039 = load i32, ptr %15, align 4, !tbaa !9
  switch i32 %1039, label %1148 [
    i32 1, label %1065
    i32 3, label %1105
  ]

1040:                                             ; preds = %1020
  %1041 = landingpad { ptr, i32 }
          cleanup
  %1042 = extractvalue { ptr, i32 } %1041, 0
  store ptr %1042, ptr %43, align 8
  %1043 = extractvalue { ptr, i32 } %1041, 1
  store i32 %1043, ptr %44, align 4
  br label %1064

1044:                                             ; preds = %1027
  %1045 = landingpad { ptr, i32 }
          cleanup
  %1046 = extractvalue { ptr, i32 } %1045, 0
  store ptr %1046, ptr %43, align 8
  %1047 = extractvalue { ptr, i32 } %1045, 1
  store i32 %1047, ptr %44, align 4
  br label %1063

1048:                                             ; preds = %1029
  %1049 = landingpad { ptr, i32 }
          cleanup
  %1050 = extractvalue { ptr, i32 } %1049, 0
  store ptr %1050, ptr %43, align 8
  %1051 = extractvalue { ptr, i32 } %1049, 1
  store i32 %1051, ptr %44, align 4
  br label %1056

1052:                                             ; preds = %1031
  %1053 = landingpad { ptr, i32 }
          cleanup
  %1054 = extractvalue { ptr, i32 } %1053, 0
  store ptr %1054, ptr %43, align 8
  %1055 = extractvalue { ptr, i32 } %1053, 1
  store i32 %1055, ptr %44, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  br label %1056

1056:                                             ; preds = %1052, %1048
  %1057 = load i1, ptr %113, align 1
  br i1 %1057, label %1058, label %1059

1058:                                             ; preds = %1056
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %111) #8
  br label %1059

1059:                                             ; preds = %1058, %1056
  %1060 = load i1, ptr %112, align 1
  br i1 %1060, label %1061, label %1062

1061:                                             ; preds = %1059
  call void @llvm.lifetime.end.p0(i64 1, ptr %111) #8
  br label %1062

1062:                                             ; preds = %1061, %1059
  br label %1063

1063:                                             ; preds = %1062, %1044
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  br label %1064

1064:                                             ; preds = %1063, %1040
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  br label %1151

1065:                                             ; preds = %1038
  %1066 = load ptr, ptr %27, align 8, !tbaa !5
  %1067 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1066, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %114) #8
  call void @llvm.lifetime.start.p0(i64 120, ptr %115) #8
  %1068 = getelementptr inbounds %class.anon.501, ptr %115, i32 0, i32 0
  %1069 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %1069, ptr %1068, align 8, !tbaa !5
  %1070 = getelementptr inbounds %class.anon.501, ptr %115, i32 0, i32 1
  store ptr %118, ptr %1070, align 8, !tbaa !212
  %1071 = getelementptr inbounds %class.anon.501, ptr %115, i32 0, i32 2
  %1072 = load i8, ptr %36, align 1, !tbaa !15, !range !18, !noundef !19
  %1073 = trunc i8 %1072 to i1
  %1074 = zext i1 %1073 to i8
  store i8 %1074, ptr %1071, align 8, !tbaa !214
  %1075 = getelementptr inbounds %class.anon.501, ptr %115, i32 0, i32 3
  %1076 = load i8, ptr %39, align 1, !tbaa !15, !range !18, !noundef !19
  %1077 = trunc i8 %1076 to i1
  %1078 = zext i1 %1077 to i8
  store i8 %1078, ptr %1075, align 1, !tbaa !215
  %1079 = getelementptr inbounds %class.anon.501, ptr %115, i32 0, i32 4
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1079, ptr noundef nonnull align 8 dereferenceable(32) %108)
          to label %1080 unwind label %1087

1080:                                             ; preds = %1065
  %1081 = getelementptr inbounds %class.anon.501, ptr %115, i32 0, i32 5
  %1082 = load ptr, ptr %16, align 8, !tbaa !5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1081, ptr noundef nonnull align 8 dereferenceable(32) %1082)
          to label %1083 unwind label %1091

1083:                                             ; preds = %1080
  %1084 = getelementptr inbounds %class.anon.501, ptr %115, i32 0, i32 6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1084, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %1085 unwind label %1095

1085:                                             ; preds = %1083
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableESG_jRNS4_18InterfaceBlockMetaESE_SE_RjSL_RKNS3_6BitsetEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(120) %115)
          to label %1086 unwind label %1100

1086:                                             ; preds = %1085
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %1067, ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  call void @"_ZZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(120) %115) #8
  call void @llvm.lifetime.end.p0(i64 120, ptr %115) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #8
  br label %1149

1087:                                             ; preds = %1065
  %1088 = landingpad { ptr, i32 }
          cleanup
  %1089 = extractvalue { ptr, i32 } %1088, 0
  store ptr %1089, ptr %43, align 8
  %1090 = extractvalue { ptr, i32 } %1088, 1
  store i32 %1090, ptr %44, align 4
  br label %1104

1091:                                             ; preds = %1080
  %1092 = landingpad { ptr, i32 }
          cleanup
  %1093 = extractvalue { ptr, i32 } %1092, 0
  store ptr %1093, ptr %43, align 8
  %1094 = extractvalue { ptr, i32 } %1092, 1
  store i32 %1094, ptr %44, align 4
  br label %1099

1095:                                             ; preds = %1083
  %1096 = landingpad { ptr, i32 }
          cleanup
  %1097 = extractvalue { ptr, i32 } %1096, 0
  store ptr %1097, ptr %43, align 8
  %1098 = extractvalue { ptr, i32 } %1096, 1
  store i32 %1098, ptr %44, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1081) #8
  br label %1099

1099:                                             ; preds = %1095, %1091
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1079) #8
  br label %1104

1100:                                             ; preds = %1085
  %1101 = landingpad { ptr, i32 }
          cleanup
  %1102 = extractvalue { ptr, i32 } %1101, 0
  store ptr %1102, ptr %43, align 8
  %1103 = extractvalue { ptr, i32 } %1101, 1
  store i32 %1103, ptr %44, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(120) %115) #8
  br label %1104

1104:                                             ; preds = %1100, %1099, %1087
  call void @llvm.lifetime.end.p0(i64 120, ptr %115) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #8
  br label %1150

1105:                                             ; preds = %1038
  %1106 = load ptr, ptr %27, align 8, !tbaa !5
  %1107 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1106, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 32, ptr %116) #8
  call void @llvm.lifetime.start.p0(i64 152, ptr %117) #8
  %1108 = getelementptr inbounds %class.anon.502, ptr %117, i32 0, i32 0
  %1109 = load i8, ptr %50, align 1, !tbaa !15, !range !18, !noundef !19
  %1110 = trunc i8 %1109 to i1
  %1111 = zext i1 %1110 to i8
  store i8 %1111, ptr %1108, align 8, !tbaa !216
  %1112 = getelementptr inbounds %class.anon.502, ptr %117, i32 0, i32 1
  store ptr %118, ptr %1112, align 8, !tbaa !218
  %1113 = getelementptr inbounds %class.anon.502, ptr %117, i32 0, i32 2
  %1114 = load ptr, ptr %16, align 8, !tbaa !5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1113, ptr noundef nonnull align 8 dereferenceable(32) %1114)
          to label %1115 unwind label %1125

1115:                                             ; preds = %1105
  %1116 = getelementptr inbounds %class.anon.502, ptr %117, i32 0, i32 3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1116, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %1117 unwind label %1129

1117:                                             ; preds = %1115
  %1118 = getelementptr inbounds %class.anon.502, ptr %117, i32 0, i32 4
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1118, ptr noundef nonnull align 8 dereferenceable(32) %51)
          to label %1119 unwind label %1133

1119:                                             ; preds = %1117
  %1120 = getelementptr inbounds %class.anon.502, ptr %117, i32 0, i32 5
  %1121 = load i32, ptr %73, align 4, !tbaa !11
  store i32 %1121, ptr %1120, align 8, !tbaa !219
  %1122 = getelementptr inbounds %class.anon.502, ptr %117, i32 0, i32 6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1122, ptr noundef nonnull align 8 dereferenceable(32) %108)
          to label %1123 unwind label %1137

1123:                                             ; preds = %1119
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableESG_jRNS4_18InterfaceBlockMetaESE_SE_RjSL_RKNS3_6BitsetEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef nonnull align 8 dereferenceable(152) %117)
          to label %1124 unwind label %1143

1124:                                             ; preds = %1123
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %1107, ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  call void @"_ZZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(152) %117) #8
  call void @llvm.lifetime.end.p0(i64 152, ptr %117) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #8
  br label %1149

1125:                                             ; preds = %1105
  %1126 = landingpad { ptr, i32 }
          cleanup
  %1127 = extractvalue { ptr, i32 } %1126, 0
  store ptr %1127, ptr %43, align 8
  %1128 = extractvalue { ptr, i32 } %1126, 1
  store i32 %1128, ptr %44, align 4
  br label %1147

1129:                                             ; preds = %1115
  %1130 = landingpad { ptr, i32 }
          cleanup
  %1131 = extractvalue { ptr, i32 } %1130, 0
  store ptr %1131, ptr %43, align 8
  %1132 = extractvalue { ptr, i32 } %1130, 1
  store i32 %1132, ptr %44, align 4
  br label %1142

1133:                                             ; preds = %1117
  %1134 = landingpad { ptr, i32 }
          cleanup
  %1135 = extractvalue { ptr, i32 } %1134, 0
  store ptr %1135, ptr %43, align 8
  %1136 = extractvalue { ptr, i32 } %1134, 1
  store i32 %1136, ptr %44, align 4
  br label %1141

1137:                                             ; preds = %1119
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %43, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %44, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1118) #8
  br label %1141

1141:                                             ; preds = %1137, %1133
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1116) #8
  br label %1142

1142:                                             ; preds = %1141, %1129
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1113) #8
  br label %1147

1143:                                             ; preds = %1123
  %1144 = landingpad { ptr, i32 }
          cleanup
  %1145 = extractvalue { ptr, i32 } %1144, 0
  store ptr %1145, ptr %43, align 8
  %1146 = extractvalue { ptr, i32 } %1144, 1
  store i32 %1146, ptr %44, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(152) %117) #8
  br label %1147

1147:                                             ; preds = %1143, %1142, %1125
  call void @llvm.lifetime.end.p0(i64 152, ptr %117) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #8
  br label %1150

1148:                                             ; preds = %1038
  br label %1149

1149:                                             ; preds = %1148, %1124, %1086
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %108) #8
  br label %1152

1150:                                             ; preds = %1147, %1104
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #8
  br label %1151

1151:                                             ; preds = %1150, %1064
  call void @llvm.lifetime.end.p0(i64 32, ptr %108) #8
  br label %1156

1152:                                             ; preds = %1149, %1015, %1010
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #8
  br label %1153

1153:                                             ; preds = %1152
  %1154 = load i32, ptr %73, align 4, !tbaa !11
  %1155 = add i32 %1154, 1
  store i32 %1155, ptr %73, align 4, !tbaa !11
  br label %526, !llvm.loop !220

1156:                                             ; preds = %1151, %948, %916, %863, %859, %808, %804, %672
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  br label %1157

1157:                                             ; preds = %1156, %671
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  br label %1158

1158:                                             ; preds = %1157, %577, %565, %561
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #8
  br label %1163

1159:                                             ; preds = %530
  store i32 0, ptr %57, align 4
  br label %1160

1160:                                             ; preds = %1159, %524, %386
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %42) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  %1161 = load i32, ptr %57, align 4
  switch i32 %1161, label %1174 [
    i32 0, label %1162
    i32 1, label %1162
  ]

1162:                                             ; preds = %1160, %1160
  ret void

1163:                                             ; preds = %1158, %523, %389
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #8
  br label %1164

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

1165:                                             ; preds = %1164, %283, %263, %259
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #8
  br label %1166

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

1167:                                             ; preds = %1166, %251
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  br label %1168

1168:                                             ; preds = %1167, %211
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %42) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %1169

1169:                                             ; preds = %1168
  %1170 = load ptr, ptr %43, align 8
  %1171 = load i32, ptr %44, align 4
  %1172 = insertvalue { ptr, i32 } poison, ptr %1170, 0
  %1173 = insertvalue { ptr, i32 } %1172, i32 %1171, 1
  resume { ptr, i32 } %1173

1174:                                             ; preds = %1160, %915, %282, %250
  unreachable
}

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

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

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

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

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL31get_accumulated_member_locationERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176), i32 noundef, i1 noundef zeroext) #5

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

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

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

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


; 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::Bitset" = type { i64, %"class.std::unordered_set" }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"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.501 = type { ptr, ptr, i8, i8, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }
%class.anon.502 = type { i8, ptr, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, %"class.std::__cxx11::basic_string" }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.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
@.str.129 = external hidden unnamed_addr constant [61 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

; 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 nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #2 align 2

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

; 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

; 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_cross6BitsetC2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #0 align 2

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

; 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 zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef) local_unnamed_addr #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 @_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 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_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 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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetE(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(336) %5, i32 noundef %6, ptr nocapture noundef nonnull readonly align 8 dereferenceable(58) %7, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr nocapture noundef nonnull align 4 dereferenceable(4) %10, ptr nocapture noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 8 dereferenceable(64) %12) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %14 = alloca i32, align 4
  %15 = alloca %"class.spirv_cross::Bitset", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.spirv_cross::TypedID.414", align 4
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca i32, align 4
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator.71", align 1
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::allocator.71", align 1
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %"class.spirv_cross::TypedID.414", align 4
  %31 = alloca %"class.spirv_cross::TypedID.414", align 4
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::allocator.71", align 1
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::allocator.71", align 1
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::allocator.71", align 1
  %48 = alloca %"class.std::function.489", align 8
  %49 = alloca %class.anon.501, align 8
  %50 = alloca %"class.std::function.489", align 8
  %51 = alloca %class.anon.502, align 8
  %52 = getelementptr inbounds i8, ptr %0, i64 1744
  %53 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %52)
  %54 = tail call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %53)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #7
  store i32 2147483647, ptr %14, align 4, !tbaa !5
  %55 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %5, i32 noundef %6, ptr noundef nonnull %14)
  %56 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %12, i32 noundef 14)
  br i1 %56, label %64, label %57

57:                                               ; preds = %13
  %58 = getelementptr inbounds i8, ptr %5, i64 8
  %59 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %58)
  %60 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %59, i32 noundef %6, i32 noundef 14)
  br i1 %60, label %64, label %61

61:                                               ; preds = %57
  %62 = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.0116.0.copyload = load i32, ptr %62, align 8, !tbaa !9
  %63 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0116.0.copyload, i32 noundef 14)
  br label %64

64:                                               ; preds = %61, %57, %13
  %65 = phi i1 [ true, %57 ], [ true, %13 ], [ %63, %61 ]
  %66 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %12, i32 noundef 13)
  br i1 %66, label %74, label %67

67:                                               ; preds = %64
  %68 = getelementptr inbounds i8, ptr %5, i64 8
  %69 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %68)
  %70 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %69, i32 noundef %6, i32 noundef 13)
  br i1 %70, label %74, label %71

71:                                               ; preds = %67
  %72 = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.0111.0.copyload = load i32, ptr %72, align 8, !tbaa !9
  %73 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0111.0.copyload, i32 noundef 13)
  br label %74

74:                                               ; preds = %71, %67, %64
  %75 = phi i1 [ true, %67 ], [ true, %64 ], [ %73, %71 ]
  %76 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %12, i32 noundef 16)
  br i1 %76, label %84, label %77

77:                                               ; preds = %74
  %78 = getelementptr inbounds i8, ptr %5, i64 8
  %79 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %78)
  %80 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %79, i32 noundef %6, i32 noundef 16)
  br i1 %80, label %84, label %81

81:                                               ; preds = %77
  %82 = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.0106.0.copyload = load i32, ptr %82, align 8, !tbaa !9
  %83 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0106.0.copyload, i32 noundef 16)
  br label %84

84:                                               ; preds = %81, %77, %74
  %85 = phi i1 [ true, %77 ], [ true, %74 ], [ %83, %81 ]
  %86 = zext i1 %85 to i8
  %87 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %12, i32 noundef 17)
  br i1 %87, label %95, label %88

88:                                               ; preds = %84
  %89 = getelementptr inbounds i8, ptr %5, i64 8
  %90 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %89)
  %91 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %90, i32 noundef %6, i32 noundef 17)
  br i1 %91, label %95, label %92

92:                                               ; preds = %88
  %93 = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.0101.0.copyload = load i32, ptr %93, align 8, !tbaa !9
  %94 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0101.0.copyload, i32 noundef 17)
  br label %95

95:                                               ; preds = %92, %88, %84
  %96 = phi i1 [ true, %88 ], [ true, %84 ], [ %94, %92 ]
  %97 = zext i1 %96 to i8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %15) #7
  call void @_ZN11spirv_cross6BitsetC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %15) #7
  br i1 %65, label %98, label %101

98:                                               ; preds = %95
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %15, i32 noundef 14)
          to label %101 unwind label %99

99:                                               ; preds = %106, %104, %102, %98
  %100 = landingpad { ptr, i32 }
          cleanup
  br label %532

101:                                              ; preds = %98, %95
  br i1 %75, label %102, label %103

102:                                              ; preds = %101
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %15, i32 noundef 13)
          to label %103 unwind label %99

103:                                              ; preds = %102, %101
  br i1 %85, label %104, label %105

104:                                              ; preds = %103
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %15, i32 noundef 16)
          to label %105 unwind label %99

105:                                              ; preds = %104, %103
  br i1 %96, label %106, label %107

106:                                              ; preds = %105
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %15, i32 noundef 17)
          to label %107 unwind label %99

107:                                              ; preds = %106, %105
  %108 = getelementptr inbounds i8, ptr %5, i64 136
  %109 = zext i32 %6 to i64
  %110 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %108, i64 noundef %109) #7
  %111 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %110)
  %112 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %111)
          to label %113 unwind label %121

113:                                              ; preds = %107
  %114 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %112)
          to label %115 unwind label %123

115:                                              ; preds = %113
  br i1 %114, label %116, label %130

116:                                              ; preds = %115
  %117 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %112)
          to label %118 unwind label %123

118:                                              ; preds = %116
  br i1 %117, label %119, label %127

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

121:                                              ; preds = %107
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %532

123:                                              ; preds = %.invoke, %141, %130, %116, %113
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %532

125:                                              ; preds = %119
  %126 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %120) #7
  br label %532

127:                                              ; preds = %118
  %128 = getelementptr inbounds i8, ptr %112, i64 28
  %129 = load i32, ptr %128, align 4, !tbaa !11
  br label %143

130:                                              ; preds = %115
  %131 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %112)
          to label %132 unwind label %123

132:                                              ; preds = %130
  br i1 %131, label %133, label %143

133:                                              ; preds = %132
  %134 = getelementptr inbounds i8, ptr %112, i64 32
  %135 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %134) #7
  %.not = icmp eq i64 %135, 1
  br i1 %.not, label %141, label %136

136:                                              ; preds = %133
  %137 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %137, ptr noundef nonnull @.str.128)
          to label %.invoke unwind label %139

.invoke:                                          ; preds = %119, %136
  %138 = phi ptr [ %137, %136 ], [ %120, %119 ]
  invoke void @__cxa_throw(ptr nonnull %138, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont unwind label %123

.cont:                                            ; preds = %.invoke
  unreachable

139:                                              ; preds = %136
  %140 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %137) #7
  br label %532

141:                                              ; preds = %133
  %142 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %112)
          to label %143 unwind label %123

143:                                              ; preds = %141, %132, %127
  %.0276 = phi i32 [ %129, %127 ], [ 1, %132 ], [ %142, %141 ]
  %.0275 = phi i1 [ true, %127 ], [ false, %132 ], [ true, %141 ]
  %144 = getelementptr inbounds i8, ptr %112, i64 124
  %145 = load i8, ptr %144, align 4, !tbaa !40, !range !41, !noundef !42
  %146 = trunc nuw i8 %145 to i1
  br i1 %146, label %147, label %.preheader

.preheader:                                       ; preds = %147, %143
  %.1278.ph = phi ptr [ %150, %147 ], [ %112, %143 ]
  br label %151

147:                                              ; preds = %143
  %148 = getelementptr inbounds i8, ptr %112, i64 276
  %149 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %148)
  %150 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %149)
          to label %.preheader unwind label %.loopexit.split-lp391

.loopexit390:                                     ; preds = %151, %154, %.critedge
  %lpad.loopexit392 = landingpad { ptr, i32 }
          cleanup
  br label %532

.loopexit.split-lp391:                            ; preds = %147
  %lpad.loopexit.split-lp393 = landingpad { ptr, i32 }
          cleanup
  br label %532

151:                                              ; preds = %.preheader, %.critedge
  %.1278 = phi ptr [ %159, %.critedge ], [ %.1278.ph, %.preheader ]
  %152 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %.1278)
          to label %153 unwind label %.loopexit390

153:                                              ; preds = %151
  br i1 %152, label %.critedge, label %154

154:                                              ; preds = %153
  %155 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %.1278)
          to label %156 unwind label %.loopexit390

156:                                              ; preds = %154
  br i1 %155, label %.critedge, label %160

.critedge:                                        ; preds = %153, %156
  %157 = getelementptr inbounds i8, ptr %.1278, i64 276
  %158 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %157)
  %159 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %158)
          to label %151 unwind label %.loopexit390, !llvm.loop !43

160:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  %161 = icmp eq i32 %1, 3
  br i1 %161, label %162, label %188

162:                                              ; preds = %160
  %163 = load i32, ptr %14, align 4
  %164 = icmp eq i32 %163, 3
  %or.cond = select i1 %55, i1 %164, i1 false
  br i1 %or.cond, label %165, label %188

165:                                              ; preds = %162
  %166 = getelementptr inbounds i8, ptr %3, i64 136
  %167 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %166) #7
  %168 = trunc i64 %167 to i32
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef %111)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %166, ptr noundef nonnull align 4 dereferenceable(4) %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #7
  %169 = getelementptr inbounds i8, ptr %3, i64 8
  %170 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %169)
          to label %171 unwind label %184

171:                                              ; preds = %165
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %170, i32 noundef %168, i32 noundef 11, i32 noundef 3)
          to label %172 unwind label %184

172:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  %173 = load ptr, ptr %0, align 8, !tbaa !45
  %174 = getelementptr inbounds i8, ptr %173, i64 160
  %175 = load ptr, ptr %174, align 8
  invoke void %175(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 3, i32 noundef 3)
          to label %176 unwind label %186

176:                                              ; preds = %172
  %177 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %18) #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
  %178 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %169)
          to label %179 unwind label %184

179:                                              ; preds = %176
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %178, i32 noundef %168, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %180 unwind label %184

180:                                              ; preds = %179
  %181 = getelementptr inbounds i8, ptr %0, i64 10148
  %182 = load i8, ptr %181, align 4, !tbaa !47, !range !41, !noundef !42
  %183 = trunc nuw i8 %182 to i1
  br i1 %183, label %188, label %530

184:                                              ; preds = %179, %176, %171, %165
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %531

186:                                              ; preds = %172
  %187 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %531

188:                                              ; preds = %180, %162, %160
  %.0279 = phi i8 [ 1, %180 ], [ 0, %162 ], [ 0, %160 ]
  %189 = getelementptr inbounds i8, ptr %112, i64 16
  %190 = load i32, ptr %189, align 8, !tbaa !195
  %191 = icmp eq i32 %190, 15
  %.not421 = icmp eq i32 %.0276, 0
  br i1 %191, label %192, label %238

192:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  store i32 0, ptr %19, align 4, !tbaa !9
  br i1 %.not421, label %._crit_edge419, label %.lr.ph418

.lr.ph418:                                        ; preds = %192
  %193 = getelementptr inbounds i8, ptr %112, i64 136
  br label %194

._crit_edge419:                                   ; preds = %._crit_edge416, %192
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  br label %530

194:                                              ; preds = %.lr.ph418, %._crit_edge416
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #7
  invoke void @_ZN11spirv_cross11CompilerMSL18append_member_nameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(336) %5, i32 noundef %6)
          to label %195 unwind label %212

195:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #7
  br i1 %.0275, label %196, label %197

196:                                              ; preds = %195
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 1 dereferenceable(2) @.str.76, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %198 unwind label %214

197:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %198 unwind label %.thread

198:                                              ; preds = %197, %196
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %199 unwind label %217

199:                                              ; preds = %198
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  br i1 %.0275, label %.critedge348, label %200

200:                                              ; preds = %199
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #7
  br label %.critedge348

.critedge348:                                     ; preds = %199, %200
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %5, i32 noundef %6)
          to label %201 unwind label %221

201:                                              ; preds = %.critedge348
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #7
  br i1 %.0275, label %202, label %203

202:                                              ; preds = %201
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %204 unwind label %223

203:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %27) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %204 unwind label %.thread370

204:                                              ; preds = %203, %202
  invoke void @_ZN11spirv_cross4joinIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %205 unwind label %226

205:                                              ; preds = %204
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br i1 %.0275, label %.critedge350, label %206

206:                                              ; preds = %205
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #7
  br label %.critedge350

.critedge350:                                     ; preds = %205, %206
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  %207 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %193) #7
  %208 = trunc i64 %207 to i32
  %.not422 = icmp eq i32 %208, 0
  br i1 %.not422, label %._crit_edge416, label %.lr.ph415

._crit_edge416:                                   ; preds = %230, %.critedge350
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  %209 = load i32, ptr %19, align 4, !tbaa !9
  %210 = add i32 %209, 1
  store i32 %210, ptr %19, align 4, !tbaa !9
  %211 = icmp ult i32 %210, %.0276
  br i1 %211, label %194, label %._crit_edge419, !llvm.loop !196

212:                                              ; preds = %194
  %213 = landingpad { ptr, i32 }
          cleanup
  br label %220

214:                                              ; preds = %196
  %215 = landingpad { ptr, i32 }
          cleanup
  br label %.critedge352

.thread:                                          ; preds = %197
  %216 = landingpad { ptr, i32 }
          cleanup
  br label %219

217:                                              ; preds = %198
  %218 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  br i1 %.0275, label %.critedge352, label %219

219:                                              ; preds = %.thread, %217
  %.pn329369 = phi { ptr, i32 } [ %216, %.thread ], [ %218, %217 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #7
  br label %.critedge352

.critedge352:                                     ; preds = %217, %219, %214
  %.pn329.pn = phi { ptr, i32 } [ %.pn329369, %219 ], [ %215, %214 ], [ %218, %217 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br label %220

220:                                              ; preds = %.critedge352, %212
  %.pn329.pn.pn = phi { ptr, i32 } [ %.pn329.pn, %.critedge352 ], [ %213, %212 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  br label %237

221:                                              ; preds = %.critedge348
  %222 = landingpad { ptr, i32 }
          cleanup
  br label %229

223:                                              ; preds = %202
  %224 = landingpad { ptr, i32 }
          cleanup
  br label %.critedge354

.thread370:                                       ; preds = %203
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %228

226:                                              ; preds = %204
  %227 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br i1 %.0275, label %.critedge354, label %228

228:                                              ; preds = %.thread370, %226
  %.pn333373 = phi { ptr, i32 } [ %225, %.thread370 ], [ %227, %226 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #7
  br label %.critedge354

.critedge354:                                     ; preds = %226, %228, %223
  %.pn333.pn = phi { ptr, i32 } [ %.pn333373, %228 ], [ %224, %223 ], [ %227, %226 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  br label %229

229:                                              ; preds = %.critedge354, %221
  %.pn333.pn.pn = phi { ptr, i32 } [ %.pn333.pn, %.critedge354 ], [ %222, %221 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  br label %236

.lr.ph415:                                        ; preds = %.critedge350, %230
  %.0289414 = phi i32 [ %233, %230 ], [ 0, %.critedge350 ]
  invoke void @_ZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetE(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(336) %112, i32 noundef %.0289414, ptr noundef nonnull align 8 dereferenceable(58) %7, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 8 dereferenceable(64) %15)
          to label %230 unwind label %234

230:                                              ; preds = %.lr.ph415
  %231 = load i32, ptr %11, align 4, !tbaa !9
  %232 = add i32 %231, 1
  store i32 %232, ptr %11, align 4, !tbaa !9
  %233 = add nuw i32 %.0289414, 1
  %exitcond.not = icmp eq i32 %233, %208
  br i1 %exitcond.not, label %._crit_edge416, label %.lr.ph415, !llvm.loop !197

234:                                              ; preds = %.lr.ph415
  %235 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  br label %236

236:                                              ; preds = %234, %229
  %.pn337 = phi { ptr, i32 } [ %235, %234 ], [ %.pn333.pn.pn, %229 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  br label %237

237:                                              ; preds = %236, %220
  %.pn337.pn = phi { ptr, i32 } [ %.pn337, %236 ], [ %.pn329.pn.pn, %220 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  br label %531

238:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #7
  store i32 0, ptr %28, align 4, !tbaa !9
  br i1 %.not421, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %238
  %239 = getelementptr inbounds i8, ptr %3, i64 136
  %240 = icmp eq i32 %1, 1
  %241 = getelementptr inbounds i8, ptr %0, i64 12080
  %242 = getelementptr inbounds i8, ptr %4, i64 8
  %243 = getelementptr inbounds i8, ptr %.1278, i64 8
  %244 = getelementptr inbounds i8, ptr %3, i64 8
  %245 = getelementptr inbounds i8, ptr %5, i64 8
  %246 = getelementptr inbounds i8, ptr %0, i64 11188
  %247 = getelementptr inbounds i8, ptr %0, i64 10376
  %248 = getelementptr inbounds i8, ptr %0, i64 10272
  %249 = getelementptr inbounds i8, ptr %7, i64 56
  %250 = getelementptr inbounds i8, ptr %7, i64 57
  %251 = getelementptr inbounds i8, ptr %54, i64 672
  %252 = getelementptr inbounds i8, ptr %51, i64 8
  %253 = getelementptr inbounds i8, ptr %51, i64 16
  %254 = getelementptr inbounds i8, ptr %51, i64 48
  %255 = getelementptr inbounds i8, ptr %51, i64 80
  %256 = getelementptr inbounds i8, ptr %51, i64 112
  %257 = getelementptr inbounds i8, ptr %51, i64 120
  %258 = getelementptr inbounds i8, ptr %54, i64 704
  %259 = getelementptr inbounds i8, ptr %49, i64 8
  %260 = getelementptr inbounds i8, ptr %49, i64 16
  %261 = getelementptr inbounds i8, ptr %49, i64 17
  %262 = getelementptr inbounds i8, ptr %49, i64 24
  %263 = getelementptr inbounds i8, ptr %49, i64 56
  %264 = getelementptr inbounds i8, ptr %49, i64 88
  br label %265

._crit_edge:                                      ; preds = %523, %238
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #7
  br label %530

265:                                              ; preds = %.lr.ph, %523
  %266 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %239) #7
  %267 = trunc i64 %266 to i32
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #7
  br i1 %240, label %268, label %.critedge3

268:                                              ; preds = %265
  %269 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %242)
  store i32 %269, ptr %29, align 4, !tbaa !9
  %270 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %241, ptr noundef nonnull align 4 dereferenceable(4) %29)
          to label %271 unwind label %276

271:                                              ; preds = %268
  %.not297 = icmp eq i64 %270, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  br i1 %.not297, label %280, label %272

272:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #7
  %273 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %243)
  %274 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %273, i1 noundef zeroext %75)
          to label %275 unwind label %278

275:                                              ; preds = %272
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %30, i32 noundef %274)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %239, ptr noundef nonnull align 4 dereferenceable(4) %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #7
  br label %285

276:                                              ; preds = %268
  %277 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  br label %529

278:                                              ; preds = %272
  %279 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #7
  br label %529

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

280:                                              ; preds = %.critedge3, %271
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #7
  %281 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %243)
          to label %282 unwind label %283

282:                                              ; preds = %280
  store i32 %281, ptr %31, align 4
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %239, ptr noundef nonnull align 4 dereferenceable(4) %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #7
  br label %285

283:                                              ; preds = %280
  %284 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #7
  br label %529

285:                                              ; preds = %282, %275
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #7
  invoke void @_ZN11spirv_cross11CompilerMSL18append_member_nameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(336) %5, i32 noundef %6)
          to label %286 unwind label %307

286:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #7
  br i1 %.0275, label %287, label %288

287:                                              ; preds = %286
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 1 dereferenceable(2) @.str.76, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %289 unwind label %309

288:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %36) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %289 unwind label %.thread374

289:                                              ; preds = %288, %287
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %290 unwind label %312

290:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %38) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull @.str.67, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %291 unwind label %314

291:                                              ; preds = %290
  invoke void @_ZN11spirv_cross11CompilerMSL17ensure_valid_nameENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull %33, ptr noundef nonnull %37)
          to label %292 unwind label %316

292:                                              ; preds = %291
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br i1 %.0275, label %.critedge356, label %293

293:                                              ; preds = %292
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #7
  br label %.critedge356

.critedge356:                                     ; preds = %292, %293
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  %294 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %295 unwind label %.loopexit

295:                                              ; preds = %.critedge356
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %294, i32 noundef %267, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %296 unwind label %.loopexit

296:                                              ; preds = %295
  %297 = load i32, ptr %10, align 4
  %.not304 = icmp eq i32 %297, -1
  %or.cond357 = select i1 %55, i1 true, i1 %.not304
  br i1 %or.cond357, label %322, label %298

298:                                              ; preds = %296
  %299 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %300 unwind label %.loopexit

300:                                              ; preds = %298
  %301 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %299, i32 noundef %267, i32 noundef 30, i32 noundef %301)
          to label %302 unwind label %.loopexit

302:                                              ; preds = %300
  %303 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %303, ptr noundef nonnull align 8 dereferenceable(336) %.1278, i32 noundef %1, i1 noundef zeroext false)
          to label %304 unwind label %.loopexit

304:                                              ; preds = %302
  %305 = load i32, ptr %10, align 4, !tbaa !9
  %306 = add i32 %305, 1
  store i32 %306, ptr %10, align 4, !tbaa !9
  br label %424

307:                                              ; preds = %285
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %321

309:                                              ; preds = %287
  %310 = landingpad { ptr, i32 }
          cleanup
  br label %.critedge359

.thread374:                                       ; preds = %288
  %311 = landingpad { ptr, i32 }
          cleanup
  br label %320

312:                                              ; preds = %289
  %313 = landingpad { ptr, i32 }
          cleanup
  br label %319

314:                                              ; preds = %290
  %315 = landingpad { ptr, i32 }
          cleanup
  br label %318

316:                                              ; preds = %291
  %317 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  br label %318

318:                                              ; preds = %316, %314
  %.pn298 = phi { ptr, i32 } [ %317, %316 ], [ %315, %314 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  br label %319

319:                                              ; preds = %312, %318
  %.pn298.pn = phi { ptr, i32 } [ %.pn298, %318 ], [ %313, %312 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br i1 %.0275, label %.critedge359, label %320

320:                                              ; preds = %.thread374, %319
  %.pn298.pn.pn377 = phi { ptr, i32 } [ %311, %.thread374 ], [ %.pn298.pn, %319 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #7
  br label %.critedge359

.critedge359:                                     ; preds = %319, %320, %309
  %.pn298.pn.pn.pn = phi { ptr, i32 } [ %.pn298.pn.pn377, %320 ], [ %310, %309 ], [ %.pn298.pn, %319 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %321

321:                                              ; preds = %.critedge359, %307
  %.pn298.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn298.pn.pn.pn, %.critedge359 ], [ %308, %307 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  br label %528

.loopexit:                                        ; preds = %.critedge356, %295, %298, %300, %302, %322, %324, %327, %329, %331, %335, %337, %342, %345, %349, %353, %355, %361, %371, %376, %378, %397, %402, %404, %416, %418, %420, %422, %424, %426, %440, %442, %446, %448, %450, %452, %454, %456, %457, %460
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %527

.loopexit.split-lp:                               ; preds = %431
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %527

322:                                              ; preds = %296
  %323 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %245)
          to label %324 unwind label %.loopexit

324:                                              ; preds = %322
  %325 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %323, i32 noundef %6, i32 noundef 30)
          to label %326 unwind label %.loopexit

326:                                              ; preds = %324
  br i1 %325, label %327, label %342

327:                                              ; preds = %326
  %328 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %245)
          to label %329 unwind label %.loopexit

329:                                              ; preds = %327
  %330 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %328, i32 noundef %6, i32 noundef 30)
          to label %331 unwind label %.loopexit

331:                                              ; preds = %329
  %332 = load i32, ptr %28, align 4, !tbaa !9
  %333 = add i32 %332, %330
  store i32 %333, ptr %10, align 4, !tbaa !9
  %334 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %335 unwind label %.loopexit

335:                                              ; preds = %331
  %336 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %334, i32 noundef %267, i32 noundef 30, i32 noundef %336)
          to label %337 unwind label %.loopexit

337:                                              ; preds = %335
  %338 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %338, ptr noundef nonnull align 8 dereferenceable(336) %.1278, i32 noundef %1, i1 noundef zeroext false)
          to label %339 unwind label %.loopexit

339:                                              ; preds = %337
  %340 = load i32, ptr %10, align 4, !tbaa !9
  %341 = add i32 %340, 1
  store i32 %341, ptr %10, align 4, !tbaa !9
  br label %424

342:                                              ; preds = %326
  %.sroa.028.0.copyload = load i32, ptr %242, align 8, !tbaa !9
  %343 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.028.0.copyload, i32 noundef 30)
          to label %344 unwind label %.loopexit

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

345:                                              ; preds = %344
  %346 = load i8, ptr %249, align 8, !tbaa !198, !range !41, !noundef !42
  %347 = trunc nuw i8 %346 to i1
  %348 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL31get_accumulated_member_locationERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %4, i32 noundef %6, i1 noundef zeroext %347)
          to label %349 unwind label %.loopexit

349:                                              ; preds = %345
  %350 = load i32, ptr %28, align 4, !tbaa !9
  %351 = add i32 %350, %348
  store i32 %351, ptr %10, align 4, !tbaa !9
  %352 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %353 unwind label %.loopexit

353:                                              ; preds = %349
  %354 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %352, i32 noundef %267, i32 noundef 30, i32 noundef %354)
          to label %355 unwind label %.loopexit

355:                                              ; preds = %353
  %356 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %356, ptr noundef nonnull align 8 dereferenceable(336) %.1278, i32 noundef %1, i1 noundef zeroext false)
          to label %357 unwind label %.loopexit

357:                                              ; preds = %355
  %358 = load i32, ptr %10, align 4, !tbaa !9
  %359 = add i32 %358, 1
  store i32 %359, ptr %10, align 4, !tbaa !9
  br label %424

360:                                              ; preds = %344
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %39) #7
  br i1 %55, label %361, label %413

361:                                              ; preds = %360
  %362 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %363 unwind label %.loopexit

363:                                              ; preds = %361
  %or.cond5 = and i1 %240, %362
  br i1 %or.cond5, label %364, label %387

364:                                              ; preds = %363
  %365 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %365, ptr %39, align 4, !tbaa !9
  %366 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %248, ptr noundef nonnull align 4 dereferenceable(4) %39)
          to label %367 unwind label %383

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

.thread378:                                       ; preds = %367
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %41) #7
  br label %.thread385

368:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %40) #7
  %369 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %369, ptr %40, align 4, !tbaa !9
  %370 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %248, ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %371 unwind label %385

371:                                              ; preds = %368
  %372 = load i32, ptr %370, align 4, !tbaa !202
  %373 = load i32, ptr %28, align 4, !tbaa !9
  %374 = add i32 %373, %372
  store i32 %374, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #7
  %375 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %376 unwind label %.loopexit

376:                                              ; preds = %371
  %377 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %375, i32 noundef %267, i32 noundef 30, i32 noundef %377)
          to label %378 unwind label %.loopexit

378:                                              ; preds = %376
  %379 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %379, ptr noundef nonnull align 8 dereferenceable(336) %.1278, i32 noundef 1, i1 noundef zeroext false)
          to label %380 unwind label %.loopexit

380:                                              ; preds = %378
  %381 = load i32, ptr %10, align 4, !tbaa !9
  %382 = add i32 %381, 1
  store i32 %382, ptr %10, align 4, !tbaa !9
  br label %424

383:                                              ; preds = %364
  %384 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #7
  br label %527

385:                                              ; preds = %368
  %386 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #7
  br label %527

387:                                              ; preds = %363
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %41) #7
  %388 = load i8, ptr %246, align 4, !range !41
  %389 = trunc nuw i8 %388 to i1
  %or.cond9 = and i1 %161, %389
  br i1 %or.cond9, label %390, label %.thread385

390:                                              ; preds = %387
  %391 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %391, ptr %41, align 4, !tbaa !9
  %392 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %247, ptr noundef nonnull align 4 dereferenceable(4) %41)
          to label %393 unwind label %409

393:                                              ; preds = %390
  %.not306 = icmp eq i64 %392, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #7
  br i1 %.not306, label %.thread384, label %394

394:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #7
  %395 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %395, ptr %42, align 4, !tbaa !9
  %396 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %247, ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %397 unwind label %411

397:                                              ; preds = %394
  %398 = load i32, ptr %396, align 4, !tbaa !202
  %399 = load i32, ptr %28, align 4, !tbaa !9
  %400 = add i32 %399, %398
  store i32 %400, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #7
  %401 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %402 unwind label %.loopexit

402:                                              ; preds = %397
  %403 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %401, i32 noundef %267, i32 noundef 30, i32 noundef %403)
          to label %404 unwind label %.loopexit

404:                                              ; preds = %402
  %405 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %405, ptr noundef nonnull align 8 dereferenceable(336) %.1278, i32 noundef 3, i1 noundef zeroext false)
          to label %406 unwind label %.loopexit

406:                                              ; preds = %404
  %407 = load i32, ptr %10, align 4, !tbaa !9
  %408 = add i32 %407, 1
  store i32 %408, ptr %10, align 4, !tbaa !9
  br label %424

409:                                              ; preds = %390
  %410 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #7
  br label %527

411:                                              ; preds = %394
  %412 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #7
  br label %527

.thread385:                                       ; preds = %387, %.thread378
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #7
  br label %.thread384

413:                                              ; preds = %360
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #7
  br label %424

.thread384:                                       ; preds = %393, %.thread385
  %414 = load i32, ptr %14, align 4
  %415 = add i32 %414, -3
  %or.cond13 = icmp ult i32 %415, 2
  br i1 %or.cond13, label %416, label %424

416:                                              ; preds = %.thread384
  %417 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %418 unwind label %.loopexit

418:                                              ; preds = %416
  %419 = load i32, ptr %14, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %417, i32 noundef %267, i32 noundef 11, i32 noundef %419)
          to label %420 unwind label %.loopexit

420:                                              ; preds = %418
  %421 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %422 unwind label %.loopexit

422:                                              ; preds = %420
  %423 = load i32, ptr %28, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %421, i32 noundef %267, i32 noundef 32, i32 noundef %423)
          to label %424 unwind label %.loopexit

424:                                              ; preds = %413, %339, %380, %.thread384, %422, %406, %357, %304
  %425 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %245)
          to label %426 unwind label %.loopexit

426:                                              ; preds = %424
  %427 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %425, i32 noundef %6, i32 noundef 31)
          to label %428 unwind label %.loopexit

428:                                              ; preds = %426
  br i1 %427, label %429, label %434

429:                                              ; preds = %428
  %430 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %430, ptr noundef nonnull @.str.129)
          to label %431 unwind label %432

431:                                              ; preds = %429
  invoke void @__cxa_throw(ptr nonnull %430, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %533 unwind label %.loopexit.split-lp

432:                                              ; preds = %429
  %433 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %430) #7
  br label %527

434:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %43) #7
  br i1 %240, label %435, label %.critedge15

435:                                              ; preds = %434
  %436 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %242)
  store i32 %436, ptr %43, align 4, !tbaa !9
  %437 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %241, ptr noundef nonnull align 4 dereferenceable(4) %43)
          to label %438 unwind label %443

438:                                              ; preds = %435
  %.not308 = icmp eq i64 %437, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %43) #7
  br i1 %.not308, label %439, label %457

.critedge15:                                      ; preds = %434
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %43) #7
  br label %439

439:                                              ; preds = %.critedge15, %438
  br i1 %65, label %440, label %445

440:                                              ; preds = %439
  %441 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %442 unwind label %.loopexit

442:                                              ; preds = %440
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %441, i32 noundef %267, i32 noundef 14, i32 noundef 0)
          to label %445 unwind label %.loopexit

443:                                              ; preds = %435
  %444 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %43) #7
  br label %527

445:                                              ; preds = %442, %439
  br i1 %75, label %446, label %449

446:                                              ; preds = %445
  %447 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %448 unwind label %.loopexit

448:                                              ; preds = %446
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %447, i32 noundef %267, i32 noundef 13, i32 noundef 0)
          to label %449 unwind label %.loopexit

449:                                              ; preds = %448, %445
  br i1 %85, label %450, label %453

450:                                              ; preds = %449
  %451 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %452 unwind label %.loopexit

452:                                              ; preds = %450
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %451, i32 noundef %267, i32 noundef 16, i32 noundef 0)
          to label %453 unwind label %.loopexit

453:                                              ; preds = %452, %449
  br i1 %96, label %454, label %457

454:                                              ; preds = %453
  %455 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %456 unwind label %.loopexit

456:                                              ; preds = %454
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %455, i32 noundef %267, i32 noundef 17, i32 noundef 0)
          to label %457 unwind label %.loopexit

457:                                              ; preds = %453, %456, %438
  %458 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
  %459 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %242)
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %458, i32 noundef %267, i32 noundef 5, i32 noundef %459)
          to label %460 unwind label %.loopexit

460:                                              ; preds = %457
  %461 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
  %462 = load i32, ptr %11, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %461, i32 noundef %267, i32 noundef 4, i32 noundef %462)
          to label %463 unwind label %.loopexit

463:                                              ; preds = %460
  %464 = load i8, ptr %249, align 8, !tbaa !198, !range !41, !noundef !42
  %465 = trunc nuw i8 %464 to i1
  br i1 %465, label %523, label %466

466:                                              ; preds = %463
  %467 = load i8, ptr %250, align 1, !tbaa !206, !range !41, !noundef !42
  %468 = trunc nuw i8 %467 to i1
  br i1 %468, label %469, label %523

469:                                              ; preds = %466
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %5, i32 noundef %6)
          to label %470 unwind label %476

470:                                              ; preds = %469
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #7
  br i1 %.0275, label %471, label %472

471:                                              ; preds = %470
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %28, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %473 unwind label %478

472:                                              ; preds = %470
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %47) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %47) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %473 unwind label %.thread386

473:                                              ; preds = %472, %471
  invoke void @_ZN11spirv_cross4joinIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(32) %46)
          to label %474 unwind label %481

474:                                              ; preds = %473
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  br i1 %.0275, label %.critedge364, label %475

475:                                              ; preds = %474
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %47) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %47) #7
  br label %.critedge364

.critedge364:                                     ; preds = %474, %475
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  switch i32 %1, label %520 [
    i32 1, label %485
    i32 3, label %500
  ]

476:                                              ; preds = %469
  %477 = landingpad { ptr, i32 }
          cleanup
  br label %484

478:                                              ; preds = %471
  %479 = landingpad { ptr, i32 }
          cleanup
  br label %.critedge366

.thread386:                                       ; preds = %472
  %480 = landingpad { ptr, i32 }
          cleanup
  br label %483

481:                                              ; preds = %473
  %482 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  br i1 %.0275, label %.critedge366, label %483

483:                                              ; preds = %.thread386, %481
  %.pn309389 = phi { ptr, i32 } [ %480, %.thread386 ], [ %482, %481 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %47) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %47) #7
  br label %.critedge366

.critedge366:                                     ; preds = %481, %483, %478
  %.pn309.pn = phi { ptr, i32 } [ %.pn309389, %483 ], [ %479, %478 ], [ %482, %481 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  br label %484

484:                                              ; preds = %.critedge366, %476
  %.pn309.pn.pn = phi { ptr, i32 } [ %.pn309.pn, %.critedge366 ], [ %477, %476 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  br label %522

485:                                              ; preds = %.critedge364
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #7
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %49) #7
  store ptr %4, ptr %49, align 8, !tbaa !207
  store ptr %0, ptr %259, align 8, !tbaa !208
  store i8 %86, ptr %260, align 8, !tbaa !210
  store i8 %97, ptr %261, align 1, !tbaa !211
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %262, ptr noundef nonnull align 8 dereferenceable(32) %44)
          to label %486 unwind label %490

486:                                              ; preds = %485
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %263, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %487 unwind label %492

487:                                              ; preds = %486
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %264, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %488 unwind label %494

488:                                              ; preds = %487
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableESG_jRNS4_18InterfaceBlockMetaESE_SE_RjSL_RKNS3_6BitsetEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(120) %49)
          to label %489 unwind label %497

489:                                              ; preds = %488
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %258, ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  call void @"_ZZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(120) %49) #7
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #7
  br label %520

490:                                              ; preds = %485
  %491 = landingpad { ptr, i32 }
          cleanup
  br label %499

492:                                              ; preds = %486
  %493 = landingpad { ptr, i32 }
          cleanup
  br label %496

494:                                              ; preds = %487
  %495 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %263) #7
  br label %496

496:                                              ; preds = %494, %492
  %.pn318 = phi { ptr, i32 } [ %495, %494 ], [ %493, %492 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %262) #7
  br label %499

497:                                              ; preds = %488
  %498 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(120) %49) #7
  br label %499

499:                                              ; preds = %497, %496, %490
  %.pn320 = phi { ptr, i32 } [ %498, %497 ], [ %.pn318, %496 ], [ %491, %490 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #7
  br label %521

500:                                              ; preds = %.critedge364
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #7
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %51) #7
  store i8 %.0279, ptr %51, align 8, !tbaa !212
  store ptr %0, ptr %252, align 8, !tbaa !214
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %253, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %501 unwind label %507

501:                                              ; preds = %500
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %254, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %502 unwind label %509

502:                                              ; preds = %501
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %255, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %503 unwind label %511

503:                                              ; preds = %502
  %504 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %504, ptr %256, align 8, !tbaa !215
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %257, ptr noundef nonnull align 8 dereferenceable(32) %44)
          to label %505 unwind label %513

505:                                              ; preds = %503
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableESG_jRNS4_18InterfaceBlockMetaESE_SE_RjSL_RKNS3_6BitsetEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(152) %51)
          to label %506 unwind label %517

506:                                              ; preds = %505
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %251, ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @"_ZZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(152) %51) #7
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #7
  br label %520

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

509:                                              ; preds = %501
  %510 = landingpad { ptr, i32 }
          cleanup
  br label %516

511:                                              ; preds = %502
  %512 = landingpad { ptr, i32 }
          cleanup
  br label %515

513:                                              ; preds = %503
  %514 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %255) #7
  br label %515

515:                                              ; preds = %513, %511
  %.pn313 = phi { ptr, i32 } [ %514, %513 ], [ %512, %511 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %254) #7
  br label %516

516:                                              ; preds = %515, %509
  %.pn313.pn = phi { ptr, i32 } [ %.pn313, %515 ], [ %510, %509 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %253) #7
  br label %519

517:                                              ; preds = %505
  %518 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(152) %51) #7
  br label %519

519:                                              ; preds = %517, %516, %507
  %.pn316 = phi { ptr, i32 } [ %518, %517 ], [ %.pn313.pn, %516 ], [ %508, %507 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #7
  br label %521

520:                                              ; preds = %.critedge364, %506, %489
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  br label %523

521:                                              ; preds = %519, %499
  %.pn316.pn = phi { ptr, i32 } [ %.pn316, %519 ], [ %.pn320, %499 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  br label %522

522:                                              ; preds = %521, %484
  %.pn316.pn.pn = phi { ptr, i32 } [ %.pn316.pn, %521 ], [ %.pn309.pn.pn, %484 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  br label %527

523:                                              ; preds = %520, %466, %463
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  %524 = load i32, ptr %28, align 4, !tbaa !9
  %525 = add i32 %524, 1
  store i32 %525, ptr %28, align 4, !tbaa !9
  %526 = icmp ult i32 %525, %.0276
  br i1 %526, label %265, label %._crit_edge, !llvm.loop !216

527:                                              ; preds = %.loopexit, %.loopexit.split-lp, %522, %443, %432, %411, %409, %385, %383
  %.pn324 = phi { ptr, i32 } [ %433, %432 ], [ %.pn316.pn.pn, %522 ], [ %444, %443 ], [ %386, %385 ], [ %412, %411 ], [ %410, %409 ], [ %384, %383 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  br label %528

528:                                              ; preds = %527, %321
  %.pn324.pn = phi { ptr, i32 } [ %.pn324, %527 ], [ %.pn298.pn.pn.pn.pn, %321 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  br label %529

529:                                              ; preds = %528, %283, %278, %276
  %.pn324.pn.pn = phi { ptr, i32 } [ %.pn324.pn, %528 ], [ %279, %278 ], [ %284, %283 ], [ %277, %276 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #7
  br label %531

530:                                              ; preds = %180, %._crit_edge, %._crit_edge419
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %15) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  ret void

531:                                              ; preds = %184, %186, %529, %237
  %.pn337.pn.pn = phi { ptr, i32 } [ %.pn337.pn, %237 ], [ %.pn324.pn.pn, %529 ], [ %185, %184 ], [ %187, %186 ]
  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
  br label %532

532:                                              ; preds = %.loopexit390, %.loopexit.split-lp391, %121, %531, %139, %125, %123, %99
  %.pn343.pn.pn = phi { ptr, i32 } [ %100, %99 ], [ %122, %121 ], [ %124, %123 ], [ %126, %125 ], [ %140, %139 ], [ %.pn337.pn.pn, %531 ], [ %lpad.loopexit392, %.loopexit390 ], [ %lpad.loopexit.split-lp393, %.loopexit.split-lp391 ]
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %15) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  resume { ptr, i32 } %.pn343.pn.pn

533:                                              ; preds = %431
  unreachable
}

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

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

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

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

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL31get_accumulated_member_locationERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176), i32 noundef, i1 noundef zeroext) local_unnamed_addr #4

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

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

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

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


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