; 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::SmallVector.573" = type { %"class.spirv_cross::VectorView.574", i64, %"class.spirv_cross::AlignedBuffer.575" }
%"class.spirv_cross::VectorView.574" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.575" = type { [128 x i8] }
%class.anon.576 = type { ptr, ptr, ptr }
%"class.spirv_cross::TypedID.414" = type { i32 }
%class.anon.580 = type { ptr, ptr, ptr }
%"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.581 = type { ptr, ptr }
%class.anon.582 = type { ptr, ptr }
%class.anon.583 = type { ptr, 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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::pair.577" = type <{ ptr, i32, [4 x i8] }>
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", i32, i32, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.415", i8, i8, i8, ptr }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::TypedID.415" = type { i32 }
%"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_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_set.245" = type { %"class.std::_Hashtable.246" }
%"class.std::_Hashtable.246" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.263" = type { %"class.std::_Hashtable.264" }
%"class.std::_Hashtable.264" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.277" = type { %"class.std::_Hashtable.278" }
%"class.std::_Hashtable.278" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerMSL::Options" = type <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8], i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8] }>
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<spirv_cross::CompilerMSL::SPVFuncImpl, spirv_cross::CompilerMSL::SPVFuncImpl, std::_Identity<spirv_cross::CompilerMSL::SPVFuncImpl>, std::less<spirv_cross::CompilerMSL::SPVFuncImpl>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::CompilerMSL::SPVFuncImpl, spirv_cross::CompilerMSL::SPVFuncImpl, std::_Identity<spirv_cross::CompilerMSL::SPVFuncImpl>, std::less<spirv_cross::CompilerMSL::SPVFuncImpl>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"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::SPIRFunction" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", [4 x i8], %"class.spirv_cross::SmallVector.430", %"class.spirv_cross::SmallVector.430", %"class.spirv_cross::SmallVector.419", %"class.spirv_cross::TypedID.415", [4 x i8], %"class.spirv_cross::SmallVector.433", %"class.spirv_cross::SmallVector.436", %"struct.spirv_cross::SPIRFunction::EntryLine", %"class.spirv_cross::SmallVector.439", %"class.spirv_cross::SmallVector.439", %"class.spirv_cross::SmallVector.7", i8, i8, i8, [5 x i8] }>
%"class.spirv_cross::SmallVector.430" = type { %"class.spirv_cross::VectorView.431", i64, %"class.spirv_cross::AlignedBuffer.432" }
%"class.spirv_cross::VectorView.431" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.432" = type { [160 x i8] }
%"class.spirv_cross::SmallVector.419" = type { %"class.spirv_cross::VectorView.420", i64, %"class.spirv_cross::AlignedBuffer.421" }
%"class.spirv_cross::VectorView.420" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.421" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.433" = type { %"class.spirv_cross::VectorView.434", i64, %"class.spirv_cross::AlignedBuffer.435" }
%"class.spirv_cross::VectorView.434" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.435" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.436" = type { %"class.spirv_cross::VectorView.437", i64, %"class.spirv_cross::AlignedBuffer.438" }
%"class.spirv_cross::VectorView.437" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.438" = type { [128 x i8] }
%"struct.spirv_cross::SPIRFunction::EntryLine" = type { i32, i32 }
%"class.spirv_cross::SmallVector.439" = type <{ %"class.spirv_cross::VectorView.440", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.440" = type { ptr, i64 }

@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1322 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1359 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1360 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1361 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1362 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1363 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1364 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1365 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1366 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1367 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1368 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1369 = external hidden unnamed_addr constant [28 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: 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) #2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482)) #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 nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) #5 align 2

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

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

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

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

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

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

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

; 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) #5 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_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
declare dso_local noundef i32 @_ZN11spirv_cross11CompilerMSL27ensure_correct_builtin_typeEjN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, i32 noundef) #5 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(32) %1) #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.spirv_cross::SmallVector.573", align 8
  %6 = alloca %class.anon.576, align 8
  %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 %"class.spirv_cross::TypedID.414", align 4
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %class.anon.580, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca %"class.std::function.489", align 8
  %34 = alloca %class.anon.581, align 8
  %35 = alloca ptr, align 8
  %36 = alloca %"class.std::function.489", align 8
  %37 = alloca %class.anon.582, align 8
  %38 = alloca %"class.std::function.489", align 8
  %39 = alloca %class.anon.583, align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %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::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %57 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 152, ptr %5) #7
  call void @_ZN11spirv_cross11SmallVectorISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %5) #7
  %58 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %57, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %6) #7
  %59 = getelementptr inbounds %class.anon.576, ptr %6, i32 0, i32 0
  store ptr %57, ptr %59, align 8, !tbaa !9
  %60 = getelementptr inbounds %class.anon.576, ptr %6, i32 0, i32 1
  store ptr %5, ptr %60, align 8, !tbaa !5
  %61 = getelementptr inbounds %class.anon.576, ptr %6, i32 0, i32 2
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %62, ptr %61, align 8, !tbaa !5
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_3EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %58, ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %63 unwind label %73

63:                                               ; preds = %2
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  store ptr %5, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %64) #7
  store ptr %65, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %66 = load ptr, ptr %9, align 8, !tbaa !5
  %67 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %66) #7
  store ptr %67, ptr %11, align 8, !tbaa !5
  br label %68

68:                                               ; preds = %95, %63
  %69 = load ptr, ptr %10, align 8, !tbaa !5
  %70 = load ptr, ptr %11, align 8, !tbaa !5
  %71 = icmp ne ptr %69, %70
  br i1 %71, label %77, label %72

72:                                               ; preds = %68
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  br label %102

73:                                               ; preds = %2
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  store ptr %75, ptr %7, align 8
  %76 = extractvalue { ptr, i32 } %74, 1
  store i32 %76, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #7
  br label %766

77:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %78 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %78, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %79 = load ptr, ptr %12, align 8, !tbaa !5
  %80 = getelementptr inbounds %"struct.std::pair.577", ptr %79, i32 0, i32 0
  %81 = load ptr, ptr %80, align 8, !tbaa !11
  %82 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %81, i32 0, i32 1
  %83 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %84 unwind label %98

84:                                               ; preds = %77
  %85 = load ptr, ptr %12, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.std::pair.577", ptr %85, i32 0, i32 1
  %87 = load i32, ptr %86, align 8, !tbaa !14
  %88 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL27ensure_correct_builtin_typeEjN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(12482) %57, i32 noundef %83, i32 noundef %87)
          to label %89 unwind label %98

89:                                               ; preds = %84
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %13, i32 noundef %88)
          to label %90 unwind label %98

90:                                               ; preds = %89
  %91 = load ptr, ptr %12, align 8, !tbaa !5
  %92 = getelementptr inbounds %"struct.std::pair.577", ptr %91, i32 0, i32 0
  %93 = load ptr, ptr %92, align 8, !tbaa !11
  %94 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %93, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %94, ptr align 4 %13, i64 4, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  br label %95

95:                                               ; preds = %90
  %96 = load ptr, ptr %10, align 8, !tbaa !5
  %97 = getelementptr inbounds %"struct.std::pair.577", ptr %96, i32 1
  store ptr %97, ptr %10, align 8, !tbaa !5
  br label %68

98:                                               ; preds = %89, %84, %77
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %7, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  br label %766

102:                                              ; preds = %72
  %103 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 70
  %104 = load i32, ptr %103, align 8, !tbaa !18
  %105 = icmp eq i32 %104, 2
  br i1 %105, label %106, label %123

106:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #7
  %107 = load ptr, ptr %4, align 8, !tbaa !5
  %108 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %107) #7
  %109 = xor i1 %108, true
  invoke void @_ZN11spirv_cross11CompilerMSL17built_in_func_argB5cxx11EN3spv7BuiltInEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(12482) %57, i32 noundef 4424, i1 noundef zeroext %109)
          to label %110 unwind label %114

110:                                              ; preds = %106
  %111 = load ptr, ptr %4, align 8, !tbaa !5
  %112 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %111, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %113 unwind label %118

113:                                              ; preds = %110
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #7
  br label %123

114:                                              ; preds = %106
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %7, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %8, align 4
  br label %122

118:                                              ; preds = %110
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %7, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %122

122:                                              ; preds = %118, %114
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #7
  br label %766

123:                                              ; preds = %113, %102
  %124 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 71
  %125 = load i32, ptr %124, align 4, !tbaa !181
  %126 = icmp eq i32 %125, 2
  br i1 %126, label %127, label %144

127:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #7
  %128 = load ptr, ptr %4, align 8, !tbaa !5
  %129 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %128) #7
  %130 = xor i1 %129, true
  invoke void @_ZN11spirv_cross11CompilerMSL17built_in_func_argB5cxx11EN3spv7BuiltInEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(12482) %57, i32 noundef 4425, i1 noundef zeroext %130)
          to label %131 unwind label %135

131:                                              ; preds = %127
  %132 = load ptr, ptr %4, align 8, !tbaa !5
  %133 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %132, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %134 unwind label %139

134:                                              ; preds = %131
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #7
  br label %144

135:                                              ; preds = %127
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %7, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %8, align 4
  br label %143

139:                                              ; preds = %131
  %140 = landingpad { ptr, i32 }
          cleanup
  %141 = extractvalue { ptr, i32 } %140, 0
  store ptr %141, ptr %7, align 8
  %142 = extractvalue { ptr, i32 } %140, 1
  store i32 %142, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  br label %143

143:                                              ; preds = %139, %135
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #7
  br label %766

144:                                              ; preds = %134, %123
  %145 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 76
  %146 = load i8, ptr %145, align 4, !tbaa !182, !range !183, !noundef !184
  %147 = trunc i8 %146 to i1
  br i1 %147, label %148, label %569

148:                                              ; preds = %144
  %149 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 60
  %150 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %149)
          to label %151 unwind label %160

151:                                              ; preds = %148
  %152 = icmp ne i32 %150, 0
  br i1 %152, label %153, label %192

153:                                              ; preds = %151
  %154 = load ptr, ptr %4, align 8, !tbaa !5
  %155 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %154) #7
  br i1 %155, label %164, label %156

