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

@.str.8 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [12 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

; 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 dso_local void @_ZN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #0 align 2

; 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_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 void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #0 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176)) #4

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) #4

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, ptr noundef nonnull align 8 dereferenceable(336)) #2 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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare 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 dso_local noundef ptr @_ZN11spirv_cross10VectorViewIPNS_12SPIRVariableEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i1 noundef zeroext %2) #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i8, align 1
  %8 = alloca %"class.spirv_cross::SmallVector.377", align 8
  %9 = alloca i8, align 1
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i8, align 1
  %13 = alloca %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", align 8
  %14 = alloca i8, align 1
  %15 = alloca %class.anon.521, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca %"class.spirv_cross::TypedID.413", align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca %"class.spirv_cross::TypedID.413", align 4
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca ptr, align 8
  %28 = alloca %"class.std::function.489", align 8
  %29 = alloca %class.anon.522, align 8
  %30 = alloca %"class.std::function.489", align 8
  %31 = alloca %class.anon.523, align 8
  %32 = alloca %"class.std::function.489", align 8
  %33 = alloca %class.anon.524, align 8
  %34 = alloca i8, align 1
  %35 = alloca i32, align 4
  %36 = alloca %"class.spirv_cross::TypedID.350", align 4
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca %"class.spirv_cross::TypedID.413", align 4
  %43 = alloca %"class.std::function.489", align 8
  %44 = alloca %class.anon.525, align 8
  %45 = alloca %"class.std::function.489", align 8
  %46 = alloca %class.anon.526, align 8
  %47 = alloca %"class.std::function.489", align 8
  %48 = alloca %class.anon.527, align 8
  %49 = alloca %"class.std::function.489", align 8
  %50 = alloca %class.anon.528, align 8
  %51 = alloca %"class.std::function.489", align 8
  %52 = alloca %class.anon.529, align 8
  %53 = alloca %"class.spirv_cross::TypedID.413", align 4
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.spirv_cross::TypedID.413", align 4
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca i8, align 1
  %63 = alloca ptr, align 8
  %64 = alloca %"struct.std::_Rb_tree_iterator.530", align 8
  %65 = alloca %"struct.std::_Rb_tree_iterator.530", align 8
  %66 = alloca ptr, align 8
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca %"struct.spirv_cross::SPIRType", align 8
  %74 = alloca i32, align 4
  %75 = alloca i8, align 1
  %76 = alloca %"class.spirv_cross::TypedID.414", align 4
  %77 = alloca %"class.spirv_cross::TypedID.413", align 4
  %78 = alloca %"class.spirv_cross::TypedID.414", align 4
  %79 = alloca ptr, align 8
  %80 = alloca %"class.spirv_cross::TypedID.413", align 4
  %81 = alloca ptr, align 8
  %82 = alloca %"class.spirv_cross::TypedID.413", align 4
  %83 = alloca %"class.spirv_cross::TypedID.413", align 4
  %84 = alloca ptr, align 8
  %85 = alloca %"struct.std::_Rb_tree_iterator.530", align 8
  %86 = alloca %"struct.std::_Rb_tree_iterator.530", align 8
  %87 = alloca ptr, align 8
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca i32, align 4
  %93 = alloca i32, align 4
  %94 = alloca %"struct.spirv_cross::SPIRType", align 8
  %95 = alloca i32, align 4
  %96 = alloca i8, align 1
  %97 = alloca %"class.spirv_cross::TypedID.414", align 4
  %98 = alloca %"class.spirv_cross::TypedID.414", align 4
  %99 = alloca ptr, align 8
  %100 = alloca ptr, align 8
  %101 = alloca %"class.spirv_cross::TypedID.413", align 4
  %102 = alloca %"class.spirv_cross::TypedID.413", align 4
  %103 = alloca ptr, align 8
  %104 = alloca %"struct.std::__detail::_Node_iterator.471", align 8
  %105 = alloca %"struct.std::__detail::_Node_iterator.471", align 8
  %106 = alloca ptr, align 8
  %107 = alloca i32, align 4
  %108 = alloca ptr, align 8
  %109 = alloca i32, align 4
  %110 = alloca i32, align 4
  %111 = alloca %"class.spirv_cross::TypedID.414", align 4
  %112 = alloca %"class.spirv_cross::TypedID.414", align 4
  %113 = alloca %"class.std::__cxx11::basic_string", align 8
  %114 = alloca %"class.spirv_cross::TypedID.414", align 4
  %115 = alloca %"class.spirv_cross::TypedID.414", align 4
  %116 = alloca %"class.spirv_cross::TypedID.414", align 4
  %117 = alloca %"class.spirv_cross::TypedID.414", align 4
  %118 = alloca %"class.spirv_cross::TypedID.414", align 4
  %119 = alloca %"struct.spirv_cross::CompilerMSL::MemberSorter", align 8
  %120 = alloca %"class.spirv_cross::TypedID.413", align 4
  %121 = alloca i32, align 4
  %122 = alloca ptr, align 8
  %123 = alloca %"class.spirv_cross::TypedID.414", align 4
  %124 = alloca %"class.spirv_cross::TypedID.413", align 4
  %125 = alloca i32, align 4
  %126 = alloca %"class.spirv_cross::TypedID.414", align 4
  %127 = alloca %"class.spirv_cross::TypedID.414", align 4
  %128 = alloca %"class.std::__cxx11::basic_string", align 8
  %129 = alloca %"class.std::allocator.71", align 1
  %130 = alloca %"class.spirv_cross::TypedID.413", align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  %131 = zext i1 %2 to i8
  store i8 %131, ptr %7, align 1, !tbaa !11
  %132 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 88, ptr %8) #7
  call void @_ZN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %8) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #7
  %133 = load i32, ptr %6, align 4, !tbaa !9
  %134 = icmp eq i32 %133, 3
  br i1 %134, label %138, label %135

135:                                              ; preds = %3
  %136 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %132)
          to label %137 unwind label %198

137:                                              ; preds = %135
  br label %138

138:                                              ; preds = %137, %3
  %139 = phi i1 [ true, %3 ], [ %136, %137 ]
  %140 = zext i1 %139 to i8
  store i8 %140, ptr %9, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #7
  store i8 0, ptr %12, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 64, ptr %13) #7
  call void @_ZN11spirv_cross11CompilerMSL18InterfaceBlockMetaC2Ev(ptr noundef nonnull align 8 dereferenceable(58) %13) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #7
  %141 = load i32, ptr %6, align 4, !tbaa !9
  %142 = icmp eq i32 %141, 1
  br i1 %142, label %143, label %147

143:                                              ; preds = %138
  %144 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %132)
          to label %145 unwind label %202

145:                                              ; preds = %143
  %146 = icmp eq i32 %144, 0
  br i1 %146, label %167, label %147

147:                                              ; preds = %145, %138
  %148 = load i32, ptr %6, align 4, !tbaa !9
  %149 = icmp eq i32 %148, 3
  br i1 %149, label %150, label %154

150:                                              ; preds = %147
  %151 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %132)
          to label %152 unwind label %202

152:                                              ; preds = %150
  %153 = icmp eq i32 %151, 4
  br i1 %153, label %167, label %154

154:                                              ; preds = %152, %147
  %155 = load i32, ptr %6, align 4, !tbaa !9
  %156 = icmp eq i32 %155, 3
  br i1 %156, label %157, label %165

157:                                              ; preds = %154
  %158 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %132)
          to label %159 unwind label %202

159:                                              ; preds = %157
  %160 = icmp eq i32 %158, 0
  br i1 %160, label %161, label %165

161:                                              ; preds = %159
  %162 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 76
  %163 = load i8, ptr %162, align 4, !tbaa !13, !range !176, !noundef !177
  %164 = trunc i8 %163 to i1
  br label %165

165:                                              ; preds = %161, %159, %154
  %166 = phi i1 [ false, %159 ], [ false, %154 ], [ %164, %161 ]
  br label %167

167:                                              ; preds = %165, %152, %145
  %168 = phi i1 [ true, %152 ], [ true, %145 ], [ %166, %165 ]
  %169 = zext i1 %168 to i8
  store i8 %169, ptr %14, align 1, !tbaa !11
  %170 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 64, ptr %15) #7
  %171 = getelementptr inbounds %class.anon.521, ptr %15, i32 0, i32 0
  store ptr %6, ptr %171, align 8, !tbaa !5
  %172 = getelementptr inbounds %class.anon.521, ptr %15, i32 0, i32 1
  store ptr %132, ptr %172, align 8, !tbaa !178
  %173 = getelementptr inbounds %class.anon.521, ptr %15, i32 0, i32 2
  store ptr %7, ptr %173, align 8, !tbaa !5
  %174 = getelementptr inbounds %class.anon.521, ptr %15, i32 0, i32 3
  store ptr %9, ptr %174, align 8, !tbaa !5
  %175 = getelementptr inbounds %class.anon.521, ptr %15, i32 0, i32 4
  store ptr %12, ptr %175, align 8, !tbaa !5
  %176 = getelementptr inbounds %class.anon.521, ptr %15, i32 0, i32 5
  store ptr %8, ptr %176, align 8, !tbaa !5
  %177 = getelementptr inbounds %class.anon.521, ptr %15, i32 0, i32 6
  store ptr %14, ptr %177, align 8, !tbaa !5
  %178 = getelementptr inbounds %class.anon.521, ptr %15, i32 0, i32 7
  store ptr %13, ptr %178, align 8, !tbaa !5
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_8EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %170, ptr noundef nonnull align 8 dereferenceable(64) %15)
          to label %179 unwind label %206

179:                                              ; preds = %167
  call void @llvm.lifetime.end.p0(i64 64, ptr %15) #7
  %180 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIPNS_12SPIRVariableEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %8) #7
  br i1 %180, label %181, label %210

181:                                              ; preds = %179
  %182 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 37
  %183 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %182, i32 0, i32 49
  %184 = load i8, ptr %183, align 2, !tbaa !180, !range !176, !noundef !177
  %185 = trunc i8 %184 to i1
  br i1 %185, label %197, label %186

186:                                              ; preds = %181
  %187 = load i32, ptr %6, align 4, !tbaa !9
  %188 = icmp eq i32 %187, 1
  br i1 %188, label %189, label %197

189:                                              ; preds = %186
  %190 = load i8, ptr %7, align 1, !tbaa !11, !range !176, !noundef !177
  %191 = trunc i8 %190 to i1
  br i1 %191, label %192, label %197

192:                                              ; preds = %189
  %193 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 59
  %194 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %193)
          to label %195 unwind label %202

195:                                              ; preds = %192
  %196 = icmp ne i32 %194, 0
  br i1 %196, label %210, label %197

197:                                              ; preds = %195, %189, %186, %181
  store i32 0, ptr %4, align 4
  store i32 1, ptr %16, align 4
  br label %1342

198:                                              ; preds = %135
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %10, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %11, align 4
  br label %1345

202:                                              ; preds = %192, %157, %150, %143
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %10, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %11, align 4
  br label %1344

206:                                              ; preds = %167
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %10, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %15) #7
  br label %1344

210:                                              ; preds = %195, %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %211 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  %212 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %211, i32 noundef 3)
          to label %213 unwind label %246

213:                                              ; preds = %210
  store i32 %212, ptr %17, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %214 = load i32, ptr %17, align 4, !tbaa !181
  %215 = add i32 %214, 1
  store i32 %215, ptr %17, align 4, !tbaa !181
  store i32 %214, ptr %18, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %216 = load i32, ptr %18, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 30, ptr %20, align 4, !tbaa !182
  %217 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %216, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %218 unwind label %250

218:                                              ; preds = %213
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  store ptr %217, ptr %19, align 8, !tbaa !5
  %219 = load ptr, ptr %19, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %219, i32 0, i32 2
  store i32 15, ptr %220, align 8, !tbaa !183
  %221 = load i32, ptr %6, align 4, !tbaa !9
  %222 = load ptr, ptr %19, align 8, !tbaa !5
  %223 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %222, i32 0, i32 11
  store i32 %221, ptr %223, align 8, !tbaa !195
  %224 = load i32, ptr %18, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef %224)
          to label %225 unwind label %254

225:                                              ; preds = %218
  %226 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %21, i32 0, i32 0
  %227 = load i32, ptr %226, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %227, i32 noundef 2, i32 noundef 0)
          to label %228 unwind label %254

228:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %229 = load i32, ptr %17, align 4, !tbaa !181
  %230 = add i32 %229, 1
  store i32 %230, ptr %17, align 4, !tbaa !181
  store i32 %229, ptr %22, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %231 = load i32, ptr %22, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  store i32 0, ptr %24, align 4, !tbaa !181
  %232 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjRN3spv12StorageClassEiEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %231, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %233 unwind label %258

233:                                              ; preds = %228
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  store ptr %232, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %234 = load i32, ptr %17, align 4, !tbaa !181
  %235 = add i32 %234, 1
  store i32 %235, ptr %17, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %25, i32 noundef %234)
          to label %236 unwind label %262

236:                                              ; preds = %233
  %237 = load ptr, ptr %23, align 8, !tbaa !5
  %238 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %237, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %238, ptr align 4 %25, i64 4, i1 false), !tbaa.struct !196
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %239 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  %240 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %239, i32 0, i32 13
  %241 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %240)
          to label %242 unwind label %266

242:                                              ; preds = %236
  %243 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %241)
          to label %244 unwind label %266

244:                                              ; preds = %242
  store ptr %243, ptr %27, align 8, !tbaa !5
  %245 = load i32, ptr %6, align 4, !tbaa !9
  switch i32 %245, label %542 [
    i32 1, label %270
    i32 3, label %343
  ]

246:                                              ; preds = %210
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %10, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %11, align 4
  br label %1341

250:                                              ; preds = %213
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %10, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %1340

254:                                              ; preds = %225, %218
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %10, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %11, align 4
  br label %1340

258:                                              ; preds = %228
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %10, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %1339

262:                                              ; preds = %233
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %10, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %1339

266:                                              ; preds = %648, %640, %560, %558, %543, %350, %280, %277, %242, %236
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %10, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %11, align 4
  br label %1338

270:                                              ; preds = %244
  %271 = load i8, ptr %7, align 1, !tbaa !11, !range !176, !noundef !177
  %272 = trunc i8 %271 to i1
  br i1 %272, label %273, label %275

273:                                              ; preds = %270
  %274 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 89
  br label %277

275:                                              ; preds = %270
  %276 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 87
  br label %277

277:                                              ; preds = %275, %273
  %278 = phi ptr [ %274, %273 ], [ %276, %275 ]
  %279 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %278)
          to label %280 unwind label %266

280:                                              ; preds = %277
  %281 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %132)
          to label %282 unwind label %266

282:                                              ; preds = %280
  switch i32 %281, label %341 [
    i32 1, label %283
    i32 2, label %299
  ]

283:                                              ; preds = %282
  %284 = load ptr, ptr %27, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %284, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %29) #7
  %286 = getelementptr inbounds %class.anon.522, ptr %29, i32 0, i32 0
  store ptr %132, ptr %286, align 8, !tbaa !197
  %287 = getelementptr inbounds %class.anon.522, ptr %29, i32 0, i32 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %287, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %288 unwind label %290

288:                                              ; preds = %283
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(40) %29)
          to label %289 unwind label %294

289:                                              ; preds = %288
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %285, ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %29) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #7
  br label %342

290:                                              ; preds = %283
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %10, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %11, align 4
  br label %298

294:                                              ; preds = %288
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %10, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %11, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %29) #7
  br label %298

298:                                              ; preds = %294, %290
  call void @llvm.lifetime.end.p0(i64 40, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #7
  br label %1338

299:                                              ; preds = %282
  %300 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 37
  %301 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %300, i32 0, i32 49
  %302 = load i8, ptr %301, align 2, !tbaa !180, !range !176, !noundef !177
  %303 = trunc i8 %302 to i1
  br i1 %303, label %305, label %304

304:                                              ; preds = %299
  br label %342

305:                                              ; preds = %299
  %306 = load i8, ptr %7, align 1, !tbaa !11, !range !176, !noundef !177
  %307 = trunc i8 %306 to i1
  br i1 %307, label %308, label %324

308:                                              ; preds = %305
  %309 = load ptr, ptr %27, align 8, !tbaa !5
  %310 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %309, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %31) #7
  %311 = getelementptr inbounds %class.anon.523, ptr %31, i32 0, i32 0
  store ptr %132, ptr %311, align 8, !tbaa !199
  %312 = getelementptr inbounds %class.anon.523, ptr %31, i32 0, i32 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %312, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %313 unwind label %315

313:                                              ; preds = %308
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(40) %31)
          to label %314 unwind label %319

314:                                              ; preds = %313
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %310, ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %31) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  br label %340

315:                                              ; preds = %308
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %10, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %11, align 4
  br label %323

319:                                              ; preds = %313
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %10, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %11, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %31) #7
  br label %323

323:                                              ; preds = %319, %315
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  br label %1338

324:                                              ; preds = %305
  %325 = load ptr, ptr %27, align 8, !tbaa !5
  %326 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %325, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %33) #7
  %327 = getelementptr inbounds %class.anon.524, ptr %33, i32 0, i32 0
  store ptr %132, ptr %327, align 8, !tbaa !201
  %328 = getelementptr inbounds %class.anon.524, ptr %33, i32 0, i32 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %328, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %329 unwind label %331

329:                                              ; preds = %324
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull align 8 dereferenceable(40) %33)
          to label %330 unwind label %335

330:                                              ; preds = %329
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %326, ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_2D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %33) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #7
  br label %340

331:                                              ; preds = %324
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %10, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %11, align 4
  br label %339

335:                                              ; preds = %329
  %336 = landingpad { ptr, i32 }
          cleanup
  %337 = extractvalue { ptr, i32 } %336, 0
  store ptr %337, ptr %10, align 8
  %338 = extractvalue { ptr, i32 } %336, 1
  store i32 %338, ptr %11, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_2D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %33) #7
  br label %339

339:                                              ; preds = %335, %331
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #7
  br label %1338

340:                                              ; preds = %330, %314
  br label %342

341:                                              ; preds = %282
  br label %342

342:                                              ; preds = %341, %340, %304, %289
  br label %543

343:                                              ; preds = %244
  %344 = load i8, ptr %7, align 1, !tbaa !11, !range !176, !noundef !177
  %345 = trunc i8 %344 to i1
  br i1 %345, label %346, label %348

346:                                              ; preds = %343
  %347 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 90
  br label %350

348:                                              ; preds = %343
  %349 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 88
  br label %350

350:                                              ; preds = %348, %346
  %351 = phi ptr [ %347, %346 ], [ %349, %348 ]
  %352 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %351)
          to label %353 unwind label %266

353:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #7
  %354 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL29get_is_rasterization_disabledEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %355 unwind label %386

355:                                              ; preds = %353
  %356 = xor i1 %354, true
  %357 = zext i1 %356 to i8
  store i8 %357, ptr %34, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  %358 = load i8, ptr %34, align 1, !tbaa !11, !range !176, !noundef !177
  %359 = trunc i8 %358 to i1
  br i1 %359, label %360, label %362

360:                                              ; preds = %355
  %361 = load i32, ptr %22, align 4, !tbaa !181
  br label %363

362:                                              ; preds = %355
  br label %363

363:                                              ; preds = %362, %360
  %364 = phi i32 [ %361, %360 ], [ 0, %362 ]
  store i32 %364, ptr %35, align 4, !tbaa !181
  %365 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 76
  %366 = load i8, ptr %365, align 4, !tbaa !13, !range !176, !noundef !177
  %367 = trunc i8 %366 to i1
  br i1 %367, label %440, label %368

368:                                              ; preds = %363
  %369 = load ptr, ptr %27, align 8, !tbaa !5
  %370 = load i32, ptr %22, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %36, i32 noundef %370)
          to label %371 unwind label %390

371:                                              ; preds = %368
  %372 = getelementptr inbounds %"class.spirv_cross::TypedID.350", ptr %36, i32 0, i32 0
  %373 = load i32, ptr %372, align 4
  invoke void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %369, i32 %373)
          to label %374 unwind label %390

374:                                              ; preds = %371
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %375 = load ptr, ptr %27, align 8, !tbaa !5
  %376 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %375, i32 0, i32 9
  store ptr %376, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %377 = load ptr, ptr %37, align 8, !tbaa !5
  %378 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %377) #7
  store ptr %378, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %379 = load ptr, ptr %37, align 8, !tbaa !5
  %380 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %379) #7
  store ptr %380, ptr %39, align 8, !tbaa !5
  br label %381

381:                                              ; preds = %434, %374
  %382 = load ptr, ptr %38, align 8, !tbaa !5
  %383 = load ptr, ptr %39, align 8, !tbaa !5
  %384 = icmp ne ptr %382, %383
  br i1 %384, label %394, label %385

385:                                              ; preds = %381
  store i32 4, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %438

386:                                              ; preds = %353
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %10, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %11, align 4
  br label %541

390:                                              ; preds = %440, %371, %368
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %10, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %11, align 4
  br label %540

394:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %395 = load ptr, ptr %38, align 8, !tbaa !5
  store ptr %395, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %396 = load ptr, ptr %40, align 8, !tbaa !5
  %397 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %396)
          to label %398 unwind label %425

398:                                              ; preds = %394
  %399 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %397)
          to label %400 unwind label %425

400:                                              ; preds = %398
  store ptr %399, ptr %41, align 8, !tbaa !5
  %401 = load ptr, ptr %41, align 8, !tbaa !5
  %402 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %401, i32 0, i32 1
  %403 = load i32, ptr %402, align 4, !tbaa !203
  %404 = icmp eq i32 %403, 4
  br i1 %404, label %420, label %405

405:                                              ; preds = %400
  %406 = load ptr, ptr %41, align 8, !tbaa !5
  %407 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %406, i32 0, i32 1
  %408 = load i32, ptr %407, align 4, !tbaa !203
  %409 = icmp eq i32 %408, 6
  br i1 %409, label %410, label %433

410:                                              ; preds = %405
  %411 = load ptr, ptr %40, align 8, !tbaa !5
  %412 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %411)
          to label %413 unwind label %425

413:                                              ; preds = %410
  %414 = load ptr, ptr %27, align 8, !tbaa !5
  %415 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %414, i32 0, i32 9
  %416 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %415) #7
  %417 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %416)
          to label %418 unwind label %425

418:                                              ; preds = %413
  %419 = icmp eq i32 %412, %417
  br i1 %419, label %420, label %433

420:                                              ; preds = %418, %400
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  %421 = load i32, ptr %35, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %42, i32 noundef %421)
          to label %422 unwind label %429

422:                                              ; preds = %420
  %423 = load ptr, ptr %41, align 8, !tbaa !5
  %424 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %423, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %424, ptr align 4 %42, i64 4, i1 false), !tbaa.struct !196
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  br label %433

425:                                              ; preds = %413, %410, %398, %394
  %426 = landingpad { ptr, i32 }
          cleanup
  %427 = extractvalue { ptr, i32 } %426, 0
  store ptr %427, ptr %10, align 8
  %428 = extractvalue { ptr, i32 } %426, 1
  store i32 %428, ptr %11, align 4
  br label %437

429:                                              ; preds = %420
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %10, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  br label %437

433:                                              ; preds = %422, %418, %405
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  br label %434

434:                                              ; preds = %433
  %435 = load ptr, ptr %38, align 8, !tbaa !5
  %436 = getelementptr inbounds %"class.spirv_cross::TypedID.415", ptr %435, i32 1
  store ptr %436, ptr %38, align 8, !tbaa !5
  br label %381

437:                                              ; preds = %429, %425
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %540

438:                                              ; preds = %385
  %439 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 52
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %439, ptr noundef nonnull align 4 dereferenceable(4) %22) #7
  br label %539

440:                                              ; preds = %363
  %441 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %132)
          to label %442 unwind label %390

442:                                              ; preds = %440
  switch i32 %441, label %537 [
    i32 0, label %443
    i32 2, label %443
    i32 1, label %459
  ]

443:                                              ; preds = %442, %442
  %444 = load ptr, ptr %27, align 8, !tbaa !5
  %445 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %444, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %44) #7
  %446 = getelementptr inbounds %class.anon.525, ptr %44, i32 0, i32 0
  store ptr %132, ptr %446, align 8, !tbaa !225
  %447 = getelementptr inbounds %class.anon.525, ptr %44, i32 0, i32 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %447, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %448 unwind label %450

448:                                              ; preds = %443
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(40) %44)
          to label %449 unwind label %454

449:                                              ; preds = %448
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %445, ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %44) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  br label %538

450:                                              ; preds = %443
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %10, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %11, align 4
  br label %458

454:                                              ; preds = %448
  %455 = landingpad { ptr, i32 }
          cleanup
  %456 = extractvalue { ptr, i32 } %455, 0
  store ptr %456, ptr %10, align 8
  %457 = extractvalue { ptr, i32 } %455, 1
  store i32 %457, ptr %11, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %44) #7
  br label %458

458:                                              ; preds = %454, %450
  call void @llvm.lifetime.end.p0(i64 40, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  br label %540

459:                                              ; preds = %442
  %460 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 37
  %461 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %460, i32 0, i32 48
  %462 = load i8, ptr %461, align 1, !tbaa !227, !range !176, !noundef !177
  %463 = trunc i8 %462 to i1
  br i1 %463, label %464, label %500

464:                                              ; preds = %459
  %465 = load i8, ptr %7, align 1, !tbaa !11, !range !176, !noundef !177
  %466 = trunc i8 %465 to i1
  br i1 %466, label %467, label %483

467:                                              ; preds = %464
  %468 = load ptr, ptr %27, align 8, !tbaa !5
  %469 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %468, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %46) #7
  %470 = getelementptr inbounds %class.anon.526, ptr %46, i32 0, i32 0
  store ptr %132, ptr %470, align 8, !tbaa !228
  %471 = getelementptr inbounds %class.anon.526, ptr %46, i32 0, i32 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %471, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %472 unwind label %474

472:                                              ; preds = %467
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(40) %46)
          to label %473 unwind label %478

473:                                              ; preds = %472
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %469, ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %46) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  br label %499

474:                                              ; preds = %467
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %10, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %11, align 4
  br label %482

478:                                              ; preds = %472
  %479 = landingpad { ptr, i32 }
          cleanup
  %480 = extractvalue { ptr, i32 } %479, 0
  store ptr %480, ptr %10, align 8
  %481 = extractvalue { ptr, i32 } %479, 1
  store i32 %481, ptr %11, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %46) #7
  br label %482

482:                                              ; preds = %478, %474
  call void @llvm.lifetime.end.p0(i64 40, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  br label %540

483:                                              ; preds = %464
  %484 = load ptr, ptr %27, align 8, !tbaa !5
  %485 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %484, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %48) #7
  %486 = getelementptr inbounds %class.anon.527, ptr %48, i32 0, i32 0
  store ptr %132, ptr %486, align 8, !tbaa !230
  %487 = getelementptr inbounds %class.anon.527, ptr %48, i32 0, i32 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %487, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %488 unwind label %490

488:                                              ; preds = %483
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(40) %48)
          to label %489 unwind label %494

489:                                              ; preds = %488
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %485, ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_5D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %48) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #7
  br label %499

490:                                              ; preds = %483
  %491 = landingpad { ptr, i32 }
          cleanup
  %492 = extractvalue { ptr, i32 } %491, 0
  store ptr %492, ptr %10, align 8
  %493 = extractvalue { ptr, i32 } %491, 1
  store i32 %493, ptr %11, align 4
  br label %498

494:                                              ; preds = %488
  %495 = landingpad { ptr, i32 }
          cleanup
  %496 = extractvalue { ptr, i32 } %495, 0
  store ptr %496, ptr %10, align 8
  %497 = extractvalue { ptr, i32 } %495, 1
  store i32 %497, ptr %11, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_5D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %48) #7
  br label %498

498:                                              ; preds = %494, %490
  call void @llvm.lifetime.end.p0(i64 40, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #7
  br label %540

499:                                              ; preds = %489, %473
  br label %536

500:                                              ; preds = %459
  %501 = load i8, ptr %7, align 1, !tbaa !11, !range !176, !noundef !177
  %502 = trunc i8 %501 to i1
  br i1 %502, label %503, label %519

503:                                              ; preds = %500
  %504 = load ptr, ptr %27, align 8, !tbaa !5
  %505 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %504, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %50) #7
  %506 = getelementptr inbounds %class.anon.528, ptr %50, i32 0, i32 0
  store ptr %132, ptr %506, align 8, !tbaa !232
  %507 = getelementptr inbounds %class.anon.528, ptr %50, i32 0, i32 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %507, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %508 unwind label %510

508:                                              ; preds = %503
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(40) %50)
          to label %509 unwind label %514

509:                                              ; preds = %508
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %505, ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_6D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %50) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  br label %535

510:                                              ; preds = %503
  %511 = landingpad { ptr, i32 }
          cleanup
  %512 = extractvalue { ptr, i32 } %511, 0
  store ptr %512, ptr %10, align 8
  %513 = extractvalue { ptr, i32 } %511, 1
  store i32 %513, ptr %11, align 4
  br label %518

514:                                              ; preds = %508
  %515 = landingpad { ptr, i32 }
          cleanup
  %516 = extractvalue { ptr, i32 } %515, 0
  store ptr %516, ptr %10, align 8
  %517 = extractvalue { ptr, i32 } %515, 1
  store i32 %517, ptr %11, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_6D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %50) #7
  br label %518

518:                                              ; preds = %514, %510
  call void @llvm.lifetime.end.p0(i64 40, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  br label %540

519:                                              ; preds = %500
  %520 = load ptr, ptr %27, align 8, !tbaa !5
  %521 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %520, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %52) #7
  %522 = getelementptr inbounds %class.anon.529, ptr %52, i32 0, i32 0
  store ptr %132, ptr %522, align 8, !tbaa !234
  %523 = getelementptr inbounds %class.anon.529, ptr %52, i32 0, i32 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %523, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %524 unwind label %526

524:                                              ; preds = %519
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(40) %52)
          to label %525 unwind label %530

525:                                              ; preds = %524
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %521, ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_7D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %52) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  br label %535

526:                                              ; preds = %519
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %10, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %11, align 4
  br label %534

530:                                              ; preds = %524
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %10, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, ptr %11, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_7D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %52) #7
  br label %534

534:                                              ; preds = %530, %526
  call void @llvm.lifetime.end.p0(i64 40, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  br label %540

535:                                              ; preds = %525, %509
  br label %536

536:                                              ; preds = %535, %499
  br label %538

537:                                              ; preds = %442
  br label %538

538:                                              ; preds = %537, %536, %449
  br label %539

539:                                              ; preds = %538, %438
  store i32 2, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  br label %543

540:                                              ; preds = %534, %518, %498, %482, %458, %437, %390
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %541

541:                                              ; preds = %540, %386
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  br label %1338

542:                                              ; preds = %244
  br label %543

543:                                              ; preds = %542, %539, %342
  %544 = load i32, ptr %18, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %53, i32 noundef %544)
          to label %545 unwind label %266

545:                                              ; preds = %543
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #7
  %546 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  %547 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %546, i32 0, i32 13
  %548 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %547)
          to label %549 unwind label %573

549:                                              ; preds = %545
  %550 = load ptr, ptr %132, align 8, !tbaa !236
  %551 = getelementptr inbounds ptr, ptr %550, i64 6
  %552 = load ptr, ptr %551, align 8
  invoke void %552(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(12482) %132, i32 noundef %548, i1 noundef zeroext true)
          to label %553 unwind label %573

553:                                              ; preds = %549
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef @.str.76)
          to label %554 unwind label %577

554:                                              ; preds = %553
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %555 unwind label %581

555:                                              ; preds = %554
  %556 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %53, i32 0, i32 0
  %557 = load i32, ptr %556, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %557, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %558 unwind label %585

558:                                              ; preds = %555
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  %559 = load i32, ptr %22, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %57, i32 noundef %559)
          to label %560 unwind label %266

560:                                              ; preds = %558
  %561 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %57, i32 0, i32 0
  %562 = load i32, ptr %561, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %562, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %563 unwind label %266

563:                                              ; preds = %560
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #7
  store ptr %8, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  %564 = load ptr, ptr %58, align 8, !tbaa !5
  %565 = call noundef ptr @_ZN11spirv_cross10VectorViewIPNS_12SPIRVariableEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %564) #7
  store ptr %565, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #7
  %566 = load ptr, ptr %58, align 8, !tbaa !5
  %567 = call noundef ptr @_ZN11spirv_cross10VectorViewIPNS_12SPIRVariableEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %566) #7
  store ptr %567, ptr %60, align 8, !tbaa !5
  br label %568

568:                                              ; preds = %633, %563
  %569 = load ptr, ptr %59, align 8, !tbaa !5
  %570 = load ptr, ptr %60, align 8, !tbaa !5
  %571 = icmp ne ptr %569, %570
  br i1 %571, label %592, label %572

572:                                              ; preds = %568
  store i32 7, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  br label %640

573:                                              ; preds = %549, %545
  %574 = landingpad { ptr, i32 }
          cleanup
  %575 = extractvalue { ptr, i32 } %574, 0
  store ptr %575, ptr %10, align 8
  %576 = extractvalue { ptr, i32 } %574, 1
  store i32 %576, ptr %11, align 4
  br label %591

577:                                              ; preds = %553
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %10, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %11, align 4
  br label %590

581:                                              ; preds = %554
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %10, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %11, align 4
  br label %589

585:                                              ; preds = %555
  %586 = landingpad { ptr, i32 }
          cleanup
  %587 = extractvalue { ptr, i32 } %586, 0
  store ptr %587, ptr %10, align 8
  %588 = extractvalue { ptr, i32 } %586, 1
  store i32 %588, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  br label %589

589:                                              ; preds = %585, %581
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  br label %590

590:                                              ; preds = %589, %577
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  br label %591

591:                                              ; preds = %590, %573
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  br label %1338

592:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  %593 = load ptr, ptr %59, align 8, !tbaa !5
  %594 = load ptr, ptr %593, align 8, !tbaa !5
  store ptr %594, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #7
  %595 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %596 unwind label %636

596:                                              ; preds = %592
  br i1 %595, label %603, label %597

597:                                              ; preds = %596
  %598 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %599 unwind label %636

599:                                              ; preds = %597
  br i1 %598, label %600, label %607

600:                                              ; preds = %599
  %601 = load i32, ptr %6, align 4, !tbaa !9
  %602 = icmp eq i32 %601, 1
  br i1 %602, label %603, label %607

603:                                              ; preds = %600, %596
  %604 = load i8, ptr %7, align 1, !tbaa !11, !range !176, !noundef !177
  %605 = trunc i8 %604 to i1
  %606 = xor i1 %605, true
  br label %607

607:                                              ; preds = %603, %600, %599
  %608 = phi i1 [ false, %600 ], [ false, %599 ], [ %606, %603 ]
  %609 = zext i1 %608 to i8
  store i8 %609, ptr %62, align 1, !tbaa !11
  %610 = load i8, ptr %62, align 1, !tbaa !11, !range !176, !noundef !177
  %611 = trunc i8 %610 to i1
  %612 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %13, i32 0, i32 1
  %613 = zext i1 %611 to i8
  store i8 %613, ptr %612, align 8, !tbaa !238
  %614 = load i8, ptr %62, align 1, !tbaa !11, !range !176, !noundef !177
  %615 = trunc i8 %614 to i1
  br i1 %615, label %625, label %616

616:                                              ; preds = %607
  %617 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %618 unwind label %636

618:                                              ; preds = %616
  br i1 %617, label %619, label %622

619:                                              ; preds = %618
  %620 = load i32, ptr %6, align 4, !tbaa !9
  %621 = icmp eq i32 %620, 3
  br label %622

622:                                              ; preds = %619, %618
  %623 = phi i1 [ false, %618 ], [ %621, %619 ]
  %624 = xor i1 %623, true
  br label %625

625:                                              ; preds = %622, %607
  %626 = phi i1 [ false, %607 ], [ %624, %622 ]
  %627 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %13, i32 0, i32 2
  %628 = zext i1 %626 to i8
  store i8 %628, ptr %627, align 1, !tbaa !242
  %629 = load i32, ptr %6, align 4, !tbaa !9
  %630 = load ptr, ptr %19, align 8, !tbaa !5
  %631 = load ptr, ptr %61, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL31add_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %132, i32 noundef %629, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(336) %630, ptr noundef nonnull align 8 dereferenceable(176) %631, ptr noundef nonnull align 8 dereferenceable(58) %13)
          to label %632 unwind label %636

632:                                              ; preds = %625
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  br label %633

633:                                              ; preds = %632
  %634 = load ptr, ptr %59, align 8, !tbaa !5
  %635 = getelementptr inbounds ptr, ptr %634, i32 1
  store ptr %635, ptr %59, align 8, !tbaa !5
  br label %568

636:                                              ; preds = %625, %616, %597, %592
  %637 = landingpad { ptr, i32 }
          cleanup
  %638 = extractvalue { ptr, i32 } %637, 0
  store ptr %638, ptr %10, align 8
  %639 = extractvalue { ptr, i32 } %637, 1
  store i32 %639, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  br label %1338

640:                                              ; preds = %572
  %641 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %642 unwind label %266

642:                                              ; preds = %640
  br i1 %641, label %643, label %648

643:                                              ; preds = %642
  %644 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 37
  %645 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %644, i32 0, i32 48
  %646 = load i8, ptr %645, align 1, !tbaa !227, !range !176, !noundef !177
  %647 = trunc i8 %646 to i1
  br i1 %647, label %656, label %648

648:                                              ; preds = %643, %642
  %649 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %650 unwind label %266

650:                                              ; preds = %648
  br i1 %649, label %651, label %865

651:                                              ; preds = %650
  %652 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 37
  %653 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %652, i32 0, i32 49
  %654 = load i8, ptr %653, align 2, !tbaa !180, !range !176, !noundef !177
  %655 = trunc i8 %654 to i1
  br i1 %655, label %656, label %865

656:                                              ; preds = %651, %643
  %657 = load i32, ptr %6, align 4, !tbaa !9
  %658 = icmp eq i32 %657, 1
  br i1 %658, label %659, label %865

659:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  %660 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 39
  store ptr %660, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #7
  %661 = load ptr, ptr %63, align 8, !tbaa !5
  %662 = call ptr @_ZNSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %661) #7
  %663 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.530", ptr %64, i32 0, i32 0
  store ptr %662, ptr %663, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  %664 = load ptr, ptr %63, align 8, !tbaa !5
  %665 = call ptr @_ZNSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %664) #7
  %666 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.530", ptr %65, i32 0, i32 0
  store ptr %665, ptr %666, align 8
  br label %667

667:                                              ; preds = %857, %659
  %668 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef nonnull align 8 dereferenceable(8) %65) #7
  br i1 %668, label %670, label %669

669:                                              ; preds = %667
  store i32 9, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  br label %864

670:                                              ; preds = %667
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #7
  %671 = call noundef nonnull align 4 dereferenceable(32) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %64) #7
  store ptr %671, ptr %66, align 8, !tbaa !5
  %672 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 43
  %673 = load ptr, ptr %66, align 8, !tbaa !5
  %674 = getelementptr inbounds %"struct.std::pair.531", ptr %673, i32 0, i32 0
  %675 = getelementptr inbounds %"struct.spirv_cross::LocationComponentPair", ptr %674, i32 0, i32 0
  %676 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %672, ptr noundef nonnull align 4 dereferenceable(4) %675)
          to label %677 unwind label %680

677:                                              ; preds = %670
  %678 = icmp ne i64 %676, 0
  br i1 %678, label %679, label %684

679:                                              ; preds = %677
  store i32 10, ptr %16, align 4
  br label %854

680:                                              ; preds = %670
  %681 = landingpad { ptr, i32 }
          cleanup
  %682 = extractvalue { ptr, i32 } %681, 0
  store ptr %682, ptr %10, align 8
  %683 = extractvalue { ptr, i32 } %681, 1
  store i32 %683, ptr %11, align 4
  br label %863

684:                                              ; preds = %677
  %685 = load i8, ptr %7, align 1, !tbaa !11, !range !176, !noundef !177
  %686 = trunc i8 %685 to i1
  %687 = zext i1 %686 to i32
  %688 = load ptr, ptr %66, align 8, !tbaa !5
  %689 = getelementptr inbounds %"struct.std::pair.531", ptr %688, i32 0, i32 1
  %690 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %689, i32 0, i32 5
  %691 = load i32, ptr %690, align 4, !tbaa !243
  %692 = icmp eq i32 %691, 2
  %693 = zext i1 %692 to i32
  %694 = icmp ne i32 %687, %693
  br i1 %694, label %695, label %696

695:                                              ; preds = %684
  store i32 10, ptr %16, align 4
  br label %854

696:                                              ; preds = %684
  %697 = load ptr, ptr %66, align 8, !tbaa !5
  %698 = getelementptr inbounds %"struct.std::pair.531", ptr %697, i32 0, i32 1
  %699 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %698, i32 0, i32 3
  %700 = load i32, ptr %699, align 4, !tbaa !250
  %701 = icmp eq i32 %700, 11
  br i1 %701, label %708, label %702

702:                                              ; preds = %696
  %703 = load ptr, ptr %66, align 8, !tbaa !5
  %704 = getelementptr inbounds %"struct.std::pair.531", ptr %703, i32 0, i32 1
  %705 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %704, i32 0, i32 3
  %706 = load i32, ptr %705, align 4, !tbaa !250
  %707 = icmp eq i32 %706, 12
  br i1 %707, label %708, label %709

708:                                              ; preds = %702, %696
  store i32 10, ptr %16, align 4
  br label %854

709:                                              ; preds = %702
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #7
  %710 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  %711 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %710, i32 noundef 5)
          to label %712 unwind label %727

712:                                              ; preds = %709
  store i32 %711, ptr %67, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #7
  %713 = load i32, ptr %67, align 4, !tbaa !181
  store i32 %713, ptr %68, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #7
  %714 = load i32, ptr %67, align 4, !tbaa !181
  %715 = add i32 %714, 1
  store i32 %715, ptr %69, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #7
  %716 = load i32, ptr %67, align 4, !tbaa !181
  %717 = add i32 %716, 2
  store i32 %717, ptr %70, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #7
  %718 = load i32, ptr %67, align 4, !tbaa !181
  %719 = add i32 %718, 3
  store i32 %719, ptr %71, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #7
  %720 = load i32, ptr %67, align 4, !tbaa !181
  %721 = add i32 %720, 4
  store i32 %721, ptr %72, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 336, ptr %73) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 21)
          to label %722 unwind label %731

722:                                              ; preds = %712
  %723 = load ptr, ptr %66, align 8, !tbaa !5
  %724 = getelementptr inbounds %"struct.std::pair.531", ptr %723, i32 0, i32 1
  %725 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %724, i32 0, i32 2
  %726 = load i32, ptr %725, align 4, !tbaa !251
  switch i32 %726, label %739 [
    i32 2, label %735
    i32 3, label %735
    i32 4, label %738
  ]

727:                                              ; preds = %709
  %728 = landingpad { ptr, i32 }
          cleanup
  %729 = extractvalue { ptr, i32 } %728, 0
  store ptr %729, ptr %10, align 8
  %730 = extractvalue { ptr, i32 } %728, 1
  store i32 %730, ptr %11, align 4
  br label %862

731:                                              ; preds = %712
  %732 = landingpad { ptr, i32 }
          cleanup
  %733 = extractvalue { ptr, i32 } %732, 0
  store ptr %733, ptr %10, align 8
  %734 = extractvalue { ptr, i32 } %732, 1
  store i32 %734, ptr %11, align 4
  br label %861

735:                                              ; preds = %722, %722
  %736 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 2
  store i32 6, ptr %736, align 8, !tbaa !183
  %737 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 3
  store i32 16, ptr %737, align 4, !tbaa !252
  br label %742

738:                                              ; preds = %722
  br label %739

739:                                              ; preds = %738, %722
  %740 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 2
  store i32 8, ptr %740, align 8, !tbaa !183
  %741 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 3
  store i32 32, ptr %741, align 4, !tbaa !252
  br label %742

742:                                              ; preds = %739, %735
  %743 = load i32, ptr %68, align 4, !tbaa !181
  %744 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %743, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %745 unwind label %762

745:                                              ; preds = %742
  %746 = load ptr, ptr %66, align 8, !tbaa !5
  %747 = getelementptr inbounds %"struct.std::pair.531", ptr %746, i32 0, i32 1
  %748 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %747, i32 0, i32 4
  %749 = load i32, ptr %748, align 4, !tbaa !253
  %750 = icmp ugt i32 %749, 1
  br i1 %750, label %751, label %766

751:                                              ; preds = %745
  %752 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 1
  store i32 23, ptr %752, align 4, !tbaa !254
  %753 = load ptr, ptr %66, align 8, !tbaa !5
  %754 = getelementptr inbounds %"struct.std::pair.531", ptr %753, i32 0, i32 1
  %755 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %754, i32 0, i32 4
  %756 = load i32, ptr %755, align 4, !tbaa !253
  %757 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 4
  store i32 %756, ptr %757, align 8, !tbaa !255
  %758 = load i32, ptr %69, align 4, !tbaa !181
  %759 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %758, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %760 unwind label %762

760:                                              ; preds = %751
  %761 = load i32, ptr %69, align 4, !tbaa !181
  store i32 %761, ptr %68, align 4, !tbaa !181
  br label %766

762:                                              ; preds = %771, %751, %742
  %763 = landingpad { ptr, i32 }
          cleanup
  %764 = extractvalue { ptr, i32 } %763, 0
  store ptr %764, ptr %10, align 8
  %765 = extractvalue { ptr, i32 } %763, 1
  store i32 %765, ptr %11, align 4
  br label %860

766:                                              ; preds = %760, %745
  %767 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 1
  store i32 28, ptr %767, align 4, !tbaa !254
  %768 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #7
  store i32 0, ptr %74, align 4, !tbaa !181
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %768, ptr noundef nonnull align 4 dereferenceable(4) %74) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #7
  %769 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 1, ptr %75) #7
  store i8 1, ptr %75, align 1, !tbaa !11
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %769, ptr noundef nonnull align 1 dereferenceable(1) %75) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %75) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #7
  %770 = load i32, ptr %68, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %76, i32 noundef %770)
          to label %771 unwind label %823

771:                                              ; preds = %766
  %772 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %772, ptr align 4 %76, i64 4, i1 false), !tbaa.struct !196
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #7
  %773 = load i32, ptr %70, align 4, !tbaa !181
  %774 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %773, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %775 unwind label %762

775:                                              ; preds = %771
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #7
  %776 = load i32, ptr %68, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %77, i32 noundef %776)
          to label %777 unwind label %827

777:                                              ; preds = %775
  %778 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %73, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %778, ptr align 4 %77, i64 4, i1 false), !tbaa.struct !196
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #7
  %779 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 1
  store i32 32, ptr %779, align 4, !tbaa !254
  %780 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 9
  store i8 1, ptr %780, align 4, !tbaa !256
  %781 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 8
  %782 = load i32, ptr %781, align 8, !tbaa !257
  %783 = add i32 %782, 1
  store i32 %783, ptr %781, align 8, !tbaa !257
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #7
  %784 = load i32, ptr %70, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %78, i32 noundef %784)
          to label %785 unwind label %831

785:                                              ; preds = %777
  %786 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %786, ptr align 4 %78, i64 4, i1 false), !tbaa.struct !196
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  %787 = load i32, ptr %6, align 4, !tbaa !9
  %788 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %73, i32 0, i32 11
  store i32 %787, ptr %788, align 8, !tbaa !195
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #7
  %789 = load i32, ptr %71, align 4, !tbaa !181
  %790 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %789, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %791 unwind label %835

791:                                              ; preds = %785
  store ptr %790, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #7
  %792 = load i32, ptr %70, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %80, i32 noundef %792)
          to label %793 unwind label %839

793:                                              ; preds = %791
  %794 = load ptr, ptr %79, align 8, !tbaa !5
  %795 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %794, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %795, ptr align 4 %80, i64 4, i1 false), !tbaa.struct !196
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #7
  %796 = load i32, ptr %72, align 4, !tbaa !181
  %797 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjRN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %796, ptr noundef nonnull align 4 dereferenceable(4) %71, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %798 unwind label %843

798:                                              ; preds = %793
  store ptr %797, ptr %81, align 8, !tbaa !5
  %799 = load i32, ptr %72, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %82, i32 noundef %799)
          to label %800 unwind label %843

800:                                              ; preds = %798
  %801 = load ptr, ptr %66, align 8, !tbaa !5
  %802 = getelementptr inbounds %"struct.std::pair.531", ptr %801, i32 0, i32 0
  %803 = getelementptr inbounds %"struct.spirv_cross::LocationComponentPair", ptr %802, i32 0, i32 0
  %804 = load i32, ptr %803, align 4, !tbaa !258
  %805 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %82, i32 0, i32 0
  %806 = load i32, ptr %805, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %806, i32 noundef 30, i32 noundef %804)
          to label %807 unwind label %843

807:                                              ; preds = %800
  %808 = load ptr, ptr %66, align 8, !tbaa !5
  %809 = getelementptr inbounds %"struct.std::pair.531", ptr %808, i32 0, i32 0
  %810 = getelementptr inbounds %"struct.spirv_cross::LocationComponentPair", ptr %809, i32 0, i32 1
  %811 = load i32, ptr %810, align 4, !tbaa !259
  %812 = icmp ne i32 %811, 0
  br i1 %812, label %813, label %847

813:                                              ; preds = %807
  %814 = load i32, ptr %72, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %83, i32 noundef %814)
          to label %815 unwind label %843

815:                                              ; preds = %813
  %816 = load ptr, ptr %66, align 8, !tbaa !5
  %817 = getelementptr inbounds %"struct.std::pair.531", ptr %816, i32 0, i32 0
  %818 = getelementptr inbounds %"struct.spirv_cross::LocationComponentPair", ptr %817, i32 0, i32 1
  %819 = load i32, ptr %818, align 4, !tbaa !259
  %820 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %83, i32 0, i32 0
  %821 = load i32, ptr %820, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %821, i32 noundef 31, i32 noundef %819)
          to label %822 unwind label %843

822:                                              ; preds = %815
  br label %847

823:                                              ; preds = %766
  %824 = landingpad { ptr, i32 }
          cleanup
  %825 = extractvalue { ptr, i32 } %824, 0
  store ptr %825, ptr %10, align 8
  %826 = extractvalue { ptr, i32 } %824, 1
  store i32 %826, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #7
  br label %860

827:                                              ; preds = %775
  %828 = landingpad { ptr, i32 }
          cleanup
  %829 = extractvalue { ptr, i32 } %828, 0
  store ptr %829, ptr %10, align 8
  %830 = extractvalue { ptr, i32 } %828, 1
  store i32 %830, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #7
  br label %860

831:                                              ; preds = %777
  %832 = landingpad { ptr, i32 }
          cleanup
  %833 = extractvalue { ptr, i32 } %832, 0
  store ptr %833, ptr %10, align 8
  %834 = extractvalue { ptr, i32 } %832, 1
  store i32 %834, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  br label %860

835:                                              ; preds = %785
  %836 = landingpad { ptr, i32 }
          cleanup
  %837 = extractvalue { ptr, i32 } %836, 0
  store ptr %837, ptr %10, align 8
  %838 = extractvalue { ptr, i32 } %836, 1
  store i32 %838, ptr %11, align 4
  br label %859

839:                                              ; preds = %791
  %840 = landingpad { ptr, i32 }
          cleanup
  %841 = extractvalue { ptr, i32 } %840, 0
  store ptr %841, ptr %10, align 8
  %842 = extractvalue { ptr, i32 } %840, 1
  store i32 %842, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  br label %859

843:                                              ; preds = %847, %815, %813, %800, %798, %793
  %844 = landingpad { ptr, i32 }
          cleanup
  %845 = extractvalue { ptr, i32 } %844, 0
  store ptr %845, ptr %10, align 8
  %846 = extractvalue { ptr, i32 } %844, 1
  store i32 %846, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  br label %859

847:                                              ; preds = %822, %807
  %848 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %13, i32 0, i32 1
  store i8 1, ptr %848, align 8, !tbaa !238
  %849 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %13, i32 0, i32 2
  store i8 0, ptr %849, align 1, !tbaa !242
  %850 = load i32, ptr %6, align 4, !tbaa !9
  %851 = load ptr, ptr %19, align 8, !tbaa !5
  %852 = load ptr, ptr %81, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL31add_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %132, i32 noundef %850, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(336) %851, ptr noundef nonnull align 8 dereferenceable(176) %852, ptr noundef nonnull align 8 dereferenceable(58) %13)
          to label %853 unwind label %843

853:                                              ; preds = %847
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %73) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #7
  store i32 0, ptr %16, align 4
  br label %854

854:                                              ; preds = %853, %708, %695, %679
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  %855 = load i32, ptr %16, align 4
  switch i32 %855, label %1351 [
    i32 0, label %856
    i32 10, label %857
  ]

856:                                              ; preds = %854
  br label %857

857:                                              ; preds = %856, %854
  %858 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %64) #7
  br label %667

859:                                              ; preds = %843, %839, %835
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #7
  br label %860

860:                                              ; preds = %859, %831, %827, %823, %762
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %73) #7
  br label %861

861:                                              ; preds = %860, %731
  call void @llvm.lifetime.end.p0(i64 336, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #7
  br label %862

862:                                              ; preds = %861, %727
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #7
  br label %863

863:                                              ; preds = %862, %680
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  br label %1338

864:                                              ; preds = %669
  br label %865

865:                                              ; preds = %864, %656, %651, %650
  %866 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 76
  %867 = load i8, ptr %866, align 4, !tbaa !13, !range !176, !noundef !177
  %868 = trunc i8 %867 to i1
  br i1 %868, label %869, label %1054

869:                                              ; preds = %865
  %870 = load i32, ptr %6, align 4, !tbaa !9
  %871 = icmp eq i32 %870, 3
  br i1 %871, label %872, label %1054

872:                                              ; preds = %869
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #7
  %873 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 41
  store ptr %873, ptr %84, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #7
  %874 = load ptr, ptr %84, align 8, !tbaa !5
  %875 = call ptr @_ZNSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %874) #7
  %876 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.530", ptr %85, i32 0, i32 0
  store ptr %875, ptr %876, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #7
  %877 = load ptr, ptr %84, align 8, !tbaa !5
  %878 = call ptr @_ZNSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %877) #7
  %879 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.530", ptr %86, i32 0, i32 0
  store ptr %878, ptr %879, align 8
  br label %880

880:                                              ; preds = %1046, %872
  %881 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %85, ptr noundef nonnull align 8 dereferenceable(8) %86) #7
  br i1 %881, label %883, label %882

882:                                              ; preds = %880
  store i32 12, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  br label %1053

883:                                              ; preds = %880
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #7
  %884 = call noundef nonnull align 4 dereferenceable(32) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %85) #7
  store ptr %884, ptr %87, align 8, !tbaa !5
  %885 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 45
  %886 = load ptr, ptr %87, align 8, !tbaa !5
  %887 = getelementptr inbounds %"struct.std::pair.531", ptr %886, i32 0, i32 0
  %888 = getelementptr inbounds %"struct.spirv_cross::LocationComponentPair", ptr %887, i32 0, i32 0
  %889 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %885, ptr noundef nonnull align 4 dereferenceable(4) %888)
          to label %890 unwind label %893

890:                                              ; preds = %883
  %891 = icmp ne i64 %889, 0
  br i1 %891, label %892, label %897

892:                                              ; preds = %890
  store i32 13, ptr %16, align 4
  br label %1043

893:                                              ; preds = %883
  %894 = landingpad { ptr, i32 }
          cleanup
  %895 = extractvalue { ptr, i32 } %894, 0
  store ptr %895, ptr %10, align 8
  %896 = extractvalue { ptr, i32 } %894, 1
  store i32 %896, ptr %11, align 4
  br label %1052

897:                                              ; preds = %890
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #7
  %898 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  %899 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %898, i32 noundef 5)
          to label %900 unwind label %915

900:                                              ; preds = %897
  store i32 %899, ptr %88, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #7
  %901 = load i32, ptr %88, align 4, !tbaa !181
  store i32 %901, ptr %89, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #7
  %902 = load i32, ptr %88, align 4, !tbaa !181
  %903 = add i32 %902, 1
  store i32 %903, ptr %90, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #7
  %904 = load i32, ptr %88, align 4, !tbaa !181
  %905 = add i32 %904, 2
  store i32 %905, ptr %91, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #7
  %906 = load i32, ptr %88, align 4, !tbaa !181
  %907 = add i32 %906, 3
  store i32 %907, ptr %92, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #7
  %908 = load i32, ptr %88, align 4, !tbaa !181
  %909 = add i32 %908, 4
  store i32 %909, ptr %93, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 336, ptr %94) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %94, i32 noundef 21)
          to label %910 unwind label %919

910:                                              ; preds = %900
  %911 = load ptr, ptr %87, align 8, !tbaa !5
  %912 = getelementptr inbounds %"struct.std::pair.531", ptr %911, i32 0, i32 1
  %913 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %912, i32 0, i32 2
  %914 = load i32, ptr %913, align 4, !tbaa !251
  switch i32 %914, label %927 [
    i32 2, label %923
    i32 3, label %923
    i32 4, label %926
  ]

915:                                              ; preds = %897
  %916 = landingpad { ptr, i32 }
          cleanup
  %917 = extractvalue { ptr, i32 } %916, 0
  store ptr %917, ptr %10, align 8
  %918 = extractvalue { ptr, i32 } %916, 1
  store i32 %918, ptr %11, align 4
  br label %1051

919:                                              ; preds = %900
  %920 = landingpad { ptr, i32 }
          cleanup
  %921 = extractvalue { ptr, i32 } %920, 0
  store ptr %921, ptr %10, align 8
  %922 = extractvalue { ptr, i32 } %920, 1
  store i32 %922, ptr %11, align 4
  br label %1050

923:                                              ; preds = %910, %910
  %924 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 2
  store i32 6, ptr %924, align 8, !tbaa !183
  %925 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 3
  store i32 16, ptr %925, align 4, !tbaa !252
  br label %930

926:                                              ; preds = %910
  br label %927

927:                                              ; preds = %926, %910
  %928 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 2
  store i32 8, ptr %928, align 8, !tbaa !183
  %929 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 3
  store i32 32, ptr %929, align 4, !tbaa !252
  br label %930

930:                                              ; preds = %927, %923
  %931 = load i32, ptr %89, align 4, !tbaa !181
  %932 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %931, ptr noundef nonnull align 8 dereferenceable(336) %94)
          to label %933 unwind label %950

933:                                              ; preds = %930
  %934 = load ptr, ptr %87, align 8, !tbaa !5
  %935 = getelementptr inbounds %"struct.std::pair.531", ptr %934, i32 0, i32 1
  %936 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %935, i32 0, i32 4
  %937 = load i32, ptr %936, align 4, !tbaa !253
  %938 = icmp ugt i32 %937, 1
  br i1 %938, label %939, label %954

939:                                              ; preds = %933
  %940 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 1
  store i32 23, ptr %940, align 4, !tbaa !254
  %941 = load ptr, ptr %87, align 8, !tbaa !5
  %942 = getelementptr inbounds %"struct.std::pair.531", ptr %941, i32 0, i32 1
  %943 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %942, i32 0, i32 4
  %944 = load i32, ptr %943, align 4, !tbaa !253
  %945 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 4
  store i32 %944, ptr %945, align 8, !tbaa !255
  %946 = load i32, ptr %90, align 4, !tbaa !181
  %947 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %946, ptr noundef nonnull align 8 dereferenceable(336) %94)
          to label %948 unwind label %950

948:                                              ; preds = %939
  %949 = load i32, ptr %90, align 4, !tbaa !181
  store i32 %949, ptr %89, align 4, !tbaa !181
  br label %954

950:                                              ; preds = %962, %954, %939, %930
  %951 = landingpad { ptr, i32 }
          cleanup
  %952 = extractvalue { ptr, i32 } %951, 0
  store ptr %952, ptr %10, align 8
  %953 = extractvalue { ptr, i32 } %951, 1
  store i32 %953, ptr %11, align 4
  br label %1049

954:                                              ; preds = %948, %933
  %955 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %956 unwind label %950

956:                                              ; preds = %954
  br i1 %955, label %957, label %971

957:                                              ; preds = %956
  %958 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 1
  store i32 28, ptr %958, align 4, !tbaa !254
  %959 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #7
  store i32 0, ptr %95, align 4, !tbaa !181
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %959, ptr noundef nonnull align 4 dereferenceable(4) %95) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #7
  %960 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 1, ptr %96) #7
  store i8 1, ptr %96, align 1, !tbaa !11
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %960, ptr noundef nonnull align 1 dereferenceable(1) %96) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #7
  %961 = load i32, ptr %89, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %97, i32 noundef %961)
          to label %962 unwind label %967

962:                                              ; preds = %957
  %963 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %963, ptr align 4 %97, i64 4, i1 false), !tbaa.struct !196
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #7
  %964 = load i32, ptr %91, align 4, !tbaa !181
  %965 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %964, ptr noundef nonnull align 8 dereferenceable(336) %94)
          to label %966 unwind label %950

966:                                              ; preds = %962
  br label %971

967:                                              ; preds = %957
  %968 = landingpad { ptr, i32 }
          cleanup
  %969 = extractvalue { ptr, i32 } %968, 0
  store ptr %969, ptr %10, align 8
  %970 = extractvalue { ptr, i32 } %968, 1
  store i32 %970, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #7
  br label %1049

971:                                              ; preds = %966, %956
  %972 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 1
  store i32 32, ptr %972, align 4, !tbaa !254
  %973 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 9
  store i8 1, ptr %973, align 4, !tbaa !256
  %974 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 8
  %975 = load i32, ptr %974, align 8, !tbaa !257
  %976 = add i32 %975, 1
  store i32 %976, ptr %974, align 8, !tbaa !257
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #7
  %977 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %978 unwind label %1024

978:                                              ; preds = %971
  br i1 %977, label %979, label %981

979:                                              ; preds = %978
  %980 = load i32, ptr %91, align 4, !tbaa !181
  br label %983

981:                                              ; preds = %978
  %982 = load i32, ptr %89, align 4, !tbaa !181
  br label %983

983:                                              ; preds = %981, %979
  %984 = phi i32 [ %980, %979 ], [ %982, %981 ]
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %98, i32 noundef %984)
          to label %985 unwind label %1024

985:                                              ; preds = %983
  %986 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %986, ptr align 4 %98, i64 4, i1 false), !tbaa.struct !196
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #7
  %987 = load i32, ptr %6, align 4, !tbaa !9
  %988 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 11
  store i32 %987, ptr %988, align 8, !tbaa !195
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #7
  %989 = load i32, ptr %92, align 4, !tbaa !181
  %990 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %989, ptr noundef nonnull align 8 dereferenceable(336) %94)
          to label %991 unwind label %1028

991:                                              ; preds = %985
  store ptr %990, ptr %99, align 8, !tbaa !5
  %992 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 16
  %993 = load ptr, ptr %99, align 8, !tbaa !5
  %994 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %993, i32 0, i32 1
  %995 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_1EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %994, ptr noundef nonnull align 4 dereferenceable(4) %992)
          to label %996 unwind label %1028

996:                                              ; preds = %991
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #7
  %997 = load i32, ptr %93, align 4, !tbaa !181
  %998 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjRN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %997, ptr noundef nonnull align 4 dereferenceable(4) %92, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %999 unwind label %1032

999:                                              ; preds = %996
  store ptr %998, ptr %100, align 8, !tbaa !5
  %1000 = load i32, ptr %93, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %101, i32 noundef %1000)
          to label %1001 unwind label %1032

1001:                                             ; preds = %999
  %1002 = load ptr, ptr %87, align 8, !tbaa !5
  %1003 = getelementptr inbounds %"struct.std::pair.531", ptr %1002, i32 0, i32 0
  %1004 = getelementptr inbounds %"struct.spirv_cross::LocationComponentPair", ptr %1003, i32 0, i32 0
  %1005 = load i32, ptr %1004, align 4, !tbaa !258
  %1006 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %101, i32 0, i32 0
  %1007 = load i32, ptr %1006, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1007, i32 noundef 30, i32 noundef %1005)
          to label %1008 unwind label %1032

1008:                                             ; preds = %1001
  %1009 = load ptr, ptr %87, align 8, !tbaa !5
  %1010 = getelementptr inbounds %"struct.std::pair.531", ptr %1009, i32 0, i32 0
  %1011 = getelementptr inbounds %"struct.spirv_cross::LocationComponentPair", ptr %1010, i32 0, i32 1
  %1012 = load i32, ptr %1011, align 4, !tbaa !259
  %1013 = icmp ne i32 %1012, 0
  br i1 %1013, label %1014, label %1036

1014:                                             ; preds = %1008
  %1015 = load i32, ptr %93, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %102, i32 noundef %1015)
          to label %1016 unwind label %1032

1016:                                             ; preds = %1014
  %1017 = load ptr, ptr %87, align 8, !tbaa !5
  %1018 = getelementptr inbounds %"struct.std::pair.531", ptr %1017, i32 0, i32 0
  %1019 = getelementptr inbounds %"struct.spirv_cross::LocationComponentPair", ptr %1018, i32 0, i32 1
  %1020 = load i32, ptr %1019, align 4, !tbaa !259
  %1021 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %102, i32 0, i32 0
  %1022 = load i32, ptr %1021, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1022, i32 noundef 31, i32 noundef %1020)
          to label %1023 unwind label %1032

1023:                                             ; preds = %1016
  br label %1036

1024:                                             ; preds = %983, %971
  %1025 = landingpad { ptr, i32 }
          cleanup
  %1026 = extractvalue { ptr, i32 } %1025, 0
  store ptr %1026, ptr %10, align 8
  %1027 = extractvalue { ptr, i32 } %1025, 1
  store i32 %1027, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #7
  br label %1049

1028:                                             ; preds = %991, %985
  %1029 = landingpad { ptr, i32 }
          cleanup
  %1030 = extractvalue { ptr, i32 } %1029, 0
  store ptr %1030, ptr %10, align 8
  %1031 = extractvalue { ptr, i32 } %1029, 1
  store i32 %1031, ptr %11, align 4
  br label %1048

1032:                                             ; preds = %1036, %1016, %1014, %1001, %999, %996
  %1033 = landingpad { ptr, i32 }
          cleanup
  %1034 = extractvalue { ptr, i32 } %1033, 0
  store ptr %1034, ptr %10, align 8
  %1035 = extractvalue { ptr, i32 } %1033, 1
  store i32 %1035, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #7
  br label %1048

1036:                                             ; preds = %1023, %1008
  %1037 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %13, i32 0, i32 1
  store i8 1, ptr %1037, align 8, !tbaa !238
  %1038 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %13, i32 0, i32 2
  store i8 0, ptr %1038, align 1, !tbaa !242
  %1039 = load i32, ptr %6, align 4, !tbaa !9
  %1040 = load ptr, ptr %19, align 8, !tbaa !5
  %1041 = load ptr, ptr %100, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL31add_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %132, i32 noundef %1039, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(336) %1040, ptr noundef nonnull align 8 dereferenceable(176) %1041, ptr noundef nonnull align 8 dereferenceable(58) %13)
          to label %1042 unwind label %1032

1042:                                             ; preds = %1036
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %94) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %94) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #7
  store i32 0, ptr %16, align 4
  br label %1043

1043:                                             ; preds = %1042, %892
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  %1044 = load i32, ptr %16, align 4
  switch i32 %1044, label %1351 [
    i32 0, label %1045
    i32 13, label %1046
  ]

1045:                                             ; preds = %1043
  br label %1046

1046:                                             ; preds = %1045, %1043
  %1047 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %85) #7
  br label %880

1048:                                             ; preds = %1032, %1028
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #7
  br label %1049

1049:                                             ; preds = %1048, %1024, %967, %950
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %94) #7
  br label %1050

1050:                                             ; preds = %1049, %919
  call void @llvm.lifetime.end.p0(i64 336, ptr %94) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #7
  br label %1051

1051:                                             ; preds = %1050, %915
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #7
  br label %1052

1052:                                             ; preds = %1051, %893
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  br label %1338

1053:                                             ; preds = %882
  br label %1054

1054:                                             ; preds = %1053, %869, %865
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #7
  %1055 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %13, i32 0, i32 0
  store ptr %1055, ptr %103, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #7
  %1056 = load ptr, ptr %103, align 8, !tbaa !5
  %1057 = call ptr @_ZNSt13unordered_mapIjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %1056) #7
  %1058 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.471", ptr %104, i32 0, i32 0
  %1059 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.472", ptr %1058, i32 0, i32 0
  store ptr %1057, ptr %1059, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #7
  %1060 = load ptr, ptr %103, align 8, !tbaa !5
  %1061 = call ptr @_ZNSt13unordered_mapIjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %1060) #7
  %1062 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.471", ptr %105, i32 0, i32 0
  %1063 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.472", ptr %1062, i32 0, i32 0
  store ptr %1061, ptr %1063, align 8
  br label %1064

1064:                                             ; preds = %1193, %1054
  %1065 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEELb0EEESA_(ptr noundef nonnull align 8 dereferenceable(8) %104, ptr noundef nonnull align 8 dereferenceable(8) %105) #7
  br i1 %1065, label %1067, label %1066

1066:                                             ; preds = %1064
  store i32 15, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #7
  br label %1196

1067:                                             ; preds = %1064
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #7
  %1068 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %104) #7
  store ptr %1068, ptr %106, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #7
  %1069 = load ptr, ptr %106, align 8, !tbaa !5
  %1070 = getelementptr inbounds %"struct.std::pair.487", ptr %1069, i32 0, i32 0
  %1071 = load i32, ptr %1070, align 4, !tbaa !260
  store i32 %1071, ptr %107, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #7
  %1072 = load ptr, ptr %106, align 8, !tbaa !5
  %1073 = getelementptr inbounds %"struct.std::pair.487", ptr %1072, i32 0, i32 1
  store ptr %1073, ptr %108, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #7
  %1074 = load ptr, ptr %19, align 8, !tbaa !5
  %1075 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1074, i32 0, i32 12
  %1076 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1075) #7
  %1077 = trunc i64 %1076 to i32
  store i32 %1077, ptr %109, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #7
  %1078 = load ptr, ptr %108, align 8, !tbaa !5
  %1079 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta::LocationMeta", ptr %1078, i32 0, i32 0
  %1080 = load i32, ptr %1079, align 4, !tbaa !263
  %1081 = load ptr, ptr %108, align 8, !tbaa !5
  %1082 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta::LocationMeta", ptr %1081, i32 0, i32 1
  %1083 = load i32, ptr %1082, align 4, !tbaa !264
  %1084 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %132, i32 noundef %1080, i32 noundef %1083, i32 noundef 0)
          to label %1085 unwind label %1130

1085:                                             ; preds = %1067
  store i32 %1084, ptr %110, align 4, !tbaa !181
  %1086 = load ptr, ptr %19, align 8, !tbaa !5
  %1087 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1086, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #7
  %1088 = load i32, ptr %110, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %111, i32 noundef %1088)
          to label %1089 unwind label %1134

1089:                                             ; preds = %1085
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1087, ptr noundef nonnull align 4 dereferenceable(4) %111) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #7
  %1090 = load ptr, ptr %19, align 8, !tbaa !5
  %1091 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1090, i32 0, i32 1
  %1092 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1091)
          to label %1093 unwind label %1130

1093:                                             ; preds = %1089
  %1094 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %112, i32 0, i32 0
  store i32 %1092, ptr %1094, align 4
  %1095 = load i32, ptr %109, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #7
  invoke void @_ZN11spirv_cross4joinIJRA12_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %113, ptr noundef nonnull align 1 dereferenceable(12) @.str.135, ptr noundef nonnull align 4 dereferenceable(4) %107)
          to label %1096 unwind label %1138

1096:                                             ; preds = %1093
  %1097 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %112, i32 0, i32 0
  %1098 = load i32, ptr %1097, align 4
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1098, i32 noundef %1095, ptr noundef nonnull align 8 dereferenceable(32) %113)
          to label %1099 unwind label %1142

1099:                                             ; preds = %1096
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #7
  %1100 = load ptr, ptr %19, align 8, !tbaa !5
  %1101 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1100, i32 0, i32 1
  %1102 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1101)
          to label %1103 unwind label %1130

1103:                                             ; preds = %1099
  %1104 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %114, i32 0, i32 0
  store i32 %1102, ptr %1104, align 4
  %1105 = load i32, ptr %109, align 4, !tbaa !181
  %1106 = load i32, ptr %107, align 4, !tbaa !181
  %1107 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %114, i32 0, i32 0
  %1108 = load i32, ptr %1107, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1108, i32 noundef %1105, i32 noundef 30, i32 noundef %1106)
          to label %1109 unwind label %1130

1109:                                             ; preds = %1103
  %1110 = load i32, ptr %107, align 4, !tbaa !181
  %1111 = load i32, ptr %110, align 4, !tbaa !181
  %1112 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %1111)
          to label %1113 unwind label %1130

1113:                                             ; preds = %1109
  %1114 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %132, i32 noundef %1110, ptr noundef nonnull align 8 dereferenceable(336) %1112, i32 noundef %1114, i1 noundef zeroext false)
          to label %1115 unwind label %1130

1115:                                             ; preds = %1113
  %1116 = load ptr, ptr %108, align 8, !tbaa !5
  %1117 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta::LocationMeta", ptr %1116, i32 0, i32 2
  %1118 = load i8, ptr %1117, align 4, !tbaa !265, !range !176, !noundef !177
  %1119 = trunc i8 %1118 to i1
  br i1 %1119, label %1120, label %1147

1120:                                             ; preds = %1115
  %1121 = load ptr, ptr %19, align 8, !tbaa !5
  %1122 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1121, i32 0, i32 1
  %1123 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1122)
          to label %1124 unwind label %1130

1124:                                             ; preds = %1120
  %1125 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %115, i32 0, i32 0
  store i32 %1123, ptr %1125, align 4
  %1126 = load i32, ptr %109, align 4, !tbaa !181
  %1127 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %115, i32 0, i32 0
  %1128 = load i32, ptr %1127, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1128, i32 noundef %1126, i32 noundef 14, i32 noundef 0)
          to label %1129 unwind label %1130

1129:                                             ; preds = %1124
  br label %1147

1130:                                             ; preds = %1186, %1182, %1171, %1167, %1156, %1152, %1124, %1120, %1113, %1109, %1103, %1099, %1089, %1067
  %1131 = landingpad { ptr, i32 }
          cleanup
  %1132 = extractvalue { ptr, i32 } %1131, 0
  store ptr %1132, ptr %10, align 8
  %1133 = extractvalue { ptr, i32 } %1131, 1
  store i32 %1133, ptr %11, align 4
  br label %1195

1134:                                             ; preds = %1085
  %1135 = landingpad { ptr, i32 }
          cleanup
  %1136 = extractvalue { ptr, i32 } %1135, 0
  store ptr %1136, ptr %10, align 8
  %1137 = extractvalue { ptr, i32 } %1135, 1
  store i32 %1137, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #7
  br label %1195

1138:                                             ; preds = %1093
  %1139 = landingpad { ptr, i32 }
          cleanup
  %1140 = extractvalue { ptr, i32 } %1139, 0
  store ptr %1140, ptr %10, align 8
  %1141 = extractvalue { ptr, i32 } %1139, 1
  store i32 %1141, ptr %11, align 4
  br label %1146

1142:                                             ; preds = %1096
  %1143 = landingpad { ptr, i32 }
          cleanup
  %1144 = extractvalue { ptr, i32 } %1143, 0
  store ptr %1144, ptr %10, align 8
  %1145 = extractvalue { ptr, i32 } %1143, 1
  store i32 %1145, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #7
  br label %1146

1146:                                             ; preds = %1142, %1138
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #7
  br label %1195

1147:                                             ; preds = %1129, %1115
  %1148 = load ptr, ptr %108, align 8, !tbaa !5
  %1149 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta::LocationMeta", ptr %1148, i32 0, i32 3
  %1150 = load i8, ptr %1149, align 1, !tbaa !266, !range !176, !noundef !177
  %1151 = trunc i8 %1150 to i1
  br i1 %1151, label %1152, label %1162

1152:                                             ; preds = %1147
  %1153 = load ptr, ptr %19, align 8, !tbaa !5
  %1154 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1153, i32 0, i32 1
  %1155 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1154)
          to label %1156 unwind label %1130

1156:                                             ; preds = %1152
  %1157 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %116, i32 0, i32 0
  store i32 %1155, ptr %1157, align 4
  %1158 = load i32, ptr %109, align 4, !tbaa !181
  %1159 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %116, i32 0, i32 0
  %1160 = load i32, ptr %1159, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1160, i32 noundef %1158, i32 noundef 13, i32 noundef 0)
          to label %1161 unwind label %1130

1161:                                             ; preds = %1156
  br label %1162

1162:                                             ; preds = %1161, %1147
  %1163 = load ptr, ptr %108, align 8, !tbaa !5
  %1164 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta::LocationMeta", ptr %1163, i32 0, i32 4
  %1165 = load i8, ptr %1164, align 2, !tbaa !267, !range !176, !noundef !177
  %1166 = trunc i8 %1165 to i1
  br i1 %1166, label %1167, label %1177

1167:                                             ; preds = %1162
  %1168 = load ptr, ptr %19, align 8, !tbaa !5
  %1169 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1168, i32 0, i32 1
  %1170 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1169)
          to label %1171 unwind label %1130

1171:                                             ; preds = %1167
  %1172 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %117, i32 0, i32 0
  store i32 %1170, ptr %1172, align 4
  %1173 = load i32, ptr %109, align 4, !tbaa !181
  %1174 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %117, i32 0, i32 0
  %1175 = load i32, ptr %1174, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1175, i32 noundef %1173, i32 noundef 16, i32 noundef 0)
          to label %1176 unwind label %1130

1176:                                             ; preds = %1171
  br label %1177

1177:                                             ; preds = %1176, %1162
  %1178 = load ptr, ptr %108, align 8, !tbaa !5
  %1179 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta::LocationMeta", ptr %1178, i32 0, i32 5
  %1180 = load i8, ptr %1179, align 1, !tbaa !268, !range !176, !noundef !177
  %1181 = trunc i8 %1180 to i1
  br i1 %1181, label %1182, label %1192

1182:                                             ; preds = %1177
  %1183 = load ptr, ptr %19, align 8, !tbaa !5
  %1184 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1183, i32 0, i32 1
  %1185 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1184)
          to label %1186 unwind label %1130

1186:                                             ; preds = %1182
  %1187 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %118, i32 0, i32 0
  store i32 %1185, ptr %1187, align 4
  %1188 = load i32, ptr %109, align 4, !tbaa !181
  %1189 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %118, i32 0, i32 0
  %1190 = load i32, ptr %1189, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1190, i32 noundef %1188, i32 noundef 17, i32 noundef 0)
          to label %1191 unwind label %1130

1191:                                             ; preds = %1186
  br label %1192

1192:                                             ; preds = %1191, %1177
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #7
  br label %1193

1193:                                             ; preds = %1192
  %1194 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %104) #7
  br label %1064

1195:                                             ; preds = %1146, %1134, %1130
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #7
  br label %1338

1196:                                             ; preds = %1066
  call void @llvm.lifetime.start.p0(i64 24, ptr %119) #7
  %1197 = load ptr, ptr %19, align 8, !tbaa !5
  %1198 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  %1199 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1198, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %120) #7
  %1200 = load i32, ptr %18, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %120, i32 noundef %1200)
          to label %1201 unwind label %1282

1201:                                             ; preds = %1196
  %1202 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1199, ptr noundef nonnull align 4 dereferenceable(4) %120)
          to label %1203 unwind label %1282

1203:                                             ; preds = %1201
  invoke void @_ZN11spirv_cross11CompilerMSL12MemberSorterC1ERNS_8SPIRTypeERNS_4MetaENS1_10SortAspectE(ptr noundef nonnull align 8 dereferenceable(20) %119, ptr noundef nonnull align 8 dereferenceable(336) %1197, ptr noundef nonnull align 8 dereferenceable(488) %1202, i32 noundef 0)
          to label %1204 unwind label %1282

1204:                                             ; preds = %1203
  call void @llvm.lifetime.end.p0(i64 4, ptr %120) #7
  invoke void @_ZN11spirv_cross11CompilerMSL12MemberSorter4sortEv(ptr noundef nonnull align 8 dereferenceable(20) %119)
          to label %1205 unwind label %1286

1205:                                             ; preds = %1204
  %1206 = load i32, ptr %6, align 4, !tbaa !9
  %1207 = load i32, ptr %18, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross11CompilerMSL31fix_up_interface_member_indicesEN3spv12StorageClassEj(ptr noundef nonnull align 8 dereferenceable(12482) %132, i32 noundef %1206, i32 noundef %1207)
          to label %1208 unwind label %1286

1208:                                             ; preds = %1205
  %1209 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %1210 unwind label %1286

1210:                                             ; preds = %1208
  br i1 %1209, label %1211, label %1326

1211:                                             ; preds = %1210
  %1212 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 37
  %1213 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1212, i32 0, i32 49
  %1214 = load i8, ptr %1213, align 2, !tbaa !180, !range !176, !noundef !177
  %1215 = trunc i8 %1214 to i1
  br i1 %1215, label %1326, label %1216

1216:                                             ; preds = %1211
  %1217 = load i32, ptr %6, align 4, !tbaa !9
  %1218 = icmp eq i32 %1217, 1
  br i1 %1218, label %1219, label %1326

1219:                                             ; preds = %1216
  %1220 = load i8, ptr %7, align 1, !tbaa !11, !range !176, !noundef !177
  %1221 = trunc i8 %1220 to i1
  br i1 %1221, label %1222, label %1326

1222:                                             ; preds = %1219
  %1223 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %132, i32 0, i32 59
  %1224 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1223)
          to label %1225 unwind label %1286

1225:                                             ; preds = %1222
  %1226 = icmp ne i32 %1224, 0
  br i1 %1226, label %1227, label %1326

1227:                                             ; preds = %1225
  call void @llvm.lifetime.start.p0(i64 4, ptr %121) #7
  %1228 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  %1229 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1228, i32 noundef 1)
          to label %1230 unwind label %1290

1230:                                             ; preds = %1227
  store i32 %1229, ptr %121, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #7
  %1231 = load i32, ptr %121, align 4, !tbaa !181
  %1232 = load ptr, ptr %19, align 8, !tbaa !5
  %1233 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 noundef %1231, ptr noundef nonnull align 8 dereferenceable(336) %1232)
          to label %1234 unwind label %1294

1234:                                             ; preds = %1230
  store ptr %1233, ptr %122, align 8, !tbaa !5
  %1235 = load ptr, ptr %122, align 8, !tbaa !5
  %1236 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1235, i32 0, i32 2
  store i32 21, ptr %1236, align 8, !tbaa !183
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #7
  %1237 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %132)
          to label %1238 unwind label %1298

1238:                                             ; preds = %1234
  %1239 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1237, i32 0, i32 1
  %1240 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1239)
          to label %1241 unwind label %1298

1241:                                             ; preds = %1238
  %1242 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %123, i32 0, i32 0
  store i32 %1240, ptr %1242, align 4
  %1243 = load ptr, ptr %122, align 8, !tbaa !5
  %1244 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1243, i32 0, i32 15
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1244, ptr align 4 %123, i64 4, i1 false), !tbaa.struct !196
  %1245 = load ptr, ptr %122, align 8, !tbaa !5
  %1246 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1245, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1246, ptr align 4 %1244, i64 4, i1 false), !tbaa.struct !196
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #7
  %1247 = load i32, ptr %6, align 4, !tbaa !9
  %1248 = load ptr, ptr %122, align 8, !tbaa !5
  %1249 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1248, i32 0, i32 11
  store i32 %1247, ptr %1249, align 8, !tbaa !195
  %1250 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  %1251 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1250, i32 0, i32 3
  %1252 = load ptr, ptr %19, align 8, !tbaa !5
  %1253 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1252, i32 0, i32 1
  %1254 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %1251, ptr noundef nonnull align 4 dereferenceable(4) %1253)
          to label %1255 unwind label %1294

1255:                                             ; preds = %1241
  %1256 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %132, i32 0, i32 1
  %1257 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1256, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #7
  %1258 = load i32, ptr %121, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %124, i32 noundef %1258)
          to label %1259 unwind label %1302

1259:                                             ; preds = %1255
  %1260 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1257, ptr noundef nonnull align 4 dereferenceable(4) %124)
          to label %1261 unwind label %1302

1261:                                             ; preds = %1259
  %1262 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %1260, ptr noundef nonnull align 8 dereferenceable(488) %1254)
          to label %1263 unwind label %1302

1263:                                             ; preds = %1261
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %125) #7
  %1264 = load ptr, ptr %19, align 8, !tbaa !5
  %1265 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1264, i32 0, i32 12
  %1266 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1265) #7
  %1267 = trunc i64 %1266 to i32
  store i32 %1267, ptr %125, align 4, !tbaa !181
  %1268 = load ptr, ptr %19, align 8, !tbaa !5
  %1269 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1268, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #7
  %1270 = load i32, ptr %121, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %126, i32 noundef %1270)
          to label %1271 unwind label %1306

1271:                                             ; preds = %1263
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1269, ptr noundef nonnull align 4 dereferenceable(4) %126) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #7
  %1272 = load ptr, ptr %19, align 8, !tbaa !5
  %1273 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1272, i32 0, i32 1
  %1274 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1273)
          to label %1275 unwind label %1310

1275:                                             ; preds = %1271
  %1276 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %127, i32 0, i32 0
  store i32 %1274, ptr %1276, align 4
  %1277 = load i32, ptr %125, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 32, ptr %128) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %129) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %129) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %128, ptr noundef @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %129)
          to label %1278 unwind label %1314

1278:                                             ; preds = %1275
  %1279 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %127, i32 0, i32 0
  %1280 = load i32, ptr %1279, align 4
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1280, i32 noundef %1277, ptr noundef nonnull align 8 dereferenceable(32) %128)
          to label %1281 unwind label %1318

1281:                                             ; preds = %1278
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %129) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %129) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %128) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %121) #7
  br label %1326

1282:                                             ; preds = %1203, %1201, %1196
  %1283 = landingpad { ptr, i32 }
          cleanup
  %1284 = extractvalue { ptr, i32 } %1283, 0
  store ptr %1284, ptr %10, align 8
  %1285 = extractvalue { ptr, i32 } %1283, 1
  store i32 %1285, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %120) #7
  br label %1337

1286:                                             ; preds = %1331, %1329, %1222, %1208, %1205, %1204
  %1287 = landingpad { ptr, i32 }
          cleanup
  %1288 = extractvalue { ptr, i32 } %1287, 0
  store ptr %1288, ptr %10, align 8
  %1289 = extractvalue { ptr, i32 } %1287, 1
  store i32 %1289, ptr %11, align 4
  br label %1337

1290:                                             ; preds = %1227
  %1291 = landingpad { ptr, i32 }
          cleanup
  %1292 = extractvalue { ptr, i32 } %1291, 0
  store ptr %1292, ptr %10, align 8
  %1293 = extractvalue { ptr, i32 } %1291, 1
  store i32 %1293, ptr %11, align 4
  br label %1325

1294:                                             ; preds = %1241, %1230
  %1295 = landingpad { ptr, i32 }
          cleanup
  %1296 = extractvalue { ptr, i32 } %1295, 0
  store ptr %1296, ptr %10, align 8
  %1297 = extractvalue { ptr, i32 } %1295, 1
  store i32 %1297, ptr %11, align 4
  br label %1324

1298:                                             ; preds = %1238, %1234
  %1299 = landingpad { ptr, i32 }
          cleanup
  %1300 = extractvalue { ptr, i32 } %1299, 0
  store ptr %1300, ptr %10, align 8
  %1301 = extractvalue { ptr, i32 } %1299, 1
  store i32 %1301, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #7
  br label %1324

1302:                                             ; preds = %1261, %1259, %1255
  %1303 = landingpad { ptr, i32 }
          cleanup
  %1304 = extractvalue { ptr, i32 } %1303, 0
  store ptr %1304, ptr %10, align 8
  %1305 = extractvalue { ptr, i32 } %1303, 1
  store i32 %1305, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #7
  br label %1324

1306:                                             ; preds = %1263
  %1307 = landingpad { ptr, i32 }
          cleanup
  %1308 = extractvalue { ptr, i32 } %1307, 0
  store ptr %1308, ptr %10, align 8
  %1309 = extractvalue { ptr, i32 } %1307, 1
  store i32 %1309, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #7
  br label %1323

1310:                                             ; preds = %1271
  %1311 = landingpad { ptr, i32 }
          cleanup
  %1312 = extractvalue { ptr, i32 } %1311, 0
  store ptr %1312, ptr %10, align 8
  %1313 = extractvalue { ptr, i32 } %1311, 1
  store i32 %1313, ptr %11, align 4
  br label %1323

1314:                                             ; preds = %1275
  %1315 = landingpad { ptr, i32 }
          cleanup
  %1316 = extractvalue { ptr, i32 } %1315, 0
  store ptr %1316, ptr %10, align 8
  %1317 = extractvalue { ptr, i32 } %1315, 1
  store i32 %1317, ptr %11, align 4
  br label %1322

1318:                                             ; preds = %1278
  %1319 = landingpad { ptr, i32 }
          cleanup
  %1320 = extractvalue { ptr, i32 } %1319, 0
  store ptr %1320, ptr %10, align 8
  %1321 = extractvalue { ptr, i32 } %1319, 1
  store i32 %1321, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #7
  br label %1322

1322:                                             ; preds = %1318, %1314
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %129) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %129) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %128) #7
  br label %1323

1323:                                             ; preds = %1322, %1310, %1306
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #7
  br label %1324

1324:                                             ; preds = %1323, %1302, %1298, %1294
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #7
  br label %1325

1325:                                             ; preds = %1324, %1290
  call void @llvm.lifetime.end.p0(i64 4, ptr %121) #7
  br label %1337

1326:                                             ; preds = %1281, %1225, %1219, %1216, %1211, %1210
  %1327 = load i32, ptr %6, align 4, !tbaa !9
  %1328 = icmp eq i32 %1327, 1
  br i1 %1328, label %1329, label %1335

1329:                                             ; preds = %1326
  %1330 = load i32, ptr %22, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %130, i32 noundef %1330)
          to label %1331 unwind label %1286

1331:                                             ; preds = %1329
  %1332 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %130, i32 0, i32 0
  %1333 = load i32, ptr %1332, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %132, i32 %1333, i32 noundef 24, i32 noundef 0)
          to label %1334 unwind label %1286

1334:                                             ; preds = %1331
  br label %1335

1335:                                             ; preds = %1334, %1326
  %1336 = load i32, ptr %22, align 4, !tbaa !181
  store i32 %1336, ptr %4, align 4
  store i32 1, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %119) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  br label %1342

1337:                                             ; preds = %1325, %1286, %1282
  call void @llvm.lifetime.end.p0(i64 24, ptr %119) #7
  br label %1338

1338:                                             ; preds = %1337, %1195, %1052, %863, %636, %591, %541, %339, %323, %298, %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  br label %1339

1339:                                             ; preds = %1338, %262, %258
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %1340

1340:                                             ; preds = %1339, %254, %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  br label %1341

1341:                                             ; preds = %1340, %246
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  br label %1344

1342:                                             ; preds = %1335, %197
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  call void @_ZN11spirv_cross11CompilerMSL18InterfaceBlockMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(58) %13) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  call void @_ZN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %8) #7
  call void @llvm.lifetime.end.p0(i64 88, ptr %8) #7
  %1343 = load i32, ptr %4, align 4
  ret i32 %1343

1344:                                             ; preds = %1341, %206, %202
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  call void @_ZN11spirv_cross11CompilerMSL18InterfaceBlockMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(58) %13) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  br label %1345

1345:                                             ; preds = %1344, %198
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  call void @_ZN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %8) #7
  call void @llvm.lifetime.end.p0(i64 88, ptr %8) #7
  br label %1346

1346:                                             ; preds = %1345
  %1347 = load ptr, ptr %10, align 8
  %1348 = load i32, ptr %11, align 4
  %1349 = insertvalue { ptr, i32 } poison, ptr %1347, 0
  %1350 = insertvalue { ptr, i32 } %1349, i32 %1348, 1
  resume { ptr, i32 } %1350

1351:                                             ; preds = %1043, %854
  unreachable
}

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176)) #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) #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_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_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_1EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEELb0EEESA_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #0

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

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

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

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

declare void @_ZN11spirv_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)) #4

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_8EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(64)) #2 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_2D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_5D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_6D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_7D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEES8_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #0

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL12MemberSorter4sortEv(ptr noundef nonnull align 8 dereferenceable(20)) #2 align 2

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

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

declare void @_ZN11spirv_cross11CompilerMSL12MemberSorterC1ERNS_8SPIRTypeERNS_4MetaENS1_10SortAspectE(ptr, ptr, ptr, i32)

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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 = { nounwind }

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

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


; 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.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] }
%"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.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%class.anon.521 = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"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.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.522 = type { ptr, %"class.std::__cxx11::basic_string" }
%class.anon.523 = type { ptr, %"class.std::__cxx11::basic_string" }
%class.anon.524 = type { ptr, %"class.std::__cxx11::basic_string" }
%"class.spirv_cross::TypedID.350" = type { i32 }
%class.anon.525 = type { ptr, %"class.std::__cxx11::basic_string" }
%class.anon.526 = type { ptr, %"class.std::__cxx11::basic_string" }
%class.anon.527 = type { ptr, %"class.std::__cxx11::basic_string" }
%class.anon.528 = type { ptr, %"class.std::__cxx11::basic_string" }
%class.anon.529 = type { ptr, %"class.std::__cxx11::basic_string" }
%"struct.std::_Rb_tree_iterator.530" = type { ptr }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Node_iterator.471" = type { %"struct.std::__detail::_Node_iterator_base.472" }
%"struct.std::__detail::_Node_iterator_base.472" = type { ptr }
%"struct.spirv_cross::CompilerMSL::MemberSorter" = type <{ ptr, ptr, i32, [4 x i8] }>
%"class.std::allocator.71" = type { i8 }

@.str.8 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [12 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

; 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 dso_local void @_ZN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #0 align 2

; 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_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 void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #0 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #3

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare 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 dso_local noundef ptr @_ZN11spirv_cross10VectorViewIPNS_12SPIRVariableEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixERSA_(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 noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i1 noundef zeroext %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca i8, align 1
  %6 = alloca %"class.spirv_cross::SmallVector.377", align 8
  %7 = alloca i8, align 1
  %8 = alloca i8, align 1
  %9 = alloca %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", align 8
  %10 = alloca i8, align 1
  %11 = alloca %class.anon.521, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.spirv_cross::TypedID.413", align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca %"class.spirv_cross::TypedID.413", align 4
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::function.489", align 8
  %20 = alloca %class.anon.522, align 8
  %21 = alloca %"class.std::function.489", align 8
  %22 = alloca %class.anon.523, align 8
  %23 = alloca %"class.std::function.489", align 8
  %24 = alloca %class.anon.524, align 8
  %25 = alloca %"class.spirv_cross::TypedID.350", align 4
  %26 = alloca %"class.spirv_cross::TypedID.413", align 4
  %27 = alloca %"class.std::function.489", align 8
  %28 = alloca %class.anon.525, align 8
  %29 = alloca %"class.std::function.489", align 8
  %30 = alloca %class.anon.526, align 8
  %31 = alloca %"class.std::function.489", align 8
  %32 = alloca %class.anon.527, align 8
  %33 = alloca %"class.std::function.489", align 8
  %34 = alloca %class.anon.528, align 8
  %35 = alloca %"class.std::function.489", align 8
  %36 = alloca %class.anon.529, align 8
  %37 = alloca %"class.spirv_cross::TypedID.413", align 4
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.spirv_cross::TypedID.413", align 4
  %42 = alloca %"struct.std::_Rb_tree_iterator.530", align 8
  %43 = alloca %"struct.std::_Rb_tree_iterator.530", align 8
  %44 = alloca i32, align 4
  %45 = alloca %"struct.spirv_cross::SPIRType", align 8
  %46 = alloca i32, align 4
  %47 = alloca i8, align 1
  %48 = alloca %"class.spirv_cross::TypedID.414", align 4
  %49 = alloca %"class.spirv_cross::TypedID.413", align 4
  %50 = alloca %"class.spirv_cross::TypedID.414", align 4
  %51 = alloca %"class.spirv_cross::TypedID.413", align 4
  %52 = alloca %"class.spirv_cross::TypedID.413", align 4
  %53 = alloca %"class.spirv_cross::TypedID.413", align 4
  %54 = alloca %"struct.std::_Rb_tree_iterator.530", align 8
  %55 = alloca %"struct.std::_Rb_tree_iterator.530", align 8
  %56 = alloca i32, align 4
  %57 = alloca %"struct.spirv_cross::SPIRType", align 8
  %58 = alloca i32, align 4
  %59 = alloca i8, align 1
  %60 = alloca %"class.spirv_cross::TypedID.414", align 4
  %61 = alloca %"class.spirv_cross::TypedID.414", align 4
  %62 = alloca %"class.spirv_cross::TypedID.413", align 4
  %63 = alloca %"class.spirv_cross::TypedID.413", align 4
  %64 = alloca %"struct.std::__detail::_Node_iterator.471", align 8
  %65 = alloca %"struct.std::__detail::_Node_iterator.471", align 8
  %66 = alloca i32, align 4
  %67 = alloca %"class.spirv_cross::TypedID.414", align 4
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"struct.spirv_cross::CompilerMSL::MemberSorter", align 8
  %70 = alloca %"class.spirv_cross::TypedID.413", align 4
  %71 = alloca %"class.spirv_cross::TypedID.413", align 4
  %72 = alloca %"class.spirv_cross::TypedID.414", align 4
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::allocator.71", align 1
  %75 = alloca %"class.spirv_cross::TypedID.413", align 4
  store i32 %1, ptr %4, align 4, !tbaa !5
  %76 = zext i1 %2 to i8
  store i8 %76, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %6) #6
  call void @_ZN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #6
  %77 = icmp eq i32 %1, 3
  br i1 %77, label %80, label %78

78:                                               ; preds = %3
  %79 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %80 unwind label %128

80:                                               ; preds = %78, %3
  %81 = phi i1 [ true, %3 ], [ %79, %78 ]
  %82 = zext i1 %81 to i8
  store i8 %82, ptr %7, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #6
  store i8 0, ptr %8, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #6
  call void @_ZN11spirv_cross11CompilerMSL18InterfaceBlockMetaC2Ev(ptr noundef nonnull align 8 dereferenceable(58) %9) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #6
  %83 = load i32, ptr %4, align 4, !tbaa !5
  %84 = icmp eq i32 %83, 1
  br i1 %84, label %85, label %89

85:                                               ; preds = %80
  %86 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %87 unwind label %130

87:                                               ; preds = %85
  %88 = icmp eq i32 %86, 0
  br i1 %88, label %.thread, label %thread-pre-split

thread-pre-split:                                 ; preds = %87
  %.pr = load i32, ptr %4, align 4, !tbaa !5
  br label %89

89:                                               ; preds = %thread-pre-split, %80
  %90 = phi i32 [ %.pr, %thread-pre-split ], [ %83, %80 ]
  %91 = icmp eq i32 %90, 3
  br i1 %91, label %92, label %.thread

92:                                               ; preds = %89
  %93 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %94 unwind label %130

94:                                               ; preds = %92
  %95 = icmp eq i32 %93, 4
  br i1 %95, label %.thread, label %96

96:                                               ; preds = %94
  %.pre = load i32, ptr %4, align 4, !tbaa !5
  %97 = icmp eq i32 %.pre, 3
  br i1 %97, label %98, label %.thread

98:                                               ; preds = %96
  %99 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %100 unwind label %130

100:                                              ; preds = %98
  %101 = icmp eq i32 %99, 0
  br i1 %101, label %102, label %.thread

102:                                              ; preds = %100
  %103 = getelementptr inbounds i8, ptr %0, i64 11188
  %104 = load i8, ptr %103, align 4, !tbaa !11, !range !175, !noundef !176
  br label %.thread

.thread:                                          ; preds = %89, %96, %100, %102, %94, %87
  %105 = phi i8 [ 1, %94 ], [ 1, %87 ], [ 0, %100 ], [ 0, %96 ], [ %104, %102 ], [ 0, %89 ]
  store i8 %105, ptr %10, align 1, !tbaa !9
  %106 = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #6
  store ptr %4, ptr %11, align 8, !tbaa !177
  %107 = getelementptr inbounds i8, ptr %11, i64 8
  store ptr %0, ptr %107, align 8, !tbaa !178
  %108 = getelementptr inbounds i8, ptr %11, i64 16
  store ptr %5, ptr %108, align 8, !tbaa !177
  %109 = getelementptr inbounds i8, ptr %11, i64 24
  store ptr %7, ptr %109, align 8, !tbaa !177
  %110 = getelementptr inbounds i8, ptr %11, i64 32
  store ptr %8, ptr %110, align 8, !tbaa !177
  %111 = getelementptr inbounds i8, ptr %11, i64 40
  store ptr %6, ptr %111, align 8, !tbaa !177
  %112 = getelementptr inbounds i8, ptr %11, i64 48
  store ptr %10, ptr %112, align 8, !tbaa !177
  %113 = getelementptr inbounds i8, ptr %11, i64 56
  store ptr %9, ptr %113, align 8, !tbaa !177
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_8EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %106, ptr noundef nonnull align 8 dereferenceable(64) %11)
          to label %114 unwind label %132

114:                                              ; preds = %.thread
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #6
  %115 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIPNS_12SPIRVariableEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  br i1 %115, label %116, label %134

116:                                              ; preds = %114
  %117 = getelementptr inbounds i8, ptr %0, i64 10150
  %118 = load i8, ptr %117, align 2, !tbaa !180, !range !175, !noundef !176
  %119 = trunc nuw i8 %118 to i1
  %120 = load i32, ptr %4, align 4
  %121 = icmp ne i32 %120, 1
  %or.cond.not = select i1 %119, i1 true, i1 %121
  br i1 %or.cond.not, label %723, label %122

122:                                              ; preds = %116
  %123 = load i8, ptr %5, align 1, !tbaa !9, !range !175, !noundef !176
  %124 = trunc nuw i8 %123 to i1
  br i1 %124, label %125, label %723

125:                                              ; preds = %122
  %126 = getelementptr inbounds i8, ptr %0, i64 11132
  %127 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %126)
  %.not = icmp eq i32 %127, 0
  br i1 %.not, label %723, label %134

128:                                              ; preds = %78
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %725

130:                                              ; preds = %98, %92, %85
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %724

132:                                              ; preds = %.thread
  %133 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #6
  br label %724

134:                                              ; preds = %125, %114
  %135 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %106, i32 noundef 3)
          to label %136 unwind label %156

136:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #6
  %137 = add i32 %135, 1
  store i32 %135, ptr %12, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #6
  store i32 30, ptr %13, align 4, !tbaa !182
  %138 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %135, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %139 unwind label %158

139:                                              ; preds = %136
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #6
  %140 = getelementptr inbounds i8, ptr %138, i64 16
  store i32 15, ptr %140, align 8, !tbaa !183
  %141 = load i32, ptr %4, align 4, !tbaa !5
  %142 = getelementptr inbounds i8, ptr %138, i64 128
  store i32 %141, ptr %142, align 8, !tbaa !195
  %143 = load i32, ptr %12, align 4, !tbaa !181
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %14, i32 noundef %143)
  %144 = load i32, ptr %14, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %144, i32 noundef 2, i32 noundef 0)
          to label %145 unwind label %160

145:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #6
  store i32 %137, ptr %15, align 4, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #6
  store i32 0, ptr %16, align 4, !tbaa !181
  %146 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjRN3spv12StorageClassEiEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %137, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 4 dereferenceable(4) %16)
          to label %147 unwind label %162

147:                                              ; preds = %145
  %148 = add i32 %135, 2
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef %148)
  %149 = getelementptr inbounds i8, ptr %146, i64 24
  %150 = load i32, ptr %17, align 4, !tbaa !181
  store i32 %150, ptr %149, align 8, !tbaa !181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  %151 = getelementptr inbounds i8, ptr %0, i64 1744
  %152 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %151)
  %153 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %152)
          to label %154 unwind label %164

154:                                              ; preds = %147
  %155 = load i32, ptr %4, align 4, !tbaa !5
  switch i32 %155, label %308 [
    i32 1, label %166
    i32 3, label %210
  ]

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

158:                                              ; preds = %136
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #6
  br label %722

160:                                              ; preds = %139
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %722

162:                                              ; preds = %145
  %163 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #6
  br label %721

164:                                              ; preds = %370, %._crit_edge277, %318, %210, %171, %166, %147
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %720

166:                                              ; preds = %154
  %167 = load i8, ptr %5, align 1, !tbaa !9, !range !175, !noundef !176
  %168 = trunc nuw i8 %167 to i1
  %.v216 = select i1 %168, i64 11296, i64 11232
  %169 = getelementptr inbounds i8, ptr %0, i64 %.v216
  %170 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(32) %169)
          to label %171 unwind label %164

171:                                              ; preds = %166
  %172 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %173 unwind label %164

173:                                              ; preds = %171
  switch i32 %172, label %308 [
    i32 1, label %174
    i32 2, label %184
  ]

174:                                              ; preds = %173
  %175 = getelementptr inbounds i8, ptr %153, i64 704
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %20) #6
  store ptr %0, ptr %20, align 8, !tbaa !196
  %176 = getelementptr inbounds i8, ptr %20, i64 8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %176, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %177 unwind label %179

177:                                              ; preds = %174
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(40) %20)
          to label %178 unwind label %181

178:                                              ; preds = %177
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %175, ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %20) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  br label %308

179:                                              ; preds = %174
  %180 = landingpad { ptr, i32 }
          cleanup
  br label %183

181:                                              ; preds = %177
  %182 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %20) #6
  br label %183

183:                                              ; preds = %181, %179
  %.pn221 = phi { ptr, i32 } [ %182, %181 ], [ %180, %179 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  br label %720

184:                                              ; preds = %173
  %185 = getelementptr inbounds i8, ptr %0, i64 10150
  %186 = load i8, ptr %185, align 2, !tbaa !180, !range !175, !noundef !176
  %187 = trunc nuw i8 %186 to i1
  br i1 %187, label %188, label %308

188:                                              ; preds = %184
  %189 = load i8, ptr %5, align 1, !tbaa !9, !range !175, !noundef !176
  %190 = trunc nuw i8 %189 to i1
  %191 = getelementptr inbounds i8, ptr %153, i64 704
  br i1 %190, label %192, label %201

192:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %22) #6
  store ptr %0, ptr %22, align 8, !tbaa !198
  %193 = getelementptr inbounds i8, ptr %22, i64 8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %193, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %194 unwind label %196

194:                                              ; preds = %192
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(40) %22)
          to label %195 unwind label %198

195:                                              ; preds = %194
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %191, ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %22) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  br label %308

196:                                              ; preds = %192
  %197 = landingpad { ptr, i32 }
          cleanup
  br label %200

198:                                              ; preds = %194
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %22) #6
  br label %200

200:                                              ; preds = %198, %196
  %.pn219 = phi { ptr, i32 } [ %199, %198 ], [ %197, %196 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  br label %720

201:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %24) #6
  store ptr %0, ptr %24, align 8, !tbaa !200
  %202 = getelementptr inbounds i8, ptr %24, i64 8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %202, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %203 unwind label %205

203:                                              ; preds = %201
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(40) %24)
          to label %204 unwind label %207

204:                                              ; preds = %203
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %191, ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_2D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %24) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  br label %308

205:                                              ; preds = %201
  %206 = landingpad { ptr, i32 }
          cleanup
  br label %209

207:                                              ; preds = %203
  %208 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_2D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %24) #6
  br label %209

209:                                              ; preds = %207, %205
  %.pn217 = phi { ptr, i32 } [ %208, %207 ], [ %206, %205 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  br label %720

210:                                              ; preds = %154
  %211 = load i8, ptr %5, align 1, !tbaa !9, !range !175, !noundef !176
  %212 = trunc nuw i8 %211 to i1
  %.v = select i1 %212, i64 11328, i64 11264
  %213 = getelementptr inbounds i8, ptr %0, i64 %.v
  %214 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(32) %213)
          to label %215 unwind label %164

215:                                              ; preds = %210
  %216 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL29get_is_rasterization_disabledEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %217 unwind label %229

217:                                              ; preds = %215
  %218 = load i32, ptr %15, align 4
  %219 = select i1 %216, i32 0, i32 %218
  %220 = getelementptr inbounds i8, ptr %0, i64 11188
  %221 = load i8, ptr %220, align 4, !tbaa !11, !range !175, !noundef !176
  %222 = trunc nuw i8 %221 to i1
  br i1 %222, label %250, label %223

223:                                              ; preds = %217
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %25, i32 noundef %218)
  %224 = load i32, ptr %25, align 4
  call void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %153, i32 %224)
  %225 = getelementptr inbounds i8, ptr %153, i64 456
  %226 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %225) #6
  %227 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %225) #6
  %.not204271 = icmp eq ptr %226, %227
  br i1 %.not204271, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %248, %223
  %228 = getelementptr inbounds i8, ptr %0, i64 10920
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %228, ptr noundef nonnull align 4 dereferenceable(4) %15) #6
  br label %308

229:                                              ; preds = %215
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %720

231:                                              ; preds = %250
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %720

.lr.ph:                                           ; preds = %223, %248
  %.0197272 = phi ptr [ %249, %248 ], [ %226, %223 ]
  %233 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0197272)
  %234 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %233)
          to label %235 unwind label %246

235:                                              ; preds = %.lr.ph
  %236 = getelementptr inbounds i8, ptr %234, i64 12
  %237 = load i32, ptr %236, align 4, !tbaa !202
  switch i32 %237, label %248 [
    i32 4, label %243
    i32 6, label %238
  ]

238:                                              ; preds = %235
  %239 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0197272)
  %240 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %225) #6
  %241 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %240)
  %242 = icmp eq i32 %239, %241
  br i1 %242, label %243, label %248

243:                                              ; preds = %235, %238
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef %219)
  %244 = getelementptr inbounds i8, ptr %234, i64 36
  %245 = load i32, ptr %26, align 4, !tbaa !181
  store i32 %245, ptr %244, align 4, !tbaa !181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #6
  br label %248

246:                                              ; preds = %.lr.ph
  %247 = landingpad { ptr, i32 }
          cleanup
  br label %720

248:                                              ; preds = %235, %243, %238
  %249 = getelementptr inbounds i8, ptr %.0197272, i64 4
  %.not204 = icmp eq ptr %249, %227
  br i1 %.not204, label %._crit_edge, label %.lr.ph

250:                                              ; preds = %217
  %251 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %252 unwind label %231

252:                                              ; preds = %250
  switch i32 %251, label %308 [
    i32 0, label %253
    i32 2, label %253
    i32 1, label %263
  ]

253:                                              ; preds = %252, %252
  %254 = getelementptr inbounds i8, ptr %153, i64 704
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %28) #6
  store ptr %0, ptr %28, align 8, !tbaa !224
  %255 = getelementptr inbounds i8, ptr %28, i64 8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %255, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %256 unwind label %258

256:                                              ; preds = %253
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(40) %28)
          to label %257 unwind label %260

257:                                              ; preds = %256
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %254, ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %28) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  br label %308

258:                                              ; preds = %253
  %259 = landingpad { ptr, i32 }
          cleanup
  br label %262

260:                                              ; preds = %256
  %261 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %28) #6
  br label %262

262:                                              ; preds = %260, %258
  %.pn212 = phi { ptr, i32 } [ %261, %260 ], [ %259, %258 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  br label %720

263:                                              ; preds = %252
  %264 = getelementptr inbounds i8, ptr %0, i64 10149
  %265 = load i8, ptr %264, align 1, !tbaa !226, !range !175, !noundef !176
  %266 = trunc nuw i8 %265 to i1
  %267 = load i8, ptr %5, align 1, !tbaa !9, !range !175, !noundef !176
  %268 = trunc nuw i8 %267 to i1
  %269 = getelementptr inbounds i8, ptr %153, i64 704
  br i1 %266, label %270, label %289

270:                                              ; preds = %263
  br i1 %268, label %271, label %280

271:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %30) #6
  store ptr %0, ptr %30, align 8, !tbaa !227
  %272 = getelementptr inbounds i8, ptr %30, i64 8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %272, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %273 unwind label %275

273:                                              ; preds = %271
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 8 dereferenceable(40) %30)
          to label %274 unwind label %277

274:                                              ; preds = %273
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %269, ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %30) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  br label %308

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

277:                                              ; preds = %273
  %278 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %30) #6
  br label %279

279:                                              ; preds = %277, %275
  %.pn210 = phi { ptr, i32 } [ %278, %277 ], [ %276, %275 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  br label %720

280:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %32) #6
  store ptr %0, ptr %32, align 8, !tbaa !229
  %281 = getelementptr inbounds i8, ptr %32, i64 8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %282 unwind label %284

282:                                              ; preds = %280
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(40) %32)
          to label %283 unwind label %286

283:                                              ; preds = %282
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %269, ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_5D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %32) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  br label %308

284:                                              ; preds = %280
  %285 = landingpad { ptr, i32 }
          cleanup
  br label %288

286:                                              ; preds = %282
  %287 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_5D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %32) #6
  br label %288

288:                                              ; preds = %286, %284
  %.pn208 = phi { ptr, i32 } [ %287, %286 ], [ %285, %284 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  br label %720

289:                                              ; preds = %263
  br i1 %268, label %290, label %299

290:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %34) #6
  store ptr %0, ptr %34, align 8, !tbaa !231
  %291 = getelementptr inbounds i8, ptr %34, i64 8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %291, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %292 unwind label %294

292:                                              ; preds = %290
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(40) %34)
          to label %293 unwind label %296

293:                                              ; preds = %292
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %269, ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_6D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %34) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #6
  br label %308

294:                                              ; preds = %290
  %295 = landingpad { ptr, i32 }
          cleanup
  br label %298

296:                                              ; preds = %292
  %297 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_6D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %34) #6
  br label %298

298:                                              ; preds = %296, %294
  %.pn206 = phi { ptr, i32 } [ %297, %296 ], [ %295, %294 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #6
  br label %720

299:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %36) #6
  store ptr %0, ptr %36, align 8, !tbaa !233
  %300 = getelementptr inbounds i8, ptr %36, i64 8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %300, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %301 unwind label %303

301:                                              ; preds = %299
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(40) %36)
          to label %302 unwind label %305

302:                                              ; preds = %301
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %269, ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_7D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %36) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  br label %308

303:                                              ; preds = %299
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %307

305:                                              ; preds = %301
  %306 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_7D2Ev"(ptr noundef nonnull align 8 dereferenceable(40) %36) #6
  br label %307

307:                                              ; preds = %305, %303
  %.pn = phi { ptr, i32 } [ %306, %305 ], [ %304, %303 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  br label %720

308:                                              ; preds = %._crit_edge, %252, %283, %274, %302, %293, %257, %154, %178, %184, %204, %195, %173
  %309 = load i32, ptr %12, align 4, !tbaa !181
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %37, i32 noundef %309)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #6
  %310 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %151)
  %311 = load ptr, ptr %0, align 8, !tbaa !235
  %312 = getelementptr inbounds i8, ptr %311, i64 48
  %313 = load ptr, ptr %312, align 8
  invoke void %313(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %310, i1 noundef zeroext true)
          to label %314 unwind label %327

314:                                              ; preds = %308
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull @.str.76)
          to label %315 unwind label %329

315:                                              ; preds = %314
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %316 unwind label %331

316:                                              ; preds = %315
  %317 = load i32, ptr %37, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %317, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %318 unwind label %333

318:                                              ; preds = %316
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  %319 = load i32, ptr %15, align 4, !tbaa !181
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %41, i32 noundef %319)
  %320 = load i32, ptr %41, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %320, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %321 unwind label %164

321:                                              ; preds = %318
  %322 = call noundef ptr @_ZN11spirv_cross10VectorViewIPNS_12SPIRVariableEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  %323 = call noundef ptr @_ZN11spirv_cross10VectorViewIPNS_12SPIRVariableEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  %.not227273 = icmp eq ptr %322, %323
  br i1 %.not227273, label %._crit_edge277, label %.lr.ph276

.lr.ph276:                                        ; preds = %321
  %324 = getelementptr inbounds i8, ptr %9, i64 56
  %325 = getelementptr inbounds i8, ptr %9, i64 57
  br label %338

._crit_edge277:                                   ; preds = %361, %321
  %326 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %365 unwind label %164

327:                                              ; preds = %308
  %328 = landingpad { ptr, i32 }
          cleanup
  br label %337

329:                                              ; preds = %314
  %330 = landingpad { ptr, i32 }
          cleanup
  br label %336

331:                                              ; preds = %315
  %332 = landingpad { ptr, i32 }
          cleanup
  br label %335

333:                                              ; preds = %316
  %334 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  br label %335

335:                                              ; preds = %333, %331
  %.pn223 = phi { ptr, i32 } [ %334, %333 ], [ %332, %331 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  br label %336

336:                                              ; preds = %335, %329
  %.pn223.pn = phi { ptr, i32 } [ %.pn223, %335 ], [ %330, %329 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  br label %337

337:                                              ; preds = %336, %327
  %.pn223.pn.pn = phi { ptr, i32 } [ %.pn223.pn, %336 ], [ %328, %327 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  br label %720

338:                                              ; preds = %.lr.ph276, %361
  %.0198274 = phi ptr [ %322, %.lr.ph276 ], [ %362, %361 ]
  %339 = load ptr, ptr %.0198274, align 8, !tbaa !177
  %340 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %341 unwind label %363

341:                                              ; preds = %338
  br i1 %340, label %347, label %342

342:                                              ; preds = %341
  %343 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %344 unwind label %363

344:                                              ; preds = %342
  %345 = load i32, ptr %4, align 4
  %346 = icmp eq i32 %345, 1
  %or.cond3 = select i1 %343, i1 %346, i1 false
  br i1 %or.cond3, label %347, label %.critedge

347:                                              ; preds = %344, %341
  %348 = load i8, ptr %5, align 1, !tbaa !9, !range !175, !noundef !176
  %349 = trunc nuw i8 %348 to i1
  %350 = xor i8 %348, 1
  store i8 %350, ptr %324, align 8, !tbaa !237
  br i1 %349, label %351, label %._crit_edge288

._crit_edge288:                                   ; preds = %347
  %.pre289 = load i32, ptr %4, align 4, !tbaa !5
  br label %357

.critedge:                                        ; preds = %344
  store i8 0, ptr %324, align 8, !tbaa !237
  br label %351

351:                                              ; preds = %.critedge, %347
  %352 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %353 unwind label %363

353:                                              ; preds = %351
  %354 = load i32, ptr %4, align 4
  %355 = icmp ne i32 %354, 3
  %not. = xor i1 %352, true
  %356 = select i1 %not., i1 true, i1 %355
  br label %357

357:                                              ; preds = %._crit_edge288, %353
  %358 = phi i32 [ %.pre289, %._crit_edge288 ], [ %354, %353 ]
  %359 = phi i1 [ false, %._crit_edge288 ], [ %356, %353 ]
  %360 = zext i1 %359 to i8
  store i8 %360, ptr %325, align 1, !tbaa !241
  invoke void @_ZN11spirv_cross11CompilerMSL31add_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %358, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(336) %138, ptr noundef nonnull align 8 dereferenceable(176) %339, ptr noundef nonnull align 8 dereferenceable(58) %9)
          to label %361 unwind label %363

361:                                              ; preds = %357
  %362 = getelementptr inbounds i8, ptr %.0198274, i64 8
  %.not227 = icmp eq ptr %362, %323
  br i1 %.not227, label %._crit_edge277, label %338

363:                                              ; preds = %357, %351, %342, %338
  %364 = landingpad { ptr, i32 }
          cleanup
  br label %720

365:                                              ; preds = %._crit_edge277
  br i1 %326, label %366, label %370

366:                                              ; preds = %365
  %367 = getelementptr inbounds i8, ptr %0, i64 10149
  %368 = load i8, ptr %367, align 1, !tbaa !226, !range !175, !noundef !176
  %369 = trunc nuw i8 %368 to i1
  br i1 %369, label %378, label %370

370:                                              ; preds = %366, %365
  %371 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %372 unwind label %164

372:                                              ; preds = %370
  %.pre291 = load i32, ptr %4, align 4
  br i1 %371, label %373, label %474

373:                                              ; preds = %372
  %374 = getelementptr inbounds i8, ptr %0, i64 10150
  %375 = load i8, ptr %374, align 2, !tbaa !180, !range !175, !noundef !176
  %376 = trunc nuw i8 %375 to i1
  %377 = icmp eq i32 %.pre291, 1
  %or.cond5 = select i1 %376, i1 %377, i1 false
  br i1 %or.cond5, label %379, label %474

378:                                              ; preds = %366
  %.old = load i32, ptr %4, align 4
  %.old4 = icmp eq i32 %.old, 1
  br i1 %.old4, label %379, label %474

379:                                              ; preds = %373, %378
  %380 = getelementptr inbounds i8, ptr %0, i64 10224
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #6
  %381 = call ptr @_ZNSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %380) #6
  store ptr %381, ptr %42, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #6
  %382 = call ptr @_ZNSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %380) #6
  store ptr %382, ptr %43, align 8
  %383 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %43) #6
  br i1 %383, label %.lr.ph279, label %._crit_edge280

.lr.ph279:                                        ; preds = %379
  %384 = getelementptr inbounds i8, ptr %0, i64 10432
  %385 = getelementptr inbounds i8, ptr %45, i64 16
  %386 = getelementptr inbounds i8, ptr %45, i64 20
  %387 = getelementptr inbounds i8, ptr %45, i64 12
  %388 = getelementptr inbounds i8, ptr %45, i64 24
  %389 = getelementptr inbounds i8, ptr %45, i64 32
  %390 = getelementptr inbounds i8, ptr %45, i64 88
  %391 = getelementptr inbounds i8, ptr %45, i64 276
  %392 = getelementptr inbounds i8, ptr %45, i64 8
  %393 = getelementptr inbounds i8, ptr %45, i64 124
  %394 = getelementptr inbounds i8, ptr %45, i64 120
  %395 = getelementptr inbounds i8, ptr %45, i64 128
  %396 = getelementptr inbounds i8, ptr %9, i64 56
  %397 = getelementptr inbounds i8, ptr %9, i64 57
  br label %398

._crit_edge280:                                   ; preds = %468, %379
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #6
  %.pre290 = load i32, ptr %4, align 4
  br label %474

398:                                              ; preds = %.lr.ph279, %468
  %399 = call noundef nonnull align 4 dereferenceable(32) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #6
  %400 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %384, ptr noundef nonnull align 4 dereferenceable(4) %399)
          to label %401 unwind label %402

401:                                              ; preds = %398
  %.not249 = icmp eq i64 %400, 0
  br i1 %.not249, label %404, label %468

402:                                              ; preds = %398
  %403 = landingpad { ptr, i32 }
          cleanup
  br label %473

404:                                              ; preds = %401
  %405 = load i8, ptr %5, align 1, !tbaa !9, !range !175, !noundef !176
  %406 = getelementptr inbounds i8, ptr %399, i64 28
  %407 = load i32, ptr %406, align 4, !tbaa !242
  %408 = icmp eq i32 %407, 2
  %409 = zext i1 %408 to i8
  %.not250 = icmp eq i8 %405, %409
  br i1 %.not250, label %410, label %468

410:                                              ; preds = %404
  %411 = getelementptr inbounds i8, ptr %399, i64 20
  %412 = load i32, ptr %411, align 4, !tbaa !249
  %.off267 = add i32 %412, -11
  %switch268 = icmp ult i32 %.off267, 2
  br i1 %switch268, label %468, label %413

413:                                              ; preds = %410
  %414 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %106, i32 noundef 5)
          to label %415 unwind label %425

415:                                              ; preds = %413
  %416 = add i32 %414, 1
  %417 = add i32 %414, 2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #6
  %418 = add i32 %414, 3
  store i32 %418, ptr %44, align 4, !tbaa !181
  %419 = add i32 %414, 4
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %45) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %45, i32 noundef 21)
          to label %420 unwind label %427

420:                                              ; preds = %415
  %421 = getelementptr inbounds i8, ptr %399, i64 16
  %422 = load i32, ptr %421, align 4, !tbaa !250
  %423 = and i32 %422, -2
  %switch = icmp eq i32 %423, 2
  %spec.select = select i1 %switch, i32 6, i32 8
  %spec.select295 = select i1 %switch, i32 16, i32 32
  store i32 %spec.select, ptr %385, align 8, !tbaa !183
  store i32 %spec.select295, ptr %386, align 4, !tbaa !251
  %424 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %414, ptr noundef nonnull align 8 dereferenceable(336) %45)
          to label %429 unwind label %435

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

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

429:                                              ; preds = %420
  %430 = getelementptr inbounds i8, ptr %399, i64 24
  %431 = load i32, ptr %430, align 4, !tbaa !252
  %432 = icmp ugt i32 %431, 1
  br i1 %432, label %433, label %437

433:                                              ; preds = %429
  store i32 23, ptr %387, align 4, !tbaa !253
  store i32 %431, ptr %388, align 8, !tbaa !254
  %434 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %416, ptr noundef nonnull align 8 dereferenceable(336) %45)
          to label %437 unwind label %435

435:                                              ; preds = %437, %433, %420
  %436 = landingpad { ptr, i32 }
          cleanup
  br label %471

437:                                              ; preds = %433, %429
  %.0199 = phi i32 [ %414, %429 ], [ %416, %433 ]
  store i32 28, ptr %387, align 4, !tbaa !253
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %46) #6
  store i32 0, ptr %46, align 4, !tbaa !181
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %389, ptr noundef nonnull align 4 dereferenceable(4) %46) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %47) #6
  store i8 1, ptr %47, align 1, !tbaa !9
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %390, ptr noundef nonnull align 1 dereferenceable(1) %47) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %47) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %48) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %48, i32 noundef %.0199)
  %438 = load i32, ptr %48, align 4, !tbaa !181
  store i32 %438, ptr %391, align 4, !tbaa !181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %48) #6
  %439 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %417, ptr noundef nonnull align 8 dereferenceable(336) %45)
          to label %440 unwind label %435

440:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %49) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %49, i32 noundef %.0199)
  %441 = load i32, ptr %49, align 4, !tbaa !181
  store i32 %441, ptr %392, align 8, !tbaa !181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %49) #6
  store i32 32, ptr %387, align 4, !tbaa !253
  store i8 1, ptr %393, align 4, !tbaa !255
  %442 = load i32, ptr %394, align 8, !tbaa !256
  %443 = add i32 %442, 1
  store i32 %443, ptr %394, align 8, !tbaa !256
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %50) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %50, i32 noundef %417)
  %444 = load i32, ptr %50, align 4, !tbaa !181
  store i32 %444, ptr %391, align 4, !tbaa !181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %50) #6
  %445 = load i32, ptr %4, align 4, !tbaa !5
  store i32 %445, ptr %395, align 8, !tbaa !195
  %446 = load i32, ptr %44, align 4, !tbaa !181
  %447 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %446, ptr noundef nonnull align 8 dereferenceable(336) %45)
          to label %448 unwind label %461

448:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %51) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %51, i32 noundef %417)
  %449 = getelementptr inbounds i8, ptr %447, i64 8
  %450 = load i32, ptr %51, align 4, !tbaa !181
  store i32 %450, ptr %449, align 8, !tbaa !181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %51) #6
  %451 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjRN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %419, ptr noundef nonnull align 4 dereferenceable(4) %44, ptr noundef nonnull align 4 dereferenceable(4) %4)
          to label %452 unwind label %463

452:                                              ; preds = %448
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %52, i32 noundef %419)
  %453 = load i32, ptr %399, align 4, !tbaa !257
  %454 = load i32, ptr %52, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %454, i32 noundef 30, i32 noundef %453)
          to label %455 unwind label %463

455:                                              ; preds = %452
  %456 = getelementptr inbounds i8, ptr %399, i64 4
  %457 = load i32, ptr %456, align 4, !tbaa !258
  %.not251 = icmp eq i32 %457, 0
  br i1 %.not251, label %465, label %458

458:                                              ; preds = %455
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %53, i32 noundef %419)
  %459 = load i32, ptr %456, align 4, !tbaa !258
  %460 = load i32, ptr %53, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %460, i32 noundef 31, i32 noundef %459)
          to label %465 unwind label %463

461:                                              ; preds = %440
  %462 = landingpad { ptr, i32 }
          cleanup
  br label %471

463:                                              ; preds = %465, %458, %452, %448
  %464 = landingpad { ptr, i32 }
          cleanup
  br label %471

465:                                              ; preds = %458, %455
  store i8 1, ptr %396, align 8, !tbaa !237
  store i8 0, ptr %397, align 1, !tbaa !241
  %466 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL31add_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %466, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(336) %138, ptr noundef nonnull align 8 dereferenceable(176) %451, ptr noundef nonnull align 8 dereferenceable(58) %9)
          to label %467 unwind label %463

467:                                              ; preds = %465
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %45) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #6
  br label %468

468:                                              ; preds = %410, %404, %401, %467
  %469 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #6
  %470 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %43) #6
  br i1 %470, label %398, label %._crit_edge280

471:                                              ; preds = %461, %463, %435
  %.pn252.pn = phi { ptr, i32 } [ %436, %435 ], [ %464, %463 ], [ %462, %461 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %45) #6
  br label %472

472:                                              ; preds = %471, %427
  %.pn252.pn.pn = phi { ptr, i32 } [ %.pn252.pn, %471 ], [ %428, %427 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #6
  br label %473

473:                                              ; preds = %425, %472, %402
  %.pn252.pn.pn.pn.pn = phi { ptr, i32 } [ %403, %402 ], [ %.pn252.pn.pn, %472 ], [ %426, %425 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #6
  br label %720

474:                                              ; preds = %._crit_edge280, %378, %373, %372
  %475 = phi i32 [ %.pre290, %._crit_edge280 ], [ %.old, %378 ], [ %.pre291, %373 ], [ %.pre291, %372 ]
  %476 = getelementptr inbounds i8, ptr %0, i64 11188
  %477 = load i8, ptr %476, align 4, !tbaa !11, !range !175, !noundef !176
  %478 = trunc nuw i8 %477 to i1
  %479 = icmp eq i32 %475, 3
  %or.cond8 = select i1 %478, i1 %479, i1 false
  br i1 %or.cond8, label %480, label %572

480:                                              ; preds = %474
  %481 = getelementptr inbounds i8, ptr %0, i64 10328
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #6
  %482 = call ptr @_ZNSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %481) #6
  store ptr %482, ptr %54, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #6
  %483 = call ptr @_ZNSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %481) #6
  store ptr %483, ptr %55, align 8
  %484 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %55) #6
  br i1 %484, label %.lr.ph282, label %._crit_edge283

.lr.ph282:                                        ; preds = %480
  %485 = getelementptr inbounds i8, ptr %0, i64 10544
  %486 = getelementptr inbounds i8, ptr %57, i64 16
  %487 = getelementptr inbounds i8, ptr %57, i64 20
  %488 = getelementptr inbounds i8, ptr %57, i64 12
  %489 = getelementptr inbounds i8, ptr %57, i64 24
  %490 = getelementptr inbounds i8, ptr %57, i64 32
  %491 = getelementptr inbounds i8, ptr %57, i64 88
  %492 = getelementptr inbounds i8, ptr %57, i64 276
  %493 = getelementptr inbounds i8, ptr %57, i64 124
  %494 = getelementptr inbounds i8, ptr %57, i64 120
  %495 = getelementptr inbounds i8, ptr %57, i64 128
  %496 = getelementptr inbounds i8, ptr %9, i64 56
  %497 = getelementptr inbounds i8, ptr %9, i64 57
  br label %498

._crit_edge283:                                   ; preds = %566, %480
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #6
  br label %572

498:                                              ; preds = %.lr.ph282, %566
  %499 = call noundef nonnull align 4 dereferenceable(32) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #6
  %500 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %485, ptr noundef nonnull align 4 dereferenceable(4) %499)
          to label %501 unwind label %502

501:                                              ; preds = %498
  %.not241 = icmp eq i64 %500, 0
  br i1 %.not241, label %504, label %566

502:                                              ; preds = %498
  %503 = landingpad { ptr, i32 }
          cleanup
  br label %571

504:                                              ; preds = %501
  %505 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %106, i32 noundef 5)
          to label %506 unwind label %516

506:                                              ; preds = %504
  %507 = add i32 %505, 1
  %508 = add i32 %505, 2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %56) #6
  %509 = add i32 %505, 3
  store i32 %509, ptr %56, align 4, !tbaa !181
  %510 = add i32 %505, 4
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %57) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %57, i32 noundef 21)
          to label %511 unwind label %518

511:                                              ; preds = %506
  %512 = getelementptr inbounds i8, ptr %499, i64 16
  %513 = load i32, ptr %512, align 4, !tbaa !250
  %514 = and i32 %513, -2
  %switch266 = icmp eq i32 %514, 2
  %spec.select296 = select i1 %switch266, i32 6, i32 8
  %spec.select297 = select i1 %switch266, i32 16, i32 32
  store i32 %spec.select296, ptr %486, align 8, !tbaa !183
  store i32 %spec.select297, ptr %487, align 4, !tbaa !251
  %515 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %505, ptr noundef nonnull align 8 dereferenceable(336) %57)
          to label %520 unwind label %526

516:                                              ; preds = %504
  %517 = landingpad { ptr, i32 }
          cleanup
  br label %571

518:                                              ; preds = %506
  %519 = landingpad { ptr, i32 }
          cleanup
  br label %570

520:                                              ; preds = %511
  %521 = getelementptr inbounds i8, ptr %499, i64 24
  %522 = load i32, ptr %521, align 4, !tbaa !252
  %523 = icmp ugt i32 %522, 1
  br i1 %523, label %524, label %528

524:                                              ; preds = %520
  store i32 23, ptr %488, align 4, !tbaa !253
  store i32 %522, ptr %489, align 8, !tbaa !254
  %525 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %507, ptr noundef nonnull align 8 dereferenceable(336) %57)
          to label %528 unwind label %526

526:                                              ; preds = %531, %528, %524, %511
  %527 = landingpad { ptr, i32 }
          cleanup
  br label %569

528:                                              ; preds = %524, %520
  %.0200 = phi i32 [ %505, %520 ], [ %507, %524 ]
  %529 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %530 unwind label %526

530:                                              ; preds = %528
  br i1 %529, label %531, label %534

531:                                              ; preds = %530
  store i32 28, ptr %488, align 4, !tbaa !253
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %58) #6
  store i32 0, ptr %58, align 4, !tbaa !181
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %490, ptr noundef nonnull align 4 dereferenceable(4) %58) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %58) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %59) #6
  store i8 1, ptr %59, align 1, !tbaa !9
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %491, ptr noundef nonnull align 1 dereferenceable(1) %59) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %59) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %60) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %60, i32 noundef %.0200)
  %532 = load i32, ptr %60, align 4, !tbaa !181
  store i32 %532, ptr %492, align 4, !tbaa !181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %60) #6
  %533 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %508, ptr noundef nonnull align 8 dereferenceable(336) %57)
          to label %534 unwind label %526

534:                                              ; preds = %531, %530
  store i32 32, ptr %488, align 4, !tbaa !253
  store i8 1, ptr %493, align 4, !tbaa !255
  %535 = load i32, ptr %494, align 8, !tbaa !256
  %536 = add i32 %535, 1
  store i32 %536, ptr %494, align 8, !tbaa !256
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %61) #6
  %537 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %538 unwind label %557

538:                                              ; preds = %534
  %539 = select i1 %537, i32 %508, i32 %.0200
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %61, i32 noundef %539)
  %540 = load i32, ptr %61, align 4, !tbaa !181
  store i32 %540, ptr %492, align 4, !tbaa !181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %61) #6
  %541 = load i32, ptr %4, align 4, !tbaa !5
  store i32 %541, ptr %495, align 8, !tbaa !195
  %542 = load i32, ptr %56, align 4, !tbaa !181
  %543 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %542, ptr noundef nonnull align 8 dereferenceable(336) %57)
          to label %544 unwind label %559

544:                                              ; preds = %538
  %545 = getelementptr inbounds i8, ptr %543, i64 8
  %546 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_1EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %545, ptr noundef nonnull align 4 dereferenceable(4) %492)
  %547 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjRN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %510, ptr noundef nonnull align 4 dereferenceable(4) %56, ptr noundef nonnull align 4 dereferenceable(4) %4)
          to label %548 unwind label %561

548:                                              ; preds = %544
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %62, i32 noundef %510)
  %549 = load i32, ptr %499, align 4, !tbaa !257
  %550 = load i32, ptr %62, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %550, i32 noundef 30, i32 noundef %549)
          to label %551 unwind label %561

551:                                              ; preds = %548
  %552 = getelementptr inbounds i8, ptr %499, i64 4
  %553 = load i32, ptr %552, align 4, !tbaa !258
  %.not242 = icmp eq i32 %553, 0
  br i1 %.not242, label %563, label %554

554:                                              ; preds = %551
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %63, i32 noundef %510)
  %555 = load i32, ptr %552, align 4, !tbaa !258
  %556 = load i32, ptr %63, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %556, i32 noundef 31, i32 noundef %555)
          to label %563 unwind label %561

557:                                              ; preds = %534
  %558 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %61) #6
  br label %569

559:                                              ; preds = %538
  %560 = landingpad { ptr, i32 }
          cleanup
  br label %569

561:                                              ; preds = %563, %554, %548, %544
  %562 = landingpad { ptr, i32 }
          cleanup
  br label %569

563:                                              ; preds = %554, %551
  store i8 1, ptr %496, align 8, !tbaa !237
  store i8 0, ptr %497, align 1, !tbaa !241
  %564 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL31add_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %564, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(336) %138, ptr noundef nonnull align 8 dereferenceable(176) %547, ptr noundef nonnull align 8 dereferenceable(58) %9)
          to label %565 unwind label %561

565:                                              ; preds = %563
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %57) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #6
  br label %566

566:                                              ; preds = %501, %565
  %567 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #6
  %568 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %55) #6
  br i1 %568, label %498, label %._crit_edge283

569:                                              ; preds = %559, %561, %557, %526
  %.pn243.pn = phi { ptr, i32 } [ %558, %557 ], [ %527, %526 ], [ %562, %561 ], [ %560, %559 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %57) #6
  br label %570

570:                                              ; preds = %569, %518
  %.pn243.pn.pn = phi { ptr, i32 } [ %.pn243.pn, %569 ], [ %519, %518 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #6
  br label %571

571:                                              ; preds = %516, %570, %502
  %.pn243.pn.pn.pn.pn = phi { ptr, i32 } [ %503, %502 ], [ %.pn243.pn.pn, %570 ], [ %517, %516 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #6
  br label %720

572:                                              ; preds = %._crit_edge283, %474
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #6
  %573 = call ptr @_ZNSt13unordered_mapIjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %9) #6
  store ptr %573, ptr %64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #6
  %574 = call ptr @_ZNSt13unordered_mapIjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %9) #6
  store ptr %574, ptr %65, align 8
  %575 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEELb0EEESA_(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef nonnull align 8 dereferenceable(8) %65) #6
  br i1 %575, label %.lr.ph285, label %._crit_edge286

.lr.ph285:                                        ; preds = %572
  %576 = getelementptr inbounds i8, ptr %138, i64 136
  %577 = getelementptr inbounds i8, ptr %138, i64 8
  br label %581

._crit_edge286:                                   ; preds = %639, %572
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %69) #6
  %578 = getelementptr inbounds i8, ptr %0, i64 256
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %70) #6
  %579 = load i32, ptr %12, align 4, !tbaa !181
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %70, i32 noundef %579)
  %580 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %578, ptr noundef nonnull align 4 dereferenceable(4) %70)
          to label %643 unwind label %692

581:                                              ; preds = %.lr.ph285, %639
  %582 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %64) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %66) #6
  %583 = load i32, ptr %582, align 4, !tbaa !259
  store i32 %583, ptr %66, align 4, !tbaa !181
  %584 = getelementptr inbounds i8, ptr %582, i64 4
  %585 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %576) #6
  %586 = trunc i64 %585 to i32
  %587 = load i32, ptr %584, align 4, !tbaa !262
  %588 = getelementptr inbounds i8, ptr %582, i64 8
  %589 = load i32, ptr %588, align 4, !tbaa !263
  %590 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %587, i32 noundef %589, i32 noundef 0)
          to label %591 unwind label %611

591:                                              ; preds = %581
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %67) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %67, i32 noundef %590)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %576, ptr noundef nonnull align 4 dereferenceable(4) %67) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %67) #6
  %592 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %577)
          to label %593 unwind label %611

593:                                              ; preds = %591
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #6
  invoke void @_ZN11spirv_cross4joinIJRA12_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 1 dereferenceable(12) @.str.135, ptr noundef nonnull align 4 dereferenceable(4) %66)
          to label %594 unwind label %613

594:                                              ; preds = %593
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %592, i32 noundef %586, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %595 unwind label %615

595:                                              ; preds = %594
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #6
  %596 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %577)
          to label %597 unwind label %611

597:                                              ; preds = %595
  %598 = load i32, ptr %66, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %596, i32 noundef %586, i32 noundef 30, i32 noundef %598)
          to label %599 unwind label %611

599:                                              ; preds = %597
  %600 = load i32, ptr %66, align 4, !tbaa !181
  %601 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %590)
          to label %602 unwind label %611

602:                                              ; preds = %599
  %603 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %600, ptr noundef nonnull align 8 dereferenceable(336) %601, i32 noundef %603, i1 noundef zeroext false)
          to label %604 unwind label %611

604:                                              ; preds = %602
  %605 = getelementptr inbounds i8, ptr %582, i64 12
  %606 = load i8, ptr %605, align 4, !tbaa !264, !range !175, !noundef !176
  %607 = trunc nuw i8 %606 to i1
  br i1 %607, label %608, label %618

608:                                              ; preds = %604
  %609 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %577)
          to label %610 unwind label %611

610:                                              ; preds = %608
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %609, i32 noundef %586, i32 noundef 14, i32 noundef 0)
          to label %618 unwind label %611

611:                                              ; preds = %638, %636, %631, %629, %624, %622, %610, %608, %602, %599, %597, %595, %591, %581
  %612 = landingpad { ptr, i32 }
          cleanup
  br label %642

613:                                              ; preds = %593
  %614 = landingpad { ptr, i32 }
          cleanup
  br label %617

615:                                              ; preds = %594
  %616 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #6
  br label %617

617:                                              ; preds = %615, %613
  %.pn237 = phi { ptr, i32 } [ %616, %615 ], [ %614, %613 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #6
  br label %642

618:                                              ; preds = %610, %604
  %619 = getelementptr inbounds i8, ptr %582, i64 13
  %620 = load i8, ptr %619, align 1, !tbaa !265, !range !175, !noundef !176
  %621 = trunc nuw i8 %620 to i1
  br i1 %621, label %622, label %625

622:                                              ; preds = %618
  %623 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %577)
          to label %624 unwind label %611

624:                                              ; preds = %622
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %623, i32 noundef %586, i32 noundef 13, i32 noundef 0)
          to label %625 unwind label %611

625:                                              ; preds = %624, %618
  %626 = getelementptr inbounds i8, ptr %582, i64 14
  %627 = load i8, ptr %626, align 2, !tbaa !266, !range !175, !noundef !176
  %628 = trunc nuw i8 %627 to i1
  br i1 %628, label %629, label %632

629:                                              ; preds = %625
  %630 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %577)
          to label %631 unwind label %611

631:                                              ; preds = %629
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %630, i32 noundef %586, i32 noundef 16, i32 noundef 0)
          to label %632 unwind label %611

632:                                              ; preds = %631, %625
  %633 = getelementptr inbounds i8, ptr %582, i64 15
  %634 = load i8, ptr %633, align 1, !tbaa !267, !range !175, !noundef !176
  %635 = trunc nuw i8 %634 to i1
  br i1 %635, label %636, label %639

636:                                              ; preds = %632
  %637 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %577)
          to label %638 unwind label %611

638:                                              ; preds = %636
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %637, i32 noundef %586, i32 noundef 17, i32 noundef 0)
          to label %639 unwind label %611

639:                                              ; preds = %638, %632
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %66) #6
  %640 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %64) #6
  %641 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEELb0EEESA_(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef nonnull align 8 dereferenceable(8) %65) #6
  br i1 %641, label %581, label %._crit_edge286

642:                                              ; preds = %617, %611
  %.pn239 = phi { ptr, i32 } [ %612, %611 ], [ %.pn237, %617 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %66) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #6
  br label %720

643:                                              ; preds = %._crit_edge286
  invoke void @_ZN11spirv_cross11CompilerMSL12MemberSorterC1ERNS_8SPIRTypeERNS_4MetaENS1_10SortAspectE(ptr noundef nonnull align 8 dereferenceable(20) %69, ptr noundef nonnull align 8 dereferenceable(336) %138, ptr noundef nonnull align 8 dereferenceable(488) %580, i32 noundef 0)
          to label %644 unwind label %692

644:                                              ; preds = %643
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %70) #6
  invoke void @_ZN11spirv_cross11CompilerMSL12MemberSorter4sortEv(ptr noundef nonnull align 8 dereferenceable(20) %69)
          to label %645 unwind label %694

645:                                              ; preds = %644
  %646 = load i32, ptr %4, align 4, !tbaa !5
  %647 = load i32, ptr %12, align 4, !tbaa !181
  invoke void @_ZN11spirv_cross11CompilerMSL31fix_up_interface_member_indicesEN3spv12StorageClassEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %646, i32 noundef %647)
          to label %648 unwind label %694

648:                                              ; preds = %645
  %649 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %650 unwind label %694

650:                                              ; preds = %648
  br i1 %649, label %651, label %thread-pre-split269

651:                                              ; preds = %650
  %652 = getelementptr inbounds i8, ptr %0, i64 10150
  %653 = load i8, ptr %652, align 2, !tbaa !180, !range !175, !noundef !176
  %654 = trunc nuw i8 %653 to i1
  %655 = load i32, ptr %4, align 4
  %656 = icmp ne i32 %655, 1
  %or.cond12.not = select i1 %654, i1 true, i1 %656
  br i1 %or.cond12.not, label %711, label %657

657:                                              ; preds = %651
  %658 = load i8, ptr %5, align 1, !tbaa !9, !range !175, !noundef !176
  %659 = trunc nuw i8 %658 to i1
  br i1 %659, label %660, label %thread-pre-split269

660:                                              ; preds = %657
  %661 = getelementptr inbounds i8, ptr %0, i64 11132
  %662 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %661)
  %.not229 = icmp eq i32 %662, 0
  br i1 %.not229, label %thread-pre-split269, label %663

663:                                              ; preds = %660
  %664 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %106, i32 noundef 1)
          to label %665 unwind label %696

665:                                              ; preds = %663
  %666 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %664, ptr noundef nonnull align 8 dereferenceable(336) %138)
          to label %667 unwind label %698

667:                                              ; preds = %665
  %668 = getelementptr inbounds i8, ptr %666, i64 16
  store i32 21, ptr %668, align 8, !tbaa !183
  %669 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %670 unwind label %700

670:                                              ; preds = %667
  %671 = getelementptr inbounds i8, ptr %669, i64 8
  %672 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %671)
          to label %673 unwind label %700

673:                                              ; preds = %670
  %674 = getelementptr inbounds i8, ptr %666, i64 272
  store i32 %672, ptr %674, align 8, !tbaa !181
  %675 = getelementptr inbounds i8, ptr %666, i64 276
  store i32 %672, ptr %675, align 4, !tbaa !181
  %676 = load i32, ptr %4, align 4, !tbaa !5
  %677 = getelementptr inbounds i8, ptr %666, i64 128
  store i32 %676, ptr %677, align 8, !tbaa !195
  %678 = getelementptr inbounds i8, ptr %138, i64 8
  %679 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %578, ptr noundef nonnull align 4 dereferenceable(4) %678)
          to label %680 unwind label %698

680:                                              ; preds = %673
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %71) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %71, i32 noundef %664)
  %681 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %578, ptr noundef nonnull align 4 dereferenceable(4) %71)
          to label %682 unwind label %702

682:                                              ; preds = %680
  %683 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %681, ptr noundef nonnull align 8 dereferenceable(488) %679)
          to label %684 unwind label %702

684:                                              ; preds = %682
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %71) #6
  %685 = getelementptr inbounds i8, ptr %138, i64 136
  %686 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %685) #6
  %687 = trunc i64 %686 to i32
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %72) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %72, i32 noundef %664)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %685, ptr noundef nonnull align 4 dereferenceable(4) %72) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %72) #6
  %688 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %678)
          to label %689 unwind label %704

689:                                              ; preds = %684
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %74) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %74)
          to label %690 unwind label %706

690:                                              ; preds = %689
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %688, i32 noundef %687, ptr noundef nonnull align 8 dereferenceable(32) %73)
          to label %691 unwind label %708

691:                                              ; preds = %690
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %74) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #6
  br label %thread-pre-split269

692:                                              ; preds = %643, %._crit_edge286
  %693 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %70) #6
  br label %719

694:                                              ; preds = %714, %648, %645, %644
  %695 = landingpad { ptr, i32 }
          cleanup
  br label %719

696:                                              ; preds = %663
  %697 = landingpad { ptr, i32 }
          cleanup
  br label %719

698:                                              ; preds = %673, %665
  %699 = landingpad { ptr, i32 }
          cleanup
  br label %719

700:                                              ; preds = %670, %667
  %701 = landingpad { ptr, i32 }
          cleanup
  br label %719

702:                                              ; preds = %682, %680
  %703 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %71) #6
  br label %719

704:                                              ; preds = %684
  %705 = landingpad { ptr, i32 }
          cleanup
  br label %719

706:                                              ; preds = %689
  %707 = landingpad { ptr, i32 }
          cleanup
  br label %710

708:                                              ; preds = %690
  %709 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #6
  br label %710

710:                                              ; preds = %708, %706
  %.pn230 = phi { ptr, i32 } [ %709, %708 ], [ %707, %706 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %74) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #6
  br label %719

thread-pre-split269:                              ; preds = %650, %657, %660, %691
  %.pr270 = load i32, ptr %4, align 4, !tbaa !5
  br label %711

711:                                              ; preds = %thread-pre-split269, %651
  %712 = phi i32 [ %.pr270, %thread-pre-split269 ], [ %655, %651 ]
  %713 = icmp eq i32 %712, 1
  br i1 %713, label %714, label %717

714:                                              ; preds = %711
  %715 = load i32, ptr %15, align 4, !tbaa !181
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %75, i32 noundef %715)
  %716 = load i32, ptr %75, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %716, i32 noundef 24, i32 noundef 0)
          to label %717 unwind label %694

717:                                              ; preds = %714, %711
  %718 = load i32, ptr %15, align 4, !tbaa !181
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %69) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #6
  br label %723

719:                                              ; preds = %696, %704, %710, %702, %700, %698, %694, %692
  %.pn235 = phi { ptr, i32 } [ %695, %694 ], [ %693, %692 ], [ %697, %696 ], [ %703, %702 ], [ %699, %698 ], [ %701, %700 ], [ %.pn230, %710 ], [ %705, %704 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %69) #6
  br label %720

720:                                              ; preds = %229, %307, %298, %288, %279, %262, %246, %231, %719, %642, %571, %473, %363, %337, %209, %200, %183, %164
  %.pn258 = phi { ptr, i32 } [ %364, %363 ], [ %.pn252.pn.pn.pn.pn, %473 ], [ %.pn243.pn.pn.pn.pn, %571 ], [ %.pn239, %642 ], [ %.pn235, %719 ], [ %165, %164 ], [ %.pn223.pn.pn, %337 ], [ %.pn219, %200 ], [ %.pn217, %209 ], [ %.pn221, %183 ], [ %230, %229 ], [ %.pn210, %279 ], [ %.pn208, %288 ], [ %.pn206, %298 ], [ %.pn, %307 ], [ %.pn212, %262 ], [ %232, %231 ], [ %247, %246 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %721

721:                                              ; preds = %720, %162
  %.pn258.pn = phi { ptr, i32 } [ %.pn258, %720 ], [ %163, %162 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #6
  br label %722

722:                                              ; preds = %721, %160, %158
  %.pn258.pn.pn = phi { ptr, i32 } [ %.pn258.pn, %721 ], [ %161, %160 ], [ %159, %158 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #6
  br label %724

723:                                              ; preds = %116, %122, %125, %717
  %.0 = phi i32 [ %718, %717 ], [ 0, %125 ], [ 0, %122 ], [ 0, %116 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #6
  call void @_ZN11spirv_cross11CompilerMSL18InterfaceBlockMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(58) %9) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #6
  call void @_ZN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #6
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %6) #6
  ret i32 %.0

724:                                              ; preds = %156, %722, %132, %130
  %.pn258.pn.pn.pn.pn = phi { ptr, i32 } [ %133, %132 ], [ %131, %130 ], [ %.pn258.pn.pn, %722 ], [ %157, %156 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #6
  call void @_ZN11spirv_cross11CompilerMSL18InterfaceBlockMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(58) %9) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  br label %725

725:                                              ; preds = %724, %128
  %.pn258.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn258.pn.pn.pn.pn, %724 ], [ %129, %128 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #6
  call void @_ZN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #6
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %6) #6
  resume { ptr, i32 } %.pn258.pn.pn.pn.pn.pn
}

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_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_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

; 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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_1EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) 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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEELb0EEESA_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0

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

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

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

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

declare void @_ZN11spirv_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 #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL19add_interface_blockEN3spv12StorageClassEbE3$_8EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #2 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_2D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_5D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_6D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL19add_interface_blockEN3spv12StorageClassEbEN3$_7D2Ev"(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN11spirv_cross21LocationComponentPairENS1_26MSLShaderInterfaceVariableEEES8_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL12MemberSorter4sortEv(ptr noundef nonnull align 8 dereferenceable(20)) local_unnamed_addr #2 align 2

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

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

declare void @_ZN11spirv_cross11CompilerMSL12MemberSorterC1ERNS_8SPIRTypeERNS_4MetaENS1_10SortAspectE(ptr, ptr, ptr, i32) local_unnamed_addr

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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { nounwind }

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

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


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