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

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

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

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.167 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.168 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.169 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.290 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.910 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.948 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1306 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1520 = external hidden unnamed_addr constant [23 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb = external hidden unnamed_addr constant [80 x i8], align 1
@.str.1521 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1522 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1523 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1524 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1525 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1526 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1527 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1528 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1529 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1530 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1531 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.1532 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1533 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1534 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1535 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.1536 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.1537 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.1538 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.1539 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1540 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1541 = external hidden unnamed_addr constant [16 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

declare noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_runtime_size_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) #5

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137), i32 noundef, i32 noundef, i32 noundef) #0 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3, i1 noundef zeroext %4) #2 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i8, align 1
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i8, align 1
  %19 = alloca %"class.spirv_cross::TypedID.413", align 4
  %20 = alloca i8, align 1
  %21 = alloca ptr, align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca i32, align 4
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca i8, align 1
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::allocator.71", align 1
  %32 = alloca %"class.std::allocator.71", align 1
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca ptr, align 8
  %36 = alloca %"class.spirv_cross::TypedID.413", align 4
  %37 = alloca ptr, align 8
  %38 = alloca %"class.std::allocator.71", align 1
  %39 = alloca %"class.std::allocator.71", align 1
  %40 = alloca %"class.std::allocator.71", align 1
  %41 = alloca ptr, 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 i1, align 1
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca i32, align 4
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %6, align 8
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store i32 %3, ptr %9, align 4, !tbaa !9
  %51 = zext i1 %4 to i8
  store i8 %51, ptr %10, align 1, !tbaa !11
  %52 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #9
  %53 = load ptr, ptr %8, align 8, !tbaa !5
  %54 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %52, ptr noundef nonnull align 8 dereferenceable(336) %53)
          to label %55 unwind label %67

55:                                               ; preds = %5
  br i1 %54, label %60, label %56

56:                                               ; preds = %55
  %57 = load ptr, ptr %8, align 8, !tbaa !5
  %58 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler25type_is_array_of_pointersERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %52, ptr noundef nonnull align 8 dereferenceable(336) %57)
          to label %59 unwind label %67

59:                                               ; preds = %56
  br i1 %58, label %60, label %275

60:                                               ; preds = %59, %55
  %61 = load ptr, ptr %8, align 8, !tbaa !5
  %62 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %61, i32 0, i32 8
  %63 = load i32, ptr %62, align 8, !tbaa !13
  %64 = icmp ugt i32 %63, 0
  br i1 %64, label %65, label %66

65:                                               ; preds = %60
  br label %72

66:                                               ; preds = %60
  call void @__assert_fail(ptr noundef @.str.1520, ptr noundef @.str.25, i32 noundef 15834, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb) #10
  unreachable

67:                                               ; preds = %607, %603, %489, %484, %480, %477, %473, %470, %467, %464, %461, %456, %450, %447, %442, %436, %433, %430, %427, %424, %421, %418, %302, %293, %56, %5
  %68 = landingpad { ptr, i32 }
          cleanup
  %69 = extractvalue { ptr, i32 } %68, 0
  store ptr %69, ptr %12, align 8
  %70 = extractvalue { ptr, i32 } %68, 1
  store i32 %70, ptr %13, align 4
  br label %664

71:                                               ; No predecessors!
  br label %72

72:                                               ; preds = %71, %65
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #9
  %73 = load ptr, ptr %8, align 8, !tbaa !5
  %74 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL22get_type_address_spaceB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(12482) %52, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef %74, i1 noundef zeroext false)
          to label %75 unwind label %139

75:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %76 = load ptr, ptr %8, align 8, !tbaa !5
  %77 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %76, i32 0, i32 16
  %78 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %77)
          to label %79 unwind label %143

79:                                               ; preds = %75
  %80 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 noundef %78)
          to label %81 unwind label %143

81:                                               ; preds = %79
  store ptr %80, ptr %16, align 8, !tbaa !5
  %82 = load i8, ptr %10, align 1, !tbaa !11, !range !40, !noundef !41
  %83 = trunc i8 %82 to i1
  br i1 %83, label %84, label %175

84:                                               ; preds = %81
  %85 = load i32, ptr %9, align 4, !tbaa !9
  %86 = icmp ne i32 %85, 0
  br i1 %86, label %87, label %175

87:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %88 = load i32, ptr %9, align 4, !tbaa !9
  %89 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 noundef %88)
          to label %90 unwind label %147

90:                                               ; preds = %87
  store ptr %89, ptr %17, align 8, !tbaa !5
  %91 = load ptr, ptr %17, align 8, !tbaa !5
  %92 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25is_var_runtime_size_arrayERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %52, ptr noundef nonnull align 8 dereferenceable(176) %91)
          to label %93 unwind label %147

93:                                               ; preds = %90
  br i1 %92, label %94, label %170

94:                                               ; preds = %93
  %95 = load ptr, ptr %16, align 8, !tbaa !5
  %96 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_runtime_size_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %95)
          to label %97 unwind label %147

97:                                               ; preds = %94
  br i1 %96, label %98, label %170

98:                                               ; preds = %97
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #9
  %99 = load ptr, ptr %16, align 8, !tbaa !5
  %100 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %99, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 8 %100, i64 4, i1 false), !tbaa.struct !42
  %101 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %19, i32 0, i32 0
  %102 = load i32, ptr %101, align 4
  %103 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 %102, i32 noundef 3)
          to label %104 unwind label %151

104:                                              ; preds = %98
  %105 = zext i1 %103 to i8
  store i8 %105, ptr %18, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #9
  %106 = load ptr, ptr %17, align 8, !tbaa !5
  %107 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %106, i32 0, i32 2
  %108 = load i32, ptr %107, align 8, !tbaa !43
  %109 = icmp eq i32 %108, 12
  br i1 %109, label %113, label %110

110:                                              ; preds = %104
  %111 = load i8, ptr %18, align 1, !tbaa !11, !range !40, !noundef !41
  %112 = trunc i8 %111 to i1
  br i1 %112, label %113, label %118

113:                                              ; preds = %110, %104
  %114 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %52, i32 0, i32 37
  %115 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %114, i32 0, i32 35
  %116 = load i8, ptr %115, align 4, !tbaa !50, !range !40, !noundef !41
  %117 = trunc i8 %116 to i1
  br label %118

118:                                              ; preds = %113, %110
  %119 = phi i1 [ false, %110 ], [ %117, %113 ]
  %120 = zext i1 %119 to i8
  store i8 %120, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %121 = load i8, ptr %20, align 1, !tbaa !11, !range !40, !noundef !41
  %122 = trunc i8 %121 to i1
  %123 = zext i1 %122 to i64
  %124 = select i1 %122, ptr @.str.1521, ptr @.str.1522
  store ptr %124, ptr %21, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %52, i8 noundef zeroext 70)
          to label %125 unwind label %155

125:                                              ; preds = %118
  %126 = load i8, ptr %20, align 1, !tbaa !11, !range !40, !noundef !41
  %127 = trunc i8 %126 to i1
  %128 = zext i1 %127 to i64
  %129 = select i1 %127, i8 69, i8 68
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %52, i8 noundef zeroext %129)
          to label %130 unwind label %155

130:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #9
  %131 = load ptr, ptr %16, align 8, !tbaa !5
  %132 = load i32, ptr %9, align 4, !tbaa !9
  %133 = load ptr, ptr %52, align 8, !tbaa !194
  %134 = getelementptr inbounds ptr, ptr %133, i64 19
  %135 = load ptr, ptr %134, align 8
  invoke void %135(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(12482) %52, ptr noundef nonnull align 8 dereferenceable(336) %131, i32 noundef %132)
          to label %136 unwind label %159

136:                                              ; preds = %130
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SB_RA4_S1_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.948, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(4) @.str.1523)
          to label %137 unwind label %163

137:                                              ; preds = %136
  %138 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %11) #9
  store i32 1, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  br label %171

139:                                              ; preds = %72
  %140 = landingpad { ptr, i32 }
          cleanup
  %141 = extractvalue { ptr, i32 } %140, 0
  store ptr %141, ptr %12, align 8
  %142 = extractvalue { ptr, i32 } %140, 1
  store i32 %142, ptr %13, align 4
  br label %274

143:                                              ; preds = %266, %264, %257, %255, %210, %206, %202, %179, %175, %79, %75
  %144 = landingpad { ptr, i32 }
          cleanup
  %145 = extractvalue { ptr, i32 } %144, 0
  store ptr %145, ptr %12, align 8
  %146 = extractvalue { ptr, i32 } %144, 1
  store i32 %146, ptr %13, align 4
  br label %273

