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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.std::__detail::_Node_iterator.446" = type { %"struct.std::__detail::_Node_iterator_base.447" }
%"struct.std::__detail::_Node_iterator_base.447" = type { ptr }
%"struct.std::pair.444" = type <{ %"struct.std::__detail::_Node_iterator.446", i8, [7 x i8] }>
%"class.spirv_cross::TypedID.415" = type { i32 }
%"struct.std::pair.466" = type <{ %"struct.std::_Rb_tree_const_iterator", i8, [7 x i8] }>
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"class.std::set.449" = type { %"class.std::_Rb_tree.450" }
%"class.std::_Rb_tree.450" = type { %"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_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.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.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.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.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" }
%"class.std::map" = type { %"class.std::_Rb_tree.294" }
%"class.std::_Rb_tree.294" = type { %"struct.std::_Rb_tree<spirv_cross::LocationComponentPair, std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>, std::_Select1st<std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>>, std::less<spirv_cross::LocationComponentPair>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::LocationComponentPair, std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>, std::_Select1st<std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>>, std::less<spirv_cross::LocationComponentPair>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.299" = type { %"class.std::_Hashtable.300" }
%"class.std::_Hashtable.300" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.213" = type { %"class.std::_Hashtable.214" }
%"class.std::_Hashtable.214" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::set.313" = type { %"class.std::_Rb_tree.314" }
%"class.std::_Rb_tree.314" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.319" = type { %"class.std::_Hashtable.320" }
%"class.std::_Hashtable.320" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.336" = type { %"class.std::_Hashtable.337" }
%"class.std::_Hashtable.337" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.std::map.351" = type { %"class.std::_Rb_tree.352" }
%"class.std::_Rb_tree.352" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.357" = type { %"class.std::_Hashtable.358" }
%"class.std::_Hashtable.358" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.374" = type { %"class.spirv_cross::VectorView.375", i64, %"class.spirv_cross::AlignedBuffer.376" }
%"class.spirv_cross::VectorView.375" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.376" = type { [64 x i8] }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.377" = type { %"class.spirv_cross::VectorView.378", i64, %"class.spirv_cross::AlignedBuffer.379" }
%"class.spirv_cross::VectorView.378" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.379" = type { [64 x i8] }
%"class.std::map.380" = type { %"class.std::_Rb_tree.381" }
%"class.std::_Rb_tree.381" = type { %"struct.std::_Rb_tree<spirv_cross::SetBindingPair, std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>, std::_Select1st<std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>>, std::less<spirv_cross::SetBindingPair>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::SetBindingPair, std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>, std::_Select1st<std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>>, std::less<spirv_cross::SetBindingPair>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"class.std::unordered_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::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] }>
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"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.spirv_cross::Instruction" = type { i16, i16, i32, i32 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"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] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 x i8] }>
%"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 }
%"struct.spirv_cross::SPIRExtension" = type { %"struct.spirv_cross::IVariant.base", i32 }
%"struct.spirv_cross::Meta" = type { %"struct.spirv_cross::Meta::Decoration", %"class.spirv_cross::SmallVector.428", %"class.std::unordered_map.213", i8, i32 }
%"struct.spirv_cross::Meta::Decoration" = type { %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, %"struct.spirv_cross::Meta::Decoration::Extended" }
%"struct.spirv_cross::Meta::Decoration::Extended" = type { %"class.spirv_cross::Bitset", [18 x i32] }
%"class.spirv_cross::SmallVector.428" = type <{ %"class.spirv_cross::VectorView.429", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.429" = type { ptr, i64 }

@.str.8 = external hidden unnamed_addr constant [6 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_ = external hidden unnamed_addr constant [156 x i8], align 1
@.str.116 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [2 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

; Function Attrs: mustprogress 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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_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) #5

; 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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_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

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

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #6

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

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

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

; Function Attrs: mustprogress uwtable
declare 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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(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_EEEixEOS3_(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_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #2 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 8 dereferenceable(56) %4) #2 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %12 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %13 = alloca %"struct.std::pair.444", align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca %"class.spirv_cross::TypedID.415", align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %29 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %30 = alloca %"struct.std::pair.466", align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"struct.std::pair.466", align 8
  %33 = alloca %"struct.std::pair.466", align 8
  %34 = alloca %"struct.std::pair.466", align 8
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %38 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %39 = alloca %"struct.std::pair.466", align 8
  %40 = alloca i32, align 4
  %41 = alloca %"class.std::set.449", align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %45 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %46 = alloca i32, align 4
  %47 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %48 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %49 = alloca %"struct.std::pair.466", align 8
  %50 = alloca i32, align 4
  %51 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %52 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %53 = alloca %"struct.std::pair.466", align 8
  %54 = alloca %"struct.std::pair.466", align 8
  %55 = alloca i32, align 4
  %56 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %57 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %58 = alloca %"struct.std::pair.466", align 8
  %59 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %60 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %61 = alloca %"struct.std::pair.466", align 8
  %62 = alloca %"struct.std::pair.466", align 8
  %63 = alloca i32, align 4
  %64 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %65 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %66 = alloca %"struct.std::pair.466", align 8
  %67 = alloca i32, align 4
  %68 = alloca ptr, align 8
  %69 = alloca i32, align 4
  %70 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %71 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %72 = alloca %"struct.std::pair.466", align 8
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca %"struct.std::pair.466", align 8
  %77 = alloca i32, align 4
  %78 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %79 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %80 = alloca %"struct.std::pair.466", align 8
  %81 = alloca %"struct.std::pair.466", align 8
  %82 = alloca %"struct.std::pair.466", align 8
  %83 = alloca i32, align 4
  %84 = alloca %"struct.std::pair.466", align 8
  %85 = alloca %"struct.std::pair.466", align 8
  %86 = alloca %"struct.std::pair.466", align 8
  %87 = alloca %"struct.std::pair.466", align 8
  %88 = alloca i32, align 4
  %89 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %90 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %91 = alloca %"struct.std::pair.466", align 8
  %92 = alloca i32, align 4
  %93 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %94 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %95 = alloca %"struct.std::pair.466", align 8
  %96 = alloca %"struct.std::pair.466", align 8
  %97 = alloca %"struct.std::pair.466", align 8
  %98 = alloca %"struct.std::pair.466", align 8
  %99 = alloca %"struct.std::pair.466", align 8
  %100 = alloca i8, align 1
  %101 = alloca i8, align 1
  %102 = alloca i8, align 1
  %103 = alloca i8, align 1
  %104 = alloca ptr, align 8
  %105 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %106 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %107 = alloca i32, align 4
  %108 = alloca ptr, align 8
  %109 = alloca i32, align 4
  %110 = alloca ptr, align 8
  %111 = alloca i32, align 4
  %112 = alloca %"class.spirv_cross::TypedID.413", align 4
  %113 = alloca i8, align 1
  %114 = alloca %"class.spirv_cross::TypedID.413", align 4
  %115 = alloca i8, align 1
  %116 = alloca %"class.spirv_cross::TypedID.413", align 4
  %117 = alloca i8, align 1
  %118 = alloca i8, align 1
  %119 = alloca i8, align 1
  %120 = alloca i8, align 1
  %121 = alloca i8, align 1
  %122 = alloca %"class.std::__cxx11::basic_string", align 8
  %123 = alloca %"class.spirv_cross::TypedID.413", align 4
  %124 = alloca i32, align 4
  %125 = alloca %"class.spirv_cross::TypedID.414", align 4
  %126 = alloca %"class.spirv_cross::TypedID.413", align 4
  %127 = alloca ptr, align 8
  %128 = alloca ptr, align 8
  %129 = alloca i32, align 4
  %130 = alloca %"class.spirv_cross::TypedID.414", align 4
  %131 = alloca %"class.spirv_cross::TypedID.413", align 4
  %132 = alloca i32, align 4
  %133 = alloca i32, align 4
  %134 = alloca %"class.spirv_cross::TypedID.413", align 4
  %135 = alloca %"class.spirv_cross::TypedID.413", align 4
  %136 = alloca i32, align 4
  %137 = alloca %"class.spirv_cross::TypedID.414", align 4
  %138 = alloca %"class.spirv_cross::TypedID.413", align 4
  %139 = alloca ptr, align 8
  %140 = alloca i32, align 4
  %141 = alloca i32, align 4
  %142 = alloca %"class.spirv_cross::TypedID.413", align 4
  %143 = alloca %"class.std::__cxx11::basic_string", align 8
  %144 = alloca %"class.std::__cxx11::basic_string", align 8
  %145 = alloca %"class.std::__cxx11::basic_string", align 8
  %146 = alloca %"class.std::allocator.71", align 1
  %147 = alloca %"class.spirv_cross::TypedID.413", align 4
  %148 = alloca %"class.spirv_cross::TypedID.413", align 4
  %149 = alloca %"class.spirv_cross::TypedID.413", align 4
  %150 = alloca i32, align 4
  %151 = alloca ptr, align 8
  %152 = alloca ptr, align 8
  %153 = alloca ptr, align 8
  %154 = alloca ptr, align 8
  %155 = alloca i32, align 4
  %156 = alloca i32, align 4
  %157 = alloca i32, align 4
  %158 = alloca i32, align 4
  %159 = alloca ptr, align 8
  %160 = alloca %"class.spirv_cross::TypedID.414", align 4
  %161 = alloca %"class.spirv_cross::TypedID.413", align 4
  %162 = alloca i32, align 4
  %163 = alloca %"class.spirv_cross::TypedID.413", align 4
  %164 = alloca %"class.spirv_cross::TypedID.413", align 4
  %165 = alloca i32, align 4
  %166 = alloca %"class.spirv_cross::TypedID.414", align 4
  %167 = alloca %"class.spirv_cross::TypedID.413", align 4
  %168 = alloca i32, align 4
  %169 = alloca i32, align 4
  %170 = alloca %"class.spirv_cross::TypedID.413", align 4
  %171 = alloca %"class.spirv_cross::TypedID.413", align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  %172 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %173 = load ptr, ptr %10, align 8, !tbaa !5
  %174 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %173, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %175 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %11, i32 0, i32 0
  %176 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %175, i32 0, i32 0
  store ptr %174, ptr %176, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %177 = load ptr, ptr %10, align 8, !tbaa !5
  %178 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %177) #8
  %179 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %12, i32 0, i32 0
  %180 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %179, i32 0, i32 0
  store ptr %178, ptr %180, align 8
  %181 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  br i1 %181, label %182, label %187

182:                                              ; preds = %5
  %183 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 1
  %184 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %183, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %185 = load ptr, ptr %8, align 8, !tbaa !5
  %186 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3setIjSt4lessIjESaIjEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(48) %185, ptr noundef nonnull align 8 dereferenceable(48) %184)
  br label %1337

187:                                              ; preds = %5
  %188 = load ptr, ptr %10, align 8, !tbaa !5
  %189 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %188, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %190 = getelementptr inbounds { ptr, i8 }, ptr %13, i32 0, i32 0
  %191 = extractvalue { ptr, i8 } %189, 0
  store ptr %191, ptr %190, align 8
  %192 = getelementptr inbounds { ptr, i8 }, ptr %13, i32 0, i32 1
  %193 = extractvalue { ptr, i8 } %189, 1
  store i8 %193, ptr %192, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %194 = load i32, ptr %7, align 4, !tbaa !9
  %195 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %194)
  store ptr %195, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %196 = load ptr, ptr %14, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %196, i32 0, i32 9
  store ptr %197, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %198 = load ptr, ptr %15, align 8, !tbaa !5
  %199 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %198) #8
  store ptr %199, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %200 = load ptr, ptr %15, align 8, !tbaa !5
  %201 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %200) #8
  store ptr %201, ptr %17, align 8, !tbaa !5
  br label %202

202:                                              ; preds = %803, %187
  %203 = load ptr, ptr %16, align 8, !tbaa !5
  %204 = load ptr, ptr %17, align 8, !tbaa !5
  %205 = icmp ne ptr %203, %204
  br i1 %205, label %207, label %206

206:                                              ; preds = %202
  store i32 2, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %806

207:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  %208 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 4 %208, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %209 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %19)
  %210 = call noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %209)
  store ptr %210, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %211 = load ptr, ptr %20, align 8, !tbaa !5
  %212 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %211, i32 0, i32 13
  store ptr %212, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %213 = load ptr, ptr %21, align 8, !tbaa !5
  %214 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_11InstructionEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %213) #8
  store ptr %214, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %215 = load ptr, ptr %21, align 8, !tbaa !5
  %216 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_11InstructionEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %215) #8
  store ptr %216, ptr %23, align 8, !tbaa !5
  br label %217

217:                                              ; preds = %781, %207
  %218 = load ptr, ptr %22, align 8, !tbaa !5
  %219 = load ptr, ptr %23, align 8, !tbaa !5
  %220 = icmp ne ptr %218, %219
  br i1 %220, label %222, label %221

221:                                              ; preds = %217
  store i32 4, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %785

222:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %223 = load ptr, ptr %22, align 8, !tbaa !5
  store ptr %223, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %224 = load ptr, ptr %24, align 8, !tbaa !5
  %225 = call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %172, ptr noundef nonnull align 4 dereferenceable(12) %224)
  store ptr %225, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  %226 = load ptr, ptr %24, align 8, !tbaa !5
  %227 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %226, i32 0, i32 0
  %228 = load i16, ptr %227, align 4, !tbaa !12
  %229 = zext i16 %228 to i32
  store i32 %229, ptr %26, align 4, !tbaa !15
  %230 = load i32, ptr %26, align 4, !tbaa !15
  switch i32 %230, label %760 [
    i32 61, label %231
    i32 66, label %231
    i32 65, label %231
    i32 67, label %231
    i32 68, label %231
    i32 57, label %328
    i32 62, label %384
    i32 169, label %447
    i32 229, label %488
    i32 230, label %488
    i32 228, label %488
    i32 232, label %488
    i32 233, label %488
    i32 234, label %488
    i32 6035, label %488
    i32 235, label %488
    i32 236, label %488
    i32 237, label %488
    i32 238, label %488
    i32 239, label %488
    i32 240, label %488
    i32 241, label %488
    i32 242, label %488
    i32 99, label %488
    i32 60, label %530
    i32 12, label %581
    i32 340, label %628
    i32 343, label %636
    i32 344, label %636
    i32 342, label %644
    i32 5380, label %667
    i32 5381, label %682
    i32 4473, label %693
    i32 4477, label %693
    i32 4474, label %693
    i32 4475, label %693
    i32 4476, label %693
    i32 6016, label %714
    i32 6017, label %714
    i32 6030, label %714
    i32 6029, label %714
    i32 6026, label %714
    i32 4479, label %714
    i32 6018, label %714
    i32 6019, label %714
    i32 6020, label %714
    i32 6021, label %714
    i32 6022, label %714
    i32 6023, label %714
    i32 6024, label %714
    i32 6025, label %714
    i32 6027, label %714
    i32 6028, label %714
    i32 6031, label %714
    i32 6032, label %714
    i32 5295, label %735
  ]

231:                                              ; preds = %222, %222, %222, %222, %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  %232 = load ptr, ptr %25, align 8, !tbaa !5
  %233 = getelementptr inbounds i32, ptr %232, i64 2
  %234 = load i32, ptr %233, align 4, !tbaa !9
  store i32 %234, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %235 = load ptr, ptr %9, align 8, !tbaa !5
  %236 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %235, ptr noundef nonnull align 4 dereferenceable(4) %27)
  %237 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %28, i32 0, i32 0
  %238 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %237, i32 0, i32 0
  store ptr %236, ptr %238, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %239 = load ptr, ptr %9, align 8, !tbaa !5
  %240 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %239) #8
  %241 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %29, i32 0, i32 0
  %242 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %241, i32 0, i32 0
  store ptr %240, ptr %242, align 8
  %243 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br i1 %243, label %244, label %251

244:                                              ; preds = %231
  %245 = load ptr, ptr %8, align 8, !tbaa !5
  %246 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %245, ptr noundef nonnull align 4 dereferenceable(4) %27)
  %247 = getelementptr inbounds { ptr, i8 }, ptr %30, i32 0, i32 0
  %248 = extractvalue { ptr, i8 } %246, 0
  store ptr %248, ptr %247, align 8
  %249 = getelementptr inbounds { ptr, i8 }, ptr %30, i32 0, i32 1
  %250 = extractvalue { ptr, i8 } %246, 1
  store i8 %250, ptr %249, align 8
  br label %251

251:                                              ; preds = %244, %231
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %252 = load ptr, ptr %25, align 8, !tbaa !5
  %253 = getelementptr inbounds i32, ptr %252, i64 0
  %254 = load i32, ptr %253, align 4, !tbaa !9
  %255 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %254)
  store ptr %255, ptr %31, align 8, !tbaa !5
  %256 = load ptr, ptr %31, align 8, !tbaa !5
  %257 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %256, i32 0, i32 2
  %258 = load i32, ptr %257, align 8, !tbaa !17
  %259 = icmp eq i32 %258, 16
  br i1 %259, label %260, label %327

260:                                              ; preds = %251
  %261 = load ptr, ptr %31, align 8, !tbaa !5
  %262 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %261, i32 0, i32 14
  %263 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %262, i32 0, i32 1
  %264 = load i32, ptr %263, align 4, !tbaa !44
  %265 = icmp eq i32 %264, 6
  br i1 %265, label %266, label %327

266:                                              ; preds = %260
  %267 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 37
  %268 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %267, i32 0, i32 39
  %269 = load i8, ptr %268, align 4, !tbaa !45, !range !193, !noundef !194
  %270 = trunc i8 %269 to i1
  br i1 %270, label %327, label %271

271:                                              ; preds = %266
  %272 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 2
  %273 = load i32, ptr %272, align 8, !tbaa !195
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %276

275:                                              ; preds = %271
  br label %278

276:                                              ; preds = %271
  call void @__assert_fail(ptr noundef @.str.115, ptr noundef @.str.25, i32 noundef 1963, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_) #9
  unreachable

277:                                              ; No predecessors!
  br label %278