156:                                              ; preds = %153
  %157 = load ptr, ptr %4, align 8, !tbaa !5
  %158 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %157, ptr noundef @.str.55)
          to label %159 unwind label %160

159:                                              ; preds = %156
  br label %164

160:                                              ; preds = %747, %740, %722, %716, %677, %669, %636, %628, %623, %585, %577, %569, %376, %335, %327, %324, %281, %269, %265, %256, %235, %223, %218, %198, %192, %156, %148
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %7, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %8, align 4
  br label %766

164:                                              ; preds = %159, %153
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #7
  %165 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %166 unwind label %178

166:                                              ; preds = %164
  %167 = load ptr, ptr %57, align 8, !tbaa !185
  %168 = getelementptr inbounds ptr, ptr %167, i64 19
  %169 = load ptr, ptr %168, align 8
  invoke void %169(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(12482) %57, ptr noundef nonnull align 8 dereferenceable(336) %165, i32 noundef 0)
          to label %170 unwind label %178

170:                                              ; preds = %166
  %171 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 97
  %172 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %173 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %172, i32 0, i32 7
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_RjRA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %171, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 4 dereferenceable(4) %173, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %174 unwind label %182

174:                                              ; preds = %170
  %175 = load ptr, ptr %4, align 8, !tbaa !5
  %176 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %175, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %177 unwind label %186

177:                                              ; preds = %174
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #7
  br label %192

178:                                              ; preds = %166, %164
  %179 = landingpad { ptr, i32 }
          cleanup
  %180 = extractvalue { ptr, i32 } %179, 0
  store ptr %180, ptr %7, align 8
  %181 = extractvalue { ptr, i32 } %179, 1
  store i32 %181, ptr %8, align 4
  br label %191

182:                                              ; preds = %170
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %7, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %8, align 4
  br label %190

186:                                              ; preds = %174
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %7, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  br label %190

190:                                              ; preds = %186, %182
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %191

191:                                              ; preds = %190, %178
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #7
  br label %766

192:                                              ; preds = %177, %151
  %193 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %194 unwind label %160

194:                                              ; preds = %192
  br i1 %193, label %195, label %218

195:                                              ; preds = %194
  %196 = load ptr, ptr %4, align 8, !tbaa !5
  %197 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %196) #7
  br i1 %197, label %202, label %198

198:                                              ; preds = %195
  %199 = load ptr, ptr %4, align 8, !tbaa !5
  %200 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %199, ptr noundef @.str.55)
          to label %201 unwind label %160

201:                                              ; preds = %198
  br label %202

202:                                              ; preds = %201, %195
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #7
  %203 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %204 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %203, i32 0, i32 6
  invoke void @_ZN11spirv_cross4joinIJRA43_KcRjRA4_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 1 dereferenceable(43) @.str.1361, ptr noundef nonnull align 4 dereferenceable(4) %204, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %205 unwind label %209

205:                                              ; preds = %202
  %206 = load ptr, ptr %4, align 8, !tbaa !5
  %207 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %206, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %208 unwind label %213

208:                                              ; preds = %205
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #7
  br label %256

209:                                              ; preds = %202
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %7, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %8, align 4
  br label %217

213:                                              ; preds = %205
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %7, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %217

217:                                              ; preds = %213, %209
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #7
  br label %766

218:                                              ; preds = %194
  %219 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 60
  %220 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %219)
          to label %221 unwind label %160

221:                                              ; preds = %218
  %222 = icmp ne i32 %220, 0
  br i1 %222, label %223, label %255

223:                                              ; preds = %221
  %224 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %57)
          to label %225 unwind label %160

225:                                              ; preds = %223
  %226 = icmp eq i32 %224, 0
  br i1 %226, label %227, label %232

227:                                              ; preds = %225
  %228 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %229 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %228, i32 0, i32 50
  %230 = load i8, ptr %229, align 1, !tbaa !187, !range !183, !noundef !184
  %231 = trunc i8 %230 to i1
  br i1 %231, label %255, label %232

232:                                              ; preds = %227, %225
  %233 = load ptr, ptr %4, align 8, !tbaa !5
  %234 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %233) #7
  br i1 %234, label %239, label %235

235:                                              ; preds = %232
  %236 = load ptr, ptr %4, align 8, !tbaa !5
  %237 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %236, ptr noundef @.str.55)
          to label %238 unwind label %160

238:                                              ; preds = %235
  br label %239

239:                                              ; preds = %238, %232
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #7
  %240 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %241 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %240, i32 0, i32 6
  invoke void @_ZN11spirv_cross4joinIJRA41_KcRjRA4_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 1 dereferenceable(41) @.str.1362, ptr noundef nonnull align 4 dereferenceable(4) %241, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %242 unwind label %246

242:                                              ; preds = %239
  %243 = load ptr, ptr %4, align 8, !tbaa !5
  %244 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %243, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %245 unwind label %250

245:                                              ; preds = %242
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #7
  br label %255

246:                                              ; preds = %239
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %7, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %8, align 4
  br label %254

250:                                              ; preds = %242
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %7, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  br label %254

254:                                              ; preds = %250, %246
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #7
  br label %766

255:                                              ; preds = %245, %227, %221
  br label %256

256:                                              ; preds = %255, %208
  %257 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %57)
          to label %258 unwind label %160

258:                                              ; preds = %256
  %259 = icmp eq i32 %257, 0
  br i1 %259, label %260, label %324

260:                                              ; preds = %258
  %261 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %262 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %261, i32 0, i32 50
  %263 = load i8, ptr %262, align 1, !tbaa !187, !range !183, !noundef !184
  %264 = trunc i8 %263 to i1
  br i1 %264, label %265, label %324

265:                                              ; preds = %260
  %266 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %57, i32 0, i32 20
  %267 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %266, i32 noundef 42)
          to label %268 unwind label %160

268:                                              ; preds = %265
  br i1 %267, label %273, label %269

269:                                              ; preds = %268
  %270 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %57, i32 0, i32 20
  %271 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %270, i32 noundef 5)
          to label %272 unwind label %160

272:                                              ; preds = %269
  br i1 %271, label %273, label %324

273:                                              ; preds = %272, %268
  %274 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %275 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %274, i32 0, i32 56
  %276 = load i32, ptr %275, align 4, !tbaa !188
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %278, label %324

278:                                              ; preds = %273
  %279 = load ptr, ptr %4, align 8, !tbaa !5
  %280 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %279) #7
  br i1 %280, label %285, label %281

281:                                              ; preds = %278
  %282 = load ptr, ptr %4, align 8, !tbaa !5
  %283 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %282, ptr noundef @.str.55)
          to label %284 unwind label %160

284:                                              ; preds = %281
  br label %285

285:                                              ; preds = %284, %278
  %286 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %287 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %286, i32 0, i32 56
  %288 = load i32, ptr %287, align 4, !tbaa !188
  switch i32 %288, label %323 [
    i32 0, label %323
    i32 1, label %289
    i32 2, label %306
  ]

289:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #7
  %290 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 101
  %291 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %292 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %291, i32 0, i32 14
  invoke void @_ZN11spirv_cross4joinIJRA22_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_S1_RjRA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 1 dereferenceable(22) @.str.1363, ptr noundef nonnull align 8 dereferenceable(32) %290, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 4 dereferenceable(4) %292, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %293 unwind label %297

293:                                              ; preds = %289
  %294 = load ptr, ptr %4, align 8, !tbaa !5
  %295 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %294, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %296 unwind label %301

296:                                              ; preds = %293
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #7
  br label %323

297:                                              ; preds = %289
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %7, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %8, align 4
  br label %305

301:                                              ; preds = %293
  %302 = landingpad { ptr, i32 }
          cleanup
  %303 = extractvalue { ptr, i32 } %302, 0
  store ptr %303, ptr %7, align 8
  %304 = extractvalue { ptr, i32 } %302, 1
  store i32 %304, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  br label %305

305:                                              ; preds = %301, %297
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #7
  br label %766

306:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #7
  %307 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 101
  %308 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %309 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %308, i32 0, i32 14
  invoke void @_ZN11spirv_cross4joinIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_S1_RjRA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 1 dereferenceable(20) @.str.1364, ptr noundef nonnull align 8 dereferenceable(32) %307, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 4 dereferenceable(4) %309, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %310 unwind label %314

310:                                              ; preds = %306
  %311 = load ptr, ptr %4, align 8, !tbaa !5
  %312 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %311, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %313 unwind label %318

313:                                              ; preds = %310
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #7
  br label %323

314:                                              ; preds = %306
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %7, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %8, align 4
  br label %322

318:                                              ; preds = %310
  %319 = landingpad { ptr, i32 }
          cleanup
  %320 = extractvalue { ptr, i32 } %319, 0
  store ptr %320, ptr %7, align 8
  %321 = extractvalue { ptr, i32 } %319, 1
  store i32 %321, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br label %322

322:                                              ; preds = %318, %314
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #7
  br label %766

323:                                              ; preds = %313, %296, %285, %285
  br label %324

324:                                              ; preds = %323, %273, %272, %260, %258
  %325 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %326 unwind label %160

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

327:                                              ; preds = %326
  %328 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 62
  %329 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %328)
          to label %330 unwind label %160

330:                                              ; preds = %327
  %331 = icmp ne i32 %329, 0
  br i1 %331, label %332, label %373

332:                                              ; preds = %330
  %333 = load ptr, ptr %4, align 8, !tbaa !5
  %334 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %333) #7
  br i1 %334, label %339, label %335

335:                                              ; preds = %332
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %336, ptr noundef @.str.55)
          to label %338 unwind label %160

338:                                              ; preds = %335
  br label %339

339:                                              ; preds = %338, %332
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #7
  %340 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL31get_patch_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %341 unwind label %354

341:                                              ; preds = %339
  %342 = load ptr, ptr %57, align 8, !tbaa !185
  %343 = getelementptr inbounds ptr, ptr %342, i64 19
  %344 = load ptr, ptr %343, align 8
  invoke void %344(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(12482) %57, ptr noundef nonnull align 8 dereferenceable(336) %340, i32 noundef 0)
          to label %345 unwind label %354

345:                                              ; preds = %341
  %346 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 99
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #7
  %347 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %348 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %347, i32 0, i32 8
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 4 dereferenceable(4) %348)
          to label %349 unwind label %358

349:                                              ; preds = %345
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %346, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %350 unwind label %362

350:                                              ; preds = %349
  %351 = load ptr, ptr %4, align 8, !tbaa !5
  %352 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %351, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %353 unwind label %366

353:                                              ; preds = %350
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #7
  br label %373

354:                                              ; preds = %341, %339
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %7, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %8, align 4
  br label %372

358:                                              ; preds = %345
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %7, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %8, align 4
  br label %371

362:                                              ; preds = %349
  %363 = landingpad { ptr, i32 }
          cleanup
  %364 = extractvalue { ptr, i32 } %363, 0
  store ptr %364, ptr %7, align 8
  %365 = extractvalue { ptr, i32 } %363, 1
  store i32 %365, ptr %8, align 4
  br label %370

366:                                              ; preds = %350
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %7, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  br label %370

370:                                              ; preds = %366, %362
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  br label %371

371:                                              ; preds = %370, %358
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  br label %372

372:                                              ; preds = %371, %354
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #7
  br label %766

373:                                              ; preds = %353, %330
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %374) #7
  br i1 %375, label %380, label %376

376:                                              ; preds = %373
  %377 = load ptr, ptr %4, align 8, !tbaa !5
  %378 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %377, ptr noundef @.str.55)
          to label %379 unwind label %160

379:                                              ; preds = %376
  br label %380

380:                                              ; preds = %379, %373
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #7
  invoke void @_ZN11spirv_cross11CompilerMSL27get_tess_factor_struct_nameB5cxx11Ev(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %381 unwind label %414

381:                                              ; preds = %380
  %382 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 100
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #7
  %383 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %384 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %383, i32 0, i32 9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 4 dereferenceable(4) %384)
          to label %385 unwind label %418

385:                                              ; preds = %381
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %382, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %386 unwind label %422

386:                                              ; preds = %385
  %387 = load ptr, ptr %4, align 8, !tbaa !5
  %388 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %387, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %389 unwind label %426

389:                                              ; preds = %386
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  store i32 0, ptr %28, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  store i32 0, ptr %29, align 4, !tbaa !16
  %390 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %57, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #7
  %391 = getelementptr inbounds %class.anon.580, ptr %30, i32 0, i32 0
  store ptr %57, ptr %391, align 8, !tbaa !189
  %392 = getelementptr inbounds %class.anon.580, ptr %30, i32 0, i32 1
  store ptr %29, ptr %392, align 8, !tbaa !5
  %393 = getelementptr inbounds %class.anon.580, ptr %30, i32 0, i32 2
  store ptr %28, ptr %393, align 8, !tbaa !5
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_4EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %390, ptr noundef nonnull align 8 dereferenceable(24) %30)
          to label %394 unwind label %433

394:                                              ; preds = %389
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  store ptr null, ptr %31, align 8, !tbaa !5
  %395 = load i32, ptr %28, align 4, !tbaa !16
  %396 = icmp ne i32 %395, 0
  br i1 %396, label %397, label %445

397:                                              ; preds = %394
  %398 = load i32, ptr %28, align 4, !tbaa !16
  %399 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %398)
          to label %400 unwind label %437

400:                                              ; preds = %397
  store ptr %399, ptr %31, align 8, !tbaa !5
  %401 = icmp ne ptr %399, null
  br i1 %401, label %402, label %445

402:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %403 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %57, i32 0, i32 1
  %404 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %403, i32 0, i32 13
  %405 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %404)
          to label %406 unwind label %441

406:                                              ; preds = %402
  %407 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %405)
          to label %408 unwind label %441

408:                                              ; preds = %406
  store ptr %407, ptr %32, align 8, !tbaa !5
  %409 = load ptr, ptr %32, align 8, !tbaa !5
  %410 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %409, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #7
  %411 = getelementptr inbounds %class.anon.581, ptr %34, i32 0, i32 0
  store ptr %57, ptr %411, align 8, !tbaa !191
  %412 = getelementptr inbounds %class.anon.581, ptr %34, i32 0, i32 1
  %413 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %413, ptr %412, align 8, !tbaa !193
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(16) %34) #7
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %410, ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  br label %445

414:                                              ; preds = %380
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %7, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %8, align 4
  br label %432

418:                                              ; preds = %381
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %7, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %8, align 4
  br label %431

422:                                              ; preds = %385
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %7, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %8, align 4
  br label %430

426:                                              ; preds = %386
  %427 = landingpad { ptr, i32 }
          cleanup
  %428 = extractvalue { ptr, i32 } %427, 0
  store ptr %428, ptr %7, align 8
  %429 = extractvalue { ptr, i32 } %427, 1
  store i32 %429, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  br label %430

430:                                              ; preds = %426, %422
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %431

431:                                              ; preds = %430, %418
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br label %432

432:                                              ; preds = %431, %414
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #7
  br label %766

433:                                              ; preds = %389
  %434 = landingpad { ptr, i32 }
          cleanup
  %435 = extractvalue { ptr, i32 } %434, 0
  store ptr %435, ptr %7, align 8
  %436 = extractvalue { ptr, i32 } %434, 1
  store i32 %436, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #7
  br label %567

437:                                              ; preds = %487, %479, %448, %397
  %438 = landingpad { ptr, i32 }
          cleanup
  %439 = extractvalue { ptr, i32 } %438, 0
  store ptr %439, ptr %7, align 8
  %440 = extractvalue { ptr, i32 } %438, 1
  store i32 %440, ptr %8, align 4
  br label %566

441:                                              ; preds = %406, %402
  %442 = landingpad { ptr, i32 }
          cleanup
  %443 = extractvalue { ptr, i32 } %442, 0
  store ptr %443, ptr %7, align 8
  %444 = extractvalue { ptr, i32 } %442, 1
  store i32 %444, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  br label %566

445:                                              ; preds = %408, %400, %394
  %446 = load i32, ptr %29, align 4, !tbaa !16
  %447 = icmp ne i32 %446, 0
  br i1 %447, label %448, label %479

448:                                              ; preds = %445
  %449 = load i32, ptr %29, align 4, !tbaa !16
  %450 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %449)
          to label %451 unwind label %437

451:                                              ; preds = %448
  store ptr %450, ptr %31, align 8, !tbaa !5
  %452 = icmp ne ptr %450, null
  br i1 %452, label %453, label %479

453:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %454 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %57, i32 0, i32 1
  %455 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %454, i32 0, i32 13
  %456 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %455)
          to label %457 unwind label %468

457:                                              ; preds = %453
  %458 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %456)
          to label %459 unwind label %468

459:                                              ; preds = %457
  store ptr %458, ptr %35, align 8, !tbaa !5
  %460 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler25is_tessellating_trianglesEv(ptr noundef nonnull align 8 dereferenceable(3176) %57)
          to label %461 unwind label %468

461:                                              ; preds = %459
  br i1 %460, label %462, label %472

462:                                              ; preds = %461
  %463 = load ptr, ptr %35, align 8, !tbaa !5
  %464 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %463, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #7
  %465 = getelementptr inbounds %class.anon.582, ptr %37, i32 0, i32 0
  store ptr %57, ptr %465, align 8, !tbaa !194
  %466 = getelementptr inbounds %class.anon.582, ptr %37, i32 0, i32 1
  %467 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %467, ptr %466, align 8, !tbaa !196
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(16) %37) #7
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %464, ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  br label %478

468:                                              ; preds = %459, %457, %453
  %469 = landingpad { ptr, i32 }
          cleanup
  %470 = extractvalue { ptr, i32 } %469, 0
  store ptr %470, ptr %7, align 8
  %471 = extractvalue { ptr, i32 } %469, 1
  store i32 %471, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  br label %566

472:                                              ; preds = %461
  %473 = load ptr, ptr %35, align 8, !tbaa !5
  %474 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %473, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #7
  %475 = getelementptr inbounds %class.anon.583, ptr %39, i32 0, i32 0
  store ptr %57, ptr %475, align 8, !tbaa !197
  %476 = getelementptr inbounds %class.anon.583, ptr %39, i32 0, i32 1
  %477 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %477, ptr %476, align 8, !tbaa !199
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(16) %39) #7
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %474, ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #7
  br label %478

478:                                              ; preds = %472, %462
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  br label %479

479:                                              ; preds = %478, %451, %445
  %480 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 59
  %481 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %480)
          to label %482 unwind label %437

482:                                              ; preds = %479
  %483 = icmp ne i32 %481, 0
  br i1 %483, label %484, label %565

484:                                              ; preds = %482
  %485 = load ptr, ptr %4, align 8, !tbaa !5
  %486 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %485) #7
  br i1 %486, label %491, label %487

487:                                              ; preds = %484
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %488, ptr noundef @.str.55)
          to label %490 unwind label %437

490:                                              ; preds = %487
  br label %491

491:                                              ; preds = %490, %484
  %492 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %493 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %492, i32 0, i32 48
  %494 = load i8, ptr %493, align 1, !tbaa !200, !range !183, !noundef !184
  %495 = trunc i8 %494 to i1
  br i1 %495, label %496, label %530

496:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #7
  %497 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %498 unwind label %511

498:                                              ; preds = %496
  %499 = load ptr, ptr %57, align 8, !tbaa !185
  %500 = getelementptr inbounds ptr, ptr %499, i64 19
  %501 = load ptr, ptr %500, align 8
  invoke void %501(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(12482) %57, ptr noundef nonnull align 8 dereferenceable(336) %497, i32 noundef 0)
          to label %502 unwind label %511

502:                                              ; preds = %498
  %503 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 96
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #7
  %504 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %505 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %504, i32 0, i32 13
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 4 dereferenceable(4) %505)
          to label %506 unwind label %515

506:                                              ; preds = %502
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %503, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %507 unwind label %519

507:                                              ; preds = %506
  %508 = load ptr, ptr %4, align 8, !tbaa !5
  %509 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %508, ptr noundef nonnull align 8 dereferenceable(32) %40)
          to label %510 unwind label %523

510:                                              ; preds = %507
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #7
  br label %564

511:                                              ; preds = %498, %496
  %512 = landingpad { ptr, i32 }
          cleanup
  %513 = extractvalue { ptr, i32 } %512, 0
  store ptr %513, ptr %7, align 8
  %514 = extractvalue { ptr, i32 } %512, 1
  store i32 %514, ptr %8, align 4
  br label %529

515:                                              ; preds = %502
  %516 = landingpad { ptr, i32 }
          cleanup
  %517 = extractvalue { ptr, i32 } %516, 0
  store ptr %517, ptr %7, align 8
  %518 = extractvalue { ptr, i32 } %516, 1
  store i32 %518, ptr %8, align 4
  br label %528

519:                                              ; preds = %506
  %520 = landingpad { ptr, i32 }
          cleanup
  %521 = extractvalue { ptr, i32 } %520, 0
  store ptr %521, ptr %7, align 8
  %522 = extractvalue { ptr, i32 } %520, 1
  store i32 %522, ptr %8, align 4
  br label %527

523:                                              ; preds = %507
  %524 = landingpad { ptr, i32 }
          cleanup
  %525 = extractvalue { ptr, i32 } %524, 0
  store ptr %525, ptr %7, align 8
  %526 = extractvalue { ptr, i32 } %524, 1
  store i32 %526, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  br label %527

527:                                              ; preds = %523, %519
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  br label %528

528:                                              ; preds = %527, %515
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  br label %529

529:                                              ; preds = %528, %511
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #7
  br label %566

530:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #7
  %531 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %532 unwind label %545

532:                                              ; preds = %530
  %533 = load ptr, ptr %57, align 8, !tbaa !185
  %534 = getelementptr inbounds ptr, ptr %533, i64 19
  %535 = load ptr, ptr %534, align 8
  invoke void %535(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(12482) %57, ptr noundef nonnull align 8 dereferenceable(336) %531, i32 noundef 0)
          to label %536 unwind label %545

536:                                              ; preds = %532
  %537 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 95
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #7
  %538 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %539 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %538, i32 0, i32 16
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 4 dereferenceable(4) %539)
          to label %540 unwind label %549

540:                                              ; preds = %536
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA16_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 1 dereferenceable(13) @.str.1365, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %537, ptr noundef nonnull align 1 dereferenceable(16) @.str.1366, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %541 unwind label %553

541:                                              ; preds = %540
  %542 = load ptr, ptr %4, align 8, !tbaa !5
  %543 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %542, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %544 unwind label %557

544:                                              ; preds = %541
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  br label %564

545:                                              ; preds = %532, %530
  %546 = landingpad { ptr, i32 }
          cleanup
  %547 = extractvalue { ptr, i32 } %546, 0
  store ptr %547, ptr %7, align 8
  %548 = extractvalue { ptr, i32 } %546, 1
  store i32 %548, ptr %8, align 4
  br label %563

549:                                              ; preds = %536
  %550 = landingpad { ptr, i32 }
          cleanup
  %551 = extractvalue { ptr, i32 } %550, 0
  store ptr %551, ptr %7, align 8
  %552 = extractvalue { ptr, i32 } %550, 1
  store i32 %552, ptr %8, align 4
  br label %562

553:                                              ; preds = %540
  %554 = landingpad { ptr, i32 }
          cleanup
  %555 = extractvalue { ptr, i32 } %554, 0
  store ptr %555, ptr %7, align 8
  %556 = extractvalue { ptr, i32 } %554, 1
  store i32 %556, ptr %8, align 4
  br label %561

557:                                              ; preds = %541
  %558 = landingpad { ptr, i32 }
          cleanup
  %559 = extractvalue { ptr, i32 } %558, 0
  store ptr %559, ptr %7, align 8
  %560 = extractvalue { ptr, i32 } %558, 1
  store i32 %560, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  br label %561

561:                                              ; preds = %557, %553
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  br label %562

562:                                              ; preds = %561, %549
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  br label %563

563:                                              ; preds = %562, %545
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  br label %566

564:                                              ; preds = %544, %510
  br label %565

565:                                              ; preds = %564, %482
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %568

566:                                              ; preds = %563, %529, %468, %441, %437
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  br label %567

567:                                              ; preds = %566, %433
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %766

568:                                              ; preds = %565, %326
  br label %569

569:                                              ; preds = %568, %144
  %570 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %571 unwind label %160

571:                                              ; preds = %569
  br i1 %570, label %572, label %716

572:                                              ; preds = %571
  %573 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %574 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %573, i32 0, i32 49
  %575 = load i8, ptr %574, align 2, !tbaa !201, !range !183, !noundef !184
  %576 = trunc i8 %575 to i1
  br i1 %576, label %577, label %716

577:                                              ; preds = %572
  %578 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 61
  %579 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %578)
          to label %580 unwind label %160

580:                                              ; preds = %577
  %581 = icmp ne i32 %579, 0
  br i1 %581, label %582, label %623

582:                                              ; preds = %580
  %583 = load ptr, ptr %4, align 8, !tbaa !5
  %584 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %583) #7
  br i1 %584, label %589, label %585

585:                                              ; preds = %582
  %586 = load ptr, ptr %4, align 8, !tbaa !5
  %587 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %586, ptr noundef @.str.55)
          to label %588 unwind label %160

588:                                              ; preds = %585
  br label %589

589:                                              ; preds = %588, %582
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #7
  %590 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL30get_patch_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %591 unwind label %604

591:                                              ; preds = %589
  %592 = load ptr, ptr %57, align 8, !tbaa !185
  %593 = getelementptr inbounds ptr, ptr %592, i64 19
  %594 = load ptr, ptr %593, align 8
  invoke void %594(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(12482) %57, ptr noundef nonnull align 8 dereferenceable(336) %590, i32 noundef 0)
          to label %595 unwind label %604

595:                                              ; preds = %591
  %596 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 98
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #7
  %597 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %598 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %597, i32 0, i32 15
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 4 dereferenceable(4) %598)
          to label %599 unwind label %608

599:                                              ; preds = %595
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 1 dereferenceable(14) @.str.1367, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %596, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %600 unwind label %612

600:                                              ; preds = %599
  %601 = load ptr, ptr %4, align 8, !tbaa !5
  %602 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %601, ptr noundef nonnull align 8 dereferenceable(32) %46)
          to label %603 unwind label %616

603:                                              ; preds = %600
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  br label %623

604:                                              ; preds = %591, %589
  %605 = landingpad { ptr, i32 }
          cleanup
  %606 = extractvalue { ptr, i32 } %605, 0
  store ptr %606, ptr %7, align 8
  %607 = extractvalue { ptr, i32 } %605, 1
  store i32 %607, ptr %8, align 4
  br label %622

608:                                              ; preds = %595
  %609 = landingpad { ptr, i32 }
          cleanup
  %610 = extractvalue { ptr, i32 } %609, 0
  store ptr %610, ptr %7, align 8
  %611 = extractvalue { ptr, i32 } %609, 1
  store i32 %611, ptr %8, align 4
  br label %621

612:                                              ; preds = %599
  %613 = landingpad { ptr, i32 }
          cleanup
  %614 = extractvalue { ptr, i32 } %613, 0
  store ptr %614, ptr %7, align 8
  %615 = extractvalue { ptr, i32 } %613, 1
  store i32 %615, ptr %8, align 4
  br label %620

616:                                              ; preds = %600
  %617 = landingpad { ptr, i32 }
          cleanup
  %618 = extractvalue { ptr, i32 } %617, 0
  store ptr %618, ptr %7, align 8
  %619 = extractvalue { ptr, i32 } %617, 1
  store i32 %619, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  br label %620

620:                                              ; preds = %616, %612
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  br label %621

621:                                              ; preds = %620, %608
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  br label %622

622:                                              ; preds = %621, %604
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  br label %766

623:                                              ; preds = %603, %580
  %624 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 65
  %625 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %624)
          to label %626 unwind label %160

626:                                              ; preds = %623
  %627 = icmp ne i32 %625, 0
  br i1 %627, label %633, label %628

628:                                              ; preds = %626
  %629 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 66
  %630 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %629)
          to label %631 unwind label %160

631:                                              ; preds = %628
  %632 = icmp ne i32 %630, 0
  br i1 %632, label %633, label %669

633:                                              ; preds = %631, %626
  %634 = load ptr, ptr %4, align 8, !tbaa !5
  %635 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %634) #7
  br i1 %635, label %640, label %636

636:                                              ; preds = %633
  %637 = load ptr, ptr %4, align 8, !tbaa !5
  %638 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %637, ptr noundef @.str.55)
          to label %639 unwind label %160

639:                                              ; preds = %636
  br label %640

640:                                              ; preds = %639, %633
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #7
  invoke void @_ZN11spirv_cross11CompilerMSL27get_tess_factor_struct_nameB5cxx11Ev(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %641 unwind label %650

641:                                              ; preds = %640
  %642 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 100
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #7
  %643 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %644 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %643, i32 0, i32 9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 4 dereferenceable(4) %644)
          to label %645 unwind label %654

645:                                              ; preds = %641
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 1 dereferenceable(14) @.str.1367, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %642, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %646 unwind label %658

646:                                              ; preds = %645
  %647 = load ptr, ptr %4, align 8, !tbaa !5
  %648 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %647, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %649 unwind label %662

649:                                              ; preds = %646
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  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
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  br label %669

650:                                              ; preds = %640
  %651 = landingpad { ptr, i32 }
          cleanup
  %652 = extractvalue { ptr, i32 } %651, 0
  store ptr %652, ptr %7, align 8
  %653 = extractvalue { ptr, i32 } %651, 1
  store i32 %653, ptr %8, align 4
  br label %668

654:                                              ; preds = %641
  %655 = landingpad { ptr, i32 }
          cleanup
  %656 = extractvalue { ptr, i32 } %655, 0
  store ptr %656, ptr %7, align 8
  %657 = extractvalue { ptr, i32 } %655, 1
  store i32 %657, ptr %8, align 4
  br label %667

658:                                              ; preds = %645
  %659 = landingpad { ptr, i32 }
          cleanup
  %660 = extractvalue { ptr, i32 } %659, 0
  store ptr %660, ptr %7, align 8
  %661 = extractvalue { ptr, i32 } %659, 1
  store i32 %661, ptr %8, align 4
  br label %666

662:                                              ; preds = %646
  %663 = landingpad { ptr, i32 }
          cleanup
  %664 = extractvalue { ptr, i32 } %663, 0
  store ptr %664, ptr %7, align 8
  %665 = extractvalue { ptr, i32 } %663, 1
  store i32 %665, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  br label %666

666:                                              ; preds = %662, %658
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  br label %667

667:                                              ; preds = %666, %654
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  br label %668

668:                                              ; preds = %667, %650
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  br label %766

669:                                              ; preds = %649, %631
  %670 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 59
  %671 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %670)
          to label %672 unwind label %160

672:                                              ; preds = %669
  %673 = icmp ne i32 %671, 0
  br i1 %673, label %674, label %715

674:                                              ; preds = %672
  %675 = load ptr, ptr %4, align 8, !tbaa !5
  %676 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %675) #7
  br i1 %676, label %681, label %677

677:                                              ; preds = %674
  %678 = load ptr, ptr %4, align 8, !tbaa !5
  %679 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %678, ptr noundef @.str.55)
          to label %680 unwind label %160

680:                                              ; preds = %677
  br label %681

681:                                              ; preds = %680, %674
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #7
  %682 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %683 unwind label %696

683:                                              ; preds = %681
  %684 = load ptr, ptr %57, align 8, !tbaa !185
  %685 = getelementptr inbounds ptr, ptr %684, i64 19
  %686 = load ptr, ptr %685, align 8
  invoke void %686(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(12482) %57, ptr noundef nonnull align 8 dereferenceable(336) %682, i32 noundef 0)
          to label %687 unwind label %696

687:                                              ; preds = %683
  %688 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 96
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #7
  %689 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %57, i32 0, i32 37
  %690 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %689, i32 0, i32 13
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 4 dereferenceable(4) %690)
          to label %691 unwind label %700

691:                                              ; preds = %687
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 1 dereferenceable(14) @.str.1367, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %688, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %692 unwind label %704

692:                                              ; preds = %691
  %693 = load ptr, ptr %4, align 8, !tbaa !5
  %694 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %693, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %695 unwind label %708

695:                                              ; preds = %692
  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) %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #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 %715

696:                                              ; preds = %683, %681
  %697 = landingpad { ptr, i32 }
          cleanup
  %698 = extractvalue { ptr, i32 } %697, 0
  store ptr %698, ptr %7, align 8
  %699 = extractvalue { ptr, i32 } %697, 1
  store i32 %699, ptr %8, align 4
  br label %714

700:                                              ; preds = %687
  %701 = landingpad { ptr, i32 }
          cleanup
  %702 = extractvalue { ptr, i32 } %701, 0
  store ptr %702, ptr %7, align 8
  %703 = extractvalue { ptr, i32 } %701, 1
  store i32 %703, ptr %8, align 4
  br label %713

704:                                              ; preds = %691
  %705 = landingpad { ptr, i32 }
          cleanup
  %706 = extractvalue { ptr, i32 } %705, 0
  store ptr %706, ptr %7, align 8
  %707 = extractvalue { ptr, i32 } %705, 1
  store i32 %707, ptr %8, align 4
  br label %712

708:                                              ; preds = %692
  %709 = landingpad { ptr, i32 }
          cleanup
  %710 = extractvalue { ptr, i32 } %709, 0
  store ptr %710, ptr %7, align 8
  %711 = extractvalue { ptr, i32 } %709, 1
  store i32 %711, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  br label %712

712:                                              ; preds = %708, %704
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  br label %713

713:                                              ; preds = %712, %700
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  br label %714

714:                                              ; preds = %713, %696
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  br label %766

715:                                              ; preds = %695, %672
  br label %716

716:                                              ; preds = %715, %572, %571
  %717 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %57)
          to label %718 unwind label %160

718:                                              ; preds = %716
  br i1 %717, label %719, label %740

719:                                              ; preds = %718
  %720 = load ptr, ptr %4, align 8, !tbaa !5
  %721 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %720) #7
  br i1 %721, label %726, label %722

722:                                              ; preds = %719
  %723 = load ptr, ptr %4, align 8, !tbaa !5
  %724 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %723, ptr noundef @.str.55)
          to label %725 unwind label %160

725:                                              ; preds = %722
  br label %726

726:                                              ; preds = %725, %719
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #7
  invoke void @_ZN11spirv_cross4joinIJRA18_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 1 dereferenceable(18) @.str.1368)
          to label %727 unwind label %731

727:                                              ; preds = %726
  %728 = load ptr, ptr %4, align 8, !tbaa !5
  %729 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %728, ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %730 unwind label %735

730:                                              ; preds = %727
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  br label %740

731:                                              ; preds = %726
  %732 = landingpad { ptr, i32 }
          cleanup
  %733 = extractvalue { ptr, i32 } %732, 0
  store ptr %733, ptr %7, align 8
  %734 = extractvalue { ptr, i32 } %732, 1
  store i32 %734, ptr %8, align 4
  br label %739

735:                                              ; preds = %727
  %736 = landingpad { ptr, i32 }
          cleanup
  %737 = extractvalue { ptr, i32 } %736, 0
  store ptr %737, ptr %7, align 8
  %738 = extractvalue { ptr, i32 } %736, 1
  store i32 %738, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  br label %739

739:                                              ; preds = %735, %731
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  br label %766

740:                                              ; preds = %730, %718
  %741 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %57)
          to label %742 unwind label %160

742:                                              ; preds = %740
  %743 = icmp eq i32 %741, 5364
  br i1 %743, label %744, label %765

744:                                              ; preds = %742
  %745 = load ptr, ptr %4, align 8, !tbaa !5
  %746 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %745) #7
  br i1 %746, label %751, label %747

747:                                              ; preds = %744
  %748 = load ptr, ptr %4, align 8, !tbaa !5
  %749 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %748, ptr noundef @.str.55)
          to label %750 unwind label %160

750:                                              ; preds = %747
  br label %751

751:                                              ; preds = %750, %744
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #7
  invoke void @_ZN11spirv_cross4joinIJRA28_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 1 dereferenceable(28) @.str.1369)
          to label %752 unwind label %756

752:                                              ; preds = %751
  %753 = load ptr, ptr %4, align 8, !tbaa !5
  %754 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %753, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %755 unwind label %760

755:                                              ; preds = %752
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  br label %765

756:                                              ; preds = %751
  %757 = landingpad { ptr, i32 }
          cleanup
  %758 = extractvalue { ptr, i32 } %757, 0
  store ptr %758, ptr %7, align 8
  %759 = extractvalue { ptr, i32 } %757, 1
  store i32 %759, ptr %8, align 4
  br label %764

760:                                              ; preds = %752
  %761 = landingpad { ptr, i32 }
          cleanup
  %762 = extractvalue { ptr, i32 } %761, 0
  store ptr %762, ptr %7, align 8
  %763 = extractvalue { ptr, i32 } %761, 1
  store i32 %763, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  br label %764

764:                                              ; preds = %760, %756
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  br label %766

765:                                              ; preds = %755, %742
  call void @_ZN11spirv_cross11SmallVectorISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(152) %5) #7
  call void @llvm.lifetime.end.p0(i64 152, ptr %5) #7
  ret void

766:                                              ; preds = %764, %739, %714, %668, %622, %567, %432, %372, %322, %305, %254, %217, %191, %160, %143, %122, %98, %73
  call void @_ZN11spirv_cross11SmallVectorISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(152) %5) #7
  call void @llvm.lifetime.end.p0(i64 152, ptr %5) #7
  br label %767

767:                                              ; preds = %766
  %768 = load ptr, ptr %7, align 8
  %769 = load i32, ptr %8, align 4
  %770 = insertvalue { ptr, i32 } poison, ptr %768, 0
  %771 = insertvalue { ptr, i32 } %770, i32 %769, 1
  resume { ptr, i32 } %771
}

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_3EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_4EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_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 dso_local void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA16_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(13), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4)) #5

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

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

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

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

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


; 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::SmallVector.573" = type { %"class.spirv_cross::VectorView.574", i64, %"class.spirv_cross::AlignedBuffer.575" }
%"class.spirv_cross::VectorView.574" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.575" = type { [128 x i8] }
%class.anon.576 = type { ptr, ptr, ptr }
%"class.spirv_cross::TypedID.414" = type { i32 }
%class.anon.580 = type { ptr, ptr, ptr }
%"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.581 = type { ptr, ptr }
%class.anon.582 = type { ptr, ptr }
%class.anon.583 = type { ptr, ptr }

@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1322 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1359 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1360 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1361 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1362 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1363 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1364 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1365 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1366 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1367 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1368 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1369 = external hidden unnamed_addr constant [28 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 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: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #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 nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #4 align 2

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

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

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

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

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

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

; 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

; 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 #4 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_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
declare dso_local noundef i32 @_ZN11spirv_cross11CompilerMSL27ensure_correct_builtin_typeEjN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, i32 noundef) local_unnamed_addr #4 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(32) %1) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.spirv_cross::SmallVector.573", align 8
  %4 = alloca %class.anon.576, align 8
  %5 = alloca %"class.spirv_cross::TypedID.414", align 4
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %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::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca %class.anon.580, align 8
  %23 = alloca %"class.std::function.489", align 8
  %24 = alloca %class.anon.581, align 8
  %25 = alloca %"class.std::function.489", align 8
  %26 = alloca %class.anon.582, align 8
  %27 = alloca %"class.std::function.489", align 8
  %28 = alloca %class.anon.583, align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %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::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %3) #6
  call void @_ZN11spirv_cross11SmallVectorISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %3) #6
  %46 = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #6
  store ptr %0, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %4, i64 8
  store ptr %3, ptr %47, align 8, !tbaa !10
  %48 = getelementptr inbounds i8, ptr %4, i64 16
  store ptr %1, ptr %48, align 8, !tbaa !10
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_3EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %46, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %49 unwind label %55

49:                                               ; preds = %2
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #6
  %50 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %3) #6
  %51 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %3) #6
  %.not148 = icmp eq ptr %50, %51
  br i1 %.not148, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %63, %49
  %52 = getelementptr inbounds i8, ptr %0, i64 11176
  %53 = load i32, ptr %52, align 8, !tbaa !11
  %54 = icmp eq i32 %53, 2
  br i1 %54, label %70, label %81

55:                                               ; preds = %2
  %56 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #6
  br label %477

.lr.ph:                                           ; preds = %49, %63
  %.087149 = phi ptr [ %67, %63 ], [ %50, %49 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  %57 = load ptr, ptr %.087149, align 8, !tbaa !175
  %58 = getelementptr inbounds i8, ptr %57, i64 12
  %59 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %58)
  %60 = getelementptr inbounds i8, ptr %.087149, i64 8
  %61 = load i32, ptr %60, align 8, !tbaa !178
  %62 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL27ensure_correct_builtin_typeEjN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %59, i32 noundef %61)
          to label %63 unwind label %68

63:                                               ; preds = %.lr.ph
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %5, i32 noundef %62)
  %64 = load ptr, ptr %.087149, align 8, !tbaa !175
  %65 = getelementptr inbounds i8, ptr %64, i64 12
  %66 = load i32, ptr %5, align 4, !tbaa !179
  store i32 %66, ptr %65, align 4, !tbaa !179
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  %67 = getelementptr inbounds i8, ptr %.087149, i64 16
  %.not = icmp eq ptr %67, %51
  br i1 %.not, label %._crit_edge, label %.lr.ph

68:                                               ; preds = %.lr.ph
  %69 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  br label %477

70:                                               ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #6
  %71 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  %72 = xor i1 %71, true
  invoke void @_ZN11spirv_cross11CompilerMSL17built_in_func_argB5cxx11EN3spv7BuiltInEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 4424, i1 noundef zeroext %72)
          to label %73 unwind label %76

73:                                               ; preds = %70
  %74 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %75 unwind label %78

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

76:                                               ; preds = %70
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %80

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

80:                                               ; preds = %78, %76
  %.pn = phi { ptr, i32 } [ %79, %78 ], [ %77, %76 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  br label %477

81:                                               ; preds = %75, %._crit_edge
  %82 = getelementptr inbounds i8, ptr %0, i64 11180
  %83 = load i32, ptr %82, align 4, !tbaa !180
  %84 = icmp eq i32 %83, 2
  br i1 %84, label %85, label %96

85:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #6
  %86 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  %87 = xor i1 %86, true
  invoke void @_ZN11spirv_cross11CompilerMSL17built_in_func_argB5cxx11EN3spv7BuiltInEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 4425, i1 noundef zeroext %87)
          to label %88 unwind label %91

88:                                               ; preds = %85
  %89 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %90 unwind label %93

90:                                               ; preds = %88
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %96

91:                                               ; preds = %85
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %95

93:                                               ; preds = %88
  %94 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  br label %95

95:                                               ; preds = %93, %91
  %.pn93 = phi { ptr, i32 } [ %94, %93 ], [ %92, %91 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %477

96:                                               ; preds = %90, %81
  %97 = getelementptr inbounds i8, ptr %0, i64 11188
  %98 = load i8, ptr %97, align 4, !tbaa !181, !range !182, !noundef !183
  %99 = trunc nuw i8 %98 to i1
  br i1 %99, label %100, label %357

100:                                              ; preds = %96
  %101 = getelementptr inbounds i8, ptr %0, i64 11136
  %102 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %101)
  %.not95 = icmp eq i32 %102, 0
  br i1 %.not95, label %129, label %103

103:                                              ; preds = %100
  %104 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %104, label %109, label %105

105:                                              ; preds = %103
  %106 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %109 unwind label %107

107:                                              ; preds = %465, %459, %448, %443, %421, %399, %369, %357, %248, %224, %216, %190, %182, %178, %170, %158, %148, %134, %129, %105
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %477

109:                                              ; preds = %105, %103
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  %110 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %111 unwind label %121

111:                                              ; preds = %109
  %112 = load ptr, ptr %0, align 8, !tbaa !184
  %113 = getelementptr inbounds i8, ptr %112, i64 152
  %114 = load ptr, ptr %113, align 8
  invoke void %114(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %110, i32 noundef 0)
          to label %115 unwind label %121

115:                                              ; preds = %111
  %116 = getelementptr inbounds i8, ptr %0, i64 11552
  %117 = getelementptr inbounds i8, ptr %0, i64 10064
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_RjRA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 4 dereferenceable(4) %117, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %118 unwind label %123

118:                                              ; preds = %115
  %119 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %120 unwind label %125

120:                                              ; preds = %118
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  br label %129

121:                                              ; preds = %111, %109
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %128

123:                                              ; preds = %115
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %127

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

127:                                              ; preds = %125, %123
  %.pn96 = phi { ptr, i32 } [ %126, %125 ], [ %124, %123 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  br label %128

128:                                              ; preds = %127, %121
  %.pn96.pn = phi { ptr, i32 } [ %.pn96, %127 ], [ %122, %121 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  br label %477

129:                                              ; preds = %120, %100
  %130 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %131 unwind label %107

131:                                              ; preds = %129
  br i1 %130, label %132, label %146

132:                                              ; preds = %131
  %133 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %133, label %136, label %134

134:                                              ; preds = %132
  %135 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %136 unwind label %107

136:                                              ; preds = %134, %132
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  %137 = getelementptr inbounds i8, ptr %0, i64 10060
  invoke void @_ZN11spirv_cross4joinIJRA43_KcRjRA4_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 1 dereferenceable(43) @.str.1361, ptr noundef nonnull align 4 dereferenceable(4) %137, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %138 unwind label %141

138:                                              ; preds = %136
  %139 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %140 unwind label %143

140:                                              ; preds = %138
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %170

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

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

145:                                              ; preds = %143, %141
  %.pn102 = phi { ptr, i32 } [ %144, %143 ], [ %142, %141 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %477

146:                                              ; preds = %131
  %147 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %101)
  %.not99 = icmp eq i32 %147, 0
  br i1 %.not99, label %170, label %148

148:                                              ; preds = %146
  %149 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %150 unwind label %107

150:                                              ; preds = %148
  %151 = icmp eq i32 %149, 0
  br i1 %151, label %152, label %156

152:                                              ; preds = %150
  %153 = getelementptr inbounds i8, ptr %0, i64 10151
  %154 = load i8, ptr %153, align 1, !tbaa !186, !range !182, !noundef !183
  %155 = trunc nuw i8 %154 to i1
  br i1 %155, label %170, label %156

156:                                              ; preds = %152, %150
  %157 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %157, label %160, label %158

158:                                              ; preds = %156
  %159 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %160 unwind label %107

160:                                              ; preds = %158, %156
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  %161 = getelementptr inbounds i8, ptr %0, i64 10060
  invoke void @_ZN11spirv_cross4joinIJRA41_KcRjRA4_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 1 dereferenceable(41) @.str.1362, ptr noundef nonnull align 4 dereferenceable(4) %161, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %162 unwind label %165

162:                                              ; preds = %160
  %163 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %164 unwind label %167

164:                                              ; preds = %162
  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 %170

165:                                              ; preds = %160
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %169

167:                                              ; preds = %162
  %168 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  br label %169

169:                                              ; preds = %167, %165
  %.pn100 = phi { ptr, i32 } [ %168, %167 ], [ %166, %165 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %477

170:                                              ; preds = %146, %152, %164, %140
  %171 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %172 unwind label %107

172:                                              ; preds = %170
  %173 = icmp eq i32 %171, 0
  br i1 %173, label %174, label %216

174:                                              ; preds = %172
  %175 = getelementptr inbounds i8, ptr %0, i64 10151
  %176 = load i8, ptr %175, align 1, !tbaa !186, !range !182, !noundef !183
  %177 = trunc nuw i8 %176 to i1
  br i1 %177, label %178, label %216

178:                                              ; preds = %174
  %179 = getelementptr inbounds i8, ptr %0, i64 2680
  %180 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %179, i32 noundef 42)
          to label %181 unwind label %107

181:                                              ; preds = %178
  br i1 %180, label %185, label %182

182:                                              ; preds = %181
  %183 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %179, i32 noundef 5)
          to label %184 unwind label %107

184:                                              ; preds = %182
  br i1 %183, label %185, label %216

185:                                              ; preds = %184, %181
  %186 = getelementptr inbounds i8, ptr %0, i64 10160
  %187 = load i32, ptr %186, align 8, !tbaa !187
  %.not104 = icmp eq i32 %187, 0
  br i1 %.not104, label %216, label %188

188:                                              ; preds = %185
  %189 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %189, label %192, label %190

190:                                              ; preds = %188
  %191 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %192 unwind label %107

192:                                              ; preds = %190, %188
  %193 = load i32, ptr %186, align 8, !tbaa !187
  switch i32 %193, label %216 [
    i32 2, label %205
    i32 1, label %194
  ]

194:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  %195 = getelementptr inbounds i8, ptr %0, i64 11680
  %196 = getelementptr inbounds i8, ptr %0, i64 10092
  invoke void @_ZN11spirv_cross4joinIJRA22_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_S1_RjRA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 1 dereferenceable(22) @.str.1363, ptr noundef nonnull align 8 dereferenceable(32) %195, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 4 dereferenceable(4) %196, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %197 unwind label %200

197:                                              ; preds = %194
  %198 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %199 unwind label %202

199:                                              ; preds = %197
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  br label %216

200:                                              ; preds = %194
  %201 = landingpad { ptr, i32 }
          cleanup
  br label %204

202:                                              ; preds = %197
  %203 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  br label %204

204:                                              ; preds = %202, %200
  %.pn105 = phi { ptr, i32 } [ %203, %202 ], [ %201, %200 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  br label %477

205:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  %206 = getelementptr inbounds i8, ptr %0, i64 11680
  %207 = getelementptr inbounds i8, ptr %0, i64 10092
  invoke void @_ZN11spirv_cross4joinIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_S1_RjRA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 1 dereferenceable(20) @.str.1364, ptr noundef nonnull align 8 dereferenceable(32) %206, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 4 dereferenceable(4) %207, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %208 unwind label %211

208:                                              ; preds = %205
  %209 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %210 unwind label %213

210:                                              ; preds = %208
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %216

211:                                              ; preds = %205
  %212 = landingpad { ptr, i32 }
          cleanup
  br label %215

213:                                              ; preds = %208
  %214 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  br label %215

215:                                              ; preds = %213, %211
  %.pn107 = phi { ptr, i32 } [ %214, %213 ], [ %212, %211 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %477

216:                                              ; preds = %192, %199, %210, %185, %184, %174, %172
  %217 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %218 unwind label %107

218:                                              ; preds = %216
  br i1 %217, label %219, label %357

219:                                              ; preds = %218
  %220 = getelementptr inbounds i8, ptr %0, i64 11144
  %221 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %220)
  %.not109 = icmp eq i32 %221, 0
  br i1 %.not109, label %246, label %222

222:                                              ; preds = %219
  %223 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %223, label %226, label %224

224:                                              ; preds = %222
  %225 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %226 unwind label %107

226:                                              ; preds = %224, %222
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  %227 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL31get_patch_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %228 unwind label %238

228:                                              ; preds = %226
  %229 = load ptr, ptr %0, align 8, !tbaa !184
  %230 = getelementptr inbounds i8, ptr %229, i64 152
  %231 = load ptr, ptr %230, align 8
  invoke void %231(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %227, i32 noundef 0)
          to label %232 unwind label %238

232:                                              ; preds = %228
  %233 = getelementptr inbounds i8, ptr %0, i64 11616
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #6
  %234 = getelementptr inbounds i8, ptr %0, i64 10068
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 4 dereferenceable(4) %234)
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %233, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %235 unwind label %240

235:                                              ; preds = %232
  %236 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %237 unwind label %242

237:                                              ; preds = %235
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  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 @_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 @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  br label %246

238:                                              ; preds = %228, %226
  %239 = landingpad { ptr, i32 }
          cleanup
  br label %245

240:                                              ; preds = %232
  %241 = landingpad { ptr, i32 }
          cleanup
  br label %244

242:                                              ; preds = %235
  %243 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  br label %244

244:                                              ; preds = %242, %240
  %.pn110 = phi { ptr, i32 } [ %243, %242 ], [ %241, %240 ]
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %245

245:                                              ; preds = %244, %238
  %.pn110.pn = phi { ptr, i32 } [ %.pn110, %244 ], [ %239, %238 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  br label %477

246:                                              ; preds = %237, %219
  %247 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %247, label %250, label %248

248:                                              ; preds = %246
  %249 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %250 unwind label %107

250:                                              ; preds = %248, %246
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  invoke void @_ZN11spirv_cross11CompilerMSL27get_tess_factor_struct_nameB5cxx11Ev(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %251 unwind label %271

251:                                              ; preds = %250
  %252 = getelementptr inbounds i8, ptr %0, i64 11648
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  %253 = getelementptr inbounds i8, ptr %0, i64 10072
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 4 dereferenceable(4) %253)
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %252, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %254 unwind label %273

254:                                              ; preds = %251
  %255 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %256 unwind label %275

256:                                              ; preds = %254
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #6
  store i32 0, ptr %20, align 4, !tbaa !179
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #6
  store i32 0, ptr %21, align 4, !tbaa !179
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #6
  store ptr %0, ptr %22, align 8, !tbaa !188
  %257 = getelementptr inbounds i8, ptr %22, i64 8
  store ptr %21, ptr %257, align 8, !tbaa !10
  %258 = getelementptr inbounds i8, ptr %22, i64 16
  store ptr %20, ptr %258, align 8, !tbaa !10
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_4EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %46, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %259 unwind label %279

259:                                              ; preds = %256
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #6
  %260 = load i32, ptr %20, align 4, !tbaa !179
  %.not116 = icmp eq i32 %260, 0
  br i1 %.not116, label %285, label %261

261:                                              ; preds = %259
  %262 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %260)
          to label %263 unwind label %281

263:                                              ; preds = %261
  %.not117 = icmp eq ptr %262, null
  br i1 %.not117, label %285, label %264

264:                                              ; preds = %263
  %265 = getelementptr inbounds i8, ptr %0, i64 1744
  %266 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %265)
  %267 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %266)
          to label %268 unwind label %283

268:                                              ; preds = %264
  %269 = getelementptr inbounds i8, ptr %267, i64 704
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #6
  store ptr %0, ptr %24, align 8, !tbaa !190
  %270 = getelementptr inbounds i8, ptr %24, i64 8
  store ptr %262, ptr %270, align 8, !tbaa !192
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(16) %24) #6
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %269, ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  br label %285

271:                                              ; preds = %250
  %272 = landingpad { ptr, i32 }
          cleanup
  br label %278

273:                                              ; preds = %251
  %274 = landingpad { ptr, i32 }
          cleanup
  br label %277

275:                                              ; preds = %254
  %276 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  br label %277

277:                                              ; preds = %275, %273
  %.pn113 = phi { ptr, i32 } [ %276, %275 ], [ %274, %273 ]
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  br label %278

278:                                              ; preds = %277, %271
  %.pn113.pn = phi { ptr, i32 } [ %.pn113, %277 ], [ %272, %271 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  br label %477

279:                                              ; preds = %256
  %280 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #6
  br label %356

281:                                              ; preds = %309, %287, %261
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %356

283:                                              ; preds = %264
  %284 = landingpad { ptr, i32 }
          cleanup
  br label %356

285:                                              ; preds = %268, %263, %259
  %286 = load i32, ptr %21, align 4, !tbaa !179
  %.not118 = icmp eq i32 %286, 0
  br i1 %.not118, label %304, label %287

287:                                              ; preds = %285
  %288 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %286)
          to label %289 unwind label %281

289:                                              ; preds = %287
  %.not119 = icmp eq ptr %288, null
  br i1 %.not119, label %304, label %290

290:                                              ; preds = %289
  %291 = getelementptr inbounds i8, ptr %0, i64 1744
  %292 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %291)
  %293 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %292)
          to label %294 unwind label %300

294:                                              ; preds = %290
  %295 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler25is_tessellating_trianglesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %296 unwind label %300

296:                                              ; preds = %294
  %297 = getelementptr inbounds i8, ptr %293, i64 704
  br i1 %295, label %298, label %302

298:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #6
  store ptr %0, ptr %26, align 8, !tbaa !193
  %299 = getelementptr inbounds i8, ptr %26, i64 8
  store ptr %288, ptr %299, align 8, !tbaa !195
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(16) %26) #6
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %297, ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  br label %304

300:                                              ; preds = %294, %290
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %356

302:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #6
  store ptr %0, ptr %28, align 8, !tbaa !196
  %303 = getelementptr inbounds i8, ptr %28, i64 8
  store ptr %288, ptr %303, align 8, !tbaa !198
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(16) %28) #6
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %297, ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  br label %304

304:                                              ; preds = %298, %302, %289, %285
  %305 = getelementptr inbounds i8, ptr %0, i64 11132
  %306 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %305)
  %.not120 = icmp eq i32 %306, 0
  br i1 %.not120, label %355, label %307

307:                                              ; preds = %304
  %308 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %308, label %311, label %309

309:                                              ; preds = %307
  %310 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %311 unwind label %281

311:                                              ; preds = %309, %307
  %312 = getelementptr inbounds i8, ptr %0, i64 10149
  %313 = load i8, ptr %312, align 1, !tbaa !199, !range !182, !noundef !183
  %314 = trunc nuw i8 %313 to i1
  br i1 %314, label %315, label %335

315:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #6
  %316 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %317 unwind label %327

317:                                              ; preds = %315
  %318 = load ptr, ptr %0, align 8, !tbaa !184
  %319 = getelementptr inbounds i8, ptr %318, i64 152
  %320 = load ptr, ptr %319, align 8
  invoke void %320(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %316, i32 noundef 0)
          to label %321 unwind label %327

321:                                              ; preds = %317
  %322 = getelementptr inbounds i8, ptr %0, i64 11520
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #6
  %323 = getelementptr inbounds i8, ptr %0, i64 10088
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 4 dereferenceable(4) %323)
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %322, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %324 unwind label %329

324:                                              ; preds = %321
  %325 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %326 unwind label %331

326:                                              ; preds = %324
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  br label %355

327:                                              ; preds = %317, %315
  %328 = landingpad { ptr, i32 }
          cleanup
  br label %334

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

331:                                              ; preds = %324
  %332 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  br label %333

333:                                              ; preds = %331, %329
  %.pn124 = phi { ptr, i32 } [ %332, %331 ], [ %330, %329 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  br label %334

334:                                              ; preds = %333, %327
  %.pn124.pn = phi { ptr, i32 } [ %.pn124, %333 ], [ %328, %327 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  br label %356

335:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #6
  %336 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %337 unwind label %347

337:                                              ; preds = %335
  %338 = load ptr, ptr %0, align 8, !tbaa !184
  %339 = getelementptr inbounds i8, ptr %338, i64 152
  %340 = load ptr, ptr %339, align 8
  invoke void %340(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %336, i32 noundef 0)
          to label %341 unwind label %347

341:                                              ; preds = %337
  %342 = getelementptr inbounds i8, ptr %0, i64 11488
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #6
  %343 = getelementptr inbounds i8, ptr %0, i64 10100
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 4 dereferenceable(4) %343)
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA16_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 1 dereferenceable(13) @.str.1365, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %342, ptr noundef nonnull align 1 dereferenceable(16) @.str.1366, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %344 unwind label %349

344:                                              ; preds = %341
  %345 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %346 unwind label %351

346:                                              ; preds = %344
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #6
  br label %355

347:                                              ; preds = %337, %335
  %348 = landingpad { ptr, i32 }
          cleanup
  br label %354

349:                                              ; preds = %341
  %350 = landingpad { ptr, i32 }
          cleanup
  br label %353

351:                                              ; preds = %344
  %352 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #6
  br label %353

353:                                              ; preds = %351, %349
  %.pn121 = phi { ptr, i32 } [ %352, %351 ], [ %350, %349 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  br label %354

354:                                              ; preds = %353, %347
  %.pn121.pn = phi { ptr, i32 } [ %.pn121, %353 ], [ %348, %347 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #6
  br label %356

355:                                              ; preds = %326, %346, %304
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #6
  br label %357

356:                                              ; preds = %281, %283, %300, %334, %354, %279
  %.pn124.pn.pn.pn = phi { ptr, i32 } [ %280, %279 ], [ %.pn124.pn, %334 ], [ %.pn121.pn, %354 ], [ %282, %281 ], [ %301, %300 ], [ %284, %283 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #6
  br label %477

357:                                              ; preds = %218, %355, %96
  %358 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %359 unwind label %107

359:                                              ; preds = %357
  br i1 %358, label %360, label %443

360:                                              ; preds = %359
  %361 = getelementptr inbounds i8, ptr %0, i64 10150
  %362 = load i8, ptr %361, align 2, !tbaa !200, !range !182, !noundef !183
  %363 = trunc nuw i8 %362 to i1
  br i1 %363, label %364, label %443

364:                                              ; preds = %360
  %365 = getelementptr inbounds i8, ptr %0, i64 11140
  %366 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %365)
  %.not129 = icmp eq i32 %366, 0
  br i1 %.not129, label %391, label %367

367:                                              ; preds = %364
  %368 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %368, label %371, label %369

369:                                              ; preds = %367
  %370 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %371 unwind label %107

371:                                              ; preds = %369, %367
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #6
  %372 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL30get_patch_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %373 unwind label %383

373:                                              ; preds = %371
  %374 = load ptr, ptr %0, align 8, !tbaa !184
  %375 = getelementptr inbounds i8, ptr %374, i64 152
  %376 = load ptr, ptr %375, align 8
  invoke void %376(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %372, i32 noundef 0)
          to label %377 unwind label %383

377:                                              ; preds = %373
  %378 = getelementptr inbounds i8, ptr %0, i64 11584
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #6
  %379 = getelementptr inbounds i8, ptr %0, i64 10096
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 4 dereferenceable(4) %379)
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 1 dereferenceable(14) @.str.1367, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %378, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %380 unwind label %385

380:                                              ; preds = %377
  %381 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %382 unwind label %387

382:                                              ; preds = %380
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  br label %391

383:                                              ; preds = %373, %371
  %384 = landingpad { ptr, i32 }
          cleanup
  br label %390

385:                                              ; preds = %377
  %386 = landingpad { ptr, i32 }
          cleanup
  br label %389

387:                                              ; preds = %380
  %388 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  br label %389

389:                                              ; preds = %387, %385
  %.pn130 = phi { ptr, i32 } [ %388, %387 ], [ %386, %385 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  br label %390

390:                                              ; preds = %389, %383
  %.pn130.pn = phi { ptr, i32 } [ %.pn130, %389 ], [ %384, %383 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  br label %477

391:                                              ; preds = %382, %364
  %392 = getelementptr inbounds i8, ptr %0, i64 11156
  %393 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %392)
  %.not133 = icmp eq i32 %393, 0
  br i1 %.not133, label %394, label %397

394:                                              ; preds = %391
  %395 = getelementptr inbounds i8, ptr %0, i64 11160
  %396 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %395)
  %.not134 = icmp eq i32 %396, 0
  br i1 %.not134, label %416, label %397

397:                                              ; preds = %394, %391
  %398 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %398, label %401, label %399

399:                                              ; preds = %397
  %400 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %401 unwind label %107

401:                                              ; preds = %399, %397
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #6
  invoke void @_ZN11spirv_cross11CompilerMSL27get_tess_factor_struct_nameB5cxx11Ev(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %402 unwind label %408

402:                                              ; preds = %401
  %403 = getelementptr inbounds i8, ptr %0, i64 11648
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #6
  %404 = getelementptr inbounds i8, ptr %0, i64 10072
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 4 dereferenceable(4) %404)
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 1 dereferenceable(14) @.str.1367, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %403, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %405 unwind label %410

405:                                              ; preds = %402
  %406 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %407 unwind label %412

407:                                              ; preds = %405
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  br label %416

408:                                              ; preds = %401
  %409 = landingpad { ptr, i32 }
          cleanup
  br label %415

410:                                              ; preds = %402
  %411 = landingpad { ptr, i32 }
          cleanup
  br label %414

412:                                              ; preds = %405
  %413 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  br label %414

414:                                              ; preds = %412, %410
  %.pn135 = phi { ptr, i32 } [ %413, %412 ], [ %411, %410 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  br label %415

415:                                              ; preds = %414, %408
  %.pn135.pn = phi { ptr, i32 } [ %.pn135, %414 ], [ %409, %408 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  br label %477

416:                                              ; preds = %407, %394
  %417 = getelementptr inbounds i8, ptr %0, i64 11132
  %418 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %417)
  %.not138 = icmp eq i32 %418, 0
  br i1 %.not138, label %443, label %419

419:                                              ; preds = %416
  %420 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %420, label %423, label %421

421:                                              ; preds = %419
  %422 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %423 unwind label %107

423:                                              ; preds = %421, %419
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #6
  %424 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %425 unwind label %435

425:                                              ; preds = %423
  %426 = load ptr, ptr %0, align 8, !tbaa !184
  %427 = getelementptr inbounds i8, ptr %426, i64 152
  %428 = load ptr, ptr %427, align 8
  invoke void %428(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %424, i32 noundef 0)
          to label %429 unwind label %435

429:                                              ; preds = %425
  %430 = getelementptr inbounds i8, ptr %0, i64 11520
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #6
  %431 = getelementptr inbounds i8, ptr %0, i64 10088
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 4 dereferenceable(4) %431)
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA11_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 1 dereferenceable(14) @.str.1367, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 1 dereferenceable(3) @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %430, ptr noundef nonnull align 1 dereferenceable(11) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(4) @.str.1322)
          to label %432 unwind label %437

432:                                              ; preds = %429
  %433 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %434 unwind label %439

434:                                              ; preds = %432
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #6
  br label %443

435:                                              ; preds = %425, %423
  %436 = landingpad { ptr, i32 }
          cleanup
  br label %442

437:                                              ; preds = %429
  %438 = landingpad { ptr, i32 }
          cleanup
  br label %441

439:                                              ; preds = %432
  %440 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  br label %441

441:                                              ; preds = %439, %437
  %.pn139 = phi { ptr, i32 } [ %440, %439 ], [ %438, %437 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #6
  br label %442

442:                                              ; preds = %441, %435
  %.pn139.pn = phi { ptr, i32 } [ %.pn139, %441 ], [ %436, %435 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #6
  br label %477

443:                                              ; preds = %416, %434, %360, %359
  %444 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %445 unwind label %107

445:                                              ; preds = %443
  br i1 %444, label %446, label %459

446:                                              ; preds = %445
  %447 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %447, label %450, label %448

448:                                              ; preds = %446
  %449 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %450 unwind label %107

450:                                              ; preds = %448, %446
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #6
  invoke void @_ZN11spirv_cross4joinIJRA18_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 1 dereferenceable(18) @.str.1368)
          to label %451 unwind label %454

451:                                              ; preds = %450
  %452 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %44)
          to label %453 unwind label %456

453:                                              ; preds = %451
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #6
  br label %459

454:                                              ; preds = %450
  %455 = landingpad { ptr, i32 }
          cleanup
  br label %458

456:                                              ; preds = %451
  %457 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  br label %458

458:                                              ; preds = %456, %454
  %.pn142 = phi { ptr, i32 } [ %457, %456 ], [ %455, %454 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #6
  br label %477

459:                                              ; preds = %453, %445
  %460 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %461 unwind label %107

461:                                              ; preds = %459
  %462 = icmp eq i32 %460, 5364
  br i1 %462, label %463, label %476

463:                                              ; preds = %461
  %464 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  br i1 %464, label %467, label %465

465:                                              ; preds = %463
  %466 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull @.str.55)
          to label %467 unwind label %107

467:                                              ; preds = %465, %463
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #6
  invoke void @_ZN11spirv_cross4joinIJRA28_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 1 dereferenceable(28) @.str.1369)
          to label %468 unwind label %471

468:                                              ; preds = %467
  %469 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %470 unwind label %473

470:                                              ; preds = %468
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  br label %476

471:                                              ; preds = %467
  %472 = landingpad { ptr, i32 }
          cleanup
  br label %475

473:                                              ; preds = %468
  %474 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  br label %475

475:                                              ; preds = %473, %471
  %.pn144 = phi { ptr, i32 } [ %474, %473 ], [ %472, %471 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  br label %477

476:                                              ; preds = %470, %461
  call void @_ZN11spirv_cross11SmallVectorISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(152) %3) #6
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %3) #6
  ret void

477:                                              ; preds = %475, %458, %442, %415, %390, %356, %278, %245, %215, %204, %169, %145, %128, %107, %95, %80, %68, %55
  %.pn146 = phi { ptr, i32 } [ %69, %68 ], [ %.pn144, %475 ], [ %108, %107 ], [ %.pn142, %458 ], [ %.pn139.pn, %442 ], [ %.pn135.pn, %415 ], [ %.pn130.pn, %390 ], [ %.pn124.pn.pn.pn, %356 ], [ %.pn113.pn, %278 ], [ %.pn110.pn, %245 ], [ %.pn105, %204 ], [ %.pn107, %215 ], [ %.pn102, %145 ], [ %.pn100, %169 ], [ %.pn96.pn, %128 ], [ %.pn93, %95 ], [ %.pn, %80 ], [ %56, %55 ]
  call void @_ZN11spirv_cross11SmallVectorISt4pairIPNS_12SPIRVariableEN3spv7BuiltInEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(152) %3) #6
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %3) #6
  resume { ptr, i32 } %.pn146
}

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_3EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_4EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross11CompilerMSL24entry_point_args_builtinERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3$_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 dso_local void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA16_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(13), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4)) local_unnamed_addr #4

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

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

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

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

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


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass