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

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

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

@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [25 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 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 #1 align 2

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

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

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

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

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

; 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)) #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(58) %5) #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i8, align 1
  %14 = alloca i32, align 4
  %15 = alloca %"class.spirv_cross::TypedID.413", align 4
  %16 = alloca i8, align 1
  %17 = alloca %"class.spirv_cross::TypedID.413", align 4
  %18 = alloca i8, align 1
  %19 = alloca %"class.spirv_cross::TypedID.413", align 4
  %20 = alloca i8, align 1
  %21 = alloca %"class.spirv_cross::TypedID.413", align 4
  %22 = alloca i8, align 1
  %23 = alloca %"class.spirv_cross::TypedID.413", align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca %"class.spirv_cross::TypedID.414", align 4
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i8, align 1
  %31 = alloca i8, align 1
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca i8, align 1
  %36 = alloca %"class.spirv_cross::TypedID.413", align 4
  %37 = alloca i32, align 4
  %38 = alloca %"class.spirv_cross::TypedID.413", align 4
  %39 = alloca i32, align 4
  %40 = alloca %"class.spirv_cross::TypedID.414", align 4
  %41 = alloca %"class.spirv_cross::TypedID.414", align 4
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::allocator.71", align 1
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca %"class.spirv_cross::TypedID.414", align 4
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca i32, align 4
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.spirv_cross::TypedID.350", align 4
  %55 = alloca i32, align 4
  %56 = alloca %"class.std::function.489", align 8
  %57 = alloca %class.anon.494, align 8
  %58 = alloca %"class.std::function.489", align 8
  %59 = alloca %class.anon.495, align 8
  %60 = alloca %"class.spirv_cross::TypedID.413", align 4
  %61 = alloca %"class.std::function.489", align 8
  %62 = alloca %class.anon.496, align 8
  %63 = alloca %"class.std::function.489", align 8
  %64 = alloca %class.anon.497, align 8
  %65 = alloca %"class.std::function.489", align 8
  %66 = alloca %class.anon.498, align 8
  %67 = alloca %"class.spirv_cross::TypedID.413", align 4
  %68 = alloca i32, align 4
  %69 = alloca %"class.spirv_cross::TypedID.413", align 4
  %70 = alloca i32, align 4
  %71 = alloca %"class.spirv_cross::TypedID.413", align 4
  %72 = alloca %"class.spirv_cross::TypedID.414", align 4
  %73 = alloca i32, align 4
  %74 = alloca %"class.spirv_cross::TypedID.414", align 4
  %75 = alloca %"class.spirv_cross::TypedID.414", align 4
  %76 = alloca %"class.spirv_cross::TypedID.414", align 4
  %77 = alloca %"class.spirv_cross::TypedID.414", align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca %"class.spirv_cross::TypedID.414", align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca %"class.spirv_cross::TypedID.414", align 4
  %86 = alloca %"class.spirv_cross::TypedID.413", align 4
  %87 = alloca i32, align 4
  %88 = alloca %"class.spirv_cross::TypedID.413", align 4
  %89 = alloca %"class.spirv_cross::TypedID.414", align 4
  %90 = alloca %"class.spirv_cross::TypedID.413", align 4
  %91 = alloca i32, align 4
  %92 = alloca %"class.spirv_cross::TypedID.413", align 4
  %93 = alloca %"class.spirv_cross::TypedID.414", align 4
  %94 = alloca %"class.spirv_cross::TypedID.414", align 4
  %95 = alloca i32, align 4
  %96 = alloca %"class.spirv_cross::TypedID.414", align 4
  %97 = alloca %"class.spirv_cross::TypedID.414", align 4
  %98 = alloca %"class.spirv_cross::TypedID.414", align 4
  %99 = alloca %"class.spirv_cross::TypedID.414", align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  %100 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #7
  %101 = load ptr, ptr %11, align 8, !tbaa !5
  %102 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %100, ptr noundef nonnull align 8 dereferenceable(176) %101)
  %103 = zext i1 %102 to i8
  store i8 %103, ptr %13, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %104, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %15, ptr align 8 %105, i64 4, i1 false), !tbaa.struct !13
  %106 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %15, i32 0, i32 0
  %107 = load i32, ptr %106, align 4
  %108 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %107, i32 noundef 11)
  store i32 %108, ptr %14, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #7
  %109 = load ptr, ptr %11, align 8, !tbaa !5
  %110 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %109, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 8 %110, i64 4, i1 false), !tbaa.struct !13
  %111 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %17, i32 0, i32 0
  %112 = load i32, ptr %111, align 4
  %113 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %112, i32 noundef 14)
  %114 = zext i1 %113 to i8
  store i8 %114, ptr %16, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #7
  %115 = load ptr, ptr %11, align 8, !tbaa !5
  %116 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %115, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 8 %116, i64 4, i1 false), !tbaa.struct !13
  %117 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %19, i32 0, i32 0
  %118 = load i32, ptr %117, align 4
  %119 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %118, i32 noundef 13)
  %120 = zext i1 %119 to i8
  store i8 %120, ptr %18, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #7
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %121, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 8 %122, i64 4, i1 false), !tbaa.struct !13
  %123 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %21, i32 0, i32 0
  %124 = load i32, ptr %123, align 4
  %125 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %124, i32 noundef 16)
  %126 = zext i1 %125 to i8
  store i8 %126, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  %127 = load ptr, ptr %11, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %127, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 8 %128, i64 4, i1 false), !tbaa.struct !13
  %129 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %23, i32 0, i32 0
  %130 = load i32, ptr %129, align 4
  %131 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %130, i32 noundef 17)
  %132 = zext i1 %131 to i8
  store i8 %132, ptr %22, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %133 = load ptr, ptr %10, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %133, i32 0, i32 12
  %135 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %134) #7
  %136 = trunc i64 %135 to i32
  store i32 %136, ptr %24, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %137 = load ptr, ptr %11, align 8, !tbaa !5
  %138 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %137, i32 0, i32 1
  %139 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %138)
  %140 = load i32, ptr %14, align 4, !tbaa !16
  %141 = call noundef i32 @_ZN11spirv_cross11CompilerMSL27ensure_correct_builtin_typeEjN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %139, i32 noundef %140)
  store i32 %141, ptr %25, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %142 = load i32, ptr %25, align 4, !tbaa !14
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef %142)
  %143 = load ptr, ptr %11, align 8, !tbaa !5
  %144 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %143, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %144, ptr align 4 %26, i64 4, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  %145 = load ptr, ptr %11, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %145, i32 0, i32 1
  %147 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %146)
  %148 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %147)
  store i32 %148, ptr %25, align 4, !tbaa !14
  %149 = load ptr, ptr %12, align 8, !tbaa !5
  %150 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %149, i32 0, i32 1
  %151 = load i8, ptr %150, align 8, !tbaa !18, !range !26, !noundef !27
  %152 = trunc i8 %151 to i1
  br i1 %152, label %153, label %162

153:                                              ; preds = %6
  %154 = load i32, ptr %25, align 4, !tbaa !14
  %155 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %154)
  %156 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %100, ptr noundef nonnull align 8 dereferenceable(336) %155)
  br i1 %156, label %157, label %162

157:                                              ; preds = %153
  %158 = load i32, ptr %25, align 4, !tbaa !14
  %159 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %158)
  %160 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %159, i32 0, i32 16
  %161 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %160)
  store i32 %161, ptr %25, align 4, !tbaa !14
  br label %162

162:                                              ; preds = %157, %153, %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %163 = load i32, ptr %25, align 4, !tbaa !14
  %164 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %163)
  store ptr %164, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  store i32 0, ptr %28, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  %165 = load ptr, ptr %27, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %165, i32 0, i32 4
  %167 = load i32, ptr %166, align 8, !tbaa !28
  store i32 %167, ptr %29, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #7
  store i8 0, ptr %30, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #7
  store i8 0, ptr %31, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  store i32 0, ptr %32, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %168 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 1
  %169 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %168, i32 0, i32 13
  %170 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %169)
  %171 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %170)
  store ptr %171, ptr %33, align 8, !tbaa !5
  %172 = load i32, ptr %8, align 4, !tbaa !9
  %173 = load ptr, ptr %9, align 8, !tbaa !5
  %174 = load ptr, ptr %11, align 8, !tbaa !5
  %175 = load ptr, ptr %27, align 8, !tbaa !5
  %176 = load ptr, ptr %12, align 8, !tbaa !5
  %177 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL41add_component_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_12SPIRVariableERKNS_8SPIRTypeERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %172, ptr noundef nonnull align 8 dereferenceable(32) %173, ptr noundef nonnull align 8 dereferenceable(176) %174, ptr noundef nonnull align 8 dereferenceable(336) %175, ptr noundef nonnull align 8 dereferenceable(58) %176)
  br i1 %177, label %178, label %179

178:                                              ; preds = %162
  store i32 1, ptr %34, align 4
  br label %923

179:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #7
  %180 = load ptr, ptr %11, align 8, !tbaa !5
  %181 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %180, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 8 %181, i64 4, i1 false), !tbaa.struct !13
  %182 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %36, i32 0, i32 0
  %183 = load i32, ptr %182, align 4
  %184 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %183, i32 noundef 30)
  br i1 %184, label %185, label %198

185:                                              ; preds = %179
  %186 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 37
  %187 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %186, i32 0, i32 37
  %188 = load i8, ptr %187, align 2, !tbaa !50, !range !26, !noundef !27
  %189 = trunc i8 %188 to i1
  br i1 %189, label %190, label %198

190:                                              ; preds = %185
  %191 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %100)
  %192 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %191, i32 0, i32 10
  %193 = load i32, ptr %192, align 8, !tbaa !198
  %194 = icmp eq i32 %193, 4
  br i1 %194, label %195, label %198

195:                                              ; preds = %190
  %196 = load i32, ptr %8, align 4, !tbaa !9
  %197 = icmp eq i32 %196, 3
  br label %198

198:                                              ; preds = %195, %190, %185, %179
  %199 = phi i1 [ false, %190 ], [ false, %185 ], [ false, %179 ], [ %197, %195 ]
  %200 = zext i1 %199 to i8
  store i8 %200, ptr %35, align 1, !tbaa !11
  %201 = load i8, ptr %35, align 1, !tbaa !11, !range !26, !noundef !27
  %202 = trunc i8 %201 to i1
  br i1 %202, label %203, label %219

203:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  %204 = load ptr, ptr %11, align 8, !tbaa !5
  %205 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %204, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %38, ptr align 8 %205, i64 4, i1 false), !tbaa.struct !13
  %206 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %38, i32 0, i32 0
  %207 = load i32, ptr %206, align 4
  %208 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %207, i32 noundef 30)
  store i32 %208, ptr %37, align 4, !tbaa !14
  %209 = load i32, ptr %37, align 4, !tbaa !14
  %210 = call noundef i32 @_ZNK11spirv_cross11CompilerMSL43get_target_components_for_fragment_locationEj(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %209)
  store i32 %210, ptr %28, align 4, !tbaa !14
  %211 = load i32, ptr %29, align 4, !tbaa !14
  %212 = load i32, ptr %28, align 4, !tbaa !14
  %213 = icmp ult i32 %211, %212
  br i1 %213, label %214, label %218

214:                                              ; preds = %203
  %215 = load i32, ptr %25, align 4, !tbaa !14
  %216 = load i32, ptr %28, align 4, !tbaa !14
  %217 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %215, i32 noundef %216, i32 noundef 0)
  store i32 %217, ptr %25, align 4, !tbaa !14
  store i8 1, ptr %30, align 1, !tbaa !11
  br label %218

218:                                              ; preds = %214, %203
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %219

219:                                              ; preds = %218, %198
  %220 = load i32, ptr %8, align 4, !tbaa !9
  %221 = icmp eq i32 %220, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #7
  br i1 %221, label %222, label %229

222:                                              ; preds = %219
  %223 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 110
  %224 = load ptr, ptr %11, align 8, !tbaa !5
  %225 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %224, i32 0, i32 1
  %226 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %225)
  store i32 %226, ptr %39, align 4, !tbaa !14
  %227 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %223, ptr noundef nonnull align 4 dereferenceable(4) %39)
  %228 = icmp ne i64 %227, 0
  br label %229

229:                                              ; preds = %222, %219
  %230 = phi i1 [ false, %219 ], [ %228, %222 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  br i1 %230, label %231, label %238

231:                                              ; preds = %229
  %232 = load ptr, ptr %10, align 8, !tbaa !5
  %233 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %232, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  %234 = load i32, ptr %25, align 4, !tbaa !14
  %235 = load i8, ptr %18, align 1, !tbaa !11, !range !26, !noundef !27
  %236 = trunc i8 %235 to i1
  %237 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %234, i1 noundef zeroext %236)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %40, i32 noundef %237)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %233, ptr noundef nonnull align 4 dereferenceable(4) %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  br label %242

238:                                              ; preds = %229
  %239 = load ptr, ptr %10, align 8, !tbaa !5
  %240 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %239, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  %241 = load i32, ptr %25, align 4, !tbaa !14
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %41, i32 noundef %241)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %240, ptr noundef nonnull align 4 dereferenceable(4) %41) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  br label %242

242:                                              ; preds = %238, %231
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #7
  %243 = load ptr, ptr %11, align 8, !tbaa !5
  %244 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %243, i32 0, i32 1
  %245 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %100, i32 noundef %245, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef @.str.67, ptr noundef nonnull align 1 dereferenceable(1) %45)
          to label %246 unwind label %279

246:                                              ; preds = %242
  invoke void @_ZN11spirv_cross11CompilerMSL17ensure_valid_nameENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(12482) %100, ptr noundef %43, ptr noundef %44)
          to label %247 unwind label %283

247:                                              ; preds = %246
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %248, i32 0, i32 1
  %250 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %249)
          to label %251 unwind label %288

251:                                              ; preds = %247
  %252 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %48, i32 0, i32 0
  store i32 %250, ptr %252, align 4
  %253 = load i32, ptr %24, align 4, !tbaa !14
  %254 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %48, i32 0, i32 0
  %255 = load i32, ptr %254, align 4
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %255, i32 noundef %253, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %256 unwind label %288

256:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #7
  %257 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(32) %257, ptr noundef @.str.66)
          to label %258 unwind label %292

258:                                              ; preds = %256
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %259 unwind label %296

259:                                              ; preds = %258
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #7
  %260 = load i32, ptr %8, align 4, !tbaa !9
  %261 = icmp eq i32 %260, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #7
  br i1 %261, label %262, label %271

262:                                              ; preds = %259
  %263 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 110
  %264 = load ptr, ptr %11, align 8, !tbaa !5
  %265 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %264, i32 0, i32 1
  %266 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %265)
          to label %267 unwind label %301

267:                                              ; preds = %262
  store i32 %266, ptr %51, align 4, !tbaa !14
  %268 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %263, ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %269 unwind label %301

269:                                              ; preds = %267
  %270 = icmp ne i64 %268, 0
  br label %271

271:                                              ; preds = %269, %259
  %272 = phi i1 [ false, %259 ], [ %270, %269 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  br i1 %272, label %273, label %338

273:                                              ; preds = %271
  %274 = load i8, ptr %20, align 1, !tbaa !11, !range !26, !noundef !27
  %275 = trunc i8 %274 to i1
  br i1 %275, label %276, label %309

276:                                              ; preds = %273
  %277 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef @.str.124)
          to label %278 unwind label %305

278:                                              ; preds = %276
  br label %337

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

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

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

288:                                              ; preds = %251, %247
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %46, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %47, align 4
  br label %928

292:                                              ; preds = %256
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %46, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %47, align 4
  br label %300

296:                                              ; preds = %258
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %46, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %47, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  br label %300

300:                                              ; preds = %296, %292
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #7
  br label %927

301:                                              ; preds = %267, %262
  %302 = landingpad { ptr, i32 }
          cleanup
  %303 = extractvalue { ptr, i32 } %302, 0
  store ptr %303, ptr %46, align 8
  %304 = extractvalue { ptr, i32 } %302, 1
  store i32 %304, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  br label %926

305:                                              ; preds = %921, %916, %912, %905, %901, %892, %888, %879, %875, %862, %858, %835, %823, %819, %792, %786, %762, %756, %654, %509, %503, %432, %421, %415, %349, %344, %333, %276
  %306 = landingpad { ptr, i32 }
          cleanup
  %307 = extractvalue { ptr, i32 } %306, 0
  store ptr %307, ptr %46, align 8
  %308 = extractvalue { ptr, i32 } %306, 1
  store i32 %308, ptr %47, align 4
  br label %926

309:                                              ; preds = %273
  %310 = load i8, ptr %22, align 1, !tbaa !11, !range !26, !noundef !27
  %311 = trunc i8 %310 to i1
  br i1 %311, label %312, label %333

312:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #7
  %313 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 3
  %314 = load i32, ptr %313, align 4, !tbaa !205
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %100, i32 noundef %314, i1 noundef zeroext true)
          to label %315 unwind label %319

315:                                              ; preds = %312
  invoke void @_ZN11spirv_cross4joinIJRA24_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 1 dereferenceable(24) @.str.125, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %316 unwind label %323

316:                                              ; preds = %315
  %317 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %318 unwind label %327

318:                                              ; preds = %316
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  br label %336

319:                                              ; preds = %312
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %46, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %47, align 4
  br label %332

323:                                              ; preds = %315
  %324 = landingpad { ptr, i32 }
          cleanup
  %325 = extractvalue { ptr, i32 } %324, 0
  store ptr %325, ptr %46, align 8
  %326 = extractvalue { ptr, i32 } %324, 1
  store i32 %326, ptr %47, align 4
  br label %331

327:                                              ; preds = %316
  %328 = landingpad { ptr, i32 }
          cleanup
  %329 = extractvalue { ptr, i32 } %328, 0
  store ptr %329, ptr %46, align 8
  %330 = extractvalue { ptr, i32 } %328, 1
  store i32 %330, ptr %47, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  br label %331

331:                                              ; preds = %327, %323
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  br label %332

332:                                              ; preds = %331, %319
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  br label %926

333:                                              ; preds = %309
  %334 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef @.str.126)
          to label %335 unwind label %305

335:                                              ; preds = %333
  br label %336

336:                                              ; preds = %335, %318
  br label %337

337:                                              ; preds = %336, %278
  br label %338

338:                                              ; preds = %337, %271
  %339 = load i8, ptr %30, align 1, !tbaa !11, !range !26, !noundef !27
  %340 = trunc i8 %339 to i1
  br i1 %340, label %344, label %341

341:                                              ; preds = %338
  %342 = load i8, ptr %31, align 1, !tbaa !11, !range !26, !noundef !27
  %343 = trunc i8 %342 to i1
  br i1 %343, label %344, label %410

344:                                              ; preds = %341, %338
  %345 = load ptr, ptr %33, align 8, !tbaa !5
  %346 = load ptr, ptr %11, align 8, !tbaa !5
  %347 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %346, i32 0, i32 1
  %348 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %347)
          to label %349 unwind label %305

349:                                              ; preds = %344
  %350 = getelementptr inbounds %"class.spirv_cross::TypedID.350", ptr %54, i32 0, i32 0
  store i32 %348, ptr %350, align 4
  %351 = getelementptr inbounds %"class.spirv_cross::TypedID.350", ptr %54, i32 0, i32 0
  %352 = load i32, ptr %351, align 4
  invoke void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %345, i32 %352)
          to label %353 unwind label %305

353:                                              ; preds = %349
  %354 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 52
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #7
  %355 = load ptr, ptr %11, align 8, !tbaa !5
  %356 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %355, i32 0, i32 1
  %357 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %356)
          to label %358 unwind label %374

358:                                              ; preds = %353
  store i32 %357, ptr %55, align 4, !tbaa !14
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %354, ptr noundef nonnull align 4 dereferenceable(4) %55) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #7
  %359 = load i8, ptr %30, align 1, !tbaa !11, !range !26, !noundef !27
  %360 = trunc i8 %359 to i1
  br i1 %360, label %361, label %387

361:                                              ; preds = %358
  %362 = load ptr, ptr %33, align 8, !tbaa !5
  %363 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %362, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #7
  call void @llvm.lifetime.start.p0(i64 56, ptr %57) #7
  %364 = getelementptr inbounds %class.anon.494, ptr %57, i32 0, i32 0
  %365 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %365, ptr %364, align 8, !tbaa !5
  %366 = getelementptr inbounds %class.anon.494, ptr %57, i32 0, i32 1
  store ptr %100, ptr %366, align 8, !tbaa !206
  %367 = getelementptr inbounds %class.anon.494, ptr %57, i32 0, i32 2
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %367, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %368 unwind label %378

368:                                              ; preds = %361
  %369 = getelementptr inbounds %class.anon.494, ptr %57, i32 0, i32 3
  %370 = load i32, ptr %29, align 4, !tbaa !14
  store i32 %370, ptr %369, align 8, !tbaa !208
  %371 = getelementptr inbounds %class.anon.494, ptr %57, i32 0, i32 4
  %372 = load i32, ptr %32, align 4, !tbaa !14
  store i32 %372, ptr %371, align 4, !tbaa !209
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 8 dereferenceable(56) %57)
          to label %373 unwind label %382

373:                                              ; preds = %368
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %363, ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %57) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  br label %409

374:                                              ; preds = %353
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %46, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #7
  br label %926

378:                                              ; preds = %361
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %46, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %47, align 4
  br label %386

382:                                              ; preds = %368
  %383 = landingpad { ptr, i32 }
          cleanup
  %384 = extractvalue { ptr, i32 } %383, 0
  store ptr %384, ptr %46, align 8
  %385 = extractvalue { ptr, i32 } %383, 1
  store i32 %385, ptr %47, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %57) #7
  br label %386

386:                                              ; preds = %382, %378
  call void @llvm.lifetime.end.p0(i64 56, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  br label %926

387:                                              ; preds = %358
  %388 = load ptr, ptr %33, align 8, !tbaa !5
  %389 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %388, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #7
  call void @llvm.lifetime.start.p0(i64 56, ptr %59) #7
  %390 = getelementptr inbounds %class.anon.495, ptr %59, i32 0, i32 0
  %391 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %391, ptr %390, align 8, !tbaa !5
  %392 = getelementptr inbounds %class.anon.495, ptr %59, i32 0, i32 1
  store ptr %100, ptr %392, align 8, !tbaa !210
  %393 = getelementptr inbounds %class.anon.495, ptr %59, i32 0, i32 2
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %393, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %394 unwind label %400

394:                                              ; preds = %387
  %395 = getelementptr inbounds %class.anon.495, ptr %59, i32 0, i32 3
  %396 = load i32, ptr %29, align 4, !tbaa !14
  store i32 %396, ptr %395, align 8, !tbaa !212
  %397 = getelementptr inbounds %class.anon.495, ptr %59, i32 0, i32 4
  %398 = load i32, ptr %32, align 4, !tbaa !14
  store i32 %398, ptr %397, align 4, !tbaa !213
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 8 dereferenceable(56) %59)
          to label %399 unwind label %404

399:                                              ; preds = %394
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %389, ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %59) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  br label %409

400:                                              ; preds = %387
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %46, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %47, align 4
  br label %408

404:                                              ; preds = %394
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %46, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %47, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %59) #7
  br label %408

408:                                              ; preds = %404, %400
  call void @llvm.lifetime.end.p0(i64 56, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  br label %926

409:                                              ; preds = %399, %373
  br label %427

410:                                              ; preds = %341
  %411 = load ptr, ptr %12, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %411, i32 0, i32 1
  %413 = load i8, ptr %412, align 8, !tbaa !18, !range !26, !noundef !27
  %414 = trunc i8 %413 to i1
  br i1 %414, label %426, label %415

415:                                              ; preds = %410
  %416 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 1
  %417 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %416, i32 0, i32 3
  %418 = load ptr, ptr %11, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %418, i32 0, i32 1
  %420 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %417, ptr noundef nonnull align 4 dereferenceable(4) %419)
          to label %421 unwind label %305

421:                                              ; preds = %415
  %422 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %420, i32 0, i32 0
  %423 = getelementptr inbounds %"struct.spirv_cross::Meta::Decoration", ptr %422, i32 0, i32 1
  %424 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %423, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %425 unwind label %305

425:                                              ; preds = %421
  br label %426

426:                                              ; preds = %425, %410
  br label %427

427:                                              ; preds = %426, %409
  %428 = load ptr, ptr %11, align 8, !tbaa !5
  %429 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %428, i32 0, i32 2
  %430 = load i32, ptr %429, align 8, !tbaa !214
  %431 = icmp eq i32 %430, 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #7
  br i1 %431, label %432, label %441

432:                                              ; preds = %427
  %433 = load ptr, ptr %11, align 8, !tbaa !5
  %434 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %433, i32 0, i32 4
  %435 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %434)
          to label %436 unwind label %305

436:                                              ; preds = %432
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %60, i32 noundef 0)
          to label %437 unwind label %455

437:                                              ; preds = %436
  %438 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %60)
          to label %439 unwind label %455

439:                                              ; preds = %437
  %440 = icmp ne i32 %435, %438
  br label %441

441:                                              ; preds = %439, %427
  %442 = phi i1 [ false, %427 ], [ %440, %439 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #7
  br i1 %442, label %443, label %503

443:                                              ; preds = %441
  %444 = load i8, ptr %30, align 1, !tbaa !11, !range !26, !noundef !27
  %445 = trunc i8 %444 to i1
  br i1 %445, label %449, label %446

446:                                              ; preds = %443
  %447 = load i8, ptr %31, align 1, !tbaa !11, !range !26, !noundef !27
  %448 = trunc i8 %447 to i1
  br i1 %448, label %449, label %459

449:                                              ; preds = %446, %443
  %450 = load ptr, ptr %33, align 8, !tbaa !5
  %451 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %450, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #7
  %452 = getelementptr inbounds %class.anon.496, ptr %62, i32 0, i32 0
  %453 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %453, ptr %452, align 8, !tbaa !5
  %454 = getelementptr inbounds %class.anon.496, ptr %62, i32 0, i32 1
  store ptr %100, ptr %454, align 8, !tbaa !217
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 8 dereferenceable(16) %62) #7
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %451, ptr noundef nonnull align 8 dereferenceable(32) %61) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #7
  br label %502

455:                                              ; preds = %437, %436
  %456 = landingpad { ptr, i32 }
          cleanup
  %457 = extractvalue { ptr, i32 } %456, 0
  store ptr %457, ptr %46, align 8
  %458 = extractvalue { ptr, i32 } %456, 1
  store i32 %458, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #7
  br label %926

459:                                              ; preds = %446
  %460 = load ptr, ptr %12, align 8, !tbaa !5
  %461 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %460, i32 0, i32 1
  %462 = load i8, ptr %461, align 8, !tbaa !18, !range !26, !noundef !27
  %463 = trunc i8 %462 to i1
  br i1 %463, label %464, label %483

464:                                              ; preds = %459
  %465 = load ptr, ptr %33, align 8, !tbaa !5
  %466 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %465, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #7
  call void @llvm.lifetime.start.p0(i64 352, ptr %64) #7
  %467 = getelementptr inbounds %class.anon.497, ptr %64, i32 0, i32 0
  %468 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %468, ptr %467, align 8, !tbaa !5
  %469 = getelementptr inbounds %class.anon.497, ptr %64, i32 0, i32 1
  store ptr %100, ptr %469, align 8, !tbaa !219
  %470 = getelementptr inbounds %class.anon.497, ptr %64, i32 0, i32 2
  %471 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %470, ptr noundef nonnull align 8 dereferenceable(336) %471)
          to label %472 unwind label %474

472:                                              ; preds = %464
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 8 dereferenceable(352) %64)
          to label %473 unwind label %478

473:                                              ; preds = %472
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %466, ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(352) %64) #7
  call void @llvm.lifetime.end.p0(i64 352, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #7
  br label %501

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

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

482:                                              ; preds = %478, %474
  call void @llvm.lifetime.end.p0(i64 352, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #7
  br label %926

483:                                              ; preds = %459
  %484 = load ptr, ptr %33, align 8, !tbaa !5
  %485 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %484, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr %66) #7
  %486 = getelementptr inbounds %class.anon.498, ptr %66, i32 0, i32 0
  %487 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %487, ptr %486, align 8, !tbaa !5
  %488 = getelementptr inbounds %class.anon.498, ptr %66, i32 0, i32 1
  store ptr %100, ptr %488, align 8, !tbaa !221
  %489 = getelementptr inbounds %class.anon.498, ptr %66, i32 0, i32 2
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %489, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %490 unwind label %492

490:                                              ; preds = %483
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull align 8 dereferenceable(48) %66)
          to label %491 unwind label %496

491:                                              ; preds = %490
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %485, ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(48) %66) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #7
  br label %501

492:                                              ; preds = %483
  %493 = landingpad { ptr, i32 }
          cleanup
  %494 = extractvalue { ptr, i32 } %493, 0
  store ptr %494, ptr %46, align 8
  %495 = extractvalue { ptr, i32 } %493, 1
  store i32 %495, ptr %47, align 4
  br label %500

496:                                              ; preds = %490
  %497 = landingpad { ptr, i32 }
          cleanup
  %498 = extractvalue { ptr, i32 } %497, 0
  store ptr %498, ptr %46, align 8
  %499 = extractvalue { ptr, i32 } %497, 1
  store i32 %499, ptr %47, align 4
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(48) %66) #7
  br label %500

500:                                              ; preds = %496, %492
  call void @llvm.lifetime.end.p0(i64 48, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #7
  br label %926

501:                                              ; preds = %491, %473
  br label %502

502:                                              ; preds = %501, %449
  br label %503

503:                                              ; preds = %502, %441
  %504 = load ptr, ptr %11, align 8, !tbaa !5
  %505 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %504, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %67, ptr align 8 %505, i64 4, i1 false), !tbaa.struct !13
  %506 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %67, i32 0, i32 0
  %507 = load i32, ptr %506, align 4
  %508 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %507)
          to label %509 unwind label %305

509:                                              ; preds = %503
  %510 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %508, i32 noundef 30)
          to label %511 unwind label %305

511:                                              ; preds = %509
  br i1 %510, label %512, label %651

512:                                              ; preds = %511
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #7
  %513 = load ptr, ptr %11, align 8, !tbaa !5
  %514 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %513, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %69, ptr align 8 %514, i64 4, i1 false), !tbaa.struct !13
  %515 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %69, i32 0, i32 0
  %516 = load i32, ptr %515, align 4
  %517 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %516, i32 noundef 30)
          to label %518 unwind label %564

518:                                              ; preds = %512
  store i32 %517, ptr %68, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #7
  %519 = load ptr, ptr %11, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %519, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %71, ptr align 8 %520, i64 4, i1 false), !tbaa.struct !13
  %521 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %71, i32 0, i32 0
  %522 = load i32, ptr %521, align 4
  %523 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %522, i32 noundef 31)
          to label %524 unwind label %568

524:                                              ; preds = %518
  store i32 %523, ptr %70, align 4, !tbaa !14
  %525 = load i32, ptr %8, align 4, !tbaa !9
  %526 = icmp eq i32 %525, 1
  br i1 %526, label %527, label %618

527:                                              ; preds = %524
  %528 = load ptr, ptr %11, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %528, i32 0, i32 1
  %530 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %529)
          to label %531 unwind label %568

531:                                              ; preds = %527
  %532 = load i32, ptr %68, align 4, !tbaa !14
  %533 = load i32, ptr %70, align 4, !tbaa !14
  %534 = load ptr, ptr %12, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %534, i32 0, i32 1
  %536 = load i8, ptr %535, align 8, !tbaa !18, !range !26, !noundef !27
  %537 = trunc i8 %536 to i1
  %538 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL25ensure_correct_input_typeEjjjjb(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %530, i32 noundef %532, i32 noundef %533, i32 noundef 0, i1 noundef zeroext %537)
          to label %539 unwind label %568

539:                                              ; preds = %531
  store i32 %538, ptr %25, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #7
  %540 = load i32, ptr %25, align 4, !tbaa !14
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %72, i32 noundef %540)
          to label %541 unwind label %572

541:                                              ; preds = %539
  %542 = load ptr, ptr %11, align 8, !tbaa !5
  %543 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %542, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %543, ptr align 4 %72, i64 4, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #7
  %544 = load i32, ptr %25, align 4, !tbaa !14
  %545 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %544)
          to label %546 unwind label %568

546:                                              ; preds = %541
  store i32 %545, ptr %25, align 4, !tbaa !14
  %547 = load ptr, ptr %12, align 8, !tbaa !5
  %548 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %547, i32 0, i32 1
  %549 = load i8, ptr %548, align 8, !tbaa !18, !range !26, !noundef !27
  %550 = trunc i8 %549 to i1
  br i1 %550, label %551, label %576

551:                                              ; preds = %546
  %552 = load i32, ptr %25, align 4, !tbaa !14
  %553 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %552)
          to label %554 unwind label %568

554:                                              ; preds = %551
  %555 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %100, ptr noundef nonnull align 8 dereferenceable(336) %553)
          to label %556 unwind label %568

556:                                              ; preds = %554
  br i1 %555, label %557, label %576

557:                                              ; preds = %556
  %558 = load i32, ptr %25, align 4, !tbaa !14
  %559 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %558)
          to label %560 unwind label %568

560:                                              ; preds = %557
  %561 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %559, i32 0, i32 16
  %562 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %561)
          to label %563 unwind label %568

563:                                              ; preds = %560
  store i32 %562, ptr %25, align 4, !tbaa !14
  br label %576

564:                                              ; preds = %512
  %565 = landingpad { ptr, i32 }
          cleanup
  %566 = extractvalue { ptr, i32 } %565, 0
  store ptr %566, ptr %46, align 8
  %567 = extractvalue { ptr, i32 } %565, 1
  store i32 %567, ptr %47, align 4
  br label %650

568:                                              ; preds = %646, %642, %635, %631, %622, %618, %560, %557, %554, %551, %541, %531, %527, %518
  %569 = landingpad { ptr, i32 }
          cleanup
  %570 = extractvalue { ptr, i32 } %569, 0
  store ptr %570, ptr %46, align 8
  %571 = extractvalue { ptr, i32 } %569, 1
  store i32 %571, ptr %47, align 4
  br label %649

572:                                              ; preds = %539
  %573 = landingpad { ptr, i32 }
          cleanup
  %574 = extractvalue { ptr, i32 } %573, 0
  store ptr %574, ptr %46, align 8
  %575 = extractvalue { ptr, i32 } %573, 1
  store i32 %575, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #7
  br label %649

576:                                              ; preds = %563, %556, %546
  %577 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 110
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #7
  %578 = load ptr, ptr %11, align 8, !tbaa !5
  %579 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %578, i32 0, i32 1
  %580 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %579)
          to label %581 unwind label %597

581:                                              ; preds = %576
  store i32 %580, ptr %73, align 4, !tbaa !14
  %582 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %577, ptr noundef nonnull align 4 dereferenceable(4) %73)
          to label %583 unwind label %597

583:                                              ; preds = %581
  %584 = icmp ne i64 %582, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #7
  br i1 %584, label %585, label %605

585:                                              ; preds = %583
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #7
  %586 = load i32, ptr %25, align 4, !tbaa !14
  %587 = load i8, ptr %18, align 1, !tbaa !11, !range !26, !noundef !27
  %588 = trunc i8 %587 to i1
  %589 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %586, i1 noundef zeroext %588)
          to label %590 unwind label %601

590:                                              ; preds = %585
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %74, i32 noundef %589)
          to label %591 unwind label %601

591:                                              ; preds = %590
  %592 = load ptr, ptr %10, align 8, !tbaa !5
  %593 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %592, i32 0, i32 12
  %594 = load i32, ptr %24, align 4, !tbaa !14
  %595 = zext i32 %594 to i64
  %596 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %593, i64 noundef %595) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %596, ptr align 4 %74, i64 4, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #7
  br label %617

597:                                              ; preds = %581, %576
  %598 = landingpad { ptr, i32 }
          cleanup
  %599 = extractvalue { ptr, i32 } %598, 0
  store ptr %599, ptr %46, align 8
  %600 = extractvalue { ptr, i32 } %598, 1
  store i32 %600, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #7
  br label %649

601:                                              ; preds = %590, %585
  %602 = landingpad { ptr, i32 }
          cleanup
  %603 = extractvalue { ptr, i32 } %602, 0
  store ptr %603, ptr %46, align 8
  %604 = extractvalue { ptr, i32 } %602, 1
  store i32 %604, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #7
  br label %649

605:                                              ; preds = %583
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #7
  %606 = load i32, ptr %25, align 4, !tbaa !14
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %75, i32 noundef %606)
          to label %607 unwind label %613

607:                                              ; preds = %605
  %608 = load ptr, ptr %10, align 8, !tbaa !5
  %609 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %608, i32 0, i32 12
  %610 = load i32, ptr %24, align 4, !tbaa !14
  %611 = zext i32 %610 to i64
  %612 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %609, i64 noundef %611) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %612, ptr align 4 %75, i64 4, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #7
  br label %617

613:                                              ; preds = %605
  %614 = landingpad { ptr, i32 }
          cleanup
  %615 = extractvalue { ptr, i32 } %614, 0
  store ptr %615, ptr %46, align 8
  %616 = extractvalue { ptr, i32 } %614, 1
  store i32 %616, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #7
  br label %649

617:                                              ; preds = %607, %591
  br label %618

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

622:                                              ; preds = %618
  %623 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %76, i32 0, i32 0
  store i32 %621, ptr %623, align 4
  %624 = load i32, ptr %24, align 4, !tbaa !14
  %625 = load i32, ptr %68, align 4, !tbaa !14
  %626 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %76, i32 0, i32 0
  %627 = load i32, ptr %626, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %627, i32 noundef %624, i32 noundef 30, i32 noundef %625)
          to label %628 unwind label %568

628:                                              ; preds = %622
  %629 = load i32, ptr %70, align 4, !tbaa !14
  %630 = icmp ne i32 %629, 0
  br i1 %630, label %631, label %642

631:                                              ; preds = %628
  %632 = load ptr, ptr %10, align 8, !tbaa !5
  %633 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %632, i32 0, i32 1
  %634 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %633)
          to label %635 unwind label %568

635:                                              ; preds = %631
  %636 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %77, i32 0, i32 0
  store i32 %634, ptr %636, align 4
  %637 = load i32, ptr %24, align 4, !tbaa !14
  %638 = load i32, ptr %70, align 4, !tbaa !14
  %639 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %77, i32 0, i32 0
  %640 = load i32, ptr %639, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %640, i32 noundef %637, i32 noundef 31, i32 noundef %638)
          to label %641 unwind label %568

641:                                              ; preds = %635
  br label %642

642:                                              ; preds = %641, %628
  %643 = load i32, ptr %68, align 4, !tbaa !14
  %644 = load i32, ptr %25, align 4, !tbaa !14
  %645 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %644)
          to label %646 unwind label %568

646:                                              ; preds = %642
  %647 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %643, ptr noundef nonnull align 8 dereferenceable(336) %645, i32 noundef %647, i1 noundef zeroext false)
          to label %648 unwind label %568

648:                                              ; preds = %646
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #7
  br label %756

649:                                              ; preds = %613, %601, %597, %572, %568
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #7
  br label %650

650:                                              ; preds = %649, %564
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #7
  br label %926

651:                                              ; preds = %511
  %652 = load i8, ptr %13, align 1, !tbaa !11, !range !26, !noundef !27
  %653 = trunc i8 %652 to i1
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #7
  br i1 %653, label %654, label %666

654:                                              ; preds = %651
  %655 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %100)
          to label %656 unwind label %305

656:                                              ; preds = %654
  br i1 %655, label %657, label %666

657:                                              ; preds = %656
  %658 = load i32, ptr %8, align 4, !tbaa !9
  %659 = icmp eq i32 %658, 1
  br i1 %659, label %660, label %666

660:                                              ; preds = %657
  %661 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 40
  %662 = load i32, ptr %14, align 4, !tbaa !16
  store i32 %662, ptr %78, align 4, !tbaa !14
  %663 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %661, ptr noundef nonnull align 4 dereferenceable(4) %78)
          to label %664 unwind label %689

664:                                              ; preds = %660
  %665 = icmp ne i64 %663, 0
  br label %666

666:                                              ; preds = %664, %657, %656, %651
  %667 = phi i1 [ false, %657 ], [ false, %656 ], [ false, %651 ], [ %665, %664 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  br i1 %667, label %668, label %702

668:                                              ; preds = %666
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #7
  %669 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 40
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #7
  %670 = load i32, ptr %14, align 4, !tbaa !16
  store i32 %670, ptr %80, align 4, !tbaa !14
  %671 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %669, ptr noundef nonnull align 4 dereferenceable(4) %80)
          to label %672 unwind label %693

672:                                              ; preds = %668
  %673 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %671, i32 0, i32 0
  %674 = load i32, ptr %673, align 4, !tbaa !223
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  store i32 %674, ptr %79, align 4, !tbaa !14
  %675 = load ptr, ptr %10, align 8, !tbaa !5
  %676 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %675, i32 0, i32 1
  %677 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %676)
          to label %678 unwind label %697

678:                                              ; preds = %672
  %679 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %81, i32 0, i32 0
  store i32 %677, ptr %679, align 4
  %680 = load i32, ptr %24, align 4, !tbaa !14
  %681 = load i32, ptr %79, align 4, !tbaa !14
  %682 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %81, i32 0, i32 0
  %683 = load i32, ptr %682, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %683, i32 noundef %680, i32 noundef 30, i32 noundef %681)
          to label %684 unwind label %697

684:                                              ; preds = %678
  %685 = load i32, ptr %79, align 4, !tbaa !14
  %686 = load ptr, ptr %27, align 8, !tbaa !5
  %687 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %685, ptr noundef nonnull align 8 dereferenceable(336) %686, i32 noundef %687, i1 noundef zeroext false)
          to label %688 unwind label %697

688:                                              ; preds = %684
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #7
  br label %755

689:                                              ; preds = %660
  %690 = landingpad { ptr, i32 }
          cleanup
  %691 = extractvalue { ptr, i32 } %690, 0
  store ptr %691, ptr %46, align 8
  %692 = extractvalue { ptr, i32 } %690, 1
  store i32 %692, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  br label %926

693:                                              ; preds = %668
  %694 = landingpad { ptr, i32 }
          cleanup
  %695 = extractvalue { ptr, i32 } %694, 0
  store ptr %695, ptr %46, align 8
  %696 = extractvalue { ptr, i32 } %694, 1
  store i32 %696, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  br label %701

697:                                              ; preds = %684, %678, %672
  %698 = landingpad { ptr, i32 }
          cleanup
  %699 = extractvalue { ptr, i32 } %698, 0
  store ptr %699, ptr %46, align 8
  %700 = extractvalue { ptr, i32 } %698, 1
  store i32 %700, ptr %47, align 4
  br label %701

701:                                              ; preds = %697, %693
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #7
  br label %926

702:                                              ; preds = %666
  %703 = load i8, ptr %13, align 1, !tbaa !11, !range !26, !noundef !27
  %704 = trunc i8 %703 to i1
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #7
  br i1 %704, label %705, label %718

705:                                              ; preds = %702
  %706 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 76
  %707 = load i8, ptr %706, align 4, !tbaa !227, !range !26, !noundef !27
  %708 = trunc i8 %707 to i1
  br i1 %708, label %709, label %718

709:                                              ; preds = %705
  %710 = load i32, ptr %8, align 4, !tbaa !9
  %711 = icmp eq i32 %710, 3
  br i1 %711, label %712, label %718

712:                                              ; preds = %709
  %713 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 42
  %714 = load i32, ptr %14, align 4, !tbaa !16
  store i32 %714, ptr %82, align 4, !tbaa !14
  %715 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %713, ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %716 unwind label %741

716:                                              ; preds = %712
  %717 = icmp ne i64 %715, 0
  br label %718

718:                                              ; preds = %716, %709, %705, %702
  %719 = phi i1 [ false, %709 ], [ false, %705 ], [ false, %702 ], [ %717, %716 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #7
  br i1 %719, label %720, label %754

720:                                              ; preds = %718
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #7
  %721 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 42
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #7
  %722 = load i32, ptr %14, align 4, !tbaa !16
  store i32 %722, ptr %84, align 4, !tbaa !14
  %723 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %721, ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %724 unwind label %745

724:                                              ; preds = %720
  %725 = getelementptr inbounds %"struct.spirv_cross::MSLShaderInterfaceVariable", ptr %723, i32 0, i32 0
  %726 = load i32, ptr %725, align 4, !tbaa !223
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #7
  store i32 %726, ptr %83, align 4, !tbaa !14
  %727 = load ptr, ptr %10, align 8, !tbaa !5
  %728 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %727, i32 0, i32 1
  %729 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %728)
          to label %730 unwind label %749

730:                                              ; preds = %724
  %731 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %85, i32 0, i32 0
  store i32 %729, ptr %731, align 4
  %732 = load i32, ptr %24, align 4, !tbaa !14
  %733 = load i32, ptr %83, align 4, !tbaa !14
  %734 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %85, i32 0, i32 0
  %735 = load i32, ptr %734, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %735, i32 noundef %732, i32 noundef 30, i32 noundef %733)
          to label %736 unwind label %749

736:                                              ; preds = %730
  %737 = load i32, ptr %83, align 4, !tbaa !14
  %738 = load ptr, ptr %27, align 8, !tbaa !5
  %739 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %100, i32 noundef %737, ptr noundef nonnull align 8 dereferenceable(336) %738, i32 noundef %739, i1 noundef zeroext false)
          to label %740 unwind label %749

740:                                              ; preds = %736
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #7
  br label %754

741:                                              ; preds = %712
  %742 = landingpad { ptr, i32 }
          cleanup
  %743 = extractvalue { ptr, i32 } %742, 0
  store ptr %743, ptr %46, align 8
  %744 = extractvalue { ptr, i32 } %742, 1
  store i32 %744, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #7
  br label %926

745:                                              ; preds = %720
  %746 = landingpad { ptr, i32 }
          cleanup
  %747 = extractvalue { ptr, i32 } %746, 0
  store ptr %747, ptr %46, align 8
  %748 = extractvalue { ptr, i32 } %746, 1
  store i32 %748, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #7
  br label %753

749:                                              ; preds = %736, %730, %724
  %750 = landingpad { ptr, i32 }
          cleanup
  %751 = extractvalue { ptr, i32 } %750, 0
  store ptr %751, ptr %46, align 8
  %752 = extractvalue { ptr, i32 } %750, 1
  store i32 %752, ptr %47, align 4
  br label %753

753:                                              ; preds = %749, %745
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #7
  br label %926

754:                                              ; preds = %740, %718
  br label %755

755:                                              ; preds = %754, %688
  br label %756

756:                                              ; preds = %755, %648
  %757 = load ptr, ptr %11, align 8, !tbaa !5
  %758 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %757, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %86, ptr align 8 %758, i64 4, i1 false), !tbaa.struct !13
  %759 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %86, i32 0, i32 0
  %760 = load i32, ptr %759, align 4
  %761 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %760)
          to label %762 unwind label %305

762:                                              ; preds = %756
  %763 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %761, i32 noundef 31)
          to label %764 unwind label %305

764:                                              ; preds = %762
  br i1 %763, label %765, label %786

765:                                              ; preds = %764
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #7
  %766 = load ptr, ptr %11, align 8, !tbaa !5
  %767 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %766, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %88, ptr align 8 %767, i64 4, i1 false), !tbaa.struct !13
  %768 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %88, i32 0, i32 0
  %769 = load i32, ptr %768, align 4
  %770 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %769, i32 noundef 31)
          to label %771 unwind label %782

771:                                              ; preds = %765
  store i32 %770, ptr %87, align 4, !tbaa !14
  %772 = load ptr, ptr %10, align 8, !tbaa !5
  %773 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %772, i32 0, i32 1
  %774 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %773)
          to label %775 unwind label %782

775:                                              ; preds = %771
  %776 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %89, i32 0, i32 0
  store i32 %774, ptr %776, align 4
  %777 = load i32, ptr %24, align 4, !tbaa !14
  %778 = load i32, ptr %87, align 4, !tbaa !14
  %779 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %89, i32 0, i32 0
  %780 = load i32, ptr %779, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %780, i32 noundef %777, i32 noundef 31, i32 noundef %778)
          to label %781 unwind label %782

781:                                              ; preds = %775
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #7
  br label %786

782:                                              ; preds = %775, %771, %765
  %783 = landingpad { ptr, i32 }
          cleanup
  %784 = extractvalue { ptr, i32 } %783, 0
  store ptr %784, ptr %46, align 8
  %785 = extractvalue { ptr, i32 } %783, 1
  store i32 %785, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #7
  br label %926

786:                                              ; preds = %781, %764
  %787 = load ptr, ptr %11, align 8, !tbaa !5
  %788 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %787, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %90, ptr align 8 %788, i64 4, i1 false), !tbaa.struct !13
  %789 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %90, i32 0, i32 0
  %790 = load i32, ptr %789, align 4
  %791 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %790)
          to label %792 unwind label %305

792:                                              ; preds = %786
  %793 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %791, i32 noundef 32)
          to label %794 unwind label %305

794:                                              ; preds = %792
  br i1 %793, label %795, label %816

795:                                              ; preds = %794
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #7
  %796 = load ptr, ptr %11, align 8, !tbaa !5
  %797 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %796, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %92, ptr align 8 %797, i64 4, i1 false), !tbaa.struct !13
  %798 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %92, i32 0, i32 0
  %799 = load i32, ptr %798, align 4
  %800 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %799, i32 noundef 32)
          to label %801 unwind label %812

801:                                              ; preds = %795
  store i32 %800, ptr %91, align 4, !tbaa !14
  %802 = load ptr, ptr %10, align 8, !tbaa !5
  %803 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %802, i32 0, i32 1
  %804 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %803)
          to label %805 unwind label %812

805:                                              ; preds = %801
  %806 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %93, i32 0, i32 0
  store i32 %804, ptr %806, align 4
  %807 = load i32, ptr %24, align 4, !tbaa !14
  %808 = load i32, ptr %91, align 4, !tbaa !14
  %809 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %93, i32 0, i32 0
  %810 = load i32, ptr %809, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %810, i32 noundef %807, i32 noundef 32, i32 noundef %808)
          to label %811 unwind label %812

811:                                              ; preds = %805
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #7
  br label %816

812:                                              ; preds = %805, %801, %795
  %813 = landingpad { ptr, i32 }
          cleanup
  %814 = extractvalue { ptr, i32 } %813, 0
  store ptr %814, ptr %46, align 8
  %815 = extractvalue { ptr, i32 } %813, 1
  store i32 %815, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #7
  br label %926

816:                                              ; preds = %811, %794
  %817 = load i8, ptr %13, align 1, !tbaa !11, !range !26, !noundef !27
  %818 = trunc i8 %817 to i1
  br i1 %818, label %819, label %840

819:                                              ; preds = %816
  %820 = load ptr, ptr %10, align 8, !tbaa !5
  %821 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %820, i32 0, i32 1
  %822 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %821)
          to label %823 unwind label %305

823:                                              ; preds = %819
  %824 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %94, i32 0, i32 0
  store i32 %822, ptr %824, align 4
  %825 = load i32, ptr %24, align 4, !tbaa !14
  %826 = load i32, ptr %14, align 4, !tbaa !16
  %827 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %94, i32 0, i32 0
  %828 = load i32, ptr %827, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %828, i32 noundef %825, i32 noundef 11, i32 noundef %826)
          to label %829 unwind label %305

829:                                              ; preds = %823
  %830 = load i32, ptr %14, align 4, !tbaa !16
  %831 = icmp eq i32 %830, 0
  br i1 %831, label %832, label %839

832:                                              ; preds = %829
  %833 = load i32, ptr %8, align 4, !tbaa !9
  %834 = icmp eq i32 %833, 3
  br i1 %834, label %835, label %839

835:                                              ; preds = %832
  %836 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 86
  %837 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %836, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %838 unwind label %305

838:                                              ; preds = %835
  br label %839

839:                                              ; preds = %838, %832, %829
  br label %840

840:                                              ; preds = %839, %816
  %841 = load i32, ptr %8, align 4, !tbaa !9
  %842 = icmp ne i32 %841, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #7
  br i1 %842, label %853, label %843

843:                                              ; preds = %840
  %844 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %100, i32 0, i32 110
  %845 = load ptr, ptr %11, align 8, !tbaa !5
  %846 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %845, i32 0, i32 1
  %847 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %846)
          to label %848 unwind label %868

848:                                              ; preds = %843
  store i32 %847, ptr %95, align 4, !tbaa !14
  %849 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %844, ptr noundef nonnull align 4 dereferenceable(4) %95)
          to label %850 unwind label %868

850:                                              ; preds = %848
  %851 = icmp ne i64 %849, 0
  %852 = xor i1 %851, true
  br label %853

853:                                              ; preds = %850, %840
  %854 = phi i1 [ true, %840 ], [ %852, %850 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #7
  br i1 %854, label %855, label %912

855:                                              ; preds = %853
  %856 = load i8, ptr %16, align 1, !tbaa !11, !range !26, !noundef !27
  %857 = trunc i8 %856 to i1
  br i1 %857, label %858, label %872

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

862:                                              ; preds = %858
  %863 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %96, i32 0, i32 0
  store i32 %861, ptr %863, align 4
  %864 = load i32, ptr %24, align 4, !tbaa !14
  %865 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %96, i32 0, i32 0
  %866 = load i32, ptr %865, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %866, i32 noundef %864, i32 noundef 14, i32 noundef 0)
          to label %867 unwind label %305

867:                                              ; preds = %862
  br label %872

868:                                              ; preds = %848, %843
  %869 = landingpad { ptr, i32 }
          cleanup
  %870 = extractvalue { ptr, i32 } %869, 0
  store ptr %870, ptr %46, align 8
  %871 = extractvalue { ptr, i32 } %869, 1
  store i32 %871, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #7
  br label %926

872:                                              ; preds = %867, %855
  %873 = load i8, ptr %18, align 1, !tbaa !11, !range !26, !noundef !27
  %874 = trunc i8 %873 to i1
  br i1 %874, label %875, label %885

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

879:                                              ; preds = %875
  %880 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %97, i32 0, i32 0
  store i32 %878, ptr %880, align 4
  %881 = load i32, ptr %24, align 4, !tbaa !14
  %882 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %97, i32 0, i32 0
  %883 = load i32, ptr %882, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %883, i32 noundef %881, i32 noundef 13, i32 noundef 0)
          to label %884 unwind label %305

884:                                              ; preds = %879
  br label %885

885:                                              ; preds = %884, %872
  %886 = load i8, ptr %20, align 1, !tbaa !11, !range !26, !noundef !27
  %887 = trunc i8 %886 to i1
  br i1 %887, label %888, label %898

888:                                              ; preds = %885
  %889 = load ptr, ptr %10, align 8, !tbaa !5
  %890 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %889, i32 0, i32 1
  %891 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %890)
          to label %892 unwind label %305

892:                                              ; preds = %888
  %893 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %98, i32 0, i32 0
  store i32 %891, ptr %893, align 4
  %894 = load i32, ptr %24, align 4, !tbaa !14
  %895 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %98, i32 0, i32 0
  %896 = load i32, ptr %895, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %896, i32 noundef %894, i32 noundef 16, i32 noundef 0)
          to label %897 unwind label %305

897:                                              ; preds = %892
  br label %898

898:                                              ; preds = %897, %885
  %899 = load i8, ptr %22, align 1, !tbaa !11, !range !26, !noundef !27
  %900 = trunc i8 %899 to i1
  br i1 %900, label %901, label %911

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

905:                                              ; preds = %901
  %906 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %99, i32 0, i32 0
  store i32 %904, ptr %906, align 4
  %907 = load i32, ptr %24, align 4, !tbaa !14
  %908 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %99, i32 0, i32 0
  %909 = load i32, ptr %908, align 4
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 %909, i32 noundef %907, i32 noundef 17, i32 noundef 0)
          to label %910 unwind label %305

910:                                              ; preds = %905
  br label %911

911:                                              ; preds = %910, %898
  br label %912

912:                                              ; preds = %911, %853
  %913 = load ptr, ptr %10, align 8, !tbaa !5
  %914 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %913, i32 0, i32 1
  %915 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %914)
          to label %916 unwind label %305

916:                                              ; preds = %912
  %917 = load i32, ptr %24, align 4, !tbaa !14
  %918 = load ptr, ptr %11, align 8, !tbaa !5
  %919 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %918, i32 0, i32 1
  %920 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %919)
          to label %921 unwind label %305

921:                                              ; preds = %916
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %915, i32 noundef %917, i32 noundef 5, i32 noundef %920)
          to label %922 unwind label %305

922:                                              ; preds = %921
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #7
  store i32 0, ptr %34, align 4
  br label %923

923:                                              ; preds = %922, %178
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  %924 = load i32, ptr %34, align 4
  switch i32 %924, label %935 [
    i32 0, label %925
    i32 1, label %925
  ]

925:                                              ; preds = %923, %923
  ret void

926:                                              ; preds = %868, %812, %782, %753, %741, %701, %689, %650, %500, %482, %455, %408, %386, %374, %332, %305, %301
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  br label %927

927:                                              ; preds = %926, %300
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  br label %928

928:                                              ; preds = %927, %288
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  br label %929

929:                                              ; preds = %928, %287
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  br label %930

930:                                              ; preds = %929
  %931 = load ptr, ptr %46, align 8
  %932 = load i32, ptr %47, align 4
  %933 = insertvalue { ptr, i32 } poison, ptr %931, 0
  %934 = insertvalue { ptr, i32 } %933, i32 %932, 1
  resume { ptr, i32 } %934

935:                                              ; preds = %923
  unreachable
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::allocator.71" = type { i8 }
%"class.std::function.489" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.494 = type { ptr, ptr, %"class.std::__cxx11::basic_string", i32, i32 }
%"class.spirv_cross::TypedID.413" = type { i32 }
%class.anon.496 = type { ptr, ptr }
%class.anon.497 = type { ptr, ptr, %"struct.spirv_cross::SPIRType" }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%class.anon.498 = type { ptr, ptr, %"class.std::__cxx11::basic_string" }

@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [25 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 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 #1 align 2

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

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

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

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

; 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 #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(58) %5) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.spirv_cross::TypedID.414", align 4
  %8 = alloca i32, align 4
  %9 = alloca %"class.spirv_cross::TypedID.414", align 4
  %10 = alloca %"class.spirv_cross::TypedID.414", align 4
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::allocator.71", align 1
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca i32, align 4
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca i32, align 4
  %21 = alloca %"class.std::function.489", align 8
  %22 = alloca %class.anon.494, align 8
  %23 = alloca %"class.spirv_cross::TypedID.413", align 4
  %24 = alloca %"class.std::function.489", align 8
  %25 = alloca %class.anon.496, align 8
  %26 = alloca %"class.std::function.489", align 8
  %27 = alloca %class.anon.497, align 8
  %28 = alloca %"class.std::function.489", align 8
  %29 = alloca %class.anon.498, align 8
  %30 = alloca %"class.spirv_cross::TypedID.414", align 4
  %31 = alloca i32, align 4
  %32 = alloca %"class.spirv_cross::TypedID.414", align 4
  %33 = alloca %"class.spirv_cross::TypedID.414", align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  %40 = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.0114.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %41 = tail call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0114.0.copyload, i32 noundef 11)
  %.sroa.0112.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %42 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0112.0.copyload, i32 noundef 14)
  %.sroa.0108.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %43 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0108.0.copyload, i32 noundef 13)
  %.sroa.0105.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %44 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0105.0.copyload, i32 noundef 16)
  %.sroa.0102.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %45 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0102.0.copyload, i32 noundef 17)
  %46 = getelementptr inbounds i8, ptr %3, i64 136
  %47 = tail call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %46) #6
  %48 = trunc i64 %47 to i32
  %49 = getelementptr inbounds i8, ptr %4, i64 12
  %50 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %49)
  %51 = tail call noundef i32 @_ZN11spirv_cross11CompilerMSL27ensure_correct_builtin_typeEjN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %50, i32 noundef %41)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %7, i32 noundef %51)
  %52 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %52, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  %53 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %49)
  %54 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %53)
  %55 = getelementptr inbounds i8, ptr %5, i64 56
  %56 = load i8, ptr %55, align 8, !tbaa !9, !range !19, !noundef !20
  %57 = trunc nuw i8 %56 to i1
  br i1 %57, label %58, label %65

58:                                               ; preds = %6
  %59 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %54)
  %60 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %59)
  br i1 %60, label %61, label %65

61:                                               ; preds = %58
  %62 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %54)
  %63 = getelementptr inbounds i8, ptr %62, i64 276
  %64 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  br label %65

65:                                               ; preds = %61, %58, %6
  %.0 = phi i32 [ %64, %61 ], [ %54, %58 ], [ %54, %6 ]
  %66 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %.0)
  %67 = getelementptr inbounds i8, ptr %66, i64 24
  %68 = load i32, ptr %67, align 8, !tbaa !21
  %69 = getelementptr inbounds i8, ptr %0, i64 1744
  %70 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %69)
  %71 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %70)
  %72 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL41add_component_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_12SPIRVariableERKNS_8SPIRTypeERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(336) %66, ptr noundef nonnull align 8 dereferenceable(58) %5)
  br i1 %72, label %382, label %73

73:                                               ; preds = %65
  %.sroa.049.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %74 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.049.0.copyload, i32 noundef 30)
  br i1 %74, label %75, label %.critedge264

75:                                               ; preds = %73
  %76 = getelementptr inbounds i8, ptr %0, i64 10138
  %77 = load i8, ptr %76, align 2, !tbaa !44, !range !19, !noundef !20
  %78 = trunc nuw i8 %77 to i1
  br i1 %78, label %79, label %.critedge264

79:                                               ; preds = %75
  %80 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %81 = getelementptr inbounds i8, ptr %80, i64 232
  %82 = load i32, ptr %81, align 8, !tbaa !192
  %83 = icmp eq i32 %82, 4
  %84 = icmp eq i32 %1, 3
  %spec.select = and i1 %84, %83
  br i1 %spec.select, label %85, label %.critedge264

85:                                               ; preds = %79
  %.sroa.047.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %86 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.047.0.copyload, i32 noundef 30)
  %87 = call noundef i32 @_ZNK11spirv_cross11CompilerMSL43get_target_components_for_fragment_locationEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %86)
  %88 = icmp ult i32 %68, %87
  br i1 %88, label %89, label %.critedge264.thread

89:                                               ; preds = %85
  %90 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %.0, i32 noundef %87, i32 noundef 0)
  br label %.critedge264.thread

.critedge264.thread:                              ; preds = %85, %89
  %.2.ph = phi i32 [ %.0, %85 ], [ %90, %89 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  br label %.critedge

.critedge264:                                     ; preds = %75, %73, %79
  %91 = icmp eq i32 %1, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  br i1 %91, label %92, label %.critedge

92:                                               ; preds = %.critedge264
  %93 = getelementptr inbounds i8, ptr %0, i64 12080
  %94 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  store i32 %94, ptr %8, align 4, !tbaa !5
  %95 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %93, ptr noundef nonnull align 4 dereferenceable(4) %8)
  %.not = icmp eq i64 %95, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  br i1 %.not, label %98, label %96

96:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #6
  %97 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %.0, i1 noundef zeroext %43)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %9, i32 noundef %97)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %46, ptr noundef nonnull align 4 dereferenceable(4) %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  br label %100

.critedge:                                        ; preds = %.critedge264.thread, %.critedge264
  %.2272 = phi i32 [ %.2.ph, %.critedge264.thread ], [ %.0, %.critedge264 ]
  %.1203269 = phi i1 [ %88, %.critedge264.thread ], [ false, %.critedge264 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  br label %98

98:                                               ; preds = %.critedge, %92
  %99 = phi i1 [ false, %.critedge ], [ true, %92 ]
  %.2271 = phi i32 [ %.2272, %.critedge ], [ %.0, %92 ]
  %.1203268 = phi i1 [ %.1203269, %.critedge ], [ false, %92 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %10, i32 noundef %.2271)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %46, ptr noundef nonnull align 4 dereferenceable(4) %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #6
  br label %100

100:                                              ; preds = %98, %96
  %101 = phi i1 [ %99, %98 ], [ true, %96 ]
  %.2270 = phi i32 [ %.2271, %98 ], [ %.0, %96 ]
  %.1203267 = phi i1 [ %.1203268, %98 ], [ false, %96 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  %102 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %102, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.67, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %103 unwind label %117

103:                                              ; preds = %100
  invoke void @_ZN11spirv_cross11CompilerMSL17ensure_valid_nameENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull %12, ptr noundef nonnull %13)
          to label %104 unwind label %119

104:                                              ; preds = %103
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  %105 = getelementptr inbounds i8, ptr %3, i64 8
  %106 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %107 unwind label %122

107:                                              ; preds = %104
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %106, i32 noundef %48, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %108 unwind label %122

108:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #6
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull @.str.66)
          to label %109 unwind label %124

109:                                              ; preds = %108
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %110 unwind label %126

110:                                              ; preds = %109
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #6
  br i1 %101, label %111, label %.critedge2

111:                                              ; preds = %110
  %112 = getelementptr inbounds i8, ptr %0, i64 12080
  %113 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  store i32 %113, ptr %17, align 4, !tbaa !5
  %114 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %112, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %115 unwind label %129

115:                                              ; preds = %111
  %.not232 = icmp eq i64 %114, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  br i1 %.not232, label %149, label %116

116:                                              ; preds = %115
  %.not274 = xor i1 %45, true
  %brmerge = or i1 %44, %.not274
  br i1 %brmerge, label %.invoke, label %133

117:                                              ; preds = %100
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %121

119:                                              ; preds = %103
  %120 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  br label %121

121:                                              ; preds = %119, %117
  %.pn = phi { ptr, i32 } [ %120, %119 ], [ %118, %117 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  br label %385

122:                                              ; preds = %107, %104
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %385

124:                                              ; preds = %108
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %128

126:                                              ; preds = %109
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  br label %128

128:                                              ; preds = %126, %124
  %.pn230 = phi { ptr, i32 } [ %127, %126 ], [ %125, %124 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %384

129:                                              ; preds = %111
  %130 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  br label %383

131:                                              ; preds = %.invoke, %378, %377, %375, %373, %371, %369, %367, %363, %361, %351, %347, %345, %334, %332, %322, %320, %277, %214, %212, %173, %170, %150
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %383

133:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  %134 = getelementptr inbounds i8, ptr %0, i64 9908
  %135 = load i32, ptr %134, align 4, !tbaa !199
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %135, i1 noundef zeroext true)
          to label %136 unwind label %140

136:                                              ; preds = %133
  invoke void @_ZN11spirv_cross4joinIJRA24_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 1 dereferenceable(24) @.str.125, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %137 unwind label %142

137:                                              ; preds = %136
  %138 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %139 unwind label %144

139:                                              ; preds = %137
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %149

140:                                              ; preds = %133
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %147

142:                                              ; preds = %136
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %146

144:                                              ; preds = %137
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  br label %146

146:                                              ; preds = %144, %142
  %.pn233 = phi { ptr, i32 } [ %145, %144 ], [ %143, %142 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  br label %147

147:                                              ; preds = %146, %140
  %.pn233.pn = phi { ptr, i32 } [ %.pn233, %146 ], [ %141, %140 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %383

.invoke:                                          ; preds = %116
  %.str.124.mux = select i1 %44, ptr @.str.124, ptr @.str.126
  %148 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull %.str.124.mux)
          to label %149 unwind label %131

.critedge2:                                       ; preds = %110
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  br label %149

149:                                              ; preds = %.invoke, %139, %.critedge2, %115
  br i1 %.1203267, label %150, label %167

150:                                              ; preds = %149
  %151 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %152 unwind label %131

152:                                              ; preds = %150
  call void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %71, i32 %151)
  %153 = getelementptr inbounds i8, ptr %0, i64 10920
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #6
  %154 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  store i32 %154, ptr %20, align 4, !tbaa !5
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %153, ptr noundef nonnull align 4 dereferenceable(4) %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #6
  %155 = getelementptr inbounds i8, ptr %71, i64 672
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %22) #6
  store ptr %4, ptr %22, align 8, !tbaa !200
  %156 = getelementptr inbounds i8, ptr %22, i64 8
  store ptr %0, ptr %156, align 8, !tbaa !201
  %157 = getelementptr inbounds i8, ptr %22, i64 16
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %157, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %158 unwind label %162

158:                                              ; preds = %152
  %159 = getelementptr inbounds i8, ptr %22, i64 48
  store i32 %68, ptr %159, align 8, !tbaa !203
  %160 = getelementptr inbounds i8, ptr %22, i64 52
  store i32 0, ptr %160, align 4, !tbaa !204
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(56) %22)
          to label %161 unwind label %164

161:                                              ; preds = %158
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %155, ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %22) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  br label %176

162:                                              ; preds = %152
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %166

164:                                              ; preds = %158
  %165 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %22) #6
  br label %166

166:                                              ; preds = %164, %162
  %.pn238 = phi { ptr, i32 } [ %165, %164 ], [ %163, %162 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  br label %383

167:                                              ; preds = %149
  %168 = load i8, ptr %55, align 8, !tbaa !9, !range !19, !noundef !20
  %169 = trunc nuw i8 %168 to i1
  br i1 %169, label %176, label %170

170:                                              ; preds = %167
  %171 = getelementptr inbounds i8, ptr %0, i64 256
  %172 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %171, ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %173 unwind label %131

173:                                              ; preds = %170
  %174 = getelementptr inbounds i8, ptr %172, i64 32
  %175 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %176 unwind label %131

176:                                              ; preds = %167, %173, %161
  %177 = getelementptr inbounds i8, ptr %4, i64 16
  %178 = load i32, ptr %177, align 8, !tbaa !205
  %179 = icmp eq i32 %178, 3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #6
  br i1 %179, label %180, label %.critedge4

180:                                              ; preds = %176
  %181 = getelementptr inbounds i8, ptr %4, i64 24
  %182 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %181)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %23, i32 noundef 0)
  %183 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %23)
  %.not240 = icmp eq i32 %182, %183
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6
  br i1 %.not240, label %212, label %184

184:                                              ; preds = %180
  br i1 %.1203267, label %185, label %188

185:                                              ; preds = %184
  %186 = getelementptr inbounds i8, ptr %71, i64 704
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #6
  store ptr %4, ptr %25, align 8, !tbaa !200
  %187 = getelementptr inbounds i8, ptr %25, i64 8
  store ptr %0, ptr %187, align 8, !tbaa !208
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(16) %25) #6
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %186, ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  br label %212

188:                                              ; preds = %184
  %189 = load i8, ptr %55, align 8, !tbaa !9, !range !19, !noundef !20
  %190 = trunc nuw i8 %189 to i1
  %191 = getelementptr inbounds i8, ptr %71, i64 704
  br i1 %190, label %192, label %202

192:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 352, ptr nonnull %27) #6
  store ptr %4, ptr %27, align 8, !tbaa !200
  %193 = getelementptr inbounds i8, ptr %27, i64 8
  store ptr %0, ptr %193, align 8, !tbaa !210
  %194 = getelementptr inbounds i8, ptr %27, i64 16
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %194, ptr noundef nonnull align 8 dereferenceable(336) %3)
          to label %195 unwind label %197

195:                                              ; preds = %192
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(352) %27)
          to label %196 unwind label %199

196:                                              ; preds = %195
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %191, ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(352) %27) #6
  call void @llvm.lifetime.end.p0(i64 352, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  br label %212

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

199:                                              ; preds = %195
  %200 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(352) %27) #6
  br label %201

201:                                              ; preds = %199, %197
  %.pn243 = phi { ptr, i32 } [ %200, %199 ], [ %198, %197 ]
  call void @llvm.lifetime.end.p0(i64 352, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  br label %383

202:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #6
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %29) #6
  store ptr %4, ptr %29, align 8, !tbaa !200
  %203 = getelementptr inbounds i8, ptr %29, i64 8
  store ptr %0, ptr %203, align 8, !tbaa !212
  %204 = getelementptr inbounds i8, ptr %29, i64 16
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %204, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %205 unwind label %207

205:                                              ; preds = %202
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_8SPIRTypeERNS3_12SPIRVariableERNS4_18InterfaceBlockMetaEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(48) %29)
          to label %206 unwind label %209

206:                                              ; preds = %205
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %191, ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(48) %29) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  br label %212

207:                                              ; preds = %202
  %208 = landingpad { ptr, i32 }
          cleanup
  br label %211

209:                                              ; preds = %205
  %210 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaEEN3$_4D2Ev"(ptr noundef nonnull align 8 dereferenceable(48) %29) #6
  br label %211

211:                                              ; preds = %209, %207
  %.pn241 = phi { ptr, i32 } [ %210, %209 ], [ %208, %207 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  br label %383

.critedge4:                                       ; preds = %176
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6
  br label %212

212:                                              ; preds = %185, %206, %196, %.critedge4, %180
  %.sroa.043.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %213 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.043.0.copyload)
          to label %214 unwind label %131

214:                                              ; preds = %212
  %215 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %213, i32 noundef 30)
          to label %216 unwind label %131

216:                                              ; preds = %214
  br i1 %215, label %217, label %276

217:                                              ; preds = %216
  %.sroa.039.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %218 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.039.0.copyload, i32 noundef 30)
          to label %219 unwind label %243

219:                                              ; preds = %217
  %.sroa.035.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %220 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.035.0.copyload, i32 noundef 31)
          to label %221 unwind label %245

221:                                              ; preds = %219
  br i1 %101, label %222, label %266

222:                                              ; preds = %221
  %223 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %49)
  %224 = load i8, ptr %55, align 8, !tbaa !9, !range !19, !noundef !20
  %225 = trunc nuw i8 %224 to i1
  %226 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL25ensure_correct_input_typeEjjjjb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %223, i32 noundef %218, i32 noundef %220, i32 noundef 0, i1 noundef zeroext %225)
          to label %227 unwind label %245

227:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %30, i32 noundef %226)
  %228 = load i32, ptr %30, align 4, !tbaa !5
  store i32 %228, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #6
  %229 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %226)
          to label %230 unwind label %245

230:                                              ; preds = %227
  %231 = load i8, ptr %55, align 8, !tbaa !9, !range !19, !noundef !20
  %232 = trunc nuw i8 %231 to i1
  br i1 %232, label %233, label %247

233:                                              ; preds = %230
  %234 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %229)
          to label %235 unwind label %245

235:                                              ; preds = %233
  %236 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %234)
          to label %237 unwind label %245

237:                                              ; preds = %235
  br i1 %236, label %238, label %247

238:                                              ; preds = %237
  %239 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %229)
          to label %240 unwind label %245

240:                                              ; preds = %238
  %241 = getelementptr inbounds i8, ptr %239, i64 276
  %242 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %241)
  br label %247

243:                                              ; preds = %217
  %244 = landingpad { ptr, i32 }
          cleanup
  br label %383

245:                                              ; preds = %275, %273, %272, %270, %268, %266, %238, %235, %233, %227, %222, %219
  %246 = landingpad { ptr, i32 }
          cleanup
  br label %383

247:                                              ; preds = %240, %237, %230
  %.3 = phi i32 [ %242, %240 ], [ %229, %237 ], [ %229, %230 ]
  %248 = getelementptr inbounds i8, ptr %0, i64 12080
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #6
  %249 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  store i32 %249, ptr %31, align 4, !tbaa !5
  %250 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %248, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %251 unwind label %258

251:                                              ; preds = %247
  %.not251 = icmp eq i64 %250, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #6
  br i1 %.not251, label %262, label %252

252:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #6
  %253 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_msl_interpolant_typeEjb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %.3, i1 noundef zeroext %43)
          to label %254 unwind label %260

254:                                              ; preds = %252
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %32, i32 noundef %253)
  %255 = and i64 %47, 4294967295
  %256 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %46, i64 noundef %255) #6
  %257 = load i32, ptr %32, align 4, !tbaa !5
  store i32 %257, ptr %256, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #6
  br label %266

258:                                              ; preds = %247
  %259 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #6
  br label %383

260:                                              ; preds = %252
  %261 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #6
  br label %383

262:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %33, i32 noundef %.3)
  %263 = and i64 %47, 4294967295
  %264 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %46, i64 noundef %263) #6
  %265 = load i32, ptr %33, align 4, !tbaa !5
  store i32 %265, ptr %264, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #6
  br label %266

266:                                              ; preds = %254, %262, %221
  %.4 = phi i32 [ %.3, %254 ], [ %.3, %262 ], [ %.2270, %221 ]
  %267 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %268 unwind label %245

268:                                              ; preds = %266
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %267, i32 noundef %48, i32 noundef 30, i32 noundef %218)
          to label %269 unwind label %245

269:                                              ; preds = %268
  %.not252 = icmp eq i32 %220, 0
  br i1 %.not252, label %273, label %270

270:                                              ; preds = %269
  %271 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %272 unwind label %245

272:                                              ; preds = %270
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %271, i32 noundef %48, i32 noundef 31, i32 noundef %220)
          to label %273 unwind label %245

273:                                              ; preds = %272, %269
  %274 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %.4)
          to label %275 unwind label %245

275:                                              ; preds = %273
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %218, ptr noundef nonnull align 8 dereferenceable(336) %274, i32 noundef %1, i1 noundef zeroext false)
          to label %320 unwind label %245

276:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #6
  br i1 %39, label %277, label %297

277:                                              ; preds = %276
  %278 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %279 unwind label %131

279:                                              ; preds = %277
  %or.cond = and i1 %101, %278
  br i1 %or.cond, label %280, label %.thread273

.thread273:                                       ; preds = %279
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #6
  br label %298

280:                                              ; preds = %279
  %281 = getelementptr inbounds i8, ptr %0, i64 10272
  store i32 %41, ptr %34, align 4, !tbaa !5
  %282 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %281, ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %283 unwind label %291

283:                                              ; preds = %280
  %.not245 = icmp eq i64 %282, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #6
  br i1 %.not245, label %.thread, label %284

.thread:                                          ; preds = %283
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #6
  br label %298

284:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #6
  store i32 %41, ptr %35, align 4, !tbaa !5
  %285 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %281, ptr noundef nonnull align 4 dereferenceable(4) %35)
          to label %286 unwind label %293

286:                                              ; preds = %284
  %287 = load i32, ptr %285, align 4, !tbaa !214
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #6
  %288 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %289 unwind label %295

289:                                              ; preds = %286
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %288, i32 noundef %48, i32 noundef 30, i32 noundef %287)
          to label %290 unwind label %295

290:                                              ; preds = %289
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %287, ptr noundef nonnull align 8 dereferenceable(336) %66, i32 noundef 1, i1 noundef zeroext false)
          to label %320 unwind label %295

291:                                              ; preds = %280
  %292 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #6
  br label %383

293:                                              ; preds = %284
  %294 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #6
  br label %383

295:                                              ; preds = %290, %289, %286
  %296 = landingpad { ptr, i32 }
          cleanup
  br label %383

297:                                              ; preds = %276
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #6
  br label %.critedge11

298:                                              ; preds = %.thread273, %.thread
  %299 = getelementptr inbounds i8, ptr %0, i64 11188
  %300 = load i8, ptr %299, align 4, !tbaa !219, !range !19, !noundef !20
  %301 = trunc nuw i8 %300 to i1
  %302 = icmp eq i32 %1, 3
  %or.cond9 = and i1 %302, %301
  br i1 %or.cond9, label %303, label %.critedge11

303:                                              ; preds = %298
  %304 = getelementptr inbounds i8, ptr %0, i64 10376
  store i32 %41, ptr %36, align 4, !tbaa !5
  %305 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE5countERS7_(ptr noundef nonnull align 8 dereferenceable(56) %304, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %306 unwind label %314

306:                                              ; preds = %303
  %.not246 = icmp eq i64 %305, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #6
  br i1 %.not246, label %320, label %307

307:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %37) #6
  store i32 %41, ptr %37, align 4, !tbaa !5
  %308 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %304, ptr noundef nonnull align 4 dereferenceable(4) %37)
          to label %309 unwind label %316

309:                                              ; preds = %307
  %310 = load i32, ptr %308, align 4, !tbaa !214
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %37) #6
  %311 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %312 unwind label %318

312:                                              ; preds = %309
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %311, i32 noundef %48, i32 noundef 30, i32 noundef %310)
          to label %313 unwind label %318

313:                                              ; preds = %312
  invoke void @_ZN11spirv_cross11CompilerMSL31mark_location_as_used_by_shaderEjRKNS_8SPIRTypeEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %310, ptr noundef nonnull align 8 dereferenceable(336) %66, i32 noundef 3, i1 noundef zeroext false)
          to label %320 unwind label %318

314:                                              ; preds = %303
  %315 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #6
  br label %383

316:                                              ; preds = %307
  %317 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %37) #6
  br label %383

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

.critedge11:                                      ; preds = %297, %298
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #6
  br label %320

320:                                              ; preds = %313, %290, %275, %.critedge11, %306
  %.sroa.026.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %321 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.026.0.copyload)
          to label %322 unwind label %131

322:                                              ; preds = %320
  %323 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %321, i32 noundef 31)
          to label %324 unwind label %131

324:                                              ; preds = %322
  br i1 %323, label %325, label %332

325:                                              ; preds = %324
  %.sroa.024.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %326 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.024.0.copyload, i32 noundef 31)
          to label %327 unwind label %330

327:                                              ; preds = %325
  %328 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %329 unwind label %330

329:                                              ; preds = %327
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %328, i32 noundef %48, i32 noundef 31, i32 noundef %326)
          to label %332 unwind label %330

330:                                              ; preds = %329, %327, %325
  %331 = landingpad { ptr, i32 }
          cleanup
  br label %383

332:                                              ; preds = %329, %324
  %.sroa.022.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %333 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.022.0.copyload)
          to label %334 unwind label %131

334:                                              ; preds = %332
  %335 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %333, i32 noundef 32)
          to label %336 unwind label %131

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

337:                                              ; preds = %336
  %.sroa.021.0.copyload = load i32, ptr %40, align 8, !tbaa !5
  %338 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.021.0.copyload, i32 noundef 32)
          to label %339 unwind label %342

339:                                              ; preds = %337
  %340 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %341 unwind label %342

341:                                              ; preds = %339
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %340, i32 noundef %48, i32 noundef 32, i32 noundef %338)
          to label %344 unwind label %342

342:                                              ; preds = %341, %339, %337
  %343 = landingpad { ptr, i32 }
          cleanup
  br label %383

344:                                              ; preds = %341, %336
  br i1 %39, label %345, label %354

345:                                              ; preds = %344
  %346 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %347 unwind label %131

347:                                              ; preds = %345
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %346, i32 noundef %48, i32 noundef 11, i32 noundef %41)
          to label %348 unwind label %131

348:                                              ; preds = %347
  %349 = icmp eq i32 %41, 0
  %350 = icmp eq i32 %1, 3
  %or.cond13 = and i1 %350, %349
  br i1 %or.cond13, label %351, label %354

351:                                              ; preds = %348
  %352 = getelementptr inbounds i8, ptr %0, i64 11200
  %353 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %352, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %354 unwind label %131

354:                                              ; preds = %348, %351, %344
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %38) #6
  br i1 %101, label %355, label %.critedge15

355:                                              ; preds = %354
  %356 = getelementptr inbounds i8, ptr %0, i64 12080
  %357 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  store i32 %357, ptr %38, align 4, !tbaa !5
  %358 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %356, ptr noundef nonnull align 4 dereferenceable(4) %38)
          to label %359 unwind label %364

359:                                              ; preds = %355
  %.not257 = icmp eq i64 %358, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #6
  br i1 %.not257, label %360, label %378

.critedge15:                                      ; preds = %354
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #6
  br label %360

360:                                              ; preds = %.critedge15, %359
  br i1 %42, label %361, label %366

361:                                              ; preds = %360
  %362 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %363 unwind label %131

363:                                              ; preds = %361
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %362, i32 noundef %48, i32 noundef 14, i32 noundef 0)
          to label %366 unwind label %131

364:                                              ; preds = %355
  %365 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #6
  br label %383

366:                                              ; preds = %363, %360
  br i1 %43, label %367, label %370

367:                                              ; preds = %366
  %368 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %369 unwind label %131

369:                                              ; preds = %367
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %368, i32 noundef %48, i32 noundef 13, i32 noundef 0)
          to label %370 unwind label %131

370:                                              ; preds = %369, %366
  br i1 %44, label %371, label %374

371:                                              ; preds = %370
  %372 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %373 unwind label %131

373:                                              ; preds = %371
  invoke void @_ZN11spirv_cross8Compiler21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %372, i32 noundef %48, i32 noundef 16, i32 noundef 0)
          to label %374 unwind label %131

374:                                              ; preds = %373, %370
  br i1 %45, label %375, label %378

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

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

378:                                              ; preds = %374, %377, %359
  %379 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
  %380 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %379, i32 noundef %48, i32 noundef 5, i32 noundef %380)
          to label %381 unwind label %131

381:                                              ; preds = %378
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %382

382:                                              ; preds = %65, %381
  ret void

383:                                              ; preds = %316, %318, %293, %295, %243, %260, %258, %245, %364, %342, %330, %314, %291, %211, %201, %166, %147, %131, %129
  %.pn258 = phi { ptr, i32 } [ %132, %131 ], [ %365, %364 ], [ %343, %342 ], [ %331, %330 ], [ %315, %314 ], [ %292, %291 ], [ %.pn243, %201 ], [ %.pn241, %211 ], [ %.pn238, %166 ], [ %.pn233.pn, %147 ], [ %130, %129 ], [ %244, %243 ], [ %246, %245 ], [ %261, %260 ], [ %259, %258 ], [ %296, %295 ], [ %294, %293 ], [ %319, %318 ], [ %317, %316 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %384

384:                                              ; preds = %383, %128
  %.pn258.pn = phi { ptr, i32 } [ %.pn258, %383 ], [ %.pn230, %128 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %385

385:                                              ; preds = %122, %384, %121
  %.sink = phi ptr [ %12, %121 ], [ %11, %384 ], [ %11, %122 ]
  %.pn258.pn.pn.pn = phi { ptr, i32 } [ %.pn, %121 ], [ %.pn258.pn, %384 ], [ %123, %122 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %.sink) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  resume { ptr, i32 } %.pn258.pn.pn.pn
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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