278:                                              ; preds = %277, %275
  %279 = load ptr, ptr %8, align 8, !tbaa !5
  %280 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 2
  %281 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %279, ptr noundef nonnull align 4 dereferenceable(4) %280)
  %282 = getelementptr inbounds { ptr, i8 }, ptr %32, i32 0, i32 0
  %283 = extractvalue { ptr, i8 } %281, 0
  store ptr %283, ptr %282, align 8
  %284 = getelementptr inbounds { ptr, i8 }, ptr %32, i32 0, i32 1
  %285 = extractvalue { ptr, i8 } %281, 1
  store i8 %285, ptr %284, align 8
  %286 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 37
  %287 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %286, i32 0, i32 27
  %288 = load i8, ptr %287, align 1, !tbaa !196, !range !193, !noundef !194
  %289 = trunc i8 %288 to i1
  br i1 %289, label %290, label %305

290:                                              ; preds = %278
  %291 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 10
  %292 = load i32, ptr %291, align 8, !tbaa !197
  %293 = icmp ne i32 %292, 0
  br i1 %293, label %294, label %295

294:                                              ; preds = %290
  br label %297

295:                                              ; preds = %290
  call void @__assert_fail(ptr noundef @.str.116, ptr noundef @.str.25, i32 noundef 1968, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_) #9
  unreachable

296:                                              ; No predecessors!
  br label %297

297:                                              ; preds = %296, %294
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 10
  %300 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %298, ptr noundef nonnull align 4 dereferenceable(4) %299)
  %301 = getelementptr inbounds { ptr, i8 }, ptr %33, i32 0, i32 0
  %302 = extractvalue { ptr, i8 } %300, 0
  store ptr %302, ptr %301, align 8
  %303 = getelementptr inbounds { ptr, i8 }, ptr %33, i32 0, i32 1
  %304 = extractvalue { ptr, i8 } %300, 1
  store i8 %304, ptr %303, align 8
  br label %326

305:                                              ; preds = %278
  %306 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 37
  %307 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %306, i32 0, i32 51
  %308 = load i8, ptr %307, align 4, !tbaa !198, !range !193, !noundef !194
  %309 = trunc i8 %308 to i1
  br i1 %309, label %310, label %325

310:                                              ; preds = %305
  %311 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 11
  %312 = load i32, ptr %311, align 4, !tbaa !199
  %313 = icmp ne i32 %312, 0
  br i1 %313, label %314, label %315

314:                                              ; preds = %310
  br label %317

315:                                              ; preds = %310
  call void @__assert_fail(ptr noundef @.str.117, ptr noundef @.str.25, i32 noundef 1974, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_) #9
  unreachable

316:                                              ; No predecessors!
  br label %317

317:                                              ; preds = %316, %314
  %318 = load ptr, ptr %8, align 8, !tbaa !5
  %319 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 11
  %320 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %318, ptr noundef nonnull align 4 dereferenceable(4) %319)
  %321 = getelementptr inbounds { ptr, i8 }, ptr %34, i32 0, i32 0
  %322 = extractvalue { ptr, i8 } %320, 0
  store ptr %322, ptr %321, align 8
  %323 = getelementptr inbounds { ptr, i8 }, ptr %34, i32 0, i32 1
  %324 = extractvalue { ptr, i8 } %320, 1
  store i8 %324, ptr %323, align 8
  br label %325

325:                                              ; preds = %317, %305
  br label %326

326:                                              ; preds = %325, %297
  br label %327

327:                                              ; preds = %326, %266, %260, %251
  store i32 6, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %761

328:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  store i32 3, ptr %35, align 4, !tbaa !9
  br label %329

329:                                              ; preds = %359, %328
  %330 = load i32, ptr %35, align 4, !tbaa !9
  %331 = load ptr, ptr %24, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %331, i32 0, i32 3
  %333 = load i32, ptr %332, align 4, !tbaa !200
  %334 = icmp ult i32 %330, %333
  br i1 %334, label %336, label %335

335:                                              ; preds = %329
  store i32 7, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  br label %362

336:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  %337 = load ptr, ptr %25, align 8, !tbaa !5
  %338 = load i32, ptr %35, align 4, !tbaa !9
  %339 = zext i32 %338 to i64
  %340 = getelementptr inbounds i32, ptr %337, i64 %339
  %341 = load i32, ptr %340, align 4, !tbaa !9
  store i32 %341, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %342 = load ptr, ptr %9, align 8, !tbaa !5
  %343 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %342, ptr noundef nonnull align 4 dereferenceable(4) %36)
  %344 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %37, i32 0, i32 0
  %345 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %344, i32 0, i32 0
  store ptr %343, ptr %345, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %346 = load ptr, ptr %9, align 8, !tbaa !5
  %347 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %346) #8
  %348 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %38, i32 0, i32 0
  %349 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %348, i32 0, i32 0
  store ptr %347, ptr %349, align 8
  %350 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br i1 %350, label %351, label %358

351:                                              ; preds = %336
  %352 = load ptr, ptr %8, align 8, !tbaa !5
  %353 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %352, ptr noundef nonnull align 4 dereferenceable(4) %36)
  %354 = getelementptr inbounds { ptr, i8 }, ptr %39, i32 0, i32 0
  %355 = extractvalue { ptr, i8 } %353, 0
  store ptr %355, ptr %354, align 8
  %356 = getelementptr inbounds { ptr, i8 }, ptr %39, i32 0, i32 1
  %357 = extractvalue { ptr, i8 } %353, 1
  store i8 %357, ptr %356, align 8
  br label %358

358:                                              ; preds = %351, %336
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %35, align 4, !tbaa !9
  %361 = add i32 %360, 1
  store i32 %361, ptr %35, align 4, !tbaa !9
  br label %329, !llvm.loop !201

362:                                              ; preds = %335
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %363 = load ptr, ptr %25, align 8, !tbaa !5
  %364 = getelementptr inbounds i32, ptr %363, i64 2
  %365 = load i32, ptr %364, align 4, !tbaa !9
  store i32 %365, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr %41) #8
  call void @_ZNSt3setIjSt4lessIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %41) #8
  %366 = load i32, ptr %40, align 4, !tbaa !9
  %367 = load ptr, ptr %9, align 8, !tbaa !5
  %368 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_(ptr noundef nonnull align 8 dereferenceable(12482) %172, i32 noundef %366, ptr noundef nonnull align 8 dereferenceable(48) %41, ptr noundef nonnull align 8 dereferenceable(56) %367, ptr noundef nonnull align 8 dereferenceable(56) %368)
          to label %369 unwind label %380

369:                                              ; preds = %362
  %370 = load ptr, ptr %8, align 8, !tbaa !5
  %371 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %41) #8
  %372 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %44, i32 0, i32 0
  store ptr %371, ptr %372, align 8
  %373 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %41) #8
  %374 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %45, i32 0, i32 0
  store ptr %373, ptr %374, align 8
  %375 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %44, i32 0, i32 0
  %376 = load ptr, ptr %375, align 8
  %377 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %45, i32 0, i32 0
  %378 = load ptr, ptr %377, align 8
  invoke void @_ZNSt3setIjSt4lessIjESaIjEE6insertISt23_Rb_tree_const_iteratorIjEEEvT_S7_(ptr noundef nonnull align 8 dereferenceable(48) %370, ptr %376, ptr %378)
          to label %379 unwind label %380

379:                                              ; preds = %369
  store i32 6, ptr %18, align 4
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %41) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %761

380:                                              ; preds = %369, %362
  %381 = landingpad { ptr, i32 }
          cleanup
  %382 = extractvalue { ptr, i32 } %381, 0
  store ptr %382, ptr %42, align 8
  %383 = extractvalue { ptr, i32 } %381, 1
  store i32 %383, ptr %43, align 4
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %41) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %784

384:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  %385 = load ptr, ptr %25, align 8, !tbaa !5
  %386 = getelementptr inbounds i32, ptr %385, i64 0
  %387 = load i32, ptr %386, align 4, !tbaa !9
  store i32 %387, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %388 = load ptr, ptr %9, align 8, !tbaa !5
  %389 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %388, ptr noundef nonnull align 4 dereferenceable(4) %46)
  %390 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %47, i32 0, i32 0
  %391 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %390, i32 0, i32 0
  store ptr %389, ptr %391, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  %392 = load ptr, ptr %9, align 8, !tbaa !5
  %393 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %392) #8
  %394 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %48, i32 0, i32 0
  %395 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %394, i32 0, i32 0
  store ptr %393, ptr %395, align 8
  %396 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %47, ptr noundef nonnull align 8 dereferenceable(8) %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  br i1 %396, label %397, label %416

397:                                              ; preds = %384
  %398 = load ptr, ptr %8, align 8, !tbaa !5
  %399 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %398, ptr noundef nonnull align 4 dereferenceable(4) %46)
  %400 = getelementptr inbounds { ptr, i8 }, ptr %49, i32 0, i32 0
  %401 = extractvalue { ptr, i8 } %399, 0
  store ptr %401, ptr %400, align 8
  %402 = getelementptr inbounds { ptr, i8 }, ptr %49, i32 0, i32 1
  %403 = extractvalue { ptr, i8 } %399, 1
  store i8 %403, ptr %402, align 8
  %404 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 37
  %405 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %404, i32 0, i32 65
  %406 = load i8, ptr %405, align 4, !tbaa !203, !range !193, !noundef !194
  %407 = trunc i8 %406 to i1
  br i1 %407, label %408, label %415

408:                                              ; preds = %397
  %409 = load i32, ptr %46, align 4, !tbaa !9
  %410 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 23
  %411 = load i32, ptr %410, align 4, !tbaa !204
  %412 = icmp eq i32 %409, %411
  br i1 %412, label %413, label %415

413:                                              ; preds = %408
  %414 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 84
  store i8 1, ptr %414, align 4, !tbaa !205
  br label %415

415:                                              ; preds = %413, %408, %397
  br label %416

416:                                              ; preds = %415, %384
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  %417 = load ptr, ptr %25, align 8, !tbaa !5
  %418 = getelementptr inbounds i32, ptr %417, i64 1
  %419 = load i32, ptr %418, align 4, !tbaa !9
  store i32 %419, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  %420 = load ptr, ptr %9, align 8, !tbaa !5
  %421 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %420, ptr noundef nonnull align 4 dereferenceable(4) %50)
  %422 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %51, i32 0, i32 0
  %423 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %422, i32 0, i32 0
  store ptr %421, ptr %423, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  %424 = load ptr, ptr %9, align 8, !tbaa !5
  %425 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %424) #8
  %426 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %52, i32 0, i32 0
  %427 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %426, i32 0, i32 0
  store ptr %425, ptr %427, align 8
  %428 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 8 dereferenceable(8) %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br i1 %428, label %429, label %436

429:                                              ; preds = %416
  %430 = load ptr, ptr %8, align 8, !tbaa !5
  %431 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %430, ptr noundef nonnull align 4 dereferenceable(4) %50)
  %432 = getelementptr inbounds { ptr, i8 }, ptr %53, i32 0, i32 0
  %433 = extractvalue { ptr, i8 } %431, 0
  store ptr %433, ptr %432, align 8
  %434 = getelementptr inbounds { ptr, i8 }, ptr %53, i32 0, i32 1
  %435 = extractvalue { ptr, i8 } %431, 1
  store i8 %435, ptr %434, align 8
  br label %436

436:                                              ; preds = %429, %416
  %437 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %172)
  br i1 %437, label %438, label %446

438:                                              ; preds = %436
  %439 = load ptr, ptr %8, align 8, !tbaa !5
  %440 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 5
  %441 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %439, ptr noundef nonnull align 4 dereferenceable(4) %440)
  %442 = getelementptr inbounds { ptr, i8 }, ptr %54, i32 0, i32 0
  %443 = extractvalue { ptr, i8 } %441, 0
  store ptr %443, ptr %442, align 8
  %444 = getelementptr inbounds { ptr, i8 }, ptr %54, i32 0, i32 1
  %445 = extractvalue { ptr, i8 } %441, 1
  store i8 %445, ptr %444, align 8
  br label %446

446:                                              ; preds = %438, %436
  store i32 6, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %761

447:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  %448 = load ptr, ptr %25, align 8, !tbaa !5
  %449 = getelementptr inbounds i32, ptr %448, i64 3
  %450 = load i32, ptr %449, align 4, !tbaa !9
  store i32 %450, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  %451 = load ptr, ptr %9, align 8, !tbaa !5
  %452 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %451, ptr noundef nonnull align 4 dereferenceable(4) %55)
  %453 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %56, i32 0, i32 0
  %454 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %453, i32 0, i32 0
  store ptr %452, ptr %454, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  %455 = load ptr, ptr %9, align 8, !tbaa !5
  %456 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %455) #8
  %457 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %57, i32 0, i32 0
  %458 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %457, i32 0, i32 0
  store ptr %456, ptr %458, align 8
  %459 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  br i1 %459, label %460, label %467

460:                                              ; preds = %447
  %461 = load ptr, ptr %8, align 8, !tbaa !5
  %462 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %461, ptr noundef nonnull align 4 dereferenceable(4) %55)
  %463 = getelementptr inbounds { ptr, i8 }, ptr %58, i32 0, i32 0
  %464 = extractvalue { ptr, i8 } %462, 0
  store ptr %464, ptr %463, align 8
  %465 = getelementptr inbounds { ptr, i8 }, ptr %58, i32 0, i32 1
  %466 = extractvalue { ptr, i8 } %462, 1
  store i8 %466, ptr %465, align 8
  br label %467

467:                                              ; preds = %460, %447
  %468 = load ptr, ptr %25, align 8, !tbaa !5
  %469 = getelementptr inbounds i32, ptr %468, i64 4
  %470 = load i32, ptr %469, align 4, !tbaa !9
  store i32 %470, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %471 = load ptr, ptr %9, align 8, !tbaa !5
  %472 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %471, ptr noundef nonnull align 4 dereferenceable(4) %55)
  %473 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %59, i32 0, i32 0
  %474 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %473, i32 0, i32 0
  store ptr %472, ptr %474, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %475 = load ptr, ptr %9, align 8, !tbaa !5
  %476 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %475) #8
  %477 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %60, i32 0, i32 0
  %478 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %477, i32 0, i32 0
  store ptr %476, ptr %478, align 8
  %479 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  br i1 %479, label %480, label %487

480:                                              ; preds = %467
  %481 = load ptr, ptr %8, align 8, !tbaa !5
  %482 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %481, ptr noundef nonnull align 4 dereferenceable(4) %55)
  %483 = getelementptr inbounds { ptr, i8 }, ptr %61, i32 0, i32 0
  %484 = extractvalue { ptr, i8 } %482, 0
  store ptr %484, ptr %483, align 8
  %485 = getelementptr inbounds { ptr, i8 }, ptr %61, i32 0, i32 1
  %486 = extractvalue { ptr, i8 } %482, 1
  store i8 %486, ptr %485, align 8
  br label %487

487:                                              ; preds = %480, %467
  store i32 6, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  br label %761

488:                                              ; preds = %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222
  %489 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %172)
  br i1 %489, label %490, label %498

490:                                              ; preds = %488
  %491 = load ptr, ptr %8, align 8, !tbaa !5
  %492 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 5
  %493 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %491, ptr noundef nonnull align 4 dereferenceable(4) %492)
  %494 = getelementptr inbounds { ptr, i8 }, ptr %62, i32 0, i32 0
  %495 = extractvalue { ptr, i8 } %493, 0
  store ptr %495, ptr %494, align 8
  %496 = getelementptr inbounds { ptr, i8 }, ptr %62, i32 0, i32 1
  %497 = extractvalue { ptr, i8 } %493, 1
  store i8 %497, ptr %496, align 8
  br label %498

498:                                              ; preds = %490, %488
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  store i32 0, ptr %63, align 4, !tbaa !9
  %499 = load i32, ptr %26, align 4, !tbaa !15
  %500 = icmp eq i32 %499, 228
  br i1 %500, label %504, label %501

501:                                              ; preds = %498
  %502 = load i32, ptr %26, align 4, !tbaa !15
  %503 = icmp eq i32 %502, 99
  br i1 %503, label %504, label %508

504:                                              ; preds = %501, %498
  %505 = load ptr, ptr %25, align 8, !tbaa !5
  %506 = getelementptr inbounds i32, ptr %505, i64 0
  %507 = load i32, ptr %506, align 4, !tbaa !9
  store i32 %507, ptr %63, align 4, !tbaa !9
  br label %512

508:                                              ; preds = %501
  %509 = load ptr, ptr %25, align 8, !tbaa !5
  %510 = getelementptr inbounds i32, ptr %509, i64 2
  %511 = load i32, ptr %510, align 4, !tbaa !9
  store i32 %511, ptr %63, align 4, !tbaa !9
  br label %512

512:                                              ; preds = %508, %504
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #8
  %513 = load ptr, ptr %9, align 8, !tbaa !5
  %514 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %513, ptr noundef nonnull align 4 dereferenceable(4) %63)
  %515 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %64, i32 0, i32 0
  %516 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %515, i32 0, i32 0
  store ptr %514, ptr %516, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #8
  %517 = load ptr, ptr %9, align 8, !tbaa !5
  %518 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %517) #8
  %519 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %65, i32 0, i32 0
  %520 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %519, i32 0, i32 0
  store ptr %518, ptr %520, align 8
  %521 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef nonnull align 8 dereferenceable(8) %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  br i1 %521, label %522, label %529

522:                                              ; preds = %512
  %523 = load ptr, ptr %8, align 8, !tbaa !5
  %524 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %523, ptr noundef nonnull align 4 dereferenceable(4) %63)
  %525 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 0
  %526 = extractvalue { ptr, i8 } %524, 0
  store ptr %526, ptr %525, align 8
  %527 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 1
  %528 = extractvalue { ptr, i8 } %524, 1
  store i8 %528, ptr %527, align 8
  br label %529

529:                                              ; preds = %522, %512
  store i32 6, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #8
  br label %761

530:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %531 = load ptr, ptr %25, align 8, !tbaa !5
  %532 = getelementptr inbounds i32, ptr %531, i64 2
  %533 = load i32, ptr %532, align 4, !tbaa !9
  store i32 %533, ptr %67, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #8
  %534 = load i32, ptr %67, align 4, !tbaa !9
  %535 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %534)
  store ptr %535, ptr %68, align 8, !tbaa !5
  %536 = load ptr, ptr %68, align 8, !tbaa !5
  %537 = icmp ne ptr %536, null
  br i1 %537, label %538, label %580