147:                                              ; preds = %94, %90, %87
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %12, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %13, align 4
  br label %174

151:                                              ; preds = %98
  %152 = landingpad { ptr, i32 }
          cleanup
  %153 = extractvalue { ptr, i32 } %152, 0
  store ptr %153, ptr %12, align 8
  %154 = extractvalue { ptr, i32 } %152, 1
  store i32 %154, ptr %13, align 4
  br label %169

155:                                              ; preds = %125, %118
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %12, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %13, align 4
  br label %168

159:                                              ; preds = %130
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %12, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %13, align 4
  br label %167

163:                                              ; preds = %136
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %12, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  br label %167

167:                                              ; preds = %163, %159
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #9
  br label %168

168:                                              ; preds = %167, %155
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  br label %169

169:                                              ; preds = %168, %151
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  br label %174

170:                                              ; preds = %97, %93
  store i32 0, ptr %24, align 4
  br label %171

171:                                              ; preds = %170, %137
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  %172 = load i32, ptr %24, align 4
  switch i32 %172, label %272 [
    i32 0, label %173
  ]

173:                                              ; preds = %171
  br label %175

174:                                              ; preds = %169, %147
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  br label %273

175:                                              ; preds = %173, %84, %81
  %176 = load ptr, ptr %8, align 8, !tbaa !5
  %177 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %52, ptr noundef nonnull align 8 dereferenceable(336) %176)
          to label %178 unwind label %143

178:                                              ; preds = %175
  br i1 %177, label %179, label %201

179:                                              ; preds = %178
  %180 = load ptr, ptr %16, align 8, !tbaa !5
  %181 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %52, ptr noundef nonnull align 8 dereferenceable(336) %180)
          to label %182 unwind label %143

182:                                              ; preds = %179
  br i1 %181, label %183, label %201

183:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #9
  %184 = load ptr, ptr %16, align 8, !tbaa !5
  %185 = load i32, ptr %9, align 4, !tbaa !9
  %186 = load ptr, ptr %52, align 8, !tbaa !194
  %187 = getelementptr inbounds ptr, ptr %186, i64 19
  %188 = load ptr, ptr %187, align 8
  invoke void %188(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(12482) %52, ptr noundef nonnull align 8 dereferenceable(336) %184, i32 noundef %185)
          to label %189 unwind label %192

189:                                              ; preds = %183
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.60)
          to label %190 unwind label %196

190:                                              ; preds = %189
  %191 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #9
  br label %250

192:                                              ; preds = %183
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %12, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %13, align 4
  br label %200

196:                                              ; preds = %189
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %12, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #9
  br label %200

200:                                              ; preds = %196, %192
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #9
  br label %273

201:                                              ; preds = %182, %178
  br label %202

202:                                              ; preds = %212, %201
  %203 = load ptr, ptr %16, align 8, !tbaa !5
  %204 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %52, ptr noundef nonnull align 8 dereferenceable(336) %203)
          to label %205 unwind label %143

205:                                              ; preds = %202
  br i1 %204, label %206, label %213

206:                                              ; preds = %205
  %207 = load ptr, ptr %16, align 8, !tbaa !5
  %208 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %207, i32 0, i32 16
  %209 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %208)
          to label %210 unwind label %143

210:                                              ; preds = %206
  %211 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 noundef %209)
          to label %212 unwind label %143

212:                                              ; preds = %210
  store ptr %211, ptr %16, align 8, !tbaa !5
  br label %202, !llvm.loop !196

213:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #9
  %214 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %52, i32 0, i32 74
  %215 = load i8, ptr %214, align 2, !tbaa !198, !range !40, !noundef !41
  %216 = trunc i8 %215 to i1
  %217 = zext i1 %216 to i8
  store i8 %217, ptr %27, align 1, !tbaa !11
  %218 = load ptr, ptr %8, align 8, !tbaa !5
  %219 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_physical_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %52, ptr noundef nonnull align 8 dereferenceable(336) %218)
          to label %220 unwind label %223

220:                                              ; preds = %213
  br i1 %219, label %221, label %227

221:                                              ; preds = %220
  %222 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %52, i32 0, i32 74
  store i8 0, ptr %222, align 2, !tbaa !198
  br label %227

223:                                              ; preds = %213
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %12, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %13, align 4
  br label %249

227:                                              ; preds = %221, %220
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #9
  %228 = load ptr, ptr %16, align 8, !tbaa !5
  %229 = load i32, ptr %9, align 4, !tbaa !9
  %230 = load ptr, ptr %52, align 8, !tbaa !194
  %231 = getelementptr inbounds ptr, ptr %230, i64 19
  %232 = load ptr, ptr %231, align 8
  invoke void %232(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(12482) %52, ptr noundef nonnull align 8 dereferenceable(336) %228, i32 noundef %229)
          to label %233 unwind label %240

233:                                              ; preds = %227
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %234 unwind label %244

234:                                              ; preds = %233
  %235 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %28) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #9
  %236 = load i8, ptr %27, align 1, !tbaa !11, !range !40, !noundef !41
  %237 = trunc i8 %236 to i1
  %238 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %52, i32 0, i32 74
  %239 = zext i1 %237 to i8
  store i8 %239, ptr %238, align 2, !tbaa !198
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #9
  br label %250

240:                                              ; preds = %227
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %12, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %13, align 4
  br label %248

244:                                              ; preds = %233
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %12, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  br label %248

248:                                              ; preds = %244, %240
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #9
  br label %249

249:                                              ; preds = %248, %223
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #9
  br label %273

250:                                              ; preds = %234, %190
  %251 = load ptr, ptr %8, align 8, !tbaa !5
  %252 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %251, i32 0, i32 2
  %253 = load i32, ptr %252, align 8, !tbaa !199
  switch i32 %253, label %255 [
    i32 16, label %254
    i32 17, label %254
    i32 18, label %254
  ]

254:                                              ; preds = %250, %250, %250
  br label %271

255:                                              ; preds = %250
  %256 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.960)
          to label %257 unwind label %143

257:                                              ; preds = %255
  %258 = load i32, ptr %9, align 4, !tbaa !9
  %259 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL11to_restrictEjb(ptr noundef nonnull align 8 dereferenceable(12482) %52, i32 noundef %258, i1 noundef zeroext false)
          to label %260 unwind label %143

260:                                              ; preds = %257
  store ptr %259, ptr %14, align 8, !tbaa !5
  %261 = load ptr, ptr %14, align 8, !tbaa !5
  %262 = load i8, ptr %261, align 1, !tbaa !200
  %263 = icmp ne i8 %262, 0
  br i1 %263, label %264, label %270

264:                                              ; preds = %260
  %265 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.60)
          to label %266 unwind label %143

266:                                              ; preds = %264
  %267 = load ptr, ptr %14, align 8, !tbaa !5
  %268 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef %267)
          to label %269 unwind label %143

269:                                              ; preds = %266
  br label %270

270:                                              ; preds = %269, %260
  br label %271

271:                                              ; preds = %270, %254
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %11) #9
  store i32 1, ptr %24, align 4
  br label %272

272:                                              ; preds = %271, %171
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  br label %663

273:                                              ; preds = %249, %200, %174, %143
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  br label %274

274:                                              ; preds = %273, %139
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  br label %664

275:                                              ; preds = %59
  %276 = load ptr, ptr %8, align 8, !tbaa !5
  %277 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %276, i32 0, i32 2
  %278 = load i32, ptr %277, align 8, !tbaa !199
  switch i32 %278, label %508 [
    i32 15, label %279
    i32 16, label %293
    i32 17, label %293
    i32 18, label %302
    i32 1, label %308
    i32 11, label %314
    i32 21, label %320
    i32 22, label %342
    i32 2, label %372
    i32 23, label %418
    i32 3, label %418
    i32 4, label %421
    i32 5, label %424
    i32 6, label %427
    i32 7, label %430
    i32 8, label %433
    i32 9, label %436
    i32 10, label %450
    i32 12, label %464
    i32 13, label %467
    i32 14, label %470
    i32 19, label %473
    i32 20, label %496
    i32 24, label %502
  ]

279:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #9
  %280 = load ptr, ptr %8, align 8, !tbaa !5
  %281 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %280, i32 0, i32 1
  %282 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %281)
          to label %283 unwind label %289

283:                                              ; preds = %279
  %284 = load ptr, ptr %52, align 8, !tbaa !194
  %285 = getelementptr inbounds ptr, ptr %284, i64 6
  %286 = load ptr, ptr %285, align 8
  invoke void %286(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(12482) %52, i32 noundef %282, i1 noundef zeroext true)
          to label %287 unwind label %289

287:                                              ; preds = %283
  %288 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  br label %514

289:                                              ; preds = %283, %279
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %12, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  br label %664

293:                                              ; preds = %275, %275
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = load i32, ptr %9, align 4, !tbaa !9
  %296 = load i8, ptr %10, align 1, !tbaa !11, !range !40, !noundef !41
  %297 = trunc i8 %296 to i1
  %298 = load ptr, ptr %52, align 8, !tbaa !194
  %299 = getelementptr inbounds ptr, ptr %298, i64 23
  %300 = load ptr, ptr %299, align 8
  invoke void %300(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(12482) %52, ptr noundef nonnull align 8 dereferenceable(336) %294, i32 noundef %295, i1 noundef zeroext %297)
          to label %301 unwind label %67

301:                                              ; preds = %293
  store i32 1, ptr %24, align 4
  br label %663

302:                                              ; preds = %275
  %303 = load ptr, ptr %8, align 8, !tbaa !5
  %304 = load i32, ptr %9, align 4, !tbaa !9
  %305 = load i8, ptr %10, align 1, !tbaa !11, !range !40, !noundef !41
  %306 = trunc i8 %305 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL12sampler_typeB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(12482) %52, ptr noundef nonnull align 8 dereferenceable(336) %303, i32 noundef %304, i1 noundef zeroext %306)
          to label %307 unwind label %67

307:                                              ; preds = %302
  store i32 1, ptr %24, align 4
  br label %663

308:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.910, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %309 unwind label %310

309:                                              ; preds = %308
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #9
  store i32 1, ptr %24, align 4
  br label %663

310:                                              ; preds = %308
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %12, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #9
  br label %664

314:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1524, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %315 unwind label %316

315:                                              ; preds = %314
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  store i32 1, ptr %24, align 4
  br label %663

316:                                              ; preds = %314
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %12, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  br label %664

320:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #9
  %321 = load ptr, ptr %8, align 8, !tbaa !5
  %322 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %321, i32 0, i32 16
  %323 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %322)
          to label %324 unwind label %333

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

326:                                              ; preds = %324
  %327 = load i32, ptr %9, align 4, !tbaa !9
  %328 = load ptr, ptr %52, align 8, !tbaa !194
  %329 = getelementptr inbounds ptr, ptr %328, i64 19
  %330 = load ptr, ptr %329, align 8
  invoke void %330(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(12482) %52, ptr noundef nonnull align 8 dereferenceable(336) %325, i32 noundef %327)
          to label %331 unwind label %333

331:                                              ; preds = %326
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(21) @.str.1525, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %332 unwind label %337

332:                                              ; preds = %331
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #9
  store i32 1, ptr %24, align 4
  br label %663

333:                                              ; preds = %326, %324, %320
  %334 = landingpad { ptr, i32 }
          cleanup
  %335 = extractvalue { ptr, i32 } %334, 0
  store ptr %335, ptr %12, align 8
  %336 = extractvalue { ptr, i32 } %334, 1
  store i32 %336, ptr %13, align 4
  br label %341

337:                                              ; preds = %331
  %338 = landingpad { ptr, i32 }
          cleanup
  %339 = extractvalue { ptr, i32 } %338, 0
  store ptr %339, ptr %12, align 8
  %340 = extractvalue { ptr, i32 } %338, 1
  store i32 %340, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  br label %341

341:                                              ; preds = %337, %333
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #9
  br label %664

342:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #9
  %343 = load ptr, ptr %8, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %343, i32 0, i32 16
  %345 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %344)
          to label %346 unwind label %363

346:                                              ; preds = %342
  %347 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 noundef %345)
          to label %348 unwind label %363

348:                                              ; preds = %346
  %349 = load i32, ptr %9, align 4, !tbaa !9
  %350 = load ptr, ptr %52, align 8, !tbaa !194
  %351 = getelementptr inbounds ptr, ptr %350, i64 19
  %352 = load ptr, ptr %351, align 8
  invoke void %352(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(12482) %52, ptr noundef nonnull align 8 dereferenceable(336) %347, i32 noundef %349)
          to label %353 unwind label %363

353:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %354 = load ptr, ptr %8, align 8, !tbaa !5
  %355 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %354, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 8 %355, i64 4, i1 false), !tbaa.struct !42
  %356 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %36, i32 0, i32 0
  %357 = load i32, ptr %356, align 4
  %358 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 %357, i32 noundef 13)
          to label %359 unwind label %367

359:                                              ; preds = %353
  %360 = zext i1 %358 to i64
  %361 = select i1 %358, ptr @.str.1528, ptr @.str.1529
  store ptr %361, ptr %35, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_S1_PS1_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(13) @.str.1526, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(18) @.str.1527, ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %362 unwind label %367

362:                                              ; preds = %359
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #9
  store i32 1, ptr %24, align 4
  br label %663

363:                                              ; preds = %348, %346, %342
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %12, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %13, align 4
  br label %371

367:                                              ; preds = %359, %353
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %12, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #9
  br label %371

371:                                              ; preds = %367, %363
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #9
  br label %664

372:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %373 = load i32, ptr %9, align 4, !tbaa !9
  %374 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 noundef %373)
          to label %375 unwind label %391

375:                                              ; preds = %372
  store ptr %374, ptr %37, align 8, !tbaa !5
  %376 = load ptr, ptr %37, align 8, !tbaa !5
  %377 = icmp ne ptr %376, null
  br i1 %377, label %378, label %395

378:                                              ; preds = %375
  %379 = load ptr, ptr %37, align 8, !tbaa !5
  %380 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %379, i32 0, i32 5
  %381 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %380)
          to label %382 unwind label %391

382:                                              ; preds = %378
  %383 = icmp ne i32 %381, 0
  br i1 %383, label %384, label %395

384:                                              ; preds = %382
  %385 = load ptr, ptr %37, align 8, !tbaa !5
  %386 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %385, i32 0, i32 5
  %387 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %386)
          to label %388 unwind label %391

388:                                              ; preds = %384
  %389 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 noundef %387)
          to label %390 unwind label %391

390:                                              ; preds = %388
  store ptr %389, ptr %37, align 8, !tbaa !5
  br label %395

391:                                              ; preds = %414, %411, %388, %384, %378, %372
  %392 = landingpad { ptr, i32 }
          cleanup
  %393 = extractvalue { ptr, i32 } %392, 0
  store ptr %393, ptr %12, align 8
  %394 = extractvalue { ptr, i32 } %392, 1
  store i32 %394, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br label %664

395:                                              ; preds = %390, %382, %375
  %396 = load ptr, ptr %37, align 8, !tbaa !5
  %397 = icmp ne ptr %396, null
  br i1 %397, label %398, label %403

398:                                              ; preds = %395
  %399 = load ptr, ptr %37, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %399, i32 0, i32 2
  %401 = load i32, ptr %400, align 8, !tbaa !43
  %402 = icmp eq i32 %401, 4
  br i1 %402, label %411, label %403

403:                                              ; preds = %398, %395
  %404 = load ptr, ptr %8, align 8, !tbaa !5
  %405 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %404, i32 0, i32 11
  %406 = load i32, ptr %405, align 8, !tbaa !201
  %407 = icmp eq i32 %406, 4
  br i1 %407, label %411, label %408

408:                                              ; preds = %403
  %409 = load i8, ptr %10, align 1, !tbaa !11, !range !40, !noundef !41
  %410 = trunc i8 %409 to i1
  br i1 %410, label %411, label %414

411:                                              ; preds = %408, %403, %398
  %412 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.100)
          to label %413 unwind label %391

413:                                              ; preds = %411
  br label %417

414:                                              ; preds = %408
  %415 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.1530)
          to label %416 unwind label %391

416:                                              ; preds = %414
  br label %417

417:                                              ; preds = %416, %413
  store i32 5, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br label %514

418:                                              ; preds = %275, %275
  %419 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.98)
          to label %420 unwind label %67

420:                                              ; preds = %418
  br label %514

421:                                              ; preds = %275
  %422 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.99)
          to label %423 unwind label %67

423:                                              ; preds = %421
  br label %514

424:                                              ; preds = %275
  %425 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.100)
          to label %426 unwind label %67

426:                                              ; preds = %424
  br label %514

427:                                              ; preds = %275
  %428 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.101)
          to label %429 unwind label %67

429:                                              ; preds = %427
  br label %514

430:                                              ; preds = %275
  %431 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.96)
          to label %432 unwind label %67

432:                                              ; preds = %430
  br label %514

433:                                              ; preds = %275
  %434 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.97)
          to label %435 unwind label %67

435:                                              ; preds = %433
  br label %514

436:                                              ; preds = %275
  %437 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %52, i32 0, i32 37
  %438 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %437, i32 noundef 2, i32 noundef 2, i32 noundef 0)
          to label %439 unwind label %67

439:                                              ; preds = %436
  br i1 %438, label %447, label %440

440:                                              ; preds = %439
  %441 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %441, ptr noundef @.str.1531)
          to label %442 unwind label %443

442:                                              ; preds = %440
  invoke void @__cxa_throw(ptr %441, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %670 unwind label %67

443:                                              ; preds = %440
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %12, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %13, align 4
  call void @__cxa_free_exception(ptr %441) #9
  br label %664

447:                                              ; preds = %439
  %448 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.1532)
          to label %449 unwind label %67

449:                                              ; preds = %447
  br label %514

450:                                              ; preds = %275
  %451 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %52, i32 0, i32 37
  %452 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %451, i32 noundef 2, i32 noundef 2, i32 noundef 0)
          to label %453 unwind label %67

453:                                              ; preds = %450
  br i1 %452, label %461, label %454

454:                                              ; preds = %453
  %455 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %455, ptr noundef @.str.1531)
          to label %456 unwind label %457

456:                                              ; preds = %454
  invoke void @__cxa_throw(ptr %455, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %670 unwind label %67

457:                                              ; preds = %454
  %458 = landingpad { ptr, i32 }
          cleanup
  %459 = extractvalue { ptr, i32 } %458, 0
  store ptr %459, ptr %12, align 8
  %460 = extractvalue { ptr, i32 } %458, 1
  store i32 %460, ptr %13, align 4
  call void @__cxa_free_exception(ptr %455) #9
  br label %664

461:                                              ; preds = %453
  %462 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.1533)
          to label %463 unwind label %67

463:                                              ; preds = %461
  br label %514

464:                                              ; preds = %275
  %465 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.167)
          to label %466 unwind label %67

466:                                              ; preds = %464
  br label %514

467:                                              ; preds = %275
  %468 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.168)
          to label %469 unwind label %67

469:                                              ; preds = %467
  br label %514

470:                                              ; preds = %275
  %471 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.1534)
          to label %472 unwind label %67

472:                                              ; preds = %470
  br label %514

473:                                              ; preds = %275
  %474 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %52, i32 0, i32 37
  %475 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %474, i32 noundef 2, i32 noundef 4, i32 noundef 0)
          to label %476 unwind label %67

476:                                              ; preds = %473
  br i1 %475, label %477, label %480

477:                                              ; preds = %476
  %478 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.1535)
          to label %479 unwind label %67

479:                                              ; preds = %477
  br label %495

480:                                              ; preds = %476
  %481 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %52, i32 0, i32 37
  %482 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %481, i32 noundef 2, i32 noundef 3, i32 noundef 0)
          to label %483 unwind label %67

483:                                              ; preds = %480
  br i1 %482, label %484, label %487

484:                                              ; preds = %483
  %485 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.1536)
          to label %486 unwind label %67

486:                                              ; preds = %484
  br label %494

487:                                              ; preds = %483
  %488 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %488, ptr noundef @.str.1537)
          to label %489 unwind label %490

489:                                              ; preds = %487
  invoke void @__cxa_throw(ptr %488, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %670 unwind label %67

490:                                              ; preds = %487
  %491 = landingpad { ptr, i32 }
          cleanup
  %492 = extractvalue { ptr, i32 } %491, 0
  store ptr %492, ptr %12, align 8
  %493 = extractvalue { ptr, i32 } %491, 1
  store i32 %493, ptr %13, align 4
  call void @__cxa_free_exception(ptr %488) #9
  br label %664

494:                                              ; preds = %486
  br label %495

495:                                              ; preds = %494, %479
  br label %514

496:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1538, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %497 unwind label %498

497:                                              ; preds = %496
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  store i32 1, ptr %24, align 4
  br label %663

498:                                              ; preds = %496
  %499 = landingpad { ptr, i32 }
          cleanup
  %500 = extractvalue { ptr, i32 } %499, 0
  store ptr %500, ptr %12, align 8
  %501 = extractvalue { ptr, i32 } %499, 1
  store i32 %501, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  br label %664

502:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1539, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %503 unwind label %504

503:                                              ; preds = %502
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #9
  store i32 1, ptr %24, align 4
  br label %663

504:                                              ; preds = %502
  %505 = landingpad { ptr, i32 }
          cleanup
  %506 = extractvalue { ptr, i32 } %505, 0
  store ptr %506, ptr %12, align 8
  %507 = extractvalue { ptr, i32 } %505, 1
  store i32 %507, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #9
  br label %664

508:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1540, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %509 unwind label %510

509:                                              ; preds = %508
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #9
  store i32 1, ptr %24, align 4
  br label %663

510:                                              ; preds = %508
  %511 = landingpad { ptr, i32 }
          cleanup
  %512 = extractvalue { ptr, i32 } %511, 0
  store ptr %512, ptr %12, align 8
  %513 = extractvalue { ptr, i32 } %511, 1
  store i32 %513, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #9
  br label %664

514:                                              ; preds = %495, %472, %469, %466, %463, %449, %435, %432, %429, %426, %423, %420, %417, %287
  %515 = load ptr, ptr %8, align 8, !tbaa !5
  %516 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %515, i32 0, i32 5
  %517 = load i32, ptr %516, align 4, !tbaa !202
  %518 = icmp ugt i32 %517, 1
  br i1 %518, label %519, label %584

519:                                              ; preds = %514
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %520 = load i32, ptr %9, align 4, !tbaa !9
  %521 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 noundef %520)
          to label %522 unwind label %538

522:                                              ; preds = %519
  store ptr %521, ptr %41, align 8, !tbaa !5
  %523 = load ptr, ptr %41, align 8, !tbaa !5
  %524 = icmp ne ptr %523, null
  br i1 %524, label %525, label %542

525:                                              ; preds = %522
  %526 = load ptr, ptr %41, align 8, !tbaa !5
  %527 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %526, i32 0, i32 5
  %528 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %527)
          to label %529 unwind label %538

529:                                              ; preds = %525
  %530 = icmp ne i32 %528, 0
  br i1 %530, label %531, label %542

531:                                              ; preds = %529
  %532 = load ptr, ptr %41, align 8, !tbaa !5
  %533 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %532, i32 0, i32 5
  %534 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %533)
          to label %535 unwind label %538

535:                                              ; preds = %531
  %536 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %52, i32 noundef %534)
          to label %537 unwind label %538

537:                                              ; preds = %535
  store ptr %536, ptr %41, align 8, !tbaa !5
  br label %542

538:                                              ; preds = %559, %555, %535, %531, %525, %519
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %12, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %13, align 4
  br label %583

542:                                              ; preds = %537, %529, %522
  %543 = load ptr, ptr %41, align 8, !tbaa !5
  %544 = icmp ne ptr %543, null
  br i1 %544, label %545, label %550

545:                                              ; preds = %542
  %546 = load ptr, ptr %41, align 8, !tbaa !5
  %547 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %546, i32 0, i32 2
  %548 = load i32, ptr %547, align 8, !tbaa !43
  %549 = icmp eq i32 %548, 4
  br i1 %549, label %555, label %550

550:                                              ; preds = %545, %542
  %551 = load ptr, ptr %8, align 8, !tbaa !5
  %552 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %551, i32 0, i32 11
  %553 = load i32, ptr %552, align 8, !tbaa !201
  %554 = icmp eq i32 %553, 4
  br i1 %554, label %555, label %567

555:                                              ; preds = %550, %545
  %556 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %52, i32 0, i32 37
  %557 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %556, i32 noundef 3, i32 noundef 0, i32 noundef 0)
          to label %558 unwind label %538

558:                                              ; preds = %555
  br i1 %557, label %567, label %559

559:                                              ; preds = %558
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %52, i8 noundef zeroext 19)
          to label %560 unwind label %538

560:                                              ; preds = %559
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef @.str.1306, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %561 unwind label %563

561:                                              ; preds = %560
  %562 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  br label %567

563:                                              ; preds = %560
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %12, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  br label %583

567:                                              ; preds = %561, %558, %550
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #9
  %568 = load ptr, ptr %8, align 8, !tbaa !5
  %569 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %568, i32 0, i32 5
  %570 = load i32, ptr %569, align 4, !tbaa !202
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, i32 noundef %570) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef @.str.169)
          to label %571 unwind label %574

571:                                              ; preds = %567
  %572 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %573 unwind label %578

573:                                              ; preds = %571
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  br label %584

574:                                              ; preds = %567
  %575 = landingpad { ptr, i32 }
          cleanup
  %576 = extractvalue { ptr, i32 } %575, 0
  store ptr %576, ptr %12, align 8
  %577 = extractvalue { ptr, i32 } %575, 1
  store i32 %577, ptr %13, align 4
  br label %582

578:                                              ; preds = %571
  %579 = landingpad { ptr, i32 }
          cleanup
  %580 = extractvalue { ptr, i32 } %579, 0
  store ptr %580, ptr %12, align 8
  %581 = extractvalue { ptr, i32 } %579, 1
  store i32 %581, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  br label %582

582:                                              ; preds = %578, %574
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #9
  br label %583

583:                                              ; preds = %582, %563, %538
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  br label %664

584:                                              ; preds = %573, %514
  %585 = load ptr, ptr %8, align 8, !tbaa !5
  %586 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %585, i32 0, i32 4
  %587 = load i32, ptr %586, align 8, !tbaa !203
  %588 = icmp ugt i32 %587, 1
  br i1 %588, label %589, label %599

589:                                              ; preds = %584
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #9
  %590 = load ptr, ptr %8, align 8, !tbaa !5
  %591 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %590, i32 0, i32 4
  %592 = load i32, ptr %591, align 8, !tbaa !203
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, i32 noundef %592) #9
  %593 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %594 unwind label %595

594:                                              ; preds = %589
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #9
  br label %599

595:                                              ; preds = %589
  %596 = landingpad { ptr, i32 }
          cleanup
  %597 = extractvalue { ptr, i32 } %596, 0
  store ptr %597, ptr %12, align 8
  %598 = extractvalue { ptr, i32 } %596, 1
  store i32 %598, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #9
  br label %664

599:                                              ; preds = %594, %584
  %600 = load ptr, ptr %8, align 8, !tbaa !5
  %601 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %600, i32 0, i32 6
  %602 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %601) #9
  br i1 %602, label %606, label %603

603:                                              ; preds = %599
  %604 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL19using_builtin_arrayEv(ptr noundef nonnull align 8 dereferenceable(12482) %52)
          to label %605 unwind label %67

605:                                              ; preds = %603
  br i1 %604, label %606, label %607

606:                                              ; preds = %605, %599
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %11) #9
  store i32 1, ptr %24, align 4
  br label %663

607:                                              ; preds = %605
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %52, i8 noundef zeroext 18)
          to label %608 unwind label %67

608:                                              ; preds = %607
  store i1 false, ptr %46, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %609

609:                                              ; preds = %629, %608
  %610 = load i32, ptr %48, align 4, !tbaa !9
  %611 = load ptr, ptr %8, align 8, !tbaa !5
  %612 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %611, i32 0, i32 6
  %613 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %612) #9
  %614 = trunc i64 %613 to i32
  %615 = icmp ult i32 %610, %614
  br i1 %615, label %617, label %616

616:                                              ; preds = %609
  store i32 6, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %646

617:                                              ; preds = %609
  %618 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1541)
          to label %619 unwind label %632

619:                                              ; preds = %617
  %620 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef @.str.55)
          to label %621 unwind label %632

621:                                              ; preds = %619
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #9
  %622 = load ptr, ptr %8, align 8, !tbaa !5
  %623 = load i32, ptr %48, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_array_sizeB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(9848) %52, ptr noundef nonnull align 8 dereferenceable(336) %622, i32 noundef %623)
          to label %624 unwind label %636

624:                                              ; preds = %621
  %625 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %626 unwind label %640

626:                                              ; preds = %624
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #9
  %627 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef @.str.290)
          to label %628 unwind label %632

628:                                              ; preds = %626
  br label %629

629:                                              ; preds = %628
  %630 = load i32, ptr %48, align 4, !tbaa !9
  %631 = add i32 %630, 1
  store i32 %631, ptr %48, align 4, !tbaa !9
  br label %609, !llvm.loop !204

632:                                              ; preds = %626, %619, %617
  %633 = landingpad { ptr, i32 }
          cleanup
  %634 = extractvalue { ptr, i32 } %633, 0
  store ptr %634, ptr %12, align 8
  %635 = extractvalue { ptr, i32 } %633, 1
  store i32 %635, ptr %13, align 4
  br label %645

636:                                              ; preds = %621
  %637 = landingpad { ptr, i32 }
          cleanup
  %638 = extractvalue { ptr, i32 } %637, 0
  store ptr %638, ptr %12, align 8
  %639 = extractvalue { ptr, i32 } %637, 1
  store i32 %639, ptr %13, align 4
  br label %644

640:                                              ; preds = %624
  %641 = landingpad { ptr, i32 }
          cleanup
  %642 = extractvalue { ptr, i32 } %641, 0
  store ptr %642, ptr %12, align 8
  %643 = extractvalue { ptr, i32 } %641, 1
  store i32 %643, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  br label %644

644:                                              ; preds = %640, %636
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #9
  br label %645

645:                                              ; preds = %644, %632
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %660

646:                                              ; preds = %616
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_SA_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %647 unwind label %651

647:                                              ; preds = %646
  %648 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %649 unwind label %655

649:                                              ; preds = %647
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #9
  store i1 true, ptr %46, align 1
  store i32 1, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #9
  %650 = load i1, ptr %46, align 1
  br i1 %650, label %662, label %661

651:                                              ; preds = %646
  %652 = landingpad { ptr, i32 }
          cleanup
  %653 = extractvalue { ptr, i32 } %652, 0
  store ptr %653, ptr %12, align 8
  %654 = extractvalue { ptr, i32 } %652, 1
  store i32 %654, ptr %13, align 4
  br label %659

655:                                              ; preds = %647
  %656 = landingpad { ptr, i32 }
          cleanup
  %657 = extractvalue { ptr, i32 } %656, 0
  store ptr %657, ptr %12, align 8
  %658 = extractvalue { ptr, i32 } %656, 1
  store i32 %658, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #9
  br label %659

659:                                              ; preds = %655, %651
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #9
  br label %660

660:                                              ; preds = %659, %645
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  br label %664

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

662:                                              ; preds = %661, %649
  br label %663

663:                                              ; preds = %662, %606, %509, %503, %497, %362, %332, %315, %309, %307, %301, %272
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #9
  ret void

664:                                              ; preds = %660, %595, %583, %510, %504, %498, %490, %457, %443, %391, %371, %341, %316, %310, %289, %274, %67
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #9
  br label %665

665:                                              ; preds = %664
  %666 = load ptr, ptr %12, align 8
  %667 = load i32, ptr %13, align 4
  %668 = insertvalue { ptr, i32 } poison, ptr %666, 0
  %669 = insertvalue { ptr, i32 } %668, i32 %667, 1
  resume { ptr, i32 } %669

670:                                              ; preds = %489, %456, %442
  unreachable
}

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

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

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

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

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

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

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

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

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

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


; 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.std::allocator.71" = type { i8 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.167 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.168 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.169 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.290 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.910 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.948 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1306 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1520 = external hidden unnamed_addr constant [23 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb = external hidden unnamed_addr constant [80 x i8], align 1
@.str.1521 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1522 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1523 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1524 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1525 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1526 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1527 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1528 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1529 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1530 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1531 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.1532 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1533 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1534 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1535 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.1536 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.1537 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.1538 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.1539 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1540 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1541 = external hidden unnamed_addr constant [16 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

declare noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_runtime_size_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3, i1 noundef zeroext %4) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca ptr, 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::allocator.71", align 1
  %17 = alloca %"class.std::allocator.71", align 1
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"class.std::allocator.71", align 1
  %22 = alloca %"class.std::allocator.71", align 1
  %23 = alloca %"class.std::allocator.71", align 1
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  %31 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2)
          to label %32 unwind label %40

32:                                               ; preds = %5
  br i1 %31, label %36, label %33

33:                                               ; preds = %32
  %34 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler25type_is_array_of_pointersERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2)
          to label %35 unwind label %40

35:                                               ; preds = %33
  br i1 %34, label %36, label %155

36:                                               ; preds = %35, %32
  %37 = getelementptr inbounds i8, ptr %2, i64 120
  %38 = load i32, ptr %37, align 8, !tbaa !5
  %.not122 = icmp eq i32 %38, 0
  br i1 %.not122, label %39, label %42

39:                                               ; preds = %36
  call void @__assert_fail(ptr noundef nonnull @.str.1520, ptr noundef nonnull @.str.25, i32 noundef 15834, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEjb) #9
  unreachable

40:                                               ; preds = %.invoke162, %.invoke, %340, %172, %168, %33, %5
  %41 = landingpad { ptr, i32 }
          cleanup
  br label %374

42:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #8
  invoke void @_ZN11spirv_cross11CompilerMSL22get_type_address_spaceB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3, i1 noundef zeroext false)
          to label %43 unwind label %79

43:                                               ; preds = %42
  %44 = getelementptr inbounds i8, ptr %2, i64 276
  %45 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  %46 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %45)
          to label %47 unwind label %.loopexit.split-lp

47:                                               ; preds = %43
  %48 = icmp ne i32 %3, 0
  %or.cond = and i1 %48, %4
  br i1 %or.cond, label %49, label %93

49:                                               ; preds = %47
  %50 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %3)
          to label %51 unwind label %81

51:                                               ; preds = %49
  %52 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25is_var_runtime_size_arrayERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(176) %50)
          to label %53 unwind label %81

53:                                               ; preds = %51
  br i1 %52, label %54, label %93

54:                                               ; preds = %53
  %55 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_runtime_size_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %46)
          to label %56 unwind label %81

56:                                               ; preds = %54
  br i1 %55, label %57, label %93

57:                                               ; preds = %56
  %58 = getelementptr inbounds i8, ptr %46, i64 8
  %.sroa.018.0.copyload = load i32, ptr %58, align 8, !tbaa !37
  %59 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.018.0.copyload, i32 noundef 3)
          to label %60 unwind label %83

60:                                               ; preds = %57
  %61 = getelementptr inbounds i8, ptr %50, i64 16
  %62 = load i32, ptr %61, align 8, !tbaa !38
  %63 = icmp eq i32 %62, 12
  %brmerge = or i1 %59, %63
  br i1 %brmerge, label %64, label %.thread

.thread:                                          ; preds = %60
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  br label %69

64:                                               ; preds = %60
  %65 = getelementptr inbounds i8, ptr %1, i64 10136
  %66 = load i8, ptr %65, align 8, !tbaa !45, !range !189, !noundef !190
  %67 = trunc nuw i8 %66 to i1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %spec.select = select i1 %67, ptr @.str.1521, ptr @.str.1522
  %68 = select i1 %67, i8 69, i8 68
  br label %69

69:                                               ; preds = %64, %.thread
  %70 = phi i8 [ 68, %.thread ], [ %68, %64 ]
  %71 = phi ptr [ @.str.1522, %.thread ], [ %spec.select, %64 ]
  store ptr %71, ptr %8, align 8, !tbaa !191
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i8 noundef zeroext 70)
          to label %72 unwind label %85

72:                                               ; preds = %69
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i8 noundef zeroext %70)
          to label %73 unwind label %85

73:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #8
  %74 = load ptr, ptr %1, align 8, !tbaa !192
  %75 = getelementptr inbounds i8, ptr %74, i64 152
  %76 = load ptr, ptr %75, align 8
  invoke void %76(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %46, i32 noundef %3)
          to label %77 unwind label %87

77:                                               ; preds = %73
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SB_RA4_S1_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 1 dereferenceable(2) @.str.948, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(4) @.str.1523)
          to label %.critedge unwind label %89

.critedge:                                        ; preds = %77
  %78 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %152

79:                                               ; preds = %42
  %80 = landingpad { ptr, i32 }
          cleanup
  br label %154

.loopexit:                                        ; preds = %111, %114
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %153

.loopexit.split-lp:                               ; preds = %43, %93, %96, %141, %143, %147, %149
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %153

81:                                               ; preds = %54, %51, %49
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %153

83:                                               ; preds = %57
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %153

85:                                               ; preds = %72, %69
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %92

87:                                               ; preds = %73
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %91

89:                                               ; preds = %77
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  br label %91

91:                                               ; preds = %89, %87
  %.pn123 = phi { ptr, i32 } [ %90, %89 ], [ %88, %87 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  br label %92

92:                                               ; preds = %91, %85
  %.pn123.pn = phi { ptr, i32 } [ %.pn123, %91 ], [ %86, %85 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %153

93:                                               ; preds = %56, %53, %47
  %94 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2)
          to label %95 unwind label %.loopexit.split-lp

95:                                               ; preds = %93
  br i1 %94, label %96, label %.preheader

.preheader:                                       ; preds = %98, %95
  br label %111

96:                                               ; preds = %95
  %97 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %46)
          to label %98 unwind label %.loopexit.split-lp

98:                                               ; preds = %96
  br i1 %97, label %99, label %.preheader

99:                                               ; preds = %98
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #8
  %100 = load ptr, ptr %1, align 8, !tbaa !192
  %101 = getelementptr inbounds i8, ptr %100, i64 152
  %102 = load ptr, ptr %101, align 8
  invoke void %102(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %46, i32 noundef %3)
          to label %103 unwind label %106

103:                                              ; preds = %99
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_S9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(2) @.str.60)
          to label %104 unwind label %108

104:                                              ; preds = %103
  %105 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  br label %138

106:                                              ; preds = %99
  %107 = landingpad { ptr, i32 }
          cleanup
  br label %110

108:                                              ; preds = %103
  %109 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  br label %110

110:                                              ; preds = %108, %106
  %.pn131 = phi { ptr, i32 } [ %109, %108 ], [ %107, %106 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  br label %153

111:                                              ; preds = %.preheader, %114
  %.098 = phi ptr [ %117, %114 ], [ %46, %.preheader ]
  %112 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %.098)
          to label %113 unwind label %.loopexit

113:                                              ; preds = %111
  br i1 %112, label %114, label %118

114:                                              ; preds = %113
  %115 = getelementptr inbounds i8, ptr %.098, i64 276
  %116 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %115)
  %117 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %116)
          to label %111 unwind label %.loopexit, !llvm.loop !194

118:                                              ; preds = %113
  %119 = getelementptr inbounds i8, ptr %1, i64 11186
  %120 = load i8, ptr %119, align 2, !tbaa !196, !range !189, !noundef !190
  %121 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_physical_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2)
          to label %122 unwind label %124

122:                                              ; preds = %118
  br i1 %121, label %123, label %126

123:                                              ; preds = %122
  store i8 0, ptr %119, align 2, !tbaa !196
  br label %126

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

126:                                              ; preds = %123, %122
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #8
  %127 = load ptr, ptr %1, align 8, !tbaa !192
  %128 = getelementptr inbounds i8, ptr %127, i64 152
  %129 = load ptr, ptr %128, align 8
  invoke void %129(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %.098, i32 noundef %3)
          to label %130 unwind label %133

130:                                              ; preds = %126
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %131 unwind label %135

131:                                              ; preds = %130
  %132 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  store i8 %120, ptr %119, align 2, !tbaa !196
  br label %138

133:                                              ; preds = %126
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %137

135:                                              ; preds = %130
  %136 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  br label %137

137:                                              ; preds = %135, %133
  %.pn128 = phi { ptr, i32 } [ %136, %135 ], [ %134, %133 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  br label %153

138:                                              ; preds = %131, %104
  %139 = getelementptr inbounds i8, ptr %2, i64 16
  %140 = load i32, ptr %139, align 8, !tbaa !197
  %.off = add i32 %140, -16
  %switch = icmp ult i32 %.off, 3
  br i1 %switch, label %151, label %141

141:                                              ; preds = %138
  %142 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.960)
          to label %143 unwind label %.loopexit.split-lp

143:                                              ; preds = %141
  %144 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL11to_restrictEjb(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %3, i1 noundef zeroext false)
          to label %145 unwind label %.loopexit.split-lp

145:                                              ; preds = %143
  %146 = load i8, ptr %144, align 1, !tbaa !198
  %.not133 = icmp eq i8 %146, 0
  br i1 %.not133, label %151, label %147

147:                                              ; preds = %145
  %148 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.60)
          to label %149 unwind label %.loopexit.split-lp

149:                                              ; preds = %147
  %150 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull %144)
          to label %151 unwind label %.loopexit.split-lp

151:                                              ; preds = %138, %145, %149
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  br label %152

152:                                              ; preds = %.critedge, %151
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  br label %373

153:                                              ; preds = %.loopexit, %.loopexit.split-lp, %124, %137, %81, %92, %83, %110
  %.pn134 = phi { ptr, i32 } [ %.pn131, %110 ], [ %82, %81 ], [ %.pn123.pn, %92 ], [ %84, %83 ], [ %.pn128, %137 ], [ %125, %124 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  br label %154

154:                                              ; preds = %153, %79
  %.pn134.pn = phi { ptr, i32 } [ %.pn134, %153 ], [ %80, %79 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  br label %374

155:                                              ; preds = %35
  %156 = getelementptr inbounds i8, ptr %2, i64 16
  %157 = load i32, ptr %156, align 8, !tbaa !197
  switch i32 %157, label %279 [
    i32 15, label %158
    i32 16, label %168
    i32 17, label %168
    i32 18, label %172
    i32 1, label %173
    i32 11, label %177
    i32 21, label %181
    i32 22, label %196
    i32 2, label %215
    i32 23, label %.invoke162
    i32 3, label %.invoke162
    i32 4, label %237
    i32 5, label %238
    i32 6, label %239
    i32 7, label %240
    i32 8, label %241
    i32 9, label %242
    i32 10, label %249
    i32 12, label %256
    i32 13, label %257
    i32 14, label %258
    i32 19, label %259
    i32 20, label %271
    i32 24, label %275
  ]

158:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #8
  %159 = getelementptr inbounds i8, ptr %2, i64 8
  %160 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %159)
  %161 = load ptr, ptr %1, align 8, !tbaa !192
  %162 = getelementptr inbounds i8, ptr %161, i64 48
  %163 = load ptr, ptr %162, align 8
  invoke void %163(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %160, i1 noundef zeroext true)
          to label %164 unwind label %166

164:                                              ; preds = %158
  %165 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #8
  br label %283

166:                                              ; preds = %158
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #8
  br label %374

168:                                              ; preds = %155, %155
  %169 = load ptr, ptr %1, align 8, !tbaa !192
  %170 = getelementptr inbounds i8, ptr %169, i64 184
  %171 = load ptr, ptr %170, align 8
  invoke void %171(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3, i1 noundef zeroext %4)
          to label %373 unwind label %40

172:                                              ; preds = %155
  invoke void @_ZN11spirv_cross11CompilerMSL12sampler_typeB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3, i1 noundef zeroext %4)
          to label %373 unwind label %40

173:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.910, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %174 unwind label %175

174:                                              ; preds = %173
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #8
  br label %373

175:                                              ; preds = %173
  %176 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #8
  br label %374

177:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1524, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %178 unwind label %179

178:                                              ; preds = %177
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #8
  br label %373

179:                                              ; preds = %177
  %180 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #8
  br label %374

181:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #8
  %182 = getelementptr inbounds i8, ptr %2, i64 276
  %183 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %182)
  %184 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %183)
          to label %185 unwind label %191

185:                                              ; preds = %181
  %186 = load ptr, ptr %1, align 8, !tbaa !192
  %187 = getelementptr inbounds i8, ptr %186, i64 152
  %188 = load ptr, ptr %187, align 8
  invoke void %188(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %184, i32 noundef %3)
          to label %189 unwind label %191

189:                                              ; preds = %185
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(21) @.str.1525, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %190 unwind label %193

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

191:                                              ; preds = %185, %181
  %192 = landingpad { ptr, i32 }
          cleanup
  br label %195

193:                                              ; preds = %189
  %194 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  br label %195

195:                                              ; preds = %193, %191
  %.pn107 = phi { ptr, i32 } [ %194, %193 ], [ %192, %191 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  br label %374

196:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #8
  %197 = getelementptr inbounds i8, ptr %2, i64 276
  %198 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %197)
  %199 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %198)
          to label %200 unwind label %210

200:                                              ; preds = %196
  %201 = load ptr, ptr %1, align 8, !tbaa !192
  %202 = getelementptr inbounds i8, ptr %201, i64 152
  %203 = load ptr, ptr %202, align 8
  invoke void %203(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %199, i32 noundef %3)
          to label %204 unwind label %210

204:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  %205 = getelementptr inbounds i8, ptr %2, i64 8
  %.sroa.0.0.copyload = load i32, ptr %205, align 8, !tbaa !37
  %206 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.0.0.copyload, i32 noundef 13)
          to label %207 unwind label %212

207:                                              ; preds = %204
  %208 = select i1 %206, ptr @.str.1528, ptr @.str.1529
  store ptr %208, ptr %20, align 8, !tbaa !191
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_S1_PS1_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(13) @.str.1526, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(18) @.str.1527, ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %209 unwind label %212

209:                                              ; preds = %207
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  br label %373

210:                                              ; preds = %200, %196
  %211 = landingpad { ptr, i32 }
          cleanup
  br label %214

212:                                              ; preds = %207, %204
  %213 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  br label %214

214:                                              ; preds = %212, %210
  %.pn = phi { ptr, i32 } [ %213, %212 ], [ %211, %210 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  br label %374

215:                                              ; preds = %155
  %216 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %3)
          to label %217 unwind label %224

217:                                              ; preds = %215
  %.not = icmp eq ptr %216, null
  br i1 %.not, label %233, label %218

218:                                              ; preds = %217
  %219 = getelementptr inbounds i8, ptr %216, i64 28
  %220 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %219)
  %.not104 = icmp eq i32 %220, 0
  br i1 %.not104, label %226, label %221

221:                                              ; preds = %218
  %222 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %219)
  %223 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %222)
          to label %226 unwind label %224

224:                                              ; preds = %.invoke163, %221, %215
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %374

226:                                              ; preds = %218, %221
  %.077.ph = phi ptr [ %223, %221 ], [ %216, %218 ]
  %227 = getelementptr inbounds i8, ptr %.077.ph, i64 16
  %228 = load i32, ptr %227, align 8, !tbaa !38
  %229 = icmp eq i32 %228, 4
  %230 = getelementptr inbounds i8, ptr %2, i64 128
  %231 = load i32, ptr %230, align 8
  %232 = icmp eq i32 %231, 4
  %or.cond140 = select i1 %229, i1 true, i1 %232
  %brmerge141 = or i1 %or.cond140, %4
  br i1 %brmerge141, label %.invoke163, label %234

233:                                              ; preds = %217
  %.old = getelementptr inbounds i8, ptr %2, i64 128
  %.old138 = load i32, ptr %.old, align 8, !tbaa !199
  %.old139 = icmp eq i32 %.old138, 4
  %brmerge142 = or i1 %.old139, %4
  br i1 %brmerge142, label %.invoke163, label %234

234:                                              ; preds = %233, %226
  br label %.invoke163

.invoke163:                                       ; preds = %226, %233, %234
  %235 = phi ptr [ @.str.1530, %234 ], [ @.str.100, %233 ], [ @.str.100, %226 ]
  %236 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull %235)
          to label %283 unwind label %224

237:                                              ; preds = %155
  br label %.invoke162

238:                                              ; preds = %155
  br label %.invoke162

239:                                              ; preds = %155
  br label %.invoke162

240:                                              ; preds = %155
  br label %.invoke162

241:                                              ; preds = %155
  br label %.invoke162

242:                                              ; preds = %155
  %243 = getelementptr inbounds i8, ptr %1, i64 10036
  %244 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %243, i32 noundef 2, i32 noundef 2, i32 noundef 0)
  br i1 %244, label %.invoke162, label %245

245:                                              ; preds = %242
  %246 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %246, ptr noundef nonnull @.str.1531)
          to label %.invoke unwind label %247

247:                                              ; preds = %245
  %248 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %246) #8
  br label %374

249:                                              ; preds = %155
  %250 = getelementptr inbounds i8, ptr %1, i64 10036
  %251 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %250, i32 noundef 2, i32 noundef 2, i32 noundef 0)
  br i1 %251, label %.invoke162, label %252

252:                                              ; preds = %249
  %253 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %253, ptr noundef nonnull @.str.1531)
          to label %.invoke unwind label %254

254:                                              ; preds = %252
  %255 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %253) #8
  br label %374

256:                                              ; preds = %155
  br label %.invoke162

257:                                              ; preds = %155
  br label %.invoke162

258:                                              ; preds = %155
  br label %.invoke162

259:                                              ; preds = %155
  %260 = getelementptr inbounds i8, ptr %1, i64 10036
  %261 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %260, i32 noundef 2, i32 noundef 4, i32 noundef 0)
  br i1 %261, label %.invoke162, label %262

262:                                              ; preds = %259
  %263 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %260, i32 noundef 2, i32 noundef 3, i32 noundef 0)
  br i1 %263, label %.invoke162, label %266

.invoke162:                                       ; preds = %262, %259, %249, %242, %155, %155, %237, %238, %239, %240, %241, %256, %257, %258
  %264 = phi ptr [ @.str.1534, %258 ], [ @.str.168, %257 ], [ @.str.167, %256 ], [ @.str.97, %241 ], [ @.str.96, %240 ], [ @.str.101, %239 ], [ @.str.100, %238 ], [ @.str.99, %237 ], [ @.str.98, %155 ], [ @.str.98, %155 ], [ @.str.1532, %242 ], [ @.str.1533, %249 ], [ @.str.1535, %259 ], [ @.str.1536, %262 ]
  %265 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull %264)
          to label %283 unwind label %40

266:                                              ; preds = %262
  %267 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %267, ptr noundef nonnull @.str.1537)
          to label %.invoke unwind label %269

.invoke:                                          ; preds = %266, %252, %245
  %268 = phi ptr [ %246, %245 ], [ %253, %252 ], [ %267, %266 ]
  invoke void @__cxa_throw(ptr nonnull %268, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %.cont unwind label %40

.cont:                                            ; preds = %.invoke
  unreachable

269:                                              ; preds = %266
  %270 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %267) #8
  br label %374

271:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1538, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %272 unwind label %273

272:                                              ; preds = %271
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #8
  br label %373

273:                                              ; preds = %271
  %274 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #8
  br label %374

275:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1539, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %276 unwind label %277

276:                                              ; preds = %275
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #8
  br label %373

277:                                              ; preds = %275
  %278 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #8
  br label %374

279:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1540, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %280 unwind label %281

280:                                              ; preds = %279
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #8
  br label %373

281:                                              ; preds = %279
  %282 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #8
  br label %374

283:                                              ; preds = %.invoke163, %.invoke162, %164
  %284 = getelementptr inbounds i8, ptr %2, i64 28
  %285 = load i32, ptr %284, align 4, !tbaa !200
  %286 = icmp ugt i32 %285, 1
  br i1 %286, label %287, label %325

287:                                              ; preds = %283
  %288 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %3)
          to label %289 unwind label %296

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

290:                                              ; preds = %289
  %291 = getelementptr inbounds i8, ptr %288, i64 28
  %292 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %291)
  %.not110 = icmp eq i32 %292, 0
  br i1 %.not110, label %298, label %293

293:                                              ; preds = %290
  %294 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %291)
  %295 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %294)
          to label %298 unwind label %296

296:                                              ; preds = %309, %293, %287
  %297 = landingpad { ptr, i32 }
          cleanup
  br label %374

298:                                              ; preds = %290, %293
  %.076.ph = phi ptr [ %295, %293 ], [ %288, %290 ]
  %299 = getelementptr inbounds i8, ptr %.076.ph, i64 16
  %300 = load i32, ptr %299, align 8, !tbaa !38
  %301 = icmp eq i32 %300, 4
  %302 = getelementptr inbounds i8, ptr %2, i64 128
  %303 = load i32, ptr %302, align 8
  %304 = icmp eq i32 %303, 4
  %or.cond146 = select i1 %301, i1 true, i1 %304
  br i1 %or.cond146, label %306, label %315

305:                                              ; preds = %289
  %.old143 = getelementptr inbounds i8, ptr %2, i64 128
  %.old144 = load i32, ptr %.old143, align 8, !tbaa !199
  %.old145 = icmp eq i32 %.old144, 4
  br i1 %.old145, label %306, label %315

306:                                              ; preds = %305, %298
  %307 = getelementptr inbounds i8, ptr %1, i64 10036
  %308 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %307, i32 noundef 3, i32 noundef 0, i32 noundef 0)
  br i1 %308, label %315, label %309

309:                                              ; preds = %306
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i8 noundef zeroext 19)
          to label %310 unwind label %296

310:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull @.str.1306, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %311 unwind label %313

311:                                              ; preds = %310
  %312 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  br label %315

313:                                              ; preds = %310
  %314 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  br label %374

315:                                              ; preds = %298, %311, %306, %305
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #8
  %316 = load i32, ptr %284, align 4, !tbaa !200
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, i32 noundef %316) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull @.str.169)
          to label %317 unwind label %320

317:                                              ; preds = %315
  %318 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %319 unwind label %322

319:                                              ; preds = %317
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  br label %325

320:                                              ; preds = %315
  %321 = landingpad { ptr, i32 }
          cleanup
  br label %324

322:                                              ; preds = %317
  %323 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  br label %324

324:                                              ; preds = %322, %320
  %.pn112 = phi { ptr, i32 } [ %323, %322 ], [ %321, %320 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  br label %374

325:                                              ; preds = %319, %283
  %326 = getelementptr inbounds i8, ptr %2, i64 24
  %327 = load i32, ptr %326, align 8, !tbaa !201
  %328 = icmp ugt i32 %327, 1
  br i1 %328, label %329, label %334

329:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #8
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, i32 noundef %327) #8
  %330 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %331 unwind label %332

331:                                              ; preds = %329
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  br label %334

332:                                              ; preds = %329
  %333 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  br label %374

334:                                              ; preds = %331, %325
  %335 = getelementptr inbounds i8, ptr %2, i64 32
  %336 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %335) #8
  br i1 %336, label %339, label %337

337:                                              ; preds = %334
  %338 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL19using_builtin_arrayEv(ptr noundef nonnull align 8 dereferenceable(12482) %1)
  br i1 %338, label %339, label %340

339:                                              ; preds = %337, %334
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  br label %373

340:                                              ; preds = %337
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i8 noundef zeroext 18)
          to label %341 unwind label %40

341:                                              ; preds = %340
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  %342 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %335) #8
  %343 = and i64 %342, 4294967295
  %.not159 = icmp eq i64 %343, 0
  br i1 %.not159, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %352, %341
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_SA_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %364 unwind label %367

.lr.ph:                                           ; preds = %341, %352
  %.0158 = phi i32 [ %353, %352 ], [ 0, %341 ]
  %344 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1541)
          to label %345 unwind label %357

345:                                              ; preds = %.lr.ph
  %346 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull @.str.55)
          to label %347 unwind label %357

347:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_array_sizeB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %.0158)
          to label %348 unwind label %359

348:                                              ; preds = %347
  %349 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %350 unwind label %361

350:                                              ; preds = %348
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  %351 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull @.str.290)
          to label %352 unwind label %357

352:                                              ; preds = %350
  %353 = add nuw i32 %.0158, 1
  %354 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %335) #8
  %355 = trunc i64 %354 to i32
  %356 = icmp ult i32 %353, %355
  br i1 %356, label %.lr.ph, label %._crit_edge, !llvm.loop !202

357:                                              ; preds = %350, %345, %.lr.ph
  %358 = landingpad { ptr, i32 }
          cleanup
  br label %372

359:                                              ; preds = %347
  %360 = landingpad { ptr, i32 }
          cleanup
  br label %363

361:                                              ; preds = %348
  %362 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %363

363:                                              ; preds = %361, %359
  %.pn117 = phi { ptr, i32 } [ %362, %361 ], [ %360, %359 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  br label %372

364:                                              ; preds = %._crit_edge
  %365 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %366 unwind label %369

366:                                              ; preds = %364
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  br label %373

367:                                              ; preds = %._crit_edge
  %368 = landingpad { ptr, i32 }
          cleanup
  br label %371

369:                                              ; preds = %364
  %370 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %371

371:                                              ; preds = %369, %367
  %.pn115 = phi { ptr, i32 } [ %370, %369 ], [ %368, %367 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  br label %372

372:                                              ; preds = %357, %363, %371
  %.pn119.pn = phi { ptr, i32 } [ %.pn115, %371 ], [ %358, %357 ], [ %.pn117, %363 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  br label %374

373:                                              ; preds = %172, %168, %366, %339, %280, %276, %272, %209, %190, %178, %174, %152
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  ret void

374:                                              ; preds = %296, %313, %324, %372, %332, %281, %277, %273, %269, %254, %247, %224, %214, %195, %179, %175, %166, %154, %40
  %.pn134.pn.pn = phi { ptr, i32 } [ %.pn134.pn, %154 ], [ %282, %281 ], [ %278, %277 ], [ %274, %273 ], [ %.pn119.pn, %372 ], [ %41, %40 ], [ %333, %332 ], [ %270, %269 ], [ %255, %254 ], [ %248, %247 ], [ %225, %224 ], [ %.pn, %214 ], [ %.pn107, %195 ], [ %180, %179 ], [ %176, %175 ], [ %167, %166 ], [ %.pn112, %324 ], [ %314, %313 ], [ %297, %296 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  resume { ptr, i32 } %.pn134.pn.pn
}

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

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

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

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

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

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

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

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

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

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


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