538:                                              ; preds = %530
  %539 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 109
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  %540 = load ptr, ptr %68, align 8, !tbaa !5
  %541 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %540, i32 0, i32 1
  %542 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %541)
  store i32 %542, ptr %69, align 4, !tbaa !9
  %543 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %539, ptr noundef nonnull align 4 dereferenceable(4) %69)
  %544 = icmp ne i64 %543, 0
  br i1 %544, label %545, label %553

545:                                              ; preds = %538
  %546 = load ptr, ptr %68, align 8, !tbaa !5
  %547 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %546, i32 0, i32 1
  %548 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %547)
  %549 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %548)
  %550 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %549, i32 0, i32 6
  %551 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %550) #8
  %552 = xor i1 %551, true
  br label %553

553:                                              ; preds = %545, %538
  %554 = phi i1 [ false, %538 ], [ %552, %545 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  br i1 %554, label %555, label %562

555:                                              ; preds = %553
  %556 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %556, ptr noundef @.str.118)
          to label %557 unwind label %558

557:                                              ; preds = %555
  call void @__cxa_throw(ptr %556, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

558:                                              ; preds = %555
  %559 = landingpad { ptr, i32 }
          cleanup
  %560 = extractvalue { ptr, i32 } %559, 0
  store ptr %560, ptr %42, align 8
  %561 = extractvalue { ptr, i32 } %559, 1
  store i32 %561, ptr %43, align 4
  call void @__cxa_free_exception(ptr %556) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %784

562:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #8
  %563 = load ptr, ptr %9, align 8, !tbaa !5
  %564 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %563, ptr noundef nonnull align 4 dereferenceable(4) %67)
  %565 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %70, i32 0, i32 0
  %566 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %565, i32 0, i32 0
  store ptr %564, ptr %566, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #8
  %567 = load ptr, ptr %9, align 8, !tbaa !5
  %568 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %567) #8
  %569 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %71, i32 0, i32 0
  %570 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %569, i32 0, i32 0
  store ptr %568, ptr %570, align 8
  %571 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #8
  br i1 %571, label %572, label %579

572:                                              ; preds = %562
  %573 = load ptr, ptr %8, align 8, !tbaa !5
  %574 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %573, ptr noundef nonnull align 4 dereferenceable(4) %67)
  %575 = getelementptr inbounds { ptr, i8 }, ptr %72, i32 0, i32 0
  %576 = extractvalue { ptr, i8 } %574, 0
  store ptr %576, ptr %575, align 8
  %577 = getelementptr inbounds { ptr, i8 }, ptr %72, i32 0, i32 1
  %578 = extractvalue { ptr, i8 } %574, 1
  store i8 %578, ptr %577, align 8
  br label %579

579:                                              ; preds = %572, %562
  br label %580

580:                                              ; preds = %579, %530
  store i32 6, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %761

581:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #8
  %582 = load ptr, ptr %25, align 8, !tbaa !5
  %583 = getelementptr inbounds i32, ptr %582, i64 2
  %584 = load i32, ptr %583, align 4, !tbaa !9
  store i32 %584, ptr %73, align 4, !tbaa !9
  %585 = load i32, ptr %73, align 4, !tbaa !9
  %586 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross8Compiler3getINS_13SPIRExtensionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %585)
  %587 = getelementptr inbounds %"struct.spirv_cross::SPIRExtension", ptr %586, i32 0, i32 1
  %588 = load i32, ptr %587, align 4, !tbaa !206
  %589 = icmp eq i32 %588, 1
  br i1 %589, label %590, label %627

590:                                              ; preds = %581
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #8
  %591 = load ptr, ptr %25, align 8, !tbaa !5
  %592 = getelementptr inbounds i32, ptr %591, i64 3
  %593 = load i32, ptr %592, align 4, !tbaa !9
  store i32 %593, ptr %74, align 4, !tbaa !209
  %594 = load i32, ptr %74, align 4, !tbaa !209
  switch i32 %594, label %625 [
    i32 76, label %595
    i32 77, label %595
    i32 78, label %595
    i32 35, label %604
    i32 51, label %604
  ]

595:                                              ; preds = %590, %590, %590
  %596 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  %597 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 59
  %598 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %597)
  store i32 %598, ptr %75, align 4, !tbaa !9
  %599 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(48) %596, ptr noundef nonnull align 4 dereferenceable(4) %75)
  %600 = getelementptr inbounds { ptr, i8 }, ptr %76, i32 0, i32 0
  %601 = extractvalue { ptr, i8 } %599, 0
  store ptr %601, ptr %600, align 8
  %602 = getelementptr inbounds { ptr, i8 }, ptr %76, i32 0, i32 1
  %603 = extractvalue { ptr, i8 } %599, 1
  store i8 %603, ptr %602, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  br label %626

604:                                              ; preds = %590, %590
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  %605 = load ptr, ptr %25, align 8, !tbaa !5
  %606 = getelementptr inbounds i32, ptr %605, i64 5
  %607 = load i32, ptr %606, align 4, !tbaa !9
  store i32 %607, ptr %77, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #8
  %608 = load ptr, ptr %9, align 8, !tbaa !5
  %609 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %608, ptr noundef nonnull align 4 dereferenceable(4) %77)
  %610 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %78, i32 0, i32 0
  %611 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %610, i32 0, i32 0
  store ptr %609, ptr %611, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #8
  %612 = load ptr, ptr %9, align 8, !tbaa !5
  %613 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %612) #8
  %614 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %79, i32 0, i32 0
  %615 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %614, i32 0, i32 0
  store ptr %613, ptr %615, align 8
  %616 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %78, ptr noundef nonnull align 8 dereferenceable(8) %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  br i1 %616, label %617, label %624

617:                                              ; preds = %604
  %618 = load ptr, ptr %8, align 8, !tbaa !5
  %619 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %618, ptr noundef nonnull align 4 dereferenceable(4) %77)
  %620 = getelementptr inbounds { ptr, i8 }, ptr %80, i32 0, i32 0
  %621 = extractvalue { ptr, i8 } %619, 0
  store ptr %621, ptr %620, align 8
  %622 = getelementptr inbounds { ptr, i8 }, ptr %80, i32 0, i32 1
  %623 = extractvalue { ptr, i8 } %619, 1
  store i8 %623, ptr %622, align 8
  br label %624

624:                                              ; preds = %617, %604
  store i32 10, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  br label %626

625:                                              ; preds = %590
  br label %626

626:                                              ; preds = %625, %624, %595
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #8
  br label %627

627:                                              ; preds = %626, %581
  store i32 6, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #8
  br label %761

628:                                              ; preds = %222
  %629 = load ptr, ptr %8, align 8, !tbaa !5
  %630 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 14
  %631 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %629, ptr noundef nonnull align 4 dereferenceable(4) %630)
  %632 = getelementptr inbounds { ptr, i8 }, ptr %81, i32 0, i32 0
  %633 = extractvalue { ptr, i8 } %631, 0
  store ptr %633, ptr %632, align 8
  %634 = getelementptr inbounds { ptr, i8 }, ptr %81, i32 0, i32 1
  %635 = extractvalue { ptr, i8 } %631, 1
  store i8 %635, ptr %634, align 8
  br label %761

636:                                              ; preds = %222, %222
  %637 = load ptr, ptr %8, align 8, !tbaa !5
  %638 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 15
  %639 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %637, ptr noundef nonnull align 4 dereferenceable(4) %638)
  %640 = getelementptr inbounds { ptr, i8 }, ptr %82, i32 0, i32 0
  %641 = extractvalue { ptr, i8 } %639, 0
  store ptr %641, ptr %640, align 8
  %642 = getelementptr inbounds { ptr, i8 }, ptr %82, i32 0, i32 1
  %643 = extractvalue { ptr, i8 } %639, 1
  store i8 %643, ptr %642, align 8
  br label %761

644:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  %645 = load ptr, ptr %25, align 8, !tbaa !5
  %646 = getelementptr inbounds i32, ptr %645, i64 3
  %647 = load i32, ptr %646, align 4, !tbaa !9
  store i32 %647, ptr %83, align 4, !tbaa !211
  %648 = load i32, ptr %83, align 4, !tbaa !211
  switch i32 %648, label %665 [
    i32 0, label %649
    i32 1, label %657
    i32 2, label %657
  ]

649:                                              ; preds = %644
  %650 = load ptr, ptr %8, align 8, !tbaa !5
  %651 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 15
  %652 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %650, ptr noundef nonnull align 4 dereferenceable(4) %651)
  %653 = getelementptr inbounds { ptr, i8 }, ptr %84, i32 0, i32 0
  %654 = extractvalue { ptr, i8 } %652, 0
  store ptr %654, ptr %653, align 8
  %655 = getelementptr inbounds { ptr, i8 }, ptr %84, i32 0, i32 1
  %656 = extractvalue { ptr, i8 } %652, 1
  store i8 %656, ptr %655, align 8
  br label %666

657:                                              ; preds = %644, %644
  %658 = load ptr, ptr %8, align 8, !tbaa !5
  %659 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 14
  %660 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %658, ptr noundef nonnull align 4 dereferenceable(4) %659)
  %661 = getelementptr inbounds { ptr, i8 }, ptr %85, i32 0, i32 0
  %662 = extractvalue { ptr, i8 } %660, 0
  store ptr %662, ptr %661, align 8
  %663 = getelementptr inbounds { ptr, i8 }, ptr %85, i32 0, i32 1
  %664 = extractvalue { ptr, i8 } %660, 1
  store i8 %664, ptr %663, align 8
  br label %666

665:                                              ; preds = %644
  br label %666

666:                                              ; preds = %665, %657, %649
  store i32 6, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  br label %761

667:                                              ; preds = %222
  %668 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL38needs_manual_helper_invocation_updatesEv(ptr noundef nonnull align 8 dereferenceable(12482) %172)
  br i1 %668, label %669, label %681

669:                                              ; preds = %667
  %670 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 83
  %671 = load i8, ptr %670, align 1, !tbaa !213, !range !193, !noundef !194
  %672 = trunc i8 %671 to i1
  br i1 %672, label %673, label %681

673:                                              ; preds = %669
  %674 = load ptr, ptr %8, align 8, !tbaa !5
  %675 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 5
  %676 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %674, ptr noundef nonnull align 4 dereferenceable(4) %675)
  %677 = getelementptr inbounds { ptr, i8 }, ptr %86, i32 0, i32 0
  %678 = extractvalue { ptr, i8 } %676, 0
  store ptr %678, ptr %677, align 8
  %679 = getelementptr inbounds { ptr, i8 }, ptr %86, i32 0, i32 1
  %680 = extractvalue { ptr, i8 } %676, 1
  store i8 %680, ptr %679, align 8
  br label %681

681:                                              ; preds = %673, %669, %667
  br label %761

682:                                              ; preds = %222
  %683 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL38needs_manual_helper_invocation_updatesEv(ptr noundef nonnull align 8 dereferenceable(12482) %172)
  br i1 %683, label %684, label %692

684:                                              ; preds = %682
  %685 = load ptr, ptr %8, align 8, !tbaa !5
  %686 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 5
  %687 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %685, ptr noundef nonnull align 4 dereferenceable(4) %686)
  %688 = getelementptr inbounds { ptr, i8 }, ptr %87, i32 0, i32 0
  %689 = extractvalue { ptr, i8 } %687, 0
  store ptr %689, ptr %688, align 8
  %690 = getelementptr inbounds { ptr, i8 }, ptr %87, i32 0, i32 1
  %691 = extractvalue { ptr, i8 } %687, 1
  store i8 %691, ptr %690, align 8
  br label %692

692:                                              ; preds = %684, %682
  br label %761

693:                                              ; preds = %222, %222, %222, %222, %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #8
  %694 = load ptr, ptr %25, align 8, !tbaa !5
  %695 = getelementptr inbounds i32, ptr %694, i64 0
  %696 = load i32, ptr %695, align 4, !tbaa !9
  store i32 %696, ptr %88, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #8
  %697 = load ptr, ptr %9, align 8, !tbaa !5
  %698 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %697, ptr noundef nonnull align 4 dereferenceable(4) %88)
  %699 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %89, i32 0, i32 0
  %700 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %699, i32 0, i32 0
  store ptr %698, ptr %700, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #8
  %701 = load ptr, ptr %9, align 8, !tbaa !5
  %702 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %701) #8
  %703 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %90, i32 0, i32 0
  %704 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %703, i32 0, i32 0
  store ptr %702, ptr %704, align 8
  %705 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %89, ptr noundef nonnull align 8 dereferenceable(8) %90) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #8
  br i1 %705, label %706, label %713

706:                                              ; preds = %693
  %707 = load ptr, ptr %8, align 8, !tbaa !5
  %708 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %707, ptr noundef nonnull align 4 dereferenceable(4) %88)
  %709 = getelementptr inbounds { ptr, i8 }, ptr %91, i32 0, i32 0
  %710 = extractvalue { ptr, i8 } %708, 0
  store ptr %710, ptr %709, align 8
  %711 = getelementptr inbounds { ptr, i8 }, ptr %91, i32 0, i32 1
  %712 = extractvalue { ptr, i8 } %708, 1
  store i8 %712, ptr %711, align 8
  br label %713

713:                                              ; preds = %706, %693
  store i32 6, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #8
  br label %761

714:                                              ; preds = %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222, %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #8
  %715 = load ptr, ptr %25, align 8, !tbaa !5
  %716 = getelementptr inbounds i32, ptr %715, i64 2
  %717 = load i32, ptr %716, align 4, !tbaa !9
  store i32 %717, ptr %92, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #8
  %718 = load ptr, ptr %9, align 8, !tbaa !5
  %719 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %718, ptr noundef nonnull align 4 dereferenceable(4) %92)
  %720 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %93, i32 0, i32 0
  %721 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %720, i32 0, i32 0
  store ptr %719, ptr %721, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #8
  %722 = load ptr, ptr %9, align 8, !tbaa !5
  %723 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %722) #8
  %724 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %94, i32 0, i32 0
  %725 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %724, i32 0, i32 0
  store ptr %723, ptr %725, align 8
  %726 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull align 8 dereferenceable(8) %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  br i1 %726, label %727, label %734

727:                                              ; preds = %714
  %728 = load ptr, ptr %8, align 8, !tbaa !5
  %729 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %728, ptr noundef nonnull align 4 dereferenceable(4) %92)
  %730 = getelementptr inbounds { ptr, i8 }, ptr %95, i32 0, i32 0
  %731 = extractvalue { ptr, i8 } %729, 0
  store ptr %731, ptr %730, align 8
  %732 = getelementptr inbounds { ptr, i8 }, ptr %95, i32 0, i32 1
  %733 = extractvalue { ptr, i8 } %729, 1
  store i8 %733, ptr %732, align 8
  br label %734

734:                                              ; preds = %727, %714
  store i32 6, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  br label %761

735:                                              ; preds = %222
  %736 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 18
  %737 = load i32, ptr %736, align 8, !tbaa !214
  %738 = icmp ne i32 %737, 0
  br i1 %738, label %739, label %747

739:                                              ; preds = %735
  %740 = load ptr, ptr %8, align 8, !tbaa !5
  %741 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 18
  %742 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %740, ptr noundef nonnull align 4 dereferenceable(4) %741)
  %743 = getelementptr inbounds { ptr, i8 }, ptr %96, i32 0, i32 0
  %744 = extractvalue { ptr, i8 } %742, 0
  store ptr %744, ptr %743, align 8
  %745 = getelementptr inbounds { ptr, i8 }, ptr %96, i32 0, i32 1
  %746 = extractvalue { ptr, i8 } %742, 1
  store i8 %746, ptr %745, align 8
  br label %747

747:                                              ; preds = %739, %735
  %748 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 21
  %749 = load i32, ptr %748, align 4, !tbaa !215
  %750 = icmp ne i32 %749, 0
  br i1 %750, label %751, label %759

751:                                              ; preds = %747
  %752 = load ptr, ptr %8, align 8, !tbaa !5
  %753 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 21
  %754 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %752, ptr noundef nonnull align 4 dereferenceable(4) %753)
  %755 = getelementptr inbounds { ptr, i8 }, ptr %97, i32 0, i32 0
  %756 = extractvalue { ptr, i8 } %754, 0
  store ptr %756, ptr %755, align 8
  %757 = getelementptr inbounds { ptr, i8 }, ptr %97, i32 0, i32 1
  %758 = extractvalue { ptr, i8 } %754, 1
  store i8 %758, ptr %757, align 8
  br label %759

759:                                              ; preds = %751, %747
  br label %761

760:                                              ; preds = %222
  br label %761

761:                                              ; preds = %760, %759, %734, %713, %692, %681, %666, %636, %628, %627, %580, %529, %487, %446, %379, %327
  %762 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL38needs_manual_helper_invocation_updatesEv(ptr noundef nonnull align 8 dereferenceable(12482) %172)
  br i1 %762, label %763, label %780

763:                                              ; preds = %761
  %764 = load ptr, ptr %20, align 8, !tbaa !5
  %765 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %764, i32 0, i32 1
  %766 = load i32, ptr %765, align 4, !tbaa !216
  %767 = icmp eq i32 %766, 6
  br i1 %767, label %768, label %780

768:                                              ; preds = %763
  %769 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 83
  %770 = load i8, ptr %769, align 1, !tbaa !213, !range !193, !noundef !194
  %771 = trunc i8 %770 to i1
  br i1 %771, label %772, label %780

772:                                              ; preds = %768
  %773 = load ptr, ptr %8, align 8, !tbaa !5
  %774 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 5
  %775 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %773, ptr noundef nonnull align 4 dereferenceable(4) %774)
  %776 = getelementptr inbounds { ptr, i8 }, ptr %98, i32 0, i32 0
  %777 = extractvalue { ptr, i8 } %775, 0
  store ptr %777, ptr %776, align 8
  %778 = getelementptr inbounds { ptr, i8 }, ptr %98, i32 0, i32 1
  %779 = extractvalue { ptr, i8 } %775, 1
  store i8 %779, ptr %778, align 8
  br label %780

780:                                              ; preds = %772, %768, %763, %761
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %781

781:                                              ; preds = %780
  %782 = load ptr, ptr %22, align 8, !tbaa !5
  %783 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %782, i32 1
  store ptr %783, ptr %22, align 8, !tbaa !5
  br label %217

784:                                              ; preds = %558, %380
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %1338

785:                                              ; preds = %221
  %786 = load ptr, ptr %20, align 8, !tbaa !5
  %787 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %786, i32 0, i32 1
  %788 = load i32, ptr %787, align 4, !tbaa !216
  %789 = icmp eq i32 %788, 9
  br i1 %789, label %790, label %802

790:                                              ; preds = %785
  %791 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 22
  %792 = load i32, ptr %791, align 8, !tbaa !238
  %793 = icmp ne i32 %792, 0
  br i1 %793, label %794, label %802

794:                                              ; preds = %790
  %795 = load ptr, ptr %8, align 8, !tbaa !5
  %796 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 22
  %797 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %795, ptr noundef nonnull align 4 dereferenceable(4) %796)
  %798 = getelementptr inbounds { ptr, i8 }, ptr %99, i32 0, i32 0
  %799 = extractvalue { ptr, i8 } %797, 0
  store ptr %799, ptr %798, align 8
  %800 = getelementptr inbounds { ptr, i8 }, ptr %99, i32 0, i32 1
  %801 = extractvalue { ptr, i8 } %797, 1
  store i8 %801, ptr %800, align 8
  br label %802

802:                                              ; preds = %794, %790, %785
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  br label %803

803:                                              ; preds = %802
  %804 = load ptr, ptr %16, align 8, !tbaa !5
  %805 = getelementptr inbounds %"class.spirv_cross::TypedID.415", ptr %804, i32 1
  store ptr %805, ptr %16, align 8, !tbaa !5
  br label %202

806:                                              ; preds = %206
  %807 = load ptr, ptr %8, align 8, !tbaa !5
  %808 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 1
  %809 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %808, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %810 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3setIjSt4lessIjESaIjEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(48) %809, ptr noundef nonnull align 8 dereferenceable(48) %807)
  %811 = load i32, ptr %7, align 4, !tbaa !9
  %812 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %813 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %812, i32 0, i32 13
  %814 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %813)
  %815 = icmp ne i32 %811, %814
  br i1 %815, label %816, label %1336

816:                                              ; preds = %806
  call void @llvm.lifetime.start.p0(i64 1, ptr %100) #8
  store i8 0, ptr %100, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 1, ptr %101) #8
  store i8 0, ptr %101, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 1, ptr %102) #8
  store i8 0, ptr %102, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 1, ptr %103) #8
  store i8 0, ptr %103, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #8
  %817 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %817, ptr %104, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #8
  %818 = load ptr, ptr %104, align 8, !tbaa !5
  %819 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %818) #8
  %820 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %105, i32 0, i32 0
  store ptr %819, ptr %820, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #8
  %821 = load ptr, ptr %104, align 8, !tbaa !5
  %822 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %821) #8
  %823 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %106, i32 0, i32 0
  store ptr %822, ptr %823, align 8
  br label %824

824:                                              ; preds = %1332, %816
  %825 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8) %105, ptr noundef nonnull align 8 dereferenceable(8) %106) #8
  br i1 %825, label %827, label %826

826:                                              ; preds = %824
  store i32 12, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #8
  br label %1335

827:                                              ; preds = %824
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #8
  %828 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt23_Rb_tree_const_iteratorIjEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %105) #8
  %829 = load i32, ptr %828, align 4, !tbaa !9
  store i32 %829, ptr %107, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #8
  %830 = load i32, ptr %107, align 4, !tbaa !9
  %831 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %830)
  store ptr %831, ptr %108, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #8
  %832 = load ptr, ptr %108, align 8, !tbaa !5
  %833 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %832, i32 0, i32 1
  %834 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %833)
  store i32 %834, ptr %109, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #8
  %835 = load i32, ptr %109, align 4, !tbaa !9
  %836 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %835)
  store ptr %836, ptr %110, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #8
  %837 = load i32, ptr %107, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %112, i32 noundef %837)
  %838 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %112, i32 0, i32 0
  %839 = load i32, ptr %838, align 4
  %840 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 %839, i32 noundef 11)
  store i32 %840, ptr %111, align 4, !tbaa !240
  call void @llvm.lifetime.start.p0(i64 1, ptr %113) #8
  %841 = load i32, ptr %107, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %114, i32 noundef %841)
  %842 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %114, i32 0, i32 0
  %843 = load i32, ptr %842, align 4
  %844 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 %843, i32 noundef 15)
  br i1 %844, label %848, label %845

845:                                              ; preds = %827
  %846 = load ptr, ptr %110, align 8, !tbaa !5
  %847 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL14is_patch_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %172, ptr noundef nonnull align 8 dereferenceable(336) %846)
  br label %848

848:                                              ; preds = %845, %827
  %849 = phi i1 [ true, %827 ], [ %847, %845 ]
  %850 = zext i1 %849 to i8
  store i8 %850, ptr %113, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 1, ptr %115) #8
  %851 = load ptr, ptr %110, align 8, !tbaa !5
  %852 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %851, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %116, ptr align 8 %852, i64 4, i1 false), !tbaa.struct !11
  %853 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %116, i32 0, i32 0
  %854 = load i32, ptr %853, align 4
  %855 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 %854, i32 noundef 2)
  %856 = zext i1 %855 to i8
  store i8 %856, ptr %115, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 1, ptr %117) #8
  %857 = load i8, ptr %113, align 1, !tbaa !239, !range !193, !noundef !194
  %858 = trunc i8 %857 to i1
  br i1 %858, label %877, label %859

859:                                              ; preds = %848
  %860 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %172)
  br i1 %860, label %861, label %866

861:                                              ; preds = %859
  %862 = load ptr, ptr %108, align 8, !tbaa !5
  %863 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %862, i32 0, i32 2
  %864 = load i32, ptr %863, align 8, !tbaa !242
  %865 = icmp eq i32 %864, 1
  br i1 %865, label %875, label %866

866:                                              ; preds = %861, %859
  %867 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %172)
  br i1 %867, label %868, label %873

868:                                              ; preds = %866
  %869 = load ptr, ptr %108, align 8, !tbaa !5
  %870 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %869, i32 0, i32 2
  %871 = load i32, ptr %870, align 8, !tbaa !242
  %872 = icmp eq i32 %871, 3
  br label %873

873:                                              ; preds = %868, %866
  %874 = phi i1 [ false, %866 ], [ %872, %868 ]
  br label %875

875:                                              ; preds = %873, %861
  %876 = phi i1 [ true, %861 ], [ %874, %873 ]
  br label %877

877:                                              ; preds = %875, %848
  %878 = phi i1 [ false, %848 ], [ %876, %875 ]
  %879 = zext i1 %878 to i8
  store i8 %879, ptr %117, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 1, ptr %118) #8
  %880 = load i8, ptr %113, align 1, !tbaa !239, !range !193, !noundef !194
  %881 = trunc i8 %880 to i1
  br i1 %881, label %882, label %890

882:                                              ; preds = %877
  %883 = load i8, ptr %115, align 1, !tbaa !239, !range !193, !noundef !194
  %884 = trunc i8 %883 to i1
  br i1 %884, label %885, label %890

885:                                              ; preds = %882
  %886 = load ptr, ptr %108, align 8, !tbaa !5
  %887 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %886, i32 0, i32 2
  %888 = load i32, ptr %887, align 8, !tbaa !242
  %889 = icmp eq i32 %888, 3
  br label %890

890:                                              ; preds = %885, %882, %877
  %891 = phi i1 [ false, %882 ], [ false, %877 ], [ %889, %885 ]
  %892 = zext i1 %891 to i8
  store i8 %892, ptr %118, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 1, ptr %119) #8
  %893 = load ptr, ptr %108, align 8, !tbaa !5
  %894 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %172, ptr noundef nonnull align 8 dereferenceable(176) %893)
  %895 = zext i1 %894 to i8
  store i8 %895, ptr %119, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 1, ptr %120) #8
  %896 = load i8, ptr %119, align 1, !tbaa !239, !range !193, !noundef !194
  %897 = trunc i8 %896 to i1
  br i1 %897, label %898, label %915

898:                                              ; preds = %890
  %899 = load i32, ptr %111, align 4, !tbaa !240
  %900 = icmp eq i32 %899, 0
  br i1 %900, label %915, label %901

901:                                              ; preds = %898
  %902 = load i32, ptr %111, align 4, !tbaa !240
  %903 = icmp eq i32 %902, 1
  br i1 %903, label %915, label %904

904:                                              ; preds = %901
  %905 = load i32, ptr %111, align 4, !tbaa !240
  %906 = icmp eq i32 %905, 3
  br i1 %906, label %915, label %907

907:                                              ; preds = %904
  %908 = load i32, ptr %111, align 4, !tbaa !240
  %909 = icmp eq i32 %908, 4
  br i1 %909, label %915, label %910

910:                                              ; preds = %907
  %911 = load ptr, ptr %110, align 8, !tbaa !5
  %912 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %911, i32 0, i32 2
  %913 = load i32, ptr %912, align 8, !tbaa !17
  %914 = icmp eq i32 %913, 15
  br label %915

915:                                              ; preds = %910, %907, %904, %901, %898, %890
  %916 = phi i1 [ true, %907 ], [ true, %904 ], [ true, %901 ], [ true, %898 ], [ true, %890 ], [ %914, %910 ]
  %917 = zext i1 %916 to i8
  store i8 %917, ptr %120, align 1, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 1, ptr %121) #8
  %918 = load i8, ptr %117, align 1, !tbaa !239, !range !193, !noundef !194
  %919 = trunc i8 %918 to i1
  br i1 %919, label %923, label %920

920:                                              ; preds = %915
  %921 = load i8, ptr %118, align 1, !tbaa !239, !range !193, !noundef !194
  %922 = trunc i8 %921 to i1
  br i1 %922, label %923, label %926

923:                                              ; preds = %920, %915
  %924 = load i8, ptr %120, align 1, !tbaa !239, !range !193, !noundef !194
  %925 = trunc i8 %924 to i1
  br label %926

926:                                              ; preds = %923, %920
  %927 = phi i1 [ false, %920 ], [ %925, %923 ]
  %928 = zext i1 %927 to i8
  store i8 %928, ptr %121, align 1, !tbaa !239
  %929 = load i8, ptr %121, align 1, !tbaa !239, !range !193, !noundef !194
  %930 = trunc i8 %929 to i1
  br i1 %930, label %931, label %941

931:                                              ; preds = %926
  %932 = load ptr, ptr %108, align 8, !tbaa !5
  %933 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %932, i32 0, i32 2
  %934 = load i32, ptr %933, align 8, !tbaa !242
  %935 = icmp eq i32 %934, 3
  br i1 %935, label %936, label %941

936:                                              ; preds = %931
  %937 = load ptr, ptr %108, align 8, !tbaa !5
  %938 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL31is_stage_output_variable_maskedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %172, ptr noundef nonnull align 8 dereferenceable(176) %937)
  %939 = xor i1 %938, true
  %940 = zext i1 %939 to i8
  store i8 %940, ptr %121, align 1, !tbaa !239
  br label %941

941:                                              ; preds = %936, %931, %926
  %942 = load i8, ptr %121, align 1, !tbaa !239, !range !193, !noundef !194
  %943 = trunc i8 %942 to i1
  br i1 %943, label %944, label %1151

944:                                              ; preds = %941
  call void @llvm.lifetime.start.p0(i64 32, ptr %122) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  %945 = load i8, ptr %113, align 1, !tbaa !239, !range !193, !noundef !194
  %946 = trunc i8 %945 to i1
  br i1 %946, label %947, label %964

947:                                              ; preds = %944
  %948 = load ptr, ptr %108, align 8, !tbaa !5
  %949 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %948, i32 0, i32 2
  %950 = load i32, ptr %949, align 8, !tbaa !242
  %951 = icmp eq i32 %950, 1
  br i1 %951, label %952, label %954

952:                                              ; preds = %947
  %953 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 89
  br label %956

954:                                              ; preds = %947
  %955 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 90
  br label %956

956:                                              ; preds = %954, %952
  %957 = phi ptr [ %953, %952 ], [ %955, %954 ]
  %958 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef nonnull align 8 dereferenceable(32) %957)
          to label %959 unwind label %960

959:                                              ; preds = %956
  br label %973

960:                                              ; preds = %1094, %1091, %978, %964, %956
  %961 = landingpad { ptr, i32 }
          cleanup
  %962 = extractvalue { ptr, i32 } %961, 0
  store ptr %962, ptr %42, align 8
  %963 = extractvalue { ptr, i32 } %961, 1
  store i32 %963, ptr %43, align 4
  br label %1150

964:                                              ; preds = %944
  %965 = load ptr, ptr %108, align 8, !tbaa !5
  %966 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %965, i32 0, i32 2
  %967 = load i32, ptr %966, align 8, !tbaa !242
  %968 = icmp eq i32 %967, 1
  %969 = zext i1 %968 to i64
  %970 = select i1 %968, ptr @.str.8, ptr @.str.119
  %971 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef %970)
          to label %972 unwind label %960

972:                                              ; preds = %964
  br label %973

973:                                              ; preds = %972, %959
  %974 = load ptr, ptr %108, align 8, !tbaa !5
  %975 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %974, i32 0, i32 2
  %976 = load i32, ptr %975, align 8, !tbaa !242
  %977 = icmp eq i32 %976, 3
  br i1 %977, label %978, label %1020

978:                                              ; preds = %973
  %979 = load ptr, ptr %110, align 8, !tbaa !5
  %980 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %979, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %123, ptr align 8 %980, i64 4, i1 false), !tbaa.struct !11
  %981 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %123, i32 0, i32 0
  %982 = load i32, ptr %981, align 4
  %983 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 %982, i32 noundef 2)
          to label %984 unwind label %960

984:                                              ; preds = %978
  br i1 %983, label %985, label %1020

985:                                              ; preds = %984
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #8
  store i32 0, ptr %124, align 4, !tbaa !9
  br label %986

986:                                              ; preds = %1015, %985
  %987 = load i32, ptr %124, align 4, !tbaa !9
  %988 = load ptr, ptr %110, align 8, !tbaa !5
  %989 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %988, i32 0, i32 12
  %990 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %989) #8
  %991 = trunc i64 %990 to i32
  %992 = icmp ult i32 %987, %991
  br i1 %992, label %994, label %993

993:                                              ; preds = %986
  store i32 14, ptr %18, align 4
  br label %1018

994:                                              ; preds = %986
  %995 = load ptr, ptr %108, align 8, !tbaa !5
  %996 = load i32, ptr %124, align 4, !tbaa !9
  %997 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %172, ptr noundef nonnull align 8 dereferenceable(176) %995, i32 noundef %996, i1 noundef zeroext true)
          to label %998 unwind label %1010

998:                                              ; preds = %994
  br i1 %997, label %999, label %1014

999:                                              ; preds = %998
  %1000 = load ptr, ptr %14, align 8, !tbaa !5
  %1001 = load ptr, ptr %108, align 8, !tbaa !5
  %1002 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1001, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %125, ptr align 4 %1002, i64 4, i1 false), !tbaa.struct !11
  %1003 = load ptr, ptr %108, align 8, !tbaa !5
  %1004 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1003, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %126, ptr align 8 %1004, i64 4, i1 false), !tbaa.struct !11
  %1005 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %125, i32 0, i32 0
  %1006 = load i32, ptr %1005, align 4
  %1007 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %126, i32 0, i32 0
  %1008 = load i32, ptr %1007, align 4
  invoke void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %1000, i32 %1006, i32 %1008, i1 noundef zeroext true)
          to label %1009 unwind label %1010

1009:                                             ; preds = %999
  store i32 14, ptr %18, align 4
  br label %1018

1010:                                             ; preds = %999, %994
  %1011 = landingpad { ptr, i32 }
          cleanup
  %1012 = extractvalue { ptr, i32 } %1011, 0
  store ptr %1012, ptr %42, align 8
  %1013 = extractvalue { ptr, i32 } %1011, 1
  store i32 %1013, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #8
  br label %1150

1014:                                             ; preds = %998
  br label %1015

1015:                                             ; preds = %1014
  %1016 = load i32, ptr %124, align 4, !tbaa !9
  %1017 = add i32 %1016, 1
  store i32 %1017, ptr %124, align 4, !tbaa !9
  br label %986, !llvm.loop !244

1018:                                             ; preds = %1009, %993
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #8
  br label %1019

1019:                                             ; preds = %1018
  br label %1020

1020:                                             ; preds = %1019, %984, %973
  %1021 = load ptr, ptr %108, align 8, !tbaa !5
  %1022 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1021, i32 0, i32 2
  %1023 = load i32, ptr %1022, align 8, !tbaa !242
  %1024 = icmp eq i32 %1023, 1
  br i1 %1024, label %1025, label %1055

1025:                                             ; preds = %1020
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #8
  %1026 = load i8, ptr %113, align 1, !tbaa !239, !range !193, !noundef !194
  %1027 = trunc i8 %1026 to i1
  br i1 %1027, label %1028, label %1029

1028:                                             ; preds = %1025
  br label %1030

1029:                                             ; preds = %1025
  br label %1030

1030:                                             ; preds = %1029, %1028
  %1031 = phi ptr [ %102, %1028 ], [ %100, %1029 ]
  store ptr %1031, ptr %127, align 8, !tbaa !5
  %1032 = load ptr, ptr %127, align 8, !tbaa !5
  %1033 = load i8, ptr %1032, align 1, !tbaa !239, !range !193, !noundef !194
  %1034 = trunc i8 %1033 to i1
  br i1 %1034, label %1035, label %1036

1035:                                             ; preds = %1030
  store i32 13, ptr %18, align 4
  br label %1048

1036:                                             ; preds = %1030
  %1037 = load i8, ptr %113, align 1, !tbaa !239, !range !193, !noundef !194
  %1038 = trunc i8 %1037 to i1
  br i1 %1038, label %1039, label %1041

1039:                                             ; preds = %1036
  %1040 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 61
  br label %1043

1041:                                             ; preds = %1036
  %1042 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 63
  br label %1043

1043:                                             ; preds = %1041, %1039
  %1044 = phi ptr [ %1040, %1039 ], [ %1042, %1041 ]
  %1045 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1044)
          to label %1046 unwind label %1051

1046:                                             ; preds = %1043
  store i32 %1045, ptr %107, align 4, !tbaa !9
  %1047 = load ptr, ptr %127, align 8, !tbaa !5
  store i8 1, ptr %1047, align 1, !tbaa !239
  store i32 0, ptr %18, align 4
  br label %1048

1048:                                             ; preds = %1046, %1035
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #8
  %1049 = load i32, ptr %18, align 4
  switch i32 %1049, label %1146 [
    i32 0, label %1050
  ]

1050:                                             ; preds = %1048
  br label %1091

1051:                                             ; preds = %1043
  %1052 = landingpad { ptr, i32 }
          cleanup
  %1053 = extractvalue { ptr, i32 } %1052, 0
  store ptr %1053, ptr %42, align 8
  %1054 = extractvalue { ptr, i32 } %1052, 1
  store i32 %1054, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #8
  br label %1150

1055:                                             ; preds = %1020
  %1056 = load ptr, ptr %108, align 8, !tbaa !5
  %1057 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1056, i32 0, i32 2
  %1058 = load i32, ptr %1057, align 8, !tbaa !242
  %1059 = icmp eq i32 %1058, 3
  br i1 %1059, label %1060, label %1090

1060:                                             ; preds = %1055
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #8
  %1061 = load i8, ptr %113, align 1, !tbaa !239, !range !193, !noundef !194
  %1062 = trunc i8 %1061 to i1
  br i1 %1062, label %1063, label %1064

1063:                                             ; preds = %1060
  br label %1065

1064:                                             ; preds = %1060
  br label %1065

1065:                                             ; preds = %1064, %1063
  %1066 = phi ptr [ %103, %1063 ], [ %101, %1064 ]
  store ptr %1066, ptr %128, align 8, !tbaa !5
  %1067 = load ptr, ptr %128, align 8, !tbaa !5
  %1068 = load i8, ptr %1067, align 1, !tbaa !239, !range !193, !noundef !194
  %1069 = trunc i8 %1068 to i1
  br i1 %1069, label %1070, label %1071

1070:                                             ; preds = %1065
  store i32 13, ptr %18, align 4
  br label %1083

1071:                                             ; preds = %1065
  %1072 = load i8, ptr %113, align 1, !tbaa !239, !range !193, !noundef !194
  %1073 = trunc i8 %1072 to i1
  br i1 %1073, label %1074, label %1076

1074:                                             ; preds = %1071
  %1075 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 62
  br label %1078

1076:                                             ; preds = %1071
  %1077 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 64
  br label %1078

1078:                                             ; preds = %1076, %1074
  %1079 = phi ptr [ %1075, %1074 ], [ %1077, %1076 ]
  %1080 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1079)
          to label %1081 unwind label %1086

1081:                                             ; preds = %1078
  store i32 %1080, ptr %107, align 4, !tbaa !9
  %1082 = load ptr, ptr %128, align 8, !tbaa !5
  store i8 1, ptr %1082, align 1, !tbaa !239
  store i32 0, ptr %18, align 4
  br label %1083

1083:                                             ; preds = %1081, %1070
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #8
  %1084 = load i32, ptr %18, align 4
  switch i32 %1084, label %1146 [
    i32 0, label %1085
  ]

1085:                                             ; preds = %1083
  br label %1090

1086:                                             ; preds = %1078
  %1087 = landingpad { ptr, i32 }
          cleanup
  %1088 = extractvalue { ptr, i32 } %1087, 0
  store ptr %1088, ptr %42, align 8
  %1089 = extractvalue { ptr, i32 } %1087, 1
  store i32 %1089, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #8
  br label %1150

1090:                                             ; preds = %1085, %1055
  br label %1091

1091:                                             ; preds = %1090, %1050
  %1092 = load i32, ptr %107, align 4, !tbaa !9
  %1093 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1092)
          to label %1094 unwind label %960

1094:                                             ; preds = %1091
  %1095 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1093, i32 0, i32 1
  %1096 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1095)
          to label %1097 unwind label %960

1097:                                             ; preds = %1094
  store i32 %1096, ptr %109, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %129) #8
  %1098 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1099 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1098, i32 noundef 1)
          to label %1100 unwind label %1137

1100:                                             ; preds = %1097
  store i32 %1099, ptr %129, align 4, !tbaa !9
  %1101 = load ptr, ptr %14, align 8, !tbaa !5
  %1102 = load i32, ptr %109, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %130, i32 noundef %1102)
          to label %1103 unwind label %1137

1103:                                             ; preds = %1100
  %1104 = load i32, ptr %129, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %131, i32 noundef %1104)
          to label %1105 unwind label %1137

1105:                                             ; preds = %1103
  %1106 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %130, i32 0, i32 0
  %1107 = load i32, ptr %1106, align 4
  %1108 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %131, i32 0, i32 0
  %1109 = load i32, ptr %1108, align 4
  invoke void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %1101, i32 %1107, i32 %1109, i1 noundef zeroext true)
          to label %1110 unwind label %1137

1110:                                             ; preds = %1105
  %1111 = load i32, ptr %129, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %132) #8
  store i32 7, ptr %132, align 4, !tbaa !245
  call void @llvm.lifetime.start.p0(i64 4, ptr %133) #8
  store i32 0, ptr %133, align 4, !tbaa !9
  %1112 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEiS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1111, ptr noundef nonnull align 4 dereferenceable(4) %109, ptr noundef nonnull align 4 dereferenceable(4) %132, ptr noundef nonnull align 4 dereferenceable(4) %133, ptr noundef nonnull align 4 dereferenceable(4) %107)
          to label %1113 unwind label %1141

1113:                                             ; preds = %1110
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #8
  %1114 = load i32, ptr %129, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %134, i32 noundef %1114)
          to label %1115 unwind label %1137

1115:                                             ; preds = %1113
  %1116 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %134, i32 0, i32 0
  %1117 = load i32, ptr %1116, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 %1117, ptr noundef nonnull align 8 dereferenceable(32) %122)
          to label %1118 unwind label %1137

1118:                                             ; preds = %1115
  %1119 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %172)
          to label %1120 unwind label %1137

1120:                                             ; preds = %1118
  br i1 %1119, label %1121, label %1145

1121:                                             ; preds = %1120
  %1122 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %172, i32 0, i32 37
  %1123 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1122, i32 0, i32 49
  %1124 = load i8, ptr %1123, align 2, !tbaa !246, !range !193, !noundef !194
  %1125 = trunc i8 %1124 to i1
  br i1 %1125, label %1126, label %1145

1126:                                             ; preds = %1121
  %1127 = load ptr, ptr %108, align 8, !tbaa !5
  %1128 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1127, i32 0, i32 2
  %1129 = load i32, ptr %1128, align 8, !tbaa !242
  %1130 = icmp eq i32 %1129, 1
  br i1 %1130, label %1131, label %1145

1131:                                             ; preds = %1126
  %1132 = load i32, ptr %129, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %135, i32 noundef %1132)
          to label %1133 unwind label %1137

1133:                                             ; preds = %1131
  %1134 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %135, i32 0, i32 0
  %1135 = load i32, ptr %1134, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 %1135, i32 noundef 24, i32 noundef 0)
          to label %1136 unwind label %1137

1136:                                             ; preds = %1133
  br label %1145

1137:                                             ; preds = %1133, %1131, %1118, %1115, %1113, %1105, %1103, %1100, %1097
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %42, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %43, align 4
  br label %1149

1141:                                             ; preds = %1110
  %1142 = landingpad { ptr, i32 }
          cleanup
  %1143 = extractvalue { ptr, i32 } %1142, 0
  store ptr %1143, ptr %42, align 8
  %1144 = extractvalue { ptr, i32 } %1142, 1
  store i32 %1144, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #8
  br label %1149

1145:                                             ; preds = %1136, %1126, %1121, %1120
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #8
  store i32 0, ptr %18, align 4
  br label %1146

1146:                                             ; preds = %1145, %1083, %1048
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #8
  %1147 = load i32, ptr %18, align 4
  switch i32 %1147, label %1326 [
    i32 0, label %1148
  ]

1148:                                             ; preds = %1146
  br label %1325

1149:                                             ; preds = %1141, %1137
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #8
  br label %1150

1150:                                             ; preds = %1149, %1086, %1051, %1010, %960
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #8
  br label %1334

1151:                                             ; preds = %941
  %1152 = load i8, ptr %119, align 1, !tbaa !239, !range !193, !noundef !194
  %1153 = trunc i8 %1152 to i1
  br i1 %1153, label %1154, label %1203

1154:                                             ; preds = %1151
  %1155 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %172)
  br i1 %1155, label %1156, label %1203

1156:                                             ; preds = %1154
  call void @llvm.lifetime.start.p0(i64 4, ptr %136) #8
  %1157 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1158 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1157, i32 noundef 1)
  store i32 %1158, ptr %136, align 4, !tbaa !9
  %1159 = load ptr, ptr %14, align 8, !tbaa !5
  %1160 = load i32, ptr %109, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %137, i32 noundef %1160)
  %1161 = load i32, ptr %136, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %138, i32 noundef %1161)
  %1162 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %137, i32 0, i32 0
  %1163 = load i32, ptr %1162, align 4
  %1164 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %138, i32 0, i32 0
  %1165 = load i32, ptr %1164, align 4
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %1159, i32 %1163, i32 %1165, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #8
  %1166 = load i32, ptr %136, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %140) #8
  store i32 7, ptr %140, align 4, !tbaa !245
  call void @llvm.lifetime.start.p0(i64 4, ptr %141) #8
  store i32 0, ptr %141, align 4, !tbaa !9
  %1167 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEiS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1166, ptr noundef nonnull align 4 dereferenceable(4) %109, ptr noundef nonnull align 4 dereferenceable(4) %140, ptr noundef nonnull align 4 dereferenceable(4) %141, ptr noundef nonnull align 4 dereferenceable(4) %107)
  call void @llvm.lifetime.end.p0(i64 4, ptr %141) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %140) #8
  store ptr %1167, ptr %139, align 8, !tbaa !5
  %1168 = load ptr, ptr %139, align 8, !tbaa !5
  %1169 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1168, i32 0, i32 2
  store i32 4, ptr %1169, align 8, !tbaa !242
  %1170 = load i32, ptr %107, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %142, i32 noundef %1170)
  call void @llvm.lifetime.start.p0(i64 32, ptr %143) #8
  %1171 = load i32, ptr %107, align 4, !tbaa !9
  %1172 = load ptr, ptr %172, align 8, !tbaa !247
  %1173 = getelementptr inbounds ptr, ptr %1172, i64 6
  %1174 = load ptr, ptr %1173, align 8
  call void %1174(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %144, ptr noundef nonnull align 8 dereferenceable(12482) %172, i32 noundef %1171, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 1, ptr %146) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %146) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef @.str.120, ptr noundef nonnull align 1 dereferenceable(1) %146)
          to label %1175 unwind label %1189

1175:                                             ; preds = %1156
  invoke void @_ZN11spirv_cross11CompilerMSL17ensure_valid_nameENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %143, ptr noundef nonnull align 8 dereferenceable(12482) %172, ptr noundef %144, ptr noundef %145)
          to label %1176 unwind label %1193

1176:                                             ; preds = %1175
  %1177 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %142, i32 0, i32 0
  %1178 = load i32, ptr %1177, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 %1178, ptr noundef nonnull align 8 dereferenceable(32) %143)
          to label %1179 unwind label %1197

1179:                                             ; preds = %1176
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %146) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %146) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %143) #8
  %1180 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1181 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1180, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %147) #8
  %1182 = load i32, ptr %107, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %147, i32 noundef %1182)
  %1183 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1181, ptr noundef nonnull align 4 dereferenceable(4) %147)
  %1184 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1185 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1184, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %148) #8
  %1186 = load i32, ptr %136, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %148, i32 noundef %1186)
  %1187 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1185, ptr noundef nonnull align 4 dereferenceable(4) %148)
  %1188 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %1187, ptr noundef nonnull align 8 dereferenceable(488) %1183)
  call void @llvm.lifetime.end.p0(i64 4, ptr %148) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %147) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #8
  br label %1324

1189:                                             ; preds = %1156
  %1190 = landingpad { ptr, i32 }
          cleanup
  %1191 = extractvalue { ptr, i32 } %1190, 0
  store ptr %1191, ptr %42, align 8
  %1192 = extractvalue { ptr, i32 } %1190, 1
  store i32 %1192, ptr %43, align 4
  br label %1202

1193:                                             ; preds = %1175
  %1194 = landingpad { ptr, i32 }
          cleanup
  %1195 = extractvalue { ptr, i32 } %1194, 0
  store ptr %1195, ptr %42, align 8
  %1196 = extractvalue { ptr, i32 } %1194, 1
  store i32 %1196, ptr %43, align 4
  br label %1201

1197:                                             ; preds = %1176
  %1198 = landingpad { ptr, i32 }
          cleanup
  %1199 = extractvalue { ptr, i32 } %1198, 0
  store ptr %1199, ptr %42, align 8
  %1200 = extractvalue { ptr, i32 } %1198, 1
  store i32 %1200, ptr %43, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #8
  br label %1201

1201:                                             ; preds = %1197, %1193
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #8
  br label %1202

1202:                                             ; preds = %1201, %1189
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %146) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %146) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %143) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #8
  br label %1334

1203:                                             ; preds = %1154, %1151
  %1204 = load i8, ptr %119, align 1, !tbaa !239, !range !193, !noundef !194
  %1205 = trunc i8 %1204 to i1
  br i1 %1205, label %1206, label %1302

1206:                                             ; preds = %1203
  %1207 = load ptr, ptr %110, align 8, !tbaa !5
  %1208 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1207, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %149, ptr align 8 %1208, i64 4, i1 false), !tbaa.struct !11
  %1209 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %149, i32 0, i32 0
  %1210 = load i32, ptr %1209, align 4
  %1211 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 %1210, i32 noundef 2)
  br i1 %1211, label %1212, label %1302

1212:                                             ; preds = %1206
  %1213 = load i32, ptr %109, align 4, !tbaa !9
  %1214 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1213)
  store i32 %1214, ptr %109, align 4, !tbaa !9
  %1215 = load i32, ptr %109, align 4, !tbaa !9
  %1216 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1215)
  store ptr %1216, ptr %110, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %150) #8
  store i32 0, ptr %150, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #8
  %1217 = load ptr, ptr %110, align 8, !tbaa !5
  %1218 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1217, i32 0, i32 12
  store ptr %1218, ptr %151, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #8
  %1219 = load ptr, ptr %151, align 8, !tbaa !5
  %1220 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1219) #8
  store ptr %1220, ptr %152, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #8
  %1221 = load ptr, ptr %151, align 8, !tbaa !5
  %1222 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1221) #8
  store ptr %1222, ptr %153, align 8, !tbaa !5
  br label %1223

1223:                                             ; preds = %1298, %1212
  %1224 = load ptr, ptr %152, align 8, !tbaa !5
  %1225 = load ptr, ptr %153, align 8, !tbaa !5
  %1226 = icmp ne ptr %1224, %1225
  br i1 %1226, label %1228, label %1227

1227:                                             ; preds = %1223
  store i32 17, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #8
  br label %1301

1228:                                             ; preds = %1223
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #8
  %1229 = load ptr, ptr %152, align 8, !tbaa !5
  store ptr %1229, ptr %154, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %155) #8
  store i32 2147483647, ptr %155, align 4, !tbaa !240
  %1230 = load ptr, ptr %110, align 8, !tbaa !5
  %1231 = load i32, ptr %150, align 4, !tbaa !9
  %1232 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %172, ptr noundef nonnull align 8 dereferenceable(336) %1230, i32 noundef %1231, ptr noundef %155)
  %1233 = zext i1 %1232 to i8
  store i8 %1233, ptr %119, align 1, !tbaa !239
  %1234 = load i8, ptr %119, align 1, !tbaa !239, !range !193, !noundef !194
  %1235 = trunc i8 %1234 to i1
  br i1 %1235, label %1236, label %1295

1236:                                             ; preds = %1228
  %1237 = load i32, ptr %155, align 4, !tbaa !240
  %1238 = load ptr, ptr %108, align 8, !tbaa !5
  %1239 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1238, i32 0, i32 2
  %1240 = load i32, ptr %1239, align 8, !tbaa !242
  %1241 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler18has_active_builtinEN3spv7BuiltInENS1_12StorageClassE(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1237, i32 noundef %1240)
  br i1 %1241, label %1242, label %1295

1242:                                             ; preds = %1236
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #8
  %1243 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1244 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1243, i32 noundef 2)
  store i32 %1244, ptr %156, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %157) #8
  %1245 = load i32, ptr %156, align 4, !tbaa !9
  %1246 = add i32 %1245, 0
  store i32 %1246, ptr %157, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %158) #8
  %1247 = load i32, ptr %156, align 4, !tbaa !9
  %1248 = add i32 %1247, 1
  store i32 %1248, ptr %158, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #8
  %1249 = load i32, ptr %157, align 4, !tbaa !9
  %1250 = load ptr, ptr %154, align 8, !tbaa !5
  %1251 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1250)
  %1252 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1251)
  %1253 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1249, ptr noundef nonnull align 8 dereferenceable(336) %1252)
  store ptr %1253, ptr %159, align 8, !tbaa !5
  %1254 = load ptr, ptr %154, align 8, !tbaa !5
  %1255 = load ptr, ptr %159, align 8, !tbaa !5
  %1256 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1255, i32 0, i32 1
  %1257 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_1EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %1256, ptr noundef nonnull align 4 dereferenceable(4) %1254)
  %1258 = load ptr, ptr %108, align 8, !tbaa !5
  %1259 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1258, i32 0, i32 2
  %1260 = load i32, ptr %1259, align 8, !tbaa !242
  %1261 = load ptr, ptr %159, align 8, !tbaa !5
  %1262 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1261, i32 0, i32 11
  store i32 %1260, ptr %1262, align 8, !tbaa !249
  %1263 = load ptr, ptr %159, align 8, !tbaa !5
  %1264 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1263, i32 0, i32 9
  store i8 1, ptr %1264, align 4, !tbaa !250
  %1265 = load ptr, ptr %159, align 8, !tbaa !5
  %1266 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1265, i32 0, i32 8
  %1267 = load i32, ptr %1266, align 8, !tbaa !251
  %1268 = add i32 %1267, 1
  store i32 %1268, ptr %1266, align 8, !tbaa !251
  %1269 = load ptr, ptr %154, align 8, !tbaa !5
  %1270 = load ptr, ptr %159, align 8, !tbaa !5
  %1271 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1270, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1271, ptr align 4 %1269, i64 4, i1 false), !tbaa.struct !11
  %1272 = load ptr, ptr %14, align 8, !tbaa !5
  %1273 = load ptr, ptr %154, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %160, ptr align 4 %1273, i64 4, i1 false), !tbaa.struct !11
  %1274 = load i32, ptr %158, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %161, i32 noundef %1274)
  %1275 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %160, i32 0, i32 0
  %1276 = load i32, ptr %1275, align 4
  %1277 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %161, i32 0, i32 0
  %1278 = load i32, ptr %1277, align 4
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %1272, i32 %1276, i32 %1278, i1 noundef zeroext true)
  %1279 = load i32, ptr %158, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %162) #8
  store i32 7, ptr %162, align 4, !tbaa !245
  %1280 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1279, ptr noundef nonnull align 4 dereferenceable(4) %157, ptr noundef nonnull align 4 dereferenceable(4) %162)
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #8
  %1281 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1282 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1281, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %163) #8
  %1283 = load i32, ptr %109, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %163, i32 noundef %1283)
  %1284 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1282, ptr noundef nonnull align 4 dereferenceable(4) %163)
  %1285 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %1284, i32 0, i32 1
  %1286 = load i32, ptr %150, align 4, !tbaa !9
  %1287 = zext i32 %1286 to i64
  %1288 = call noundef nonnull align 8 dereferenceable(392) ptr @_ZN11spirv_cross10VectorViewINS_4Meta10DecorationEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1285, i64 noundef %1287) #8
  %1289 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1290 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1289, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %164) #8
  %1291 = load i32, ptr %158, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %164, i32 noundef %1291)
  %1292 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1290, ptr noundef nonnull align 4 dereferenceable(4) %164)
  %1293 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %1292, i32 0, i32 0
  %1294 = call noundef nonnull align 8 dereferenceable(392) ptr @_ZN11spirv_cross4Meta10DecorationaSERKS1_(ptr noundef nonnull align 8 dereferenceable(392) %1293, ptr noundef nonnull align 8 dereferenceable(392) %1288)
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %158) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #8
  br label %1295

1295:                                             ; preds = %1242, %1236, %1228
  %1296 = load i32, ptr %150, align 4, !tbaa !9
  %1297 = add i32 %1296, 1
  store i32 %1297, ptr %150, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #8
  br label %1298

1298:                                             ; preds = %1295
  %1299 = load ptr, ptr %152, align 8, !tbaa !5
  %1300 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %1299, i32 1
  store ptr %1300, ptr %152, align 8, !tbaa !5
  br label %1223

1301:                                             ; preds = %1227
  call void @llvm.lifetime.end.p0(i64 4, ptr %150) #8
  br label %1323

1302:                                             ; preds = %1206, %1203
  call void @llvm.lifetime.start.p0(i64 4, ptr %165) #8
  %1303 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1304 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1303, i32 noundef 1)
  store i32 %1304, ptr %165, align 4, !tbaa !9
  %1305 = load ptr, ptr %14, align 8, !tbaa !5
  %1306 = load i32, ptr %109, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %166, i32 noundef %1306)
  %1307 = load i32, ptr %165, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %167, i32 noundef %1307)
  %1308 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %166, i32 0, i32 0
  %1309 = load i32, ptr %1308, align 4
  %1310 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %167, i32 0, i32 0
  %1311 = load i32, ptr %1310, align 4
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %1305, i32 %1309, i32 %1311, i1 noundef zeroext true)
  %1312 = load i32, ptr %165, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %168) #8
  store i32 7, ptr %168, align 4, !tbaa !245
  call void @llvm.lifetime.start.p0(i64 4, ptr %169) #8
  store i32 0, ptr %169, align 4, !tbaa !9
  %1313 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEiS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %172, i32 noundef %1312, ptr noundef nonnull align 4 dereferenceable(4) %109, ptr noundef nonnull align 4 dereferenceable(4) %168, ptr noundef nonnull align 4 dereferenceable(4) %169, ptr noundef nonnull align 4 dereferenceable(4) %107)
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %168) #8
  %1314 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1315 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1314, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %170) #8
  %1316 = load i32, ptr %107, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %170, i32 noundef %1316)
  %1317 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1315, ptr noundef nonnull align 4 dereferenceable(4) %170)
  %1318 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %172, i32 0, i32 1
  %1319 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1318, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %171) #8
  %1320 = load i32, ptr %165, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %171, i32 noundef %1320)
  %1321 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1319, ptr noundef nonnull align 4 dereferenceable(4) %171)
  %1322 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %1321, ptr noundef nonnull align 8 dereferenceable(488) %1317)
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #8
  br label %1323

1323:                                             ; preds = %1302, %1301
  br label %1324

1324:                                             ; preds = %1323, %1179
  br label %1325

1325:                                             ; preds = %1324, %1148
  store i32 0, ptr %18, align 4
  br label %1326

1326:                                             ; preds = %1325, %1146
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %119) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %118) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %115) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %113) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #8
  %1327 = load i32, ptr %18, align 4
  switch i32 %1327, label %1329 [
    i32 0, label %1328
  ]

1328:                                             ; preds = %1326
  store i32 0, ptr %18, align 4
  br label %1329

1329:                                             ; preds = %1328, %1326
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #8
  %1330 = load i32, ptr %18, align 4
  switch i32 %1330, label %1344 [
    i32 0, label %1331
    i32 13, label %1332
  ]

1331:                                             ; preds = %1329
  br label %1332

1332:                                             ; preds = %1331, %1329
  %1333 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIjEppEv(ptr noundef nonnull align 8 dereferenceable(8) %105) #8
  br label %824

1334:                                             ; preds = %1202, %1150
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %119) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %118) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %115) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %113) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %102) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #8
  br label %1338

1335:                                             ; preds = %826
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %102) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #8
  br label %1336

1336:                                             ; preds = %1335, %806
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %1337

1337:                                             ; preds = %1336, %182
  ret void

1338:                                             ; preds = %1334, %784
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %1339

1339:                                             ; preds = %1338
  %1340 = load ptr, ptr %42, align 8
  %1341 = load i32, ptr %43, align 4
  %1342 = insertvalue { ptr, i32 } poison, ptr %1340, 0
  %1343 = insertvalue { ptr, i32 } %1342, i32 %1341, 1
  resume { ptr, i32 } %1343

1344:                                             ; preds = %1329
  unreachable
}

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; 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 nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(392) ptr @_ZN11spirv_cross10VectorViewINS_4Meta10DecorationEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0 align 2

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

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

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.std::__detail::_Node_iterator.446" = type { %"struct.std::__detail::_Node_iterator_base.447" }
%"struct.std::__detail::_Node_iterator_base.447" = type { ptr }
%"class.spirv_cross::TypedID.415" = type { i32 }
%"class.std::set.449" = type { %"class.std::_Rb_tree.450" }
%"class.std::_Rb_tree.450" = type { %"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_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 }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::allocator.71" = type { i8 }

@.str.8 = external hidden unnamed_addr constant [6 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_ = external hidden unnamed_addr constant [156 x i8], align 1
@.str.116 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [2 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

; 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

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

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

; 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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_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

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

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #5

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

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

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

; Function Attrs: mustprogress uwtable
declare 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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(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_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
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #2 align 2

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

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

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

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

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

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

84:                                               ; preds = %5
  %85 = getelementptr inbounds i8, ptr %0, i64 9848
  %86 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %85, ptr noundef nonnull align 4 dereferenceable(4) %6)
  %87 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3setIjSt4lessIjESaIjEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 8 dereferenceable(48) %86)
  br label %574

88:                                               ; preds = %5
  %89 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %4, ptr noundef nonnull align 4 dereferenceable(4) %6)
  %90 = load i32, ptr %6, align 4, !tbaa !5
  %91 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %90)
  %92 = getelementptr inbounds i8, ptr %91, i64 456
  %93 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %92) #7
  %94 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %92) #7
  %.not305390 = icmp eq ptr %93, %94
  br i1 %.not305390, label %._crit_edge394, label %.lr.ph393

.lr.ph393:                                        ; preds = %88
  %95 = getelementptr inbounds i8, ptr %0, i64 9968
  %96 = getelementptr inbounds i8, ptr %0, i64 9980
  %97 = getelementptr inbounds i8, ptr %0, i64 9916
  %98 = getelementptr inbounds i8, ptr %0, i64 11195
  %99 = getelementptr inbounds i8, ptr %0, i64 9952
  %100 = getelementptr inbounds i8, ptr %0, i64 9956
  %101 = getelementptr inbounds i8, ptr %0, i64 11132
  %102 = getelementptr inbounds i8, ptr %0, i64 12024
  %103 = getelementptr inbounds i8, ptr %0, i64 10172
  %104 = getelementptr inbounds i8, ptr %0, i64 9988
  %105 = getelementptr inbounds i8, ptr %0, i64 11196
  %106 = getelementptr inbounds i8, ptr %0, i64 10140
  %107 = getelementptr inbounds i8, ptr %0, i64 9904
  %108 = getelementptr inbounds i8, ptr %0, i64 10123
  %109 = getelementptr inbounds i8, ptr %0, i64 10152
  %110 = getelementptr inbounds i8, ptr %0, i64 9940
  %111 = getelementptr inbounds i8, ptr %0, i64 9936
  %112 = getelementptr inbounds i8, ptr %0, i64 9984
  br label %120

._crit_edge394:                                   ; preds = %362, %88
  %113 = getelementptr inbounds i8, ptr %0, i64 9848
  %114 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %113, ptr noundef nonnull align 4 dereferenceable(4) %6)
  %115 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3setIjSt4lessIjESaIjEEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(48) %114, ptr noundef nonnull align 8 dereferenceable(48) %2)
  %116 = load i32, ptr %6, align 4, !tbaa !5
  %117 = getelementptr inbounds i8, ptr %0, i64 8
  %118 = getelementptr inbounds i8, ptr %0, i64 1744
  %119 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %118)
  %.not306 = icmp eq i32 %116, %119
  br i1 %.not306, label %574, label %364

120:                                              ; preds = %.lr.ph393, %362
  %.0391 = phi ptr [ %93, %.lr.ph393 ], [ %363, %362 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  %121 = load i32, ptr %.0391, align 4, !tbaa !5
  store i32 %121, ptr %9, align 4, !tbaa !5
  %122 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  %123 = call noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %122)
  %124 = getelementptr inbounds i8, ptr %123, i64 72
  %125 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_11InstructionEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %124) #7
  %126 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_11InstructionEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %124) #7
  %.not316385 = icmp eq ptr %125, %126
  br i1 %.not316385, label %._crit_edge389, label %.lr.ph388

.lr.ph388:                                        ; preds = %120
  %127 = getelementptr inbounds i8, ptr %123, i64 12
  br label %132

._crit_edge389:                                   ; preds = %357, %120
  %128 = getelementptr inbounds i8, ptr %123, i64 12
  %129 = load i32, ptr %128, align 4, !tbaa !9
  %130 = icmp ne i32 %129, 9
  %131 = load i32, ptr %112, align 8
  %.not317 = icmp eq i32 %131, 0
  %or.cond409 = select i1 %130, i1 true, i1 %.not317
  br i1 %or.cond409, label %362, label %360

132:                                              ; preds = %.lr.ph388, %357
  %.0286386 = phi ptr [ %125, %.lr.ph388 ], [ %358, %357 ]
  %133 = call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(12) %.0286386)
  %134 = load i16, ptr %.0286386, align 4, !tbaa !39
  switch i16 %134, label %348 [
    i16 61, label %138
    i16 66, label %138
    i16 65, label %138
    i16 67, label %138
    i16 68, label %138
    i16 57, label %.preheader383
    i16 62, label %195
    i16 169, label %222
    i16 229, label %239
    i16 230, label %239
    i16 228, label %239
    i16 232, label %239
    i16 233, label %239
    i16 234, label %239
    i16 6035, label %239
    i16 235, label %239
    i16 236, label %239
    i16 237, label %239
    i16 238, label %239
    i16 239, label %239
    i16 240, label %239
    i16 241, label %239
    i16 242, label %239
    i16 99, label %239
    i16 60, label %253
    i16 12, label %279
    i16 340, label %301
    i16 343, label %303
    i16 344, label %303
    i16 342, label %305
    i16 5380, label %312
    i16 5381, label %319
    i16 4473, label %323
    i16 4477, label %323
    i16 4474, label %323
    i16 4475, label %323
    i16 4476, label %323
    i16 6016, label %331
    i16 6017, label %331
    i16 6030, label %331
    i16 6029, label %331
    i16 6026, label %331
    i16 4479, label %331
    i16 6018, label %331
    i16 6019, label %331
    i16 6020, label %331
    i16 6021, label %331
    i16 6022, label %331
    i16 6023, label %331
    i16 6024, label %331
    i16 6025, label %331
    i16 6027, label %331
    i16 6028, label %331
    i16 6031, label %331
    i16 6032, label %331
    i16 5295, label %340
  ]

.preheader383:                                    ; preds = %132
  %135 = getelementptr inbounds i8, ptr %.0286386, i64 8
  %136 = load i32, ptr %135, align 4, !tbaa !42
  %137 = icmp ugt i32 %136, 3
  br i1 %137, label %.lr.ph, label %._crit_edge

138:                                              ; preds = %132, %132, %132, %132, %132
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #7
  %139 = getelementptr inbounds i8, ptr %133, i64 8
  %140 = load i32, ptr %139, align 4, !tbaa !5
  store i32 %140, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %141 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %10)
  store ptr %141, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  %142 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %142, ptr %12, align 8
  %143 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br i1 %143, label %144, label %146

144:                                              ; preds = %138
  %145 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %10)
  br label %146

146:                                              ; preds = %144, %138
  %147 = load i32, ptr %133, align 4, !tbaa !5
  %148 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %147)
  %149 = getelementptr inbounds i8, ptr %148, i64 16
  %150 = load i32, ptr %149, align 8, !tbaa !43
  %151 = icmp eq i32 %150, 16
  %152 = getelementptr inbounds i8, ptr %148, i64 252
  %153 = load i32, ptr %152, align 4
  %154 = icmp eq i32 %153, 6
  %or.cond330 = select i1 %151, i1 %154, i1 false
  br i1 %or.cond330, label %155, label %175

155:                                              ; preds = %146
  %156 = load i8, ptr %106, align 4, !tbaa !67, !range !212, !noundef !213
  %157 = trunc nuw i8 %156 to i1
  br i1 %157, label %175, label %158

158:                                              ; preds = %155
  %159 = load i32, ptr %107, align 8, !tbaa !214
  %.not325 = icmp eq i32 %159, 0
  br i1 %.not325, label %160, label %161

160:                                              ; preds = %158
  call void @__assert_fail(ptr noundef nonnull @.str.115, ptr noundef nonnull @.str.25, i32 noundef 1963, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_) #8
  unreachable

161:                                              ; preds = %158
  %162 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %107)
  %163 = load i8, ptr %108, align 1, !tbaa !215, !range !212, !noundef !213
  %164 = trunc nuw i8 %163 to i1
  br i1 %164, label %165, label %168

165:                                              ; preds = %161
  %166 = load i32, ptr %111, align 8, !tbaa !216
  %.not327 = icmp eq i32 %166, 0
  br i1 %.not327, label %167, label %.sink.split

167:                                              ; preds = %165
  call void @__assert_fail(ptr noundef nonnull @.str.116, ptr noundef nonnull @.str.25, i32 noundef 1968, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_) #8
  unreachable

168:                                              ; preds = %161
  %169 = load i8, ptr %109, align 8, !tbaa !217, !range !212, !noundef !213
  %170 = trunc nuw i8 %169 to i1
  br i1 %170, label %171, label %175

171:                                              ; preds = %168
  %172 = load i32, ptr %110, align 4, !tbaa !218
  %.not326 = icmp eq i32 %172, 0
  br i1 %.not326, label %173, label %.sink.split

173:                                              ; preds = %171
  call void @__assert_fail(ptr noundef nonnull @.str.117, ptr noundef nonnull @.str.25, i32 noundef 1974, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_) #8
  unreachable

.sink.split:                                      ; preds = %171, %165
  %.sink = phi ptr [ %111, %165 ], [ %110, %171 ]
  %174 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %.sink)
  br label %175

175:                                              ; preds = %.sink.split, %168, %155, %146
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  br label %348

._crit_edge:                                      ; preds = %185, %.preheader383
  %176 = getelementptr inbounds i8, ptr %133, i64 8
  %177 = load i32, ptr %176, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %16) #7
  call void @_ZNSt3setIjSt4lessIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %16) #7
  invoke void @_ZN11spirv_cross11CompilerMSL38extract_global_variables_from_functionEjRSt3setIjSt4lessIjESaIjEERSt13unordered_setIjSt4hashIjESt8equal_toIjES4_ESD_(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %177, ptr noundef nonnull align 8 dereferenceable(48) %16, ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 8 dereferenceable(56) %4)
          to label %189 unwind label %193

.lr.ph:                                           ; preds = %.preheader383, %185
  %indvars.iv = phi i64 [ %indvars.iv.next, %185 ], [ 3, %.preheader383 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #7
  %178 = getelementptr inbounds i32, ptr %133, i64 %indvars.iv
  %179 = load i32, ptr %178, align 4, !tbaa !5
  store i32 %179, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %180 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %13)
  store ptr %180, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %181 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %181, ptr %15, align 8
  %182 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br i1 %182, label %183, label %185

183:                                              ; preds = %.lr.ph
  %184 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %13)
  br label %185

185:                                              ; preds = %183, %.lr.ph
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %186 = load i32, ptr %135, align 4, !tbaa !42
  %187 = zext i32 %186 to i64
  %188 = icmp ult i64 %indvars.iv.next, %187
  br i1 %188, label %.lr.ph, label %._crit_edge, !llvm.loop !219

189:                                              ; preds = %._crit_edge
  %190 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %16) #7
  %191 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %16) #7
  invoke void @_ZNSt3setIjSt4lessIjESaIjEE6insertISt23_Rb_tree_const_iteratorIjEEEvT_S7_(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr %190, ptr %191)
          to label %192 unwind label %193

192:                                              ; preds = %189
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %16) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %16) #7
  br label %348

193:                                              ; preds = %189, %._crit_edge
  %194 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %16) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %16) #7
  br label %359

195:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #7
  %196 = load i32, ptr %133, align 4, !tbaa !5
  store i32 %196, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  %197 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %17)
  store ptr %197, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #7
  %198 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %198, ptr %19, align 8
  %199 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  br i1 %199, label %200, label %209

200:                                              ; preds = %195
  %201 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %17)
  %202 = load i8, ptr %103, align 4, !tbaa !221, !range !212, !noundef !213
  %203 = trunc nuw i8 %202 to i1
  br i1 %203, label %204, label %209

204:                                              ; preds = %200
  %205 = load i32, ptr %17, align 4, !tbaa !5
  %206 = load i32, ptr %104, align 4, !tbaa !222
  %207 = icmp eq i32 %205, %206
  br i1 %207, label %208, label %209

208:                                              ; preds = %204
  store i8 1, ptr %105, align 4, !tbaa !223
  br label %209

209:                                              ; preds = %200, %204, %208, %195
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #7
  %210 = getelementptr inbounds i8, ptr %133, i64 4
  %211 = load i32, ptr %210, align 4, !tbaa !5
  store i32 %211, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  %212 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %20)
  store ptr %212, ptr %21, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #7
  %213 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %213, ptr %22, align 8
  %214 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  br i1 %214, label %215, label %217

215:                                              ; preds = %209
  %216 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %20)
  br label %217

217:                                              ; preds = %215, %209
  %218 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %218, label %219, label %221

219:                                              ; preds = %217
  %220 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %97)
  br label %221

221:                                              ; preds = %219, %217
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #7
  br label %348

222:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #7
  %223 = getelementptr inbounds i8, ptr %133, i64 12
  %224 = load i32, ptr %223, align 4, !tbaa !5
  store i32 %224, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #7
  %225 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %23)
  store ptr %225, ptr %24, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #7
  %226 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %226, ptr %25, align 8
  %227 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #7
  br i1 %227, label %228, label %230

228:                                              ; preds = %222
  %229 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %23)
  br label %230

230:                                              ; preds = %228, %222
  %231 = getelementptr inbounds i8, ptr %133, i64 16
  %232 = load i32, ptr %231, align 4, !tbaa !5
  store i32 %232, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #7
  %233 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %23)
  store ptr %233, ptr %26, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #7
  %234 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %234, ptr %27, align 8
  %235 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #7
  br i1 %235, label %236, label %238

236:                                              ; preds = %230
  %237 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %23)
  br label %238

238:                                              ; preds = %236, %230
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #7
  br label %348

239:                                              ; preds = %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132
  %240 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %240, label %241, label %243

241:                                              ; preds = %239
  %242 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %97)
  br label %243

243:                                              ; preds = %241, %239
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #7
  store i32 0, ptr %28, align 4, !tbaa !5
  switch i16 %134, label %244 [
    i16 228, label %246
    i16 99, label %246
  ]

244:                                              ; preds = %243
  %245 = getelementptr inbounds i8, ptr %133, i64 8
  br label %246

246:                                              ; preds = %243, %243, %244
  %storemerge.in = phi ptr [ %245, %244 ], [ %133, %243 ], [ %133, %243 ]
  %storemerge = load i32, ptr %storemerge.in, align 4, !tbaa !5
  store i32 %storemerge, ptr %28, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #7
  %247 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %28)
  store ptr %247, ptr %29, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #7
  %248 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %248, ptr %30, align 8
  %249 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #7
  br i1 %249, label %250, label %252

250:                                              ; preds = %246
  %251 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %28)
  br label %252

252:                                              ; preds = %250, %246
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #7
  br label %348

253:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #7
  %254 = getelementptr inbounds i8, ptr %133, i64 8
  %255 = load i32, ptr %254, align 4, !tbaa !5
  store i32 %255, ptr %31, align 4, !tbaa !5
  %256 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %255)
  %.not320 = icmp eq ptr %256, null
  br i1 %.not320, label %278, label %257

257:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #7
  %258 = getelementptr inbounds i8, ptr %256, i64 8
  %259 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %258)
  store i32 %259, ptr %32, align 4, !tbaa !5
  %260 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %102, ptr noundef nonnull align 4 dereferenceable(4) %32)
  %.not321 = icmp eq i64 %260, 0
  br i1 %.not321, label %.critedge, label %261

261:                                              ; preds = %257
  %262 = getelementptr inbounds i8, ptr %256, i64 12
  %263 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %262)
  %264 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %263)
  %265 = getelementptr inbounds i8, ptr %264, i64 32
  %266 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %265) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  br i1 %266, label %272, label %267

267:                                              ; preds = %261
  %268 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %268, ptr noundef nonnull @.str.118)
          to label %269 unwind label %270

269:                                              ; preds = %267
  call void @__cxa_throw(ptr nonnull %268, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

270:                                              ; preds = %267
  %271 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %268) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #7
  br label %359

.critedge:                                        ; preds = %257
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  br label %272

272:                                              ; preds = %.critedge, %261
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #7
  %273 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %31)
  store ptr %273, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #7
  %274 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %274, ptr %34, align 8
  %275 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #7
  br i1 %275, label %276, label %278

276:                                              ; preds = %272
  %277 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %31)
  br label %278

278:                                              ; preds = %272, %276, %253
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #7
  br label %348

279:                                              ; preds = %132
  %280 = getelementptr inbounds i8, ptr %133, i64 8
  %281 = load i32, ptr %280, align 4, !tbaa !5
  %282 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross8Compiler3getINS_13SPIRExtensionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %281)
  %283 = getelementptr inbounds i8, ptr %282, i64 12
  %284 = load i32, ptr %283, align 4, !tbaa !224
  %285 = icmp eq i32 %284, 1
  br i1 %285, label %286, label %348

286:                                              ; preds = %279
  %287 = getelementptr inbounds i8, ptr %133, i64 12
  %288 = load i32, ptr %287, align 4, !tbaa !5
  switch i32 %288, label %348 [
    i32 76, label %289
    i32 77, label %289
    i32 78, label %289
    i32 35, label %292
    i32 51, label %292
  ]

289:                                              ; preds = %286, %286, %286
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #7
  %290 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %101)
  store i32 %290, ptr %35, align 4, !tbaa !5
  %291 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %35)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #7
  br label %348

292:                                              ; preds = %286, %286
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #7
  %293 = getelementptr inbounds i8, ptr %133, i64 20
  %294 = load i32, ptr %293, align 4, !tbaa !5
  store i32 %294, ptr %36, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #7
  %295 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %36)
  store ptr %295, ptr %37, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #7
  %296 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %296, ptr %38, align 8
  %297 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #7
  br i1 %297, label %298, label %300

298:                                              ; preds = %292
  %299 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %36)
  br label %300

300:                                              ; preds = %298, %292
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #7
  br label %348

301:                                              ; preds = %132
  %302 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %99)
  br label %348

303:                                              ; preds = %132, %132
  %304 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %100)
  br label %348

305:                                              ; preds = %132
  %306 = getelementptr inbounds i8, ptr %133, i64 12
  %307 = load i32, ptr %306, align 4, !tbaa !5
  switch i32 %307, label %348 [
    i32 0, label %308
    i32 1, label %310
    i32 2, label %310
  ]

308:                                              ; preds = %305
  %309 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %100)
  br label %348

310:                                              ; preds = %305, %305
  %311 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %99)
  br label %348

312:                                              ; preds = %132
  %313 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL38needs_manual_helper_invocation_updatesEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %313, label %314, label %348

314:                                              ; preds = %312
  %315 = load i8, ptr %98, align 1, !tbaa !227, !range !212, !noundef !213
  %316 = trunc nuw i8 %315 to i1
  br i1 %316, label %317, label %348

317:                                              ; preds = %314
  %318 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %97)
  br label %348

319:                                              ; preds = %132
  %320 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL38needs_manual_helper_invocation_updatesEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %320, label %321, label %348

321:                                              ; preds = %319
  %322 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %97)
  br label %348

323:                                              ; preds = %132, %132, %132, %132, %132
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %39) #7
  %324 = load i32, ptr %133, align 4, !tbaa !5
  store i32 %324, ptr %39, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #7
  %325 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %39)
  store ptr %325, ptr %40, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #7
  %326 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %326, ptr %41, align 8
  %327 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #7
  br i1 %327, label %328, label %330

328:                                              ; preds = %323
  %329 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %39)
  br label %330

330:                                              ; preds = %328, %323
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #7
  br label %348

331:                                              ; preds = %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132, %132
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #7
  %332 = getelementptr inbounds i8, ptr %133, i64 8
  %333 = load i32, ptr %332, align 4, !tbaa !5
  store i32 %333, ptr %42, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #7
  %334 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 4 dereferenceable(4) %42)
  store ptr %334, ptr %43, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #7
  %335 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %3) #7
  store ptr %335, ptr %44, align 8
  %336 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #7
  br i1 %336, label %337, label %339

337:                                              ; preds = %331
  %338 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %42)
  br label %339

339:                                              ; preds = %337, %331
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #7
  br label %348

340:                                              ; preds = %132
  %341 = load i32, ptr %95, align 8, !tbaa !228
  %.not318 = icmp eq i32 %341, 0
  br i1 %.not318, label %344, label %342

342:                                              ; preds = %340
  %343 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %95)
  br label %344

344:                                              ; preds = %342, %340
  %345 = load i32, ptr %96, align 4, !tbaa !229
  %.not319 = icmp eq i32 %345, 0
  br i1 %.not319, label %348, label %346

346:                                              ; preds = %344
  %347 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %96)
  br label %348

348:                                              ; preds = %308, %310, %305, %279, %286, %300, %289, %132, %344, %346, %319, %321, %312, %314, %317, %339, %330, %303, %301, %278, %252, %238, %221, %192, %175
  %349 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL38needs_manual_helper_invocation_updatesEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  %350 = load i32, ptr %127, align 4
  %351 = icmp eq i32 %350, 6
  %or.cond = select i1 %349, i1 %351, i1 false
  br i1 %or.cond, label %352, label %357

352:                                              ; preds = %348
  %353 = load i8, ptr %98, align 1, !tbaa !227, !range !212, !noundef !213
  %354 = trunc nuw i8 %353 to i1
  br i1 %354, label %355, label %357

355:                                              ; preds = %352
  %356 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %97)
  br label %357

357:                                              ; preds = %355, %352, %348
  %358 = getelementptr inbounds i8, ptr %.0286386, i64 12
  %.not316 = icmp eq ptr %358, %126
  br i1 %.not316, label %._crit_edge389, label %132

359:                                              ; preds = %270, %193
  %.pn322 = phi { ptr, i32 } [ %271, %270 ], [ %194, %193 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  br label %575

360:                                              ; preds = %._crit_edge389
  %361 = call { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 4 dereferenceable(4) %112)
  br label %362

362:                                              ; preds = %360, %._crit_edge389
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  %363 = getelementptr inbounds i8, ptr %.0391, i64 4
  %.not305 = icmp eq ptr %363, %94
  br i1 %.not305, label %._crit_edge394, label %120

364:                                              ; preds = %._crit_edge394
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #7
  %365 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %2) #7
  store ptr %365, ptr %45, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #7
  %366 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %2) #7
  store ptr %366, ptr %46, align 8
  %367 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %46) #7
  br i1 %367, label %.lr.ph407, label %._crit_edge408

.lr.ph407:                                        ; preds = %364
  %368 = getelementptr inbounds i8, ptr %0, i64 10150
  %369 = getelementptr inbounds i8, ptr %0, i64 256
  br label %370

._crit_edge408:                                   ; preds = %.loopexit, %364
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #7
  br label %574

370:                                              ; preds = %.lr.ph407, %.loopexit
  %.0358405 = phi i1 [ false, %.lr.ph407 ], [ %.4, %.loopexit ]
  %.0359404 = phi i1 [ false, %.lr.ph407 ], [ %.4363, %.loopexit ]
  %.0364403 = phi i1 [ false, %.lr.ph407 ], [ %.4368, %.loopexit ]
  %.0369402 = phi i1 [ false, %.lr.ph407 ], [ %.4373, %.loopexit ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %47) #7
  %371 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt23_Rb_tree_const_iteratorIjEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %45) #7
  %372 = load i32, ptr %371, align 4, !tbaa !5
  store i32 %372, ptr %47, align 4, !tbaa !5
  %373 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %372)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %48) #7
  %374 = getelementptr inbounds i8, ptr %373, i64 12
  %375 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %374)
  store i32 %375, ptr %48, align 4, !tbaa !5
  %376 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %375)
  %377 = load i32, ptr %47, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %49, i32 noundef %377)
  %378 = load i32, ptr %49, align 4
  %379 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %378, i32 noundef 11)
  %380 = load i32, ptr %47, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %50, i32 noundef %380)
  %381 = load i32, ptr %50, align 4
  %382 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %381, i32 noundef 15)
  br i1 %382, label %.thread, label %385

.thread:                                          ; preds = %370
  %383 = getelementptr inbounds i8, ptr %376, i64 8
  %.sroa.066.0.copyload374 = load i32, ptr %383, align 8, !tbaa !5
  %384 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.066.0.copyload374, i32 noundef 2)
  br i1 %384, label %400, label %.thread375

385:                                              ; preds = %370
  %386 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL14is_patch_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %376)
  %387 = getelementptr inbounds i8, ptr %376, i64 8
  %.sroa.066.0.copyload = load i32, ptr %387, align 8, !tbaa !5
  %388 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.066.0.copyload, i32 noundef 2)
  br i1 %386, label %399, label %389

389:                                              ; preds = %385
  %390 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %391 = getelementptr inbounds i8, ptr %373, i64 16
  %392 = load i32, ptr %391, align 8
  %393 = icmp eq i32 %392, 1
  %or.cond335 = select i1 %390, i1 %393, i1 false
  br i1 %or.cond335, label %.thread375, label %394

394:                                              ; preds = %389
  %395 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %395, label %396, label %.thread375

396:                                              ; preds = %394
  %397 = load i32, ptr %391, align 8, !tbaa !230
  %398 = icmp eq i32 %397, 3
  br label %.thread375

399:                                              ; preds = %385
  br i1 %388, label %400, label %.thread375

400:                                              ; preds = %.thread, %399
  %401 = phi ptr [ %383, %.thread ], [ %387, %399 ]
  %402 = getelementptr inbounds i8, ptr %373, i64 16
  %403 = load i32, ptr %402, align 8, !tbaa !230
  %404 = icmp eq i32 %403, 3
  br label %.thread375

.thread375:                                       ; preds = %.thread, %389, %396, %394, %399, %400
  %brmerge338 = phi i1 [ false, %399 ], [ %404, %400 ], [ true, %389 ], [ %398, %396 ], [ false, %394 ], [ false, %.thread ]
  %405 = phi i1 [ true, %399 ], [ true, %400 ], [ false, %389 ], [ false, %396 ], [ false, %394 ], [ true, %.thread ]
  %406 = phi ptr [ %387, %399 ], [ %401, %400 ], [ %387, %389 ], [ %387, %396 ], [ %387, %394 ], [ %383, %.thread ]
  %407 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %373)
  br i1 %407, label %switch.early.test, label %switch.lookup

switch.early.test:                                ; preds = %.thread375
  %408 = icmp ult i32 %379, 5
  br i1 %408, label %switch.hole_check, label %409

409:                                              ; preds = %switch.hole_check, %switch.early.test
  %410 = getelementptr inbounds i8, ptr %376, i64 16
  %411 = load i32, ptr %410, align 8, !tbaa !43
  %412 = icmp eq i32 %411, 15
  br label %switch.lookup

switch.hole_check:                                ; preds = %switch.early.test
  %switch.maskindex = trunc nuw i32 %379 to i8
  %switch.shifted = lshr i8 27, %switch.maskindex
  %switch.lobit = trunc i8 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup, label %409

switch.lookup:                                    ; preds = %switch.hole_check, %.thread375, %409
  %413 = phi i1 [ %412, %409 ], [ true, %.thread375 ], [ true, %switch.hole_check ]
  %spec.select = select i1 %brmerge338, i1 %413, i1 false
  %414 = getelementptr inbounds i8, ptr %373, i64 16
  %415 = load i32, ptr %414, align 8
  %416 = icmp eq i32 %415, 3
  %or.cond341 = select i1 %spec.select, i1 %416, i1 false
  br i1 %or.cond341, label %417, label %419

417:                                              ; preds = %switch.lookup
  %418 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL31is_stage_output_variable_maskedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %373)
  br i1 %418, label %489, label %420

419:                                              ; preds = %switch.lookup
  br i1 %spec.select, label %420, label %489

420:                                              ; preds = %417, %419
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  %421 = load i32, ptr %414, align 8, !tbaa !230
  %422 = icmp eq i32 %421, 1
  br i1 %405, label %423, label %428

423:                                              ; preds = %420
  %.v = select i1 %422, i64 11296, i64 11328
  %424 = getelementptr inbounds i8, ptr %0, i64 %.v
  %425 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(32) %424)
          to label %431 unwind label %426

426:                                              ; preds = %.cont352, %434, %428, %423
  %427 = landingpad { ptr, i32 }
          cleanup
  br label %488

428:                                              ; preds = %420
  %429 = select i1 %422, ptr @.str.8, ptr @.str.119
  %430 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull %429)
          to label %431 unwind label %426

431:                                              ; preds = %428, %423
  %432 = load i32, ptr %414, align 8, !tbaa !230
  %433 = icmp eq i32 %432, 3
  br i1 %433, label %434, label %451

434:                                              ; preds = %431
  %.sroa.056.0.copyload = load i32, ptr %406, align 8, !tbaa !5
  %435 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.056.0.copyload, i32 noundef 2)
          to label %436 unwind label %426

436:                                              ; preds = %434
  br i1 %435, label %.preheader, label %thread-pre-split

.preheader:                                       ; preds = %436
  %437 = getelementptr inbounds i8, ptr %376, i64 136
  %438 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %437) #7
  %439 = and i64 %438, 4294967295
  %.not = icmp eq i64 %439, 0
  br i1 %.not, label %thread-pre-split, label %.lr.ph396

440:                                              ; preds = %446
  %441 = add nuw i32 %.0302395, 1
  %442 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %437) #7
  %443 = trunc i64 %442 to i32
  %444 = icmp ult i32 %441, %443
  br i1 %444, label %.lr.ph396, label %thread-pre-split, !llvm.loop !232

.lr.ph396:                                        ; preds = %.preheader, %440
  %.0302395 = phi i32 [ %441, %440 ], [ 0, %.preheader ]
  %445 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %373, i32 noundef %.0302395, i1 noundef zeroext true)
          to label %446 unwind label %449

446:                                              ; preds = %.lr.ph396
  br i1 %445, label %447, label %440

447:                                              ; preds = %446
  %.sroa.052.0.copyload = load i32, ptr %374, align 4, !tbaa !5
  %448 = getelementptr inbounds i8, ptr %373, i64 8
  %.sroa.051.0.copyload = load i32, ptr %448, align 8, !tbaa !5
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %91, i32 %.sroa.052.0.copyload, i32 %.sroa.051.0.copyload, i1 noundef zeroext true)
  br label %thread-pre-split

449:                                              ; preds = %.lr.ph396
  %450 = landingpad { ptr, i32 }
          cleanup
  br label %488

thread-pre-split:                                 ; preds = %440, %.preheader, %436, %447
  %.pr = load i32, ptr %414, align 8, !tbaa !230
  br label %451

451:                                              ; preds = %thread-pre-split, %431
  %452 = phi i32 [ %.pr, %thread-pre-split ], [ %432, %431 ]
  switch i32 %452, label %..cont352_crit_edge [
    i32 1, label %453
    i32 3, label %457
  ]

..cont352_crit_edge:                              ; preds = %451
  %.pre = load i32, ptr %47, align 4, !tbaa !5
  br label %.cont352

453:                                              ; preds = %451
  %.sroa.speculated351 = select i1 %405, i1 %.0359404, i1 %.0369402
  br i1 %.sroa.speculated351, label %.critedge347, label %454

454:                                              ; preds = %453
  %.v311 = select i1 %405, i64 11140, i64 11148
  %455 = getelementptr inbounds i8, ptr %0, i64 %.v311
  %456 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %455)
  store i32 %456, ptr %47, align 4, !tbaa !5
  %not.410 = xor i1 %405, true
  %spec.select379 = select i1 %not.410, i1 true, i1 %.0369402
  %spec.select380 = select i1 %405, i1 true, i1 %.0359404
  br label %.cont352

457:                                              ; preds = %451
  %.sroa.speculated = select i1 %405, i1 %.0358405, i1 %.0364403
  br i1 %.sroa.speculated, label %.critedge347, label %458

458:                                              ; preds = %457
  %.v310 = select i1 %405, i64 11144, i64 11152
  %459 = getelementptr inbounds i8, ptr %0, i64 %.v310
  %460 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %459)
  store i32 %460, ptr %47, align 4, !tbaa !5
  %not. = xor i1 %405, true
  %spec.select381 = select i1 %not., i1 true, i1 %.0364403
  %spec.select382 = select i1 %405, i1 true, i1 %.0358405
  br label %.cont352

.cont352:                                         ; preds = %..cont352_crit_edge, %458, %454
  %461 = phi i32 [ %.pre, %..cont352_crit_edge ], [ %456, %454 ], [ %460, %458 ]
  %.2371 = phi i1 [ %.0369402, %..cont352_crit_edge ], [ %spec.select379, %454 ], [ %.0369402, %458 ]
  %.2366 = phi i1 [ %.0364403, %..cont352_crit_edge ], [ %.0364403, %454 ], [ %spec.select381, %458 ]
  %.2361 = phi i1 [ %.0359404, %..cont352_crit_edge ], [ %spec.select380, %454 ], [ %.0359404, %458 ]
  %.2 = phi i1 [ %.0358405, %..cont352_crit_edge ], [ %.0358405, %454 ], [ %spec.select382, %458 ]
  %462 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %461)
          to label %463 unwind label %426

463:                                              ; preds = %.cont352
  %464 = getelementptr inbounds i8, ptr %462, i64 12
  %465 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %464)
  store i32 %465, ptr %48, align 4, !tbaa !5
  %466 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %117, i32 noundef 1)
          to label %467 unwind label %484

467:                                              ; preds = %463
  %468 = load i32, ptr %48, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %52, i32 noundef %468)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %53, i32 noundef %466)
  %469 = load i32, ptr %52, align 4
  %470 = load i32, ptr %53, align 4
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %91, i32 %469, i32 %470, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %54) #7
  store i32 7, ptr %54, align 4, !tbaa !233
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %55) #7
  store i32 0, ptr %55, align 4, !tbaa !5
  %471 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEiS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %466, ptr noundef nonnull align 4 dereferenceable(4) %48, ptr noundef nonnull align 4 dereferenceable(4) %54, ptr noundef nonnull align 4 dereferenceable(4) %55, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %472 unwind label %486

472:                                              ; preds = %467
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %55) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %56, i32 noundef %466)
  %473 = load i32, ptr %56, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %473, ptr noundef nonnull align 8 dereferenceable(32) %51)
          to label %474 unwind label %484

474:                                              ; preds = %472
  %475 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %476 unwind label %484

476:                                              ; preds = %474
  br i1 %475, label %477, label %.critedge347

477:                                              ; preds = %476
  %478 = load i8, ptr %368, align 2, !tbaa !234, !range !212, !noundef !213
  %479 = trunc nuw i8 %478 to i1
  %480 = load i32, ptr %414, align 8
  %481 = icmp eq i32 %480, 1
  %or.cond343 = select i1 %479, i1 %481, i1 false
  br i1 %or.cond343, label %482, label %.critedge347

482:                                              ; preds = %477
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %57, i32 noundef %466)
  %483 = load i32, ptr %57, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %483, i32 noundef 24, i32 noundef 0)
          to label %.critedge347 unwind label %484

484:                                              ; preds = %482, %474, %472, %463
  %485 = landingpad { ptr, i32 }
          cleanup
  br label %488

486:                                              ; preds = %467
  %487 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %55) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #7
  br label %488

.critedge347:                                     ; preds = %457, %453, %476, %477, %482
  %.3372 = phi i1 [ %.2371, %482 ], [ %.2371, %477 ], [ %.2371, %476 ], [ %.0369402, %457 ], [ %.0369402, %453 ]
  %.3367 = phi i1 [ %.2366, %482 ], [ %.2366, %477 ], [ %.2366, %476 ], [ %.0364403, %457 ], [ %.0364403, %453 ]
  %.3362 = phi i1 [ %.2361, %482 ], [ %.2361, %477 ], [ %.2361, %476 ], [ %.0359404, %457 ], [ %.0359404, %453 ]
  %.3 = phi i1 [ %.2, %482 ], [ %.2, %477 ], [ %.2, %476 ], [ %.0358405, %457 ], [ %.0358405, %453 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  br label %.loopexit

488:                                              ; preds = %484, %486, %449, %426
  %.pn312.pn = phi { ptr, i32 } [ %427, %426 ], [ %450, %449 ], [ %485, %484 ], [ %487, %486 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  br label %573

489:                                              ; preds = %417, %419
  br i1 %407, label %490, label %.critedge345

490:                                              ; preds = %489
  %491 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %491, label %492, label %520

492:                                              ; preds = %490
  %493 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %117, i32 noundef 1)
  %494 = load i32, ptr %48, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %58, i32 noundef %494)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %59, i32 noundef %493)
  %495 = load i32, ptr %58, align 4
  %496 = load i32, ptr %59, align 4
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %91, i32 %495, i32 %496, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %60) #7
  store i32 7, ptr %60, align 4, !tbaa !233
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %61) #7
  store i32 0, ptr %61, align 4, !tbaa !5
  %497 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEiS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %493, ptr noundef nonnull align 4 dereferenceable(4) %48, ptr noundef nonnull align 4 dereferenceable(4) %60, ptr noundef nonnull align 4 dereferenceable(4) %61, ptr noundef nonnull align 4 dereferenceable(4) %47)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %61) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %60) #7
  %498 = getelementptr inbounds i8, ptr %497, i64 16
  store i32 4, ptr %498, align 8, !tbaa !230
  %499 = load i32, ptr %47, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %62, i32 noundef %499)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #7
  %500 = load i32, ptr %47, align 4, !tbaa !5
  %501 = load ptr, ptr %0, align 8, !tbaa !235
  %502 = getelementptr inbounds i8, ptr %501, i64 48
  %503 = load ptr, ptr %502, align 8
  call void %503(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %500, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %66) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull @.str.120, ptr noundef nonnull align 1 dereferenceable(1) %66)
          to label %504 unwind label %512

504:                                              ; preds = %492
  invoke void @_ZN11spirv_cross11CompilerMSL17ensure_valid_nameENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull %64, ptr noundef nonnull %65)
          to label %505 unwind label %514

505:                                              ; preds = %504
  %506 = load i32, ptr %62, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %506, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %507 unwind label %516

507:                                              ; preds = %505
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %66) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %67) #7
  %508 = load i32, ptr %47, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %67, i32 noundef %508)
  %509 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %369, ptr noundef nonnull align 4 dereferenceable(4) %67)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %68) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %68, i32 noundef %493)
  %510 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %369, ptr noundef nonnull align 4 dereferenceable(4) %68)
  %511 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %510, ptr noundef nonnull align 8 dereferenceable(488) %509)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %68) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %67) #7
  br label %.loopexit

512:                                              ; preds = %492
  %513 = landingpad { ptr, i32 }
          cleanup
  br label %519

514:                                              ; preds = %504
  %515 = landingpad { ptr, i32 }
          cleanup
  br label %518

516:                                              ; preds = %505
  %517 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  br label %518

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

519:                                              ; preds = %518, %512
  %.pn.pn = phi { ptr, i32 } [ %.pn, %518 ], [ %513, %512 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %66) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #7
  br label %573

520:                                              ; preds = %490
  %.sroa.038.0.copyload = load i32, ptr %406, align 8, !tbaa !5
  %521 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.038.0.copyload, i32 noundef 2)
  br i1 %521, label %522, label %.critedge345

522:                                              ; preds = %520
  %523 = load i32, ptr %48, align 4, !tbaa !5
  %524 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %523)
  store i32 %524, ptr %48, align 4, !tbaa !5
  %525 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %524)
  %526 = getelementptr inbounds i8, ptr %525, i64 136
  %527 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %526) #7
  %528 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %526) #7
  %.not307397 = icmp eq ptr %527, %528
  br i1 %.not307397, label %.loopexit, label %.lr.ph401

.lr.ph401:                                        ; preds = %522, %559
  %.0299399 = phi ptr [ %561, %559 ], [ %527, %522 ]
  %.0300398 = phi i32 [ %560, %559 ], [ 0, %522 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %69) #7
  store i32 2147483647, ptr %69, align 4, !tbaa !237
  %529 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %525, i32 noundef %.0300398, ptr noundef nonnull %69)
  br i1 %529, label %530, label %559

530:                                              ; preds = %.lr.ph401
  %531 = load i32, ptr %69, align 4, !tbaa !237
  %532 = load i32, ptr %414, align 8, !tbaa !230
  %533 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler18has_active_builtinEN3spv7BuiltInENS1_12StorageClassE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %531, i32 noundef %532)
  br i1 %533, label %534, label %559

534:                                              ; preds = %530
  %535 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %117, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %70) #7
  store i32 %535, ptr %70, align 4, !tbaa !5
  %536 = add i32 %535, 1
  %537 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0299399)
  %538 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %537)
  %539 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %535, ptr noundef nonnull align 8 dereferenceable(336) %538)
  %540 = getelementptr inbounds i8, ptr %539, i64 8
  %541 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_1EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %540, ptr noundef nonnull align 4 dereferenceable(4) %.0299399)
  %542 = load i32, ptr %414, align 8, !tbaa !230
  %543 = getelementptr inbounds i8, ptr %539, i64 128
  store i32 %542, ptr %543, align 8, !tbaa !239
  %544 = getelementptr inbounds i8, ptr %539, i64 124
  store i8 1, ptr %544, align 4, !tbaa !240
  %545 = getelementptr inbounds i8, ptr %539, i64 120
  %546 = load i32, ptr %545, align 8, !tbaa !241
  %547 = add i32 %546, 1
  store i32 %547, ptr %545, align 8, !tbaa !241
  %548 = getelementptr inbounds i8, ptr %539, i64 276
  %549 = load i32, ptr %.0299399, align 4, !tbaa !5
  store i32 %549, ptr %548, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %71, i32 noundef %536)
  %550 = load i32, ptr %71, align 4
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %91, i32 %549, i32 %550, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %72) #7
  store i32 7, ptr %72, align 4, !tbaa !233
  %551 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %536, ptr noundef nonnull align 4 dereferenceable(4) %70, ptr noundef nonnull align 4 dereferenceable(4) %72)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %72) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %73) #7
  %552 = load i32, ptr %48, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %73, i32 noundef %552)
  %553 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %369, ptr noundef nonnull align 4 dereferenceable(4) %73)
  %554 = getelementptr inbounds i8, ptr %553, i64 392
  %555 = zext i32 %.0300398 to i64
  %556 = call noundef nonnull align 8 dereferenceable(392) ptr @_ZN11spirv_cross10VectorViewINS_4Meta10DecorationEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %554, i64 noundef %555) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %74) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %74, i32 noundef %536)
  %557 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %369, ptr noundef nonnull align 4 dereferenceable(4) %74)
  %558 = call noundef nonnull align 8 dereferenceable(392) ptr @_ZN11spirv_cross4Meta10DecorationaSERKS1_(ptr noundef nonnull align 8 dereferenceable(392) %557, ptr noundef nonnull align 8 dereferenceable(392) %556)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %74) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %73) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %70) #7
  br label %559

559:                                              ; preds = %534, %530, %.lr.ph401
  %560 = add i32 %.0300398, 1
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %69) #7
  %561 = getelementptr inbounds i8, ptr %.0299399, i64 4
  %.not307 = icmp eq ptr %561, %528
  br i1 %.not307, label %.loopexit, label %.lr.ph401

.critedge345:                                     ; preds = %489, %520
  %562 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %117, i32 noundef 1)
  %563 = load i32, ptr %48, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %75, i32 noundef %563)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %76, i32 noundef %562)
  %564 = load i32, ptr %75, align 4
  %565 = load i32, ptr %76, align 4
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %91, i32 %564, i32 %565, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %77) #7
  store i32 7, ptr %77, align 4, !tbaa !233
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %78) #7
  store i32 0, ptr %78, align 4, !tbaa !5
  %566 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEiS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %562, ptr noundef nonnull align 4 dereferenceable(4) %48, ptr noundef nonnull align 4 dereferenceable(4) %77, ptr noundef nonnull align 4 dereferenceable(4) %78, ptr noundef nonnull align 4 dereferenceable(4) %47)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %78) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %77) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %79) #7
  %567 = load i32, ptr %47, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %79, i32 noundef %567)
  %568 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %369, ptr noundef nonnull align 4 dereferenceable(4) %79)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %80) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %80, i32 noundef %562)
  %569 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %369, ptr noundef nonnull align 4 dereferenceable(4) %80)
  %570 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %569, ptr noundef nonnull align 8 dereferenceable(488) %568)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %80) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %79) #7
  br label %.loopexit

.loopexit:                                        ; preds = %559, %522, %.critedge347, %.critedge345, %507
  %.4373 = phi i1 [ %.3372, %.critedge347 ], [ %.0369402, %507 ], [ %.0369402, %.critedge345 ], [ %.0369402, %522 ], [ %.0369402, %559 ]
  %.4368 = phi i1 [ %.3367, %.critedge347 ], [ %.0364403, %507 ], [ %.0364403, %.critedge345 ], [ %.0364403, %522 ], [ %.0364403, %559 ]
  %.4363 = phi i1 [ %.3362, %.critedge347 ], [ %.0359404, %507 ], [ %.0359404, %.critedge345 ], [ %.0359404, %522 ], [ %.0359404, %559 ]
  %.4 = phi i1 [ %.3, %.critedge347 ], [ %.0358405, %507 ], [ %.0358405, %.critedge345 ], [ %.0358405, %522 ], [ %.0358405, %559 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %48) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #7
  %571 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIjEppEv(ptr noundef nonnull align 8 dereferenceable(8) %45) #7
  %572 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %46) #7
  br i1 %572, label %370, label %._crit_edge408

573:                                              ; preds = %519, %488
  %.pn312.pn.pn = phi { ptr, i32 } [ %.pn312.pn, %488 ], [ %.pn.pn, %519 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %48) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #7
  br label %575

574:                                              ; preds = %._crit_edge394, %._crit_edge408, %84
  ret void

575:                                              ; preds = %573, %359
  %.pn322.pn = phi { ptr, i32 } [ %.pn322, %359 ], [ %.pn312.pn.pn, %573 ]
  resume { ptr, i32 } %.pn322.pn
}

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

; 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 nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(392) ptr @_ZN11spirv_cross10VectorViewINS_4Meta10DecorationEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #0 align 2

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

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

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

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

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


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass