; 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::SPIRFunction::Parameter" = type <{ %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.413", i32, i32, i8, [3 x i8] }>
%"class.spirv_cross::TypedID.414" = type { i32 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"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 }

@.str.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 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.61 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.283 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.290 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1118 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1120 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1189 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1275 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1293 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1381 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1383 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1384 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1385 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1386 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1387 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1388 = external hidden unnamed_addr constant [3 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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef 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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) #4

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL26get_argument_address_spaceB5cxx11ERKNS_12SPIRVariableE(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(176)) #2 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: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #5

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare 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: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #5

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) #6

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(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 4 dereferenceable(17) %2) #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca i1, align 1
  %17 = alloca i8, align 1
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i8, align 1
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca i8, align 1
  %23 = alloca %"class.spirv_cross::TypedID.413", align 4
  %24 = alloca i32, align 4
  %25 = alloca %"class.spirv_cross::TypedID.413", align 4
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca i32, align 4
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca ptr, align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::allocator.71", align 1
  %49 = alloca ptr, align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca ptr, align 8
  %56 = alloca i32, align 4
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca ptr, align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca i32, align 4
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca ptr, align 8
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca ptr, align 8
  %81 = alloca i32, align 4
  %82 = alloca ptr, align 8
  %83 = alloca %"class.spirv_cross::TypedID.413", align 4
  %84 = alloca ptr, align 8
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  %88 = alloca %"class.std::__cxx11::basic_string", align 8
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %90 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %91, i32 0, i32 1
  %93 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %92)
  %94 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 noundef %93)
  store ptr %94, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %90, ptr noundef nonnull align 8 dereferenceable(176) %95)
  store ptr %96, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %97, i32 0, i32 0
  %99 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %98)
  %100 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 noundef %99)
  store ptr %100, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %101 = load ptr, ptr %9, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %101, i32 0, i32 11
  %103 = load i32, ptr %102, align 8, !tbaa !9
  store i32 %103, ptr %10, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %104 = load ptr, ptr %7, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %104, i32 0, i32 1
  %106 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
  store i32 %106, ptr %11, align 4, !tbaa !39
  %107 = load ptr, ptr %6, align 8, !tbaa !5
  %108 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %107, i32 0, i32 4
  %109 = load i8, ptr %108, align 4, !tbaa !40, !range !42, !noundef !43
  %110 = trunc i8 %109 to i1
  br i1 %110, label %111, label %120

111:                                              ; preds = %3
  %112 = load ptr, ptr %7, align 8, !tbaa !5
  %113 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %112, i32 0, i32 5
  %114 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %113)
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %116, label %120

116:                                              ; preds = %111
  %117 = load ptr, ptr %7, align 8, !tbaa !5
  %118 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %117, i32 0, i32 5
  %119 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %118)
  store i32 %119, ptr %11, align 4, !tbaa !39
  br label %120

120:                                              ; preds = %116, %111, %3
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #7
  %121 = load ptr, ptr %6, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %121, i32 0, i32 4
  %123 = load i8, ptr %122, align 4, !tbaa !40, !range !42, !noundef !43
  %124 = trunc i8 %123 to i1
  br i1 %124, label %133, label %125

125:                                              ; preds = %120
  %126 = load ptr, ptr %9, align 8, !tbaa !5
  %127 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %90, ptr noundef nonnull align 8 dereferenceable(336) %126)
  br i1 %127, label %128, label %133

128:                                              ; preds = %125
  %129 = load ptr, ptr %6, align 8, !tbaa !5
  %130 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %129, i32 0, i32 3
  %131 = load i32, ptr %130, align 4, !tbaa !44
  %132 = icmp eq i32 %131, 0
  br label %133

133:                                              ; preds = %128, %125, %120
  %134 = phi i1 [ false, %125 ], [ false, %120 ], [ %132, %128 ]
  %135 = zext i1 %134 to i8
  store i8 %135, ptr %12, align 1, !tbaa !45
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  %137 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL29type_is_msl_framebuffer_fetchERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %136)
  br i1 %137, label %138, label %139

138:                                              ; preds = %133
  store i8 0, ptr %12, align 1, !tbaa !45
  br label %144

139:                                              ; preds = %133
  %140 = load i32, ptr %10, align 4, !tbaa !38
  %141 = icmp eq i32 %140, 0
  br i1 %141, label %142, label %143

142:                                              ; preds = %139
  store i8 1, ptr %12, align 1, !tbaa !45
  br label %143

143:                                              ; preds = %142, %139
  br label %144

144:                                              ; preds = %143, %138
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #7
  %145 = load ptr, ptr %8, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %145, i32 0, i32 2
  %147 = load i32, ptr %146, align 8, !tbaa !46
  %148 = icmp eq i32 %147, 16
  br i1 %148, label %159, label %149

149:                                              ; preds = %144
  %150 = load ptr, ptr %8, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %150, i32 0, i32 2
  %152 = load i32, ptr %151, align 8, !tbaa !46
  %153 = icmp eq i32 %152, 17
  br i1 %153, label %159, label %154

154:                                              ; preds = %149
  %155 = load ptr, ptr %8, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %155, i32 0, i32 2
  %157 = load i32, ptr %156, align 8, !tbaa !46
  %158 = icmp eq i32 %157, 18
  br label %159

159:                                              ; preds = %154, %149, %144
  %160 = phi i1 [ true, %149 ], [ true, %144 ], [ %158, %154 ]
  %161 = zext i1 %160 to i8
  store i8 %161, ptr %13, align 1, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #7
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %162, i32 0, i32 2
  %164 = load i32, ptr %163, align 8, !tbaa !46
  %165 = icmp eq i32 %164, 19
  %166 = zext i1 %165 to i8
  store i8 %166, ptr %14, align 1, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %167 = load i8, ptr %12, align 1, !tbaa !45, !range !42, !noundef !43
  %168 = trunc i8 %167 to i1
  br i1 %168, label %169, label %173

169:                                              ; preds = %159
  %170 = load i8, ptr %13, align 1, !tbaa !45, !range !42, !noundef !43
  %171 = trunc i8 %170 to i1
  %172 = xor i1 %171, true
  br label %173

173:                                              ; preds = %169, %159
  %174 = phi i1 [ false, %159 ], [ %172, %169 ]
  %175 = zext i1 %174 to i64
  %176 = select i1 %174, ptr @.str.1383, ptr @.str.35
  store ptr %176, ptr %15, align 8, !tbaa !5
  store i1 false, ptr %16, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #7
  %177 = load ptr, ptr %6, align 8, !tbaa !5
  %178 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %177, i32 0, i32 4
  %179 = load i8, ptr %178, align 4, !tbaa !40, !range !42, !noundef !43
  %180 = trunc i8 %179 to i1
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #7
  br i1 %180, label %207, label %181

181:                                              ; preds = %173
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  %183 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %182, i32 0, i32 2
  %184 = load i32, ptr %183, align 8, !tbaa !46
  %185 = icmp eq i32 %184, 17
  br i1 %185, label %186, label %207

186:                                              ; preds = %181
  %187 = load ptr, ptr %8, align 8, !tbaa !5
  %188 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %187, i32 0, i32 14
  %189 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %188, i32 0, i32 1
  %190 = load i32, ptr %189, align 4, !tbaa !47
  %191 = icmp eq i32 %190, 1
  br i1 %191, label %192, label %207

192:                                              ; preds = %186
  %193 = load ptr, ptr %8, align 8, !tbaa !5
  %194 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %193, i32 0, i32 14
  %195 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %194, i32 0, i32 0
  %196 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %195)
          to label %197 unwind label %260

197:                                              ; preds = %192
  %198 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 noundef %196)
          to label %199 unwind label %260

199:                                              ; preds = %197
  %200 = invoke noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %198)
          to label %201 unwind label %260

201:                                              ; preds = %199
  br i1 %200, label %202, label %207

202:                                              ; preds = %201
  %203 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 38
  store i8 66, ptr %20, align 1, !tbaa !48
  %204 = invoke noundef i64 @_ZNKSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE5countERKS2_(ptr noundef nonnull align 8 dereferenceable(48) %203, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %205 unwind label %264

205:                                              ; preds = %202
  %206 = icmp ne i64 %204, 0
  br label %207

207:                                              ; preds = %205, %201, %186, %181, %173
  %208 = phi i1 [ false, %201 ], [ false, %186 ], [ false, %181 ], [ false, %173 ], [ %206, %205 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  %209 = zext i1 %208 to i8
  store i8 %209, ptr %17, align 1, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #7
  %210 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL26get_argument_address_spaceB5cxx11ERKNS_12SPIRVariableE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(176) %210)
          to label %211 unwind label %268

211:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  %212 = load ptr, ptr %7, align 8, !tbaa !5
  %213 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %212, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 8 %213, i64 4, i1 false), !tbaa.struct !50
  %214 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %23, i32 0, i32 0
  %215 = load i32, ptr %214, align 4
  %216 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 %215, i32 noundef 11)
          to label %217 unwind label %272

217:                                              ; preds = %211
  %218 = zext i1 %216 to i8
  store i8 %218, ptr %22, align 1, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %219 = load ptr, ptr %6, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %219, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %220, i64 4, i1 false), !tbaa.struct !50
  %221 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %25, i32 0, i32 0
  %222 = load i32, ptr %221, align 4
  %223 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 %222, i32 noundef 11)
          to label %224 unwind label %276

224:                                              ; preds = %217
  store i32 %223, ptr %24, align 4, !tbaa !51
  %225 = load ptr, ptr %7, align 8, !tbaa !5
  %226 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %225, i32 0, i32 5
  %227 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %226)
          to label %228 unwind label %276

228:                                              ; preds = %224
  %229 = icmp ne i32 %227, 0
  br i1 %229, label %230, label %289

230:                                              ; preds = %228
  %231 = load ptr, ptr %7, align 8, !tbaa !5
  %232 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %231, i32 0, i32 5
  %233 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %232)
          to label %234 unwind label %276

234:                                              ; preds = %230
  %235 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 63
  %236 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %235)
          to label %237 unwind label %276

237:                                              ; preds = %234
  %238 = icmp eq i32 %233, %236
  br i1 %238, label %248, label %239

239:                                              ; preds = %237
  %240 = load ptr, ptr %7, align 8, !tbaa !5
  %241 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %240, i32 0, i32 5
  %242 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %241)
          to label %243 unwind label %276

243:                                              ; preds = %239
  %244 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 64
  %245 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %244)
          to label %246 unwind label %276

246:                                              ; preds = %243
  %247 = icmp eq i32 %242, %245
  br i1 %247, label %248, label %289

248:                                              ; preds = %246, %237
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #7
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = load ptr, ptr %6, align 8, !tbaa !5
  %251 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %250, i32 0, i32 1
  %252 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %251)
          to label %253 unwind label %280

253:                                              ; preds = %248
  %254 = load ptr, ptr %90, align 8, !tbaa !53
  %255 = getelementptr inbounds ptr, ptr %254, i64 19
  %256 = load ptr, ptr %255, align 8
  invoke void %256(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %249, i32 noundef %252)
          to label %257 unwind label %280

257:                                              ; preds = %253
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %258 unwind label %284

258:                                              ; preds = %257
  %259 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  br label %590

260:                                              ; preds = %199, %197, %192
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %18, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %19, align 4
  br label %1217

264:                                              ; preds = %202
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %18, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  br label %1217

268:                                              ; preds = %207
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %18, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %19, align 4
  br label %1216

272:                                              ; preds = %211
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %18, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %19, align 4
  br label %1215

276:                                              ; preds = %1090, %1032, %992, %970, %967, %965, %963, %935, %926, %811, %741, %719, %703, %686, %614, %608, %593, %527, %516, %511, %464, %391, %243, %239, %234, %230, %224, %217
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %18, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %19, align 4
  br label %1214

280:                                              ; preds = %253, %248
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %18, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %19, align 4
  br label %288

284:                                              ; preds = %257
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %18, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %288

288:                                              ; preds = %284, %280
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  br label %1214

289:                                              ; preds = %246, %228
  %290 = load i8, ptr %22, align 1, !tbaa !45, !range !42, !noundef !43
  %291 = trunc i8 %290 to i1
  br i1 %291, label %292, label %391

292:                                              ; preds = %289
  %293 = load i32, ptr %24, align 4, !tbaa !51
  %294 = icmp ne i32 %293, 5296
  br i1 %294, label %295, label %391

295:                                              ; preds = %292
  %296 = load i32, ptr %24, align 4, !tbaa !51
  %297 = icmp ne i32 %296, 5295
  br i1 %297, label %298, label %391

298:                                              ; preds = %295
  %299 = load i32, ptr %24, align 4, !tbaa !51
  %300 = icmp ne i32 %299, 5294
  br i1 %300, label %301, label %391

301:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %302 = load ptr, ptr %7, align 8, !tbaa !5
  %303 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %302, i32 0, i32 1
  %304 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %303)
          to label %305 unwind label %320

305:                                              ; preds = %301
  %306 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 noundef %304)
          to label %307 unwind label %320

307:                                              ; preds = %305
  %308 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %306, i32 0, i32 11
  %309 = load i32, ptr %308, align 8, !tbaa !9
  store i32 %309, ptr %28, align 4, !tbaa !38
  %310 = load i32, ptr %28, align 4, !tbaa !38
  %311 = icmp eq i32 %310, 1
  br i1 %311, label %312, label %324

312:                                              ; preds = %307
  %313 = load i32, ptr %24, align 4, !tbaa !51
  %314 = icmp eq i32 %313, 12
  br i1 %314, label %318, label %315

315:                                              ; preds = %312
  %316 = load i32, ptr %24, align 4, !tbaa !51
  %317 = icmp eq i32 %316, 11
  br i1 %317, label %318, label %324

318:                                              ; preds = %315, %312
  %319 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 74
  store i8 0, ptr %319, align 2, !tbaa !55
  br label %333

320:                                              ; preds = %340, %336, %305, %301
  %321 = landingpad { ptr, i32 }
          cleanup
  %322 = extractvalue { ptr, i32 } %321, 0
  store ptr %322, ptr %18, align 8
  %323 = extractvalue { ptr, i32 } %321, 1
  store i32 %323, ptr %19, align 4
  br label %390

324:                                              ; preds = %315, %307
  %325 = load i32, ptr %24, align 4, !tbaa !51
  %326 = icmp ne i32 %325, 3
  br i1 %326, label %327, label %332

327:                                              ; preds = %324
  %328 = load i32, ptr %24, align 4, !tbaa !51
  %329 = icmp ne i32 %328, 4
  br i1 %329, label %330, label %332

330:                                              ; preds = %327
  %331 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 74
  store i8 1, ptr %331, align 2, !tbaa !55
  br label %332

332:                                              ; preds = %330, %327, %324
  br label %333

333:                                              ; preds = %332, %318
  %334 = load i32, ptr %28, align 4, !tbaa !38
  %335 = icmp eq i32 %334, 3
  br i1 %335, label %336, label %346

336:                                              ; preds = %333
  %337 = load i32, ptr %28, align 4, !tbaa !38
  %338 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %90, i32 noundef %337)
          to label %339 unwind label %320

339:                                              ; preds = %336
  br i1 %338, label %340, label %346

340:                                              ; preds = %339
  %341 = load i32, ptr %24, align 4, !tbaa !51
  %342 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30is_stage_output_builtin_maskedEN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %341)
          to label %343 unwind label %320

343:                                              ; preds = %340
  br i1 %342, label %346, label %344

344:                                              ; preds = %343
  %345 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 74
  store i8 1, ptr %345, align 2, !tbaa !55
  br label %346

346:                                              ; preds = %344, %343, %339, %333
  %347 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 74
  %348 = load i8, ptr %347, align 2, !tbaa !55, !range !42, !noundef !43
  %349 = trunc i8 %348 to i1
  br i1 %349, label %350, label %368

350:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #7
  %351 = load i32, ptr %24, align 4, !tbaa !51
  %352 = load ptr, ptr %6, align 8, !tbaa !5
  %353 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %352, i32 0, i32 1
  %354 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %353)
          to label %355 unwind label %359

355:                                              ; preds = %350
  invoke void @_ZN11spirv_cross11CompilerMSL17builtin_type_declB5cxx11EN3spv7BuiltInEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(12482) %90, i32 noundef %351, i32 noundef %354)
          to label %356 unwind label %359

356:                                              ; preds = %355
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %357 unwind label %363

357:                                              ; preds = %356
  %358 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #7
  br label %389

359:                                              ; preds = %355, %350
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %18, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %19, align 4
  br label %367

363:                                              ; preds = %356
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %18, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br label %367

367:                                              ; preds = %363, %359
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #7
  br label %390

368:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #7
  %369 = load ptr, ptr %8, align 8, !tbaa !5
  %370 = load ptr, ptr %6, align 8, !tbaa !5
  %371 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %370, i32 0, i32 1
  %372 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %371)
          to label %373 unwind label %380

373:                                              ; preds = %368
  %374 = load ptr, ptr %90, align 8, !tbaa !53
  %375 = getelementptr inbounds ptr, ptr %374, i64 19
  %376 = load ptr, ptr %375, align 8
  invoke void %376(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %369, i32 noundef %372)
          to label %377 unwind label %380

377:                                              ; preds = %373
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %378 unwind label %384

378:                                              ; preds = %377
  %379 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #7
  br label %389

380:                                              ; preds = %373, %368
  %381 = landingpad { ptr, i32 }
          cleanup
  %382 = extractvalue { ptr, i32 } %381, 0
  store ptr %382, ptr %18, align 8
  %383 = extractvalue { ptr, i32 } %381, 1
  store i32 %383, ptr %19, align 4
  br label %388

384:                                              ; preds = %377
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %18, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  br label %388

388:                                              ; preds = %384, %380
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #7
  br label %390

389:                                              ; preds = %378, %357
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %589

390:                                              ; preds = %388, %367, %320
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %1214

391:                                              ; preds = %298, %295, %292, %289
  %392 = load ptr, ptr %7, align 8, !tbaa !5
  %393 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25is_var_runtime_size_arrayERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(176) %392)
          to label %394 unwind label %276

394:                                              ; preds = %391
  br i1 %393, label %395, label %458

395:                                              ; preds = %394
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %396 = load ptr, ptr %8, align 8, !tbaa !5
  %397 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %396, i32 0, i32 16
  %398 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %397)
          to label %399 unwind label %418

399:                                              ; preds = %395
  %400 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 noundef %398)
          to label %401 unwind label %418

401:                                              ; preds = %399
  store ptr %400, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #7
  %402 = load ptr, ptr %33, align 8, !tbaa !5
  %403 = load ptr, ptr %6, align 8, !tbaa !5
  %404 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %403, i32 0, i32 1
  %405 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %404)
          to label %406 unwind label %422

406:                                              ; preds = %401
  %407 = load ptr, ptr %90, align 8, !tbaa !53
  %408 = getelementptr inbounds ptr, ptr %407, i64 19
  %409 = load ptr, ptr %408, align 8
  invoke void %409(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %402, i32 noundef %405)
          to label %410 unwind label %422

410:                                              ; preds = %406
  %411 = load ptr, ptr %8, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %411, i32 0, i32 2
  %413 = load i32, ptr %412, align 8, !tbaa !46
  %414 = icmp eq i32 %413, 19
  br i1 %414, label %415, label %430

415:                                              ; preds = %410
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #7
  invoke void @_ZN11spirv_cross4joinIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 1 dereferenceable(20) @.str.77, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %416 unwind label %426

416:                                              ; preds = %415
  %417 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  br label %448

418:                                              ; preds = %399, %395
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %18, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %19, align 4
  br label %457

422:                                              ; preds = %406, %401
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %18, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %19, align 4
  br label %456

426:                                              ; preds = %415
  %427 = landingpad { ptr, i32 }
          cleanup
  %428 = extractvalue { ptr, i32 } %427, 0
  store ptr %428, ptr %18, align 8
  %429 = extractvalue { ptr, i32 } %427, 1
  store i32 %429, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  br label %455

430:                                              ; preds = %410
  %431 = load i8, ptr %13, align 1, !tbaa !45, !range !42, !noundef !43
  %432 = trunc i8 %431 to i1
  br i1 %432, label %433, label %440

433:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #7
  invoke void @_ZN11spirv_cross4joinIJRA20_KcRPS1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 1 dereferenceable(20) @.str.77, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %434 unwind label %436

434:                                              ; preds = %433
  %435 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  br label %447

436:                                              ; preds = %433
  %437 = landingpad { ptr, i32 }
          cleanup
  %438 = extractvalue { ptr, i32 } %437, 0
  store ptr %438, ptr %18, align 8
  %439 = extractvalue { ptr, i32 } %437, 1
  store i32 %439, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  br label %455

440:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #7
  invoke void @_ZN11spirv_cross4joinIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 1 dereferenceable(20) @.str.77, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(3) @.str.1384)
          to label %441 unwind label %443

441:                                              ; preds = %440
  %442 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #7
  br label %447

443:                                              ; preds = %440
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %18, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #7
  br label %455

447:                                              ; preds = %441, %434
  br label %448

448:                                              ; preds = %447, %416
  %449 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.1385)
          to label %450 unwind label %451

450:                                              ; preds = %448
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  br label %588

451:                                              ; preds = %448
  %452 = landingpad { ptr, i32 }
          cleanup
  %453 = extractvalue { ptr, i32 } %452, 0
  store ptr %453, ptr %18, align 8
  %454 = extractvalue { ptr, i32 } %452, 1
  store i32 %454, ptr %19, align 4
  br label %455

455:                                              ; preds = %451, %443, %436, %426
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %456

456:                                              ; preds = %455, %422
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #7
  br label %457

457:                                              ; preds = %456, %418
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  br label %1214

458:                                              ; preds = %394
  %459 = load i32, ptr %10, align 4, !tbaa !38
  %460 = icmp eq i32 %459, 2
  br i1 %460, label %464, label %461

461:                                              ; preds = %458
  %462 = load i32, ptr %10, align 4, !tbaa !38
  %463 = icmp eq i32 %462, 12
  br i1 %463, label %464, label %496

464:                                              ; preds = %461, %458
  %465 = load ptr, ptr %8, align 8, !tbaa !5
  %466 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %90, ptr noundef nonnull align 8 dereferenceable(336) %465)
          to label %467 unwind label %276

467:                                              ; preds = %464
  br i1 %466, label %468, label %496

468:                                              ; preds = %467
  %469 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 74
  store i8 1, ptr %469, align 2, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #7
  %470 = load ptr, ptr %8, align 8, !tbaa !5
  %471 = load ptr, ptr %6, align 8, !tbaa !5
  %472 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %471, i32 0, i32 1
  %473 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %472)
          to label %474 unwind label %482

474:                                              ; preds = %468
  %475 = load ptr, ptr %90, align 8, !tbaa !53
  %476 = getelementptr inbounds ptr, ptr %475, i64 19
  %477 = load ptr, ptr %476, align 8
  invoke void %477(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %470, i32 noundef %473)
          to label %478 unwind label %482

478:                                              ; preds = %474
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(2) @.str.960)
          to label %479 unwind label %486

479:                                              ; preds = %478
  %480 = 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) %38)
          to label %481 unwind label %490

481:                                              ; preds = %479
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #7
  br label %587

482:                                              ; preds = %474, %468
  %483 = landingpad { ptr, i32 }
          cleanup
  %484 = extractvalue { ptr, i32 } %483, 0
  store ptr %484, ptr %18, align 8
  %485 = extractvalue { ptr, i32 } %483, 1
  store i32 %485, ptr %19, align 4
  br label %495

486:                                              ; preds = %478
  %487 = landingpad { ptr, i32 }
          cleanup
  %488 = extractvalue { ptr, i32 } %487, 0
  store ptr %488, ptr %18, align 8
  %489 = extractvalue { ptr, i32 } %487, 1
  store i32 %489, ptr %19, align 4
  br label %494

490:                                              ; preds = %479
  %491 = landingpad { ptr, i32 }
          cleanup
  %492 = extractvalue { ptr, i32 } %491, 0
  store ptr %492, ptr %18, align 8
  %493 = extractvalue { ptr, i32 } %491, 1
  store i32 %493, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  br label %494

494:                                              ; preds = %490, %486
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  br label %495

495:                                              ; preds = %494, %482
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #7
  br label %1214

496:                                              ; preds = %467, %461
  %497 = load i8, ptr %17, align 1, !tbaa !45, !range !42, !noundef !43
  %498 = trunc i8 %497 to i1
  br i1 %498, label %499, label %527

499:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #7
  %500 = load ptr, ptr %8, align 8, !tbaa !5
  %501 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %500, i32 0, i32 14
  %502 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %501, i32 0, i32 0
  %503 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %502)
          to label %504 unwind label %518

504:                                              ; preds = %499
  %505 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 noundef %503)
          to label %506 unwind label %518

506:                                              ; preds = %504
  %507 = load ptr, ptr %90, align 8, !tbaa !53
  %508 = getelementptr inbounds ptr, ptr %507, i64 19
  %509 = load ptr, ptr %508, align 8
  invoke void %509(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %505, i32 noundef 0)
          to label %510 unwind label %518

510:                                              ; preds = %506
  invoke void @_ZN11spirv_cross4joinIJRPKcRA24_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 1 dereferenceable(24) @.str.1275, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %511 unwind label %522

511:                                              ; preds = %510
  %512 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #7
  %513 = load ptr, ptr %6, align 8, !tbaa !5
  %514 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %513, i32 0, i32 1
  %515 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %514)
          to label %516 unwind label %276

516:                                              ; preds = %511
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 noundef %515, i32 noundef 12, i32 noundef 0)
          to label %517 unwind label %276

517:                                              ; preds = %516
  br label %586

518:                                              ; preds = %506, %504, %499
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %18, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %19, align 4
  br label %526

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

526:                                              ; preds = %522, %518
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #7
  br label %1214

527:                                              ; preds = %496
  %528 = load ptr, ptr %8, align 8, !tbaa !5
  %529 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %90, ptr noundef nonnull align 8 dereferenceable(336) %528)
          to label %530 unwind label %276

530:                                              ; preds = %527
  br i1 %529, label %531, label %564

531:                                              ; preds = %530
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #7
  %532 = load ptr, ptr %8, align 8, !tbaa !5
  %533 = load ptr, ptr %6, align 8, !tbaa !5
  %534 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %533, i32 0, i32 1
  %535 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %534)
          to label %536 unwind label %550

536:                                              ; preds = %531
  %537 = load ptr, ptr %90, align 8, !tbaa !53
  %538 = getelementptr inbounds ptr, ptr %537, i64 19
  %539 = load ptr, ptr %538, align 8
  invoke void %539(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %532, i32 noundef %535)
          to label %540 unwind label %550

540:                                              ; preds = %536
  %541 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  %542 = load ptr, ptr %15, align 8, !tbaa !5
  %543 = load i8, ptr %542, align 1, !tbaa !203
  %544 = sext i8 %543 to i32
  %545 = icmp ne i32 %544, 0
  br i1 %545, label %546, label %563

546:                                              ; preds = %540
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #7
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRPS1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %547 unwind label %554

547:                                              ; preds = %546
  %548 = 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) %43)
          to label %549 unwind label %558

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

550:                                              ; preds = %536, %531
  %551 = landingpad { ptr, i32 }
          cleanup
  %552 = extractvalue { ptr, i32 } %551, 0
  store ptr %552, ptr %18, align 8
  %553 = extractvalue { ptr, i32 } %551, 1
  store i32 %553, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  br label %1214

554:                                              ; preds = %546
  %555 = landingpad { ptr, i32 }
          cleanup
  %556 = extractvalue { ptr, i32 } %555, 0
  store ptr %556, ptr %18, align 8
  %557 = extractvalue { ptr, i32 } %555, 1
  store i32 %557, ptr %19, align 4
  br label %562

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

562:                                              ; preds = %558, %554
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  br label %1214

563:                                              ; preds = %549, %540
  br label %585

564:                                              ; preds = %530
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #7
  %565 = load ptr, ptr %8, align 8, !tbaa !5
  %566 = load ptr, ptr %6, align 8, !tbaa !5
  %567 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %566, i32 0, i32 1
  %568 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %567)
          to label %569 unwind label %576

569:                                              ; preds = %564
  %570 = load ptr, ptr %90, align 8, !tbaa !53
  %571 = getelementptr inbounds ptr, ptr %570, i64 19
  %572 = load ptr, ptr %571, align 8
  invoke void %572(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %565, i32 noundef %568)
          to label %573 unwind label %576

573:                                              ; preds = %569
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %574 unwind label %580

574:                                              ; preds = %573
  %575 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  br label %585

576:                                              ; preds = %569, %564
  %577 = landingpad { ptr, i32 }
          cleanup
  %578 = extractvalue { ptr, i32 } %577, 0
  store ptr %578, ptr %18, align 8
  %579 = extractvalue { ptr, i32 } %577, 1
  store i32 %579, ptr %19, align 4
  br label %584

580:                                              ; preds = %573
  %581 = landingpad { ptr, i32 }
          cleanup
  %582 = extractvalue { ptr, i32 } %581, 0
  store ptr %582, ptr %18, align 8
  %583 = extractvalue { ptr, i32 } %581, 1
  store i32 %583, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  br label %584

584:                                              ; preds = %580, %576
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  br label %1214

585:                                              ; preds = %574, %563
  br label %586

586:                                              ; preds = %585, %517
  br label %587

587:                                              ; preds = %586, %481
  br label %588

588:                                              ; preds = %587, %450
  br label %589

589:                                              ; preds = %588, %389
  br label %590

590:                                              ; preds = %589, %258
  %591 = load i8, ptr %22, align 1, !tbaa !45, !range !42, !noundef !43
  %592 = trunc i8 %591 to i1
  br i1 %592, label %703, label %593

593:                                              ; preds = %590
  %594 = load ptr, ptr %9, align 8, !tbaa !5
  %595 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %90, ptr noundef nonnull align 8 dereferenceable(336) %594)
          to label %596 unwind label %276

596:                                              ; preds = %593
  br i1 %595, label %703, label %597

597:                                              ; preds = %596
  %598 = load i32, ptr %10, align 4, !tbaa !38
  %599 = icmp eq i32 %598, 7
  br i1 %599, label %603, label %600

600:                                              ; preds = %597
  %601 = load i32, ptr %10, align 4, !tbaa !38
  %602 = icmp eq i32 %601, 8
  br i1 %602, label %603, label %703

603:                                              ; preds = %600, %597
  %604 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 37
  %605 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %604, i32 0, i32 46
  %606 = load i8, ptr %605, align 1, !tbaa !204, !range !42, !noundef !43
  %607 = trunc i8 %606 to i1
  br i1 %607, label %608, label %677

608:                                              ; preds = %603
  %609 = load ptr, ptr %8, align 8, !tbaa !5
  %610 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %90, ptr noundef nonnull align 8 dereferenceable(336) %609)
          to label %611 unwind label %276

611:                                              ; preds = %608
  br i1 %610, label %612, label %677

612:                                              ; preds = %611
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef @.str.1386, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %613 unwind label %630

613:                                              ; preds = %612
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %614 unwind label %634

614:                                              ; preds = %613
  %615 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  %616 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1387)
          to label %617 unwind label %276

617:                                              ; preds = %614
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %618 = load i32, ptr %11, align 4, !tbaa !39
  %619 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL11to_restrictEjb(ptr noundef nonnull align 8 dereferenceable(12482) %90, i32 noundef %618, i1 noundef zeroext true)
          to label %620 unwind label %639

620:                                              ; preds = %617
  store ptr %619, ptr %49, align 8, !tbaa !5
  %621 = load ptr, ptr %49, align 8, !tbaa !5
  %622 = load i8, ptr %621, align 1, !tbaa !203
  %623 = icmp ne i8 %622, 0
  br i1 %623, label %624, label %643

624:                                              ; preds = %620
  %625 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.60)
          to label %626 unwind label %639

626:                                              ; preds = %624
  %627 = load ptr, ptr %49, align 8, !tbaa !5
  %628 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %627)
          to label %629 unwind label %639

629:                                              ; preds = %626
  br label %643

630:                                              ; preds = %612
  %631 = landingpad { ptr, i32 }
          cleanup
  %632 = extractvalue { ptr, i32 } %631, 0
  store ptr %632, ptr %18, align 8
  %633 = extractvalue { ptr, i32 } %631, 1
  store i32 %633, ptr %19, align 4
  br label %638

634:                                              ; preds = %613
  %635 = landingpad { ptr, i32 }
          cleanup
  %636 = extractvalue { ptr, i32 } %635, 0
  store ptr %636, ptr %18, align 8
  %637 = extractvalue { ptr, i32 } %635, 1
  store i32 %637, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  br label %638

638:                                              ; preds = %634, %630
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  br label %1214

639:                                              ; preds = %647, %626, %624, %617
  %640 = landingpad { ptr, i32 }
          cleanup
  %641 = extractvalue { ptr, i32 } %640, 0
  store ptr %641, ptr %18, align 8
  %642 = extractvalue { ptr, i32 } %640, 1
  store i32 %642, ptr %19, align 4
  br label %676

643:                                              ; preds = %629, %620
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #7
  %644 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %644, i1 noundef zeroext true)
          to label %645 unwind label %658

645:                                              ; preds = %643
  %646 = 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 %647 unwind label %662

647:                                              ; preds = %645
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #7
  %648 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.53)
          to label %649 unwind label %639

649:                                              ; preds = %647
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #7
  %650 = load ptr, ptr %8, align 8, !tbaa !5
  %651 = load i32, ptr %11, align 4, !tbaa !39
  %652 = load ptr, ptr %90, align 8, !tbaa !53
  %653 = getelementptr inbounds ptr, ptr %652, i64 38
  %654 = load ptr, ptr %653, align 8
  invoke void %654(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %650, i32 noundef %651)
          to label %655 unwind label %667

655:                                              ; preds = %649
  %656 = 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) %51)
          to label %657 unwind label %671

657:                                              ; preds = %655
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  br label %702

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

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

666:                                              ; preds = %662, %658
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #7
  br label %676

667:                                              ; preds = %649
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %18, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %19, align 4
  br label %675

671:                                              ; preds = %655
  %672 = landingpad { ptr, i32 }
          cleanup
  %673 = extractvalue { ptr, i32 } %672, 0
  store ptr %673, ptr %18, align 8
  %674 = extractvalue { ptr, i32 } %672, 1
  store i32 %674, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  br label %675

675:                                              ; preds = %671, %667
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  br label %676

676:                                              ; preds = %675, %666, %639
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  br label %1214

677:                                              ; preds = %611, %603
  %678 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br i1 %678, label %686, label %679

679:                                              ; preds = %677
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %680 unwind label %682

680:                                              ; preds = %679
  %681 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  br label %686

682:                                              ; preds = %679
  %683 = landingpad { ptr, i32 }
          cleanup
  %684 = extractvalue { ptr, i32 } %683, 0
  store ptr %684, ptr %18, align 8
  %685 = extractvalue { ptr, i32 } %683, 1
  store i32 %685, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  br label %1214

686:                                              ; preds = %680, %677
  %687 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.60)
          to label %688 unwind label %276

688:                                              ; preds = %686
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #7
  %689 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %689, i1 noundef zeroext true)
          to label %690 unwind label %693

690:                                              ; preds = %688
  %691 = 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) %53)
          to label %692 unwind label %697

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

693:                                              ; preds = %688
  %694 = landingpad { ptr, i32 }
          cleanup
  %695 = extractvalue { ptr, i32 } %694, 0
  store ptr %695, ptr %18, align 8
  %696 = extractvalue { ptr, i32 } %694, 1
  store i32 %696, ptr %19, align 4
  br label %701

697:                                              ; preds = %690
  %698 = landingpad { ptr, i32 }
          cleanup
  %699 = extractvalue { ptr, i32 } %698, 0
  store ptr %699, ptr %18, align 8
  %700 = extractvalue { ptr, i32 } %698, 1
  store i32 %700, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  br label %701

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

702:                                              ; preds = %692, %657
  br label %1109

703:                                              ; preds = %600, %596, %590
  %704 = load ptr, ptr %8, align 8, !tbaa !5
  %705 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %90, ptr noundef nonnull align 8 dereferenceable(336) %704)
          to label %706 unwind label %276

706:                                              ; preds = %703
  br i1 %705, label %707, label %900

707:                                              ; preds = %706
  %708 = load i8, ptr %13, align 1, !tbaa !45, !range !42, !noundef !43
  %709 = trunc i8 %708 to i1
  br i1 %709, label %900, label %710

710:                                              ; preds = %707
  %711 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br i1 %711, label %719, label %712

712:                                              ; preds = %710
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %713 unwind label %715

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

715:                                              ; preds = %712
  %716 = landingpad { ptr, i32 }
          cleanup
  %717 = extractvalue { ptr, i32 } %716, 0
  store ptr %717, ptr %18, align 8
  %718 = extractvalue { ptr, i32 } %716, 1
  store i32 %718, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  br label %1214

719:                                              ; preds = %713, %710
  %720 = load ptr, ptr %7, align 8, !tbaa !5
  %721 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25is_var_runtime_size_arrayERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(176) %720)
          to label %722 unwind label %276

722:                                              ; preds = %719
  br i1 %721, label %741, label %723

723:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #7
  %724 = load i32, ptr %11, align 4, !tbaa !39
  %725 = load i32, ptr %10, align 4, !tbaa !38
  %726 = invoke noundef ptr @_ZNK11spirv_cross11CompilerMSL24descriptor_address_spaceEjN3spv12StorageClassEPKc(ptr noundef nonnull align 8 dereferenceable(12482) %90, i32 noundef %724, i32 noundef %725, ptr noundef null)
          to label %727 unwind label %736

727:                                              ; preds = %723
  store ptr %726, ptr %55, align 8, !tbaa !5
  %728 = load ptr, ptr %55, align 8, !tbaa !5
  %729 = icmp ne ptr %728, null
  br i1 %729, label %730, label %740

730:                                              ; preds = %727
  %731 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.60)
          to label %732 unwind label %736

732:                                              ; preds = %730
  %733 = load ptr, ptr %55, align 8, !tbaa !5
  %734 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %733)
          to label %735 unwind label %736

735:                                              ; preds = %732
  br label %740

736:                                              ; preds = %732, %730, %723
  %737 = landingpad { ptr, i32 }
          cleanup
  %738 = extractvalue { ptr, i32 } %737, 0
  store ptr %738, ptr %18, align 8
  %739 = extractvalue { ptr, i32 } %737, 1
  store i32 %739, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  br label %1214

740:                                              ; preds = %735, %727
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  br label %741

741:                                              ; preds = %740, %722
  %742 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %90)
          to label %743 unwind label %276

743:                                              ; preds = %741
  br i1 %742, label %744, label %811

744:                                              ; preds = %743
  %745 = load i8, ptr %22, align 1, !tbaa !45, !range !42, !noundef !43
  %746 = trunc i8 %745 to i1
  br i1 %746, label %747, label %811

747:                                              ; preds = %744
  %748 = load i32, ptr %24, align 4, !tbaa !51
  %749 = icmp eq i32 %748, 12
  br i1 %749, label %753, label %750

750:                                              ; preds = %747
  %751 = load i32, ptr %24, align 4, !tbaa !51
  %752 = icmp eq i32 %751, 11
  br i1 %752, label %753, label %811

753:                                              ; preds = %750, %747
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #7
  %754 = load i32, ptr %24, align 4, !tbaa !51
  %755 = invoke noundef i32 @_ZNK11spirv_cross11CompilerMSL34get_physical_tess_level_array_sizeEN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(12482) %90, i32 noundef %754)
          to label %756 unwind label %766

756:                                              ; preds = %753
  store i32 %755, ptr %56, align 4, !tbaa !39
  %757 = load i32, ptr %56, align 4, !tbaa !39
  %758 = icmp eq i32 %757, 1
  br i1 %758, label %759, label %779

759:                                              ; preds = %756
  %760 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1388)
          to label %761 unwind label %766

761:                                              ; preds = %759
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #7
  %762 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %762, i1 noundef zeroext true)
          to label %763 unwind label %770

763:                                              ; preds = %761
  %764 = 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) %57)
          to label %765 unwind label %774

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

766:                                              ; preds = %785, %779, %759, %753
  %767 = landingpad { ptr, i32 }
          cleanup
  %768 = extractvalue { ptr, i32 } %767, 0
  store ptr %768, ptr %18, align 8
  %769 = extractvalue { ptr, i32 } %767, 1
  store i32 %769, ptr %19, align 4
  br label %810

770:                                              ; preds = %761
  %771 = landingpad { ptr, i32 }
          cleanup
  %772 = extractvalue { ptr, i32 } %771, 0
  store ptr %772, ptr %18, align 8
  %773 = extractvalue { ptr, i32 } %771, 1
  store i32 %773, ptr %19, align 4
  br label %778

774:                                              ; preds = %763
  %775 = landingpad { ptr, i32 }
          cleanup
  %776 = extractvalue { ptr, i32 } %775, 0
  store ptr %776, ptr %18, align 8
  %777 = extractvalue { ptr, i32 } %775, 1
  store i32 %777, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  br label %778

778:                                              ; preds = %774, %770
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #7
  br label %810

779:                                              ; preds = %756
  %780 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1387)
          to label %781 unwind label %766

781:                                              ; preds = %779
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #7
  %782 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %782, i1 noundef zeroext true)
          to label %783 unwind label %791

783:                                              ; preds = %781
  %784 = 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) %58)
          to label %785 unwind label %795

785:                                              ; preds = %783
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  %786 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.53)
          to label %787 unwind label %766

787:                                              ; preds = %785
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #7
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %56, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %788 unwind label %800

788:                                              ; preds = %787
  %789 = 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) %59)
          to label %790 unwind label %804

790:                                              ; preds = %788
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #7
  br label %809

791:                                              ; preds = %781
  %792 = landingpad { ptr, i32 }
          cleanup
  %793 = extractvalue { ptr, i32 } %792, 0
  store ptr %793, ptr %18, align 8
  %794 = extractvalue { ptr, i32 } %792, 1
  store i32 %794, ptr %19, align 4
  br label %799

795:                                              ; preds = %783
  %796 = landingpad { ptr, i32 }
          cleanup
  %797 = extractvalue { ptr, i32 } %796, 0
  store ptr %797, ptr %18, align 8
  %798 = extractvalue { ptr, i32 } %796, 1
  store i32 %798, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  br label %799

799:                                              ; preds = %795, %791
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  br label %810

800:                                              ; preds = %787
  %801 = landingpad { ptr, i32 }
          cleanup
  %802 = extractvalue { ptr, i32 } %801, 0
  store ptr %802, ptr %18, align 8
  %803 = extractvalue { ptr, i32 } %801, 1
  store i32 %803, ptr %19, align 4
  br label %808

804:                                              ; preds = %788
  %805 = landingpad { ptr, i32 }
          cleanup
  %806 = extractvalue { ptr, i32 } %805, 0
  store ptr %806, ptr %18, align 8
  %807 = extractvalue { ptr, i32 } %805, 1
  store i32 %807, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  br label %808

808:                                              ; preds = %804, %800
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #7
  br label %810

809:                                              ; preds = %790, %765
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #7
  br label %899

810:                                              ; preds = %808, %799, %778, %766
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #7
  br label %1214

811:                                              ; preds = %750, %744, %743
  %812 = load ptr, ptr %7, align 8, !tbaa !5
  %813 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25is_var_runtime_size_arrayERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(176) %812)
          to label %814 unwind label %276

814:                                              ; preds = %811
  br i1 %813, label %815, label %835

815:                                              ; preds = %814
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #7
  %816 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %816, i1 noundef zeroext true)
          to label %817 unwind label %821

817:                                              ; preds = %815
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %818 unwind label %825

818:                                              ; preds = %817
  %819 = 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) %60)
          to label %820 unwind label %829

820:                                              ; preds = %818
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #7
  br label %898

821:                                              ; preds = %815
  %822 = landingpad { ptr, i32 }
          cleanup
  %823 = extractvalue { ptr, i32 } %822, 0
  store ptr %823, ptr %18, align 8
  %824 = extractvalue { ptr, i32 } %822, 1
  store i32 %824, ptr %19, align 4
  br label %834

825:                                              ; preds = %817
  %826 = landingpad { ptr, i32 }
          cleanup
  %827 = extractvalue { ptr, i32 } %826, 0
  store ptr %827, ptr %18, align 8
  %828 = extractvalue { ptr, i32 } %826, 1
  store i32 %828, ptr %19, align 4
  br label %833

829:                                              ; preds = %818
  %830 = landingpad { ptr, i32 }
          cleanup
  %831 = extractvalue { ptr, i32 } %830, 0
  store ptr %831, ptr %18, align 8
  %832 = extractvalue { ptr, i32 } %830, 1
  store i32 %832, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  br label %833

833:                                              ; preds = %829, %825
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #7
  br label %834

834:                                              ; preds = %833, %821
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #7
  br label %1214

835:                                              ; preds = %814
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #7
  %836 = load ptr, ptr %8, align 8, !tbaa !5
  %837 = load i32, ptr %11, align 4, !tbaa !39
  %838 = load ptr, ptr %90, align 8, !tbaa !53
  %839 = getelementptr inbounds ptr, ptr %838, i64 38
  %840 = load ptr, ptr %839, align 8
  invoke void %840(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %836, i32 noundef %837)
          to label %841 unwind label %846

841:                                              ; preds = %835
  %842 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  br i1 %842, label %843, label %854

843:                                              ; preds = %841
  %844 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1189)
          to label %845 unwind label %850

845:                                              ; preds = %843
  br label %857

846:                                              ; preds = %835
  %847 = landingpad { ptr, i32 }
          cleanup
  %848 = extractvalue { ptr, i32 } %847, 0
  store ptr %848, ptr %18, align 8
  %849 = extractvalue { ptr, i32 } %847, 1
  store i32 %849, ptr %19, align 4
  br label %897

850:                                              ; preds = %854, %843
  %851 = landingpad { ptr, i32 }
          cleanup
  %852 = extractvalue { ptr, i32 } %851, 0
  store ptr %852, ptr %18, align 8
  %853 = extractvalue { ptr, i32 } %851, 1
  store i32 %853, ptr %19, align 4
  br label %896

854:                                              ; preds = %841
  %855 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1387)
          to label %856 unwind label %850

856:                                              ; preds = %854
  br label %857

857:                                              ; preds = %856, %845
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  %858 = load i32, ptr %11, align 4, !tbaa !39
  %859 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL11to_restrictEjb(ptr noundef nonnull align 8 dereferenceable(12482) %90, i32 noundef %858, i1 noundef zeroext true)
          to label %860 unwind label %870

860:                                              ; preds = %857
  store ptr %859, ptr %63, align 8, !tbaa !5
  %861 = load ptr, ptr %63, align 8, !tbaa !5
  %862 = load i8, ptr %861, align 1, !tbaa !203
  %863 = icmp ne i8 %862, 0
  br i1 %863, label %864, label %874

864:                                              ; preds = %860
  %865 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.60)
          to label %866 unwind label %870

866:                                              ; preds = %864
  %867 = load ptr, ptr %63, align 8, !tbaa !5
  %868 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %867)
          to label %869 unwind label %870

869:                                              ; preds = %866
  br label %874

870:                                              ; preds = %882, %880, %866, %864, %857
  %871 = landingpad { ptr, i32 }
          cleanup
  %872 = extractvalue { ptr, i32 } %871, 0
  store ptr %872, ptr %18, align 8
  %873 = extractvalue { ptr, i32 } %871, 1
  store i32 %873, ptr %19, align 4
  br label %895

874:                                              ; preds = %869, %860
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #7
  %875 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %875, i1 noundef zeroext true)
          to label %876 unwind label %885

876:                                              ; preds = %874
  %877 = 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) %64)
          to label %878 unwind label %889

878:                                              ; preds = %876
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #7
  %879 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  br i1 %879, label %894, label %880

880:                                              ; preds = %878
  %881 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.53)
          to label %882 unwind label %870

882:                                              ; preds = %880
  %883 = 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) %62)
          to label %884 unwind label %870

884:                                              ; preds = %882
  br label %894

885:                                              ; preds = %874
  %886 = landingpad { ptr, i32 }
          cleanup
  %887 = extractvalue { ptr, i32 } %886, 0
  store ptr %887, ptr %18, align 8
  %888 = extractvalue { ptr, i32 } %886, 1
  store i32 %888, ptr %19, align 4
  br label %893

889:                                              ; preds = %876
  %890 = landingpad { ptr, i32 }
          cleanup
  %891 = extractvalue { ptr, i32 } %890, 0
  store ptr %891, ptr %18, align 8
  %892 = extractvalue { ptr, i32 } %890, 1
  store i32 %892, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  br label %893

893:                                              ; preds = %889, %885
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #7
  br label %895

894:                                              ; preds = %884, %878
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #7
  br label %898

895:                                              ; preds = %893, %870
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  br label %896

896:                                              ; preds = %895, %850
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  br label %897

897:                                              ; preds = %896, %846
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #7
  br label %1214

898:                                              ; preds = %894, %820
  br label %899

899:                                              ; preds = %898, %809
  br label %1108

900:                                              ; preds = %707, %706
  %901 = load i8, ptr %13, align 1, !tbaa !45, !range !42, !noundef !43
  %902 = trunc i8 %901 to i1
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #7
  br i1 %902, label %922, label %903

903:                                              ; preds = %900
  %904 = load i8, ptr %14, align 1, !tbaa !45, !range !42, !noundef !43
  %905 = trunc i8 %904 to i1
  br i1 %905, label %922, label %906

906:                                              ; preds = %903
  %907 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 110
  %908 = load ptr, ptr %7, align 8, !tbaa !5
  %909 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %908, i32 0, i32 5
  %910 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %909)
          to label %911 unwind label %938

911:                                              ; preds = %906
  store i32 %910, ptr %65, align 4, !tbaa !39
  %912 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %907, ptr noundef nonnull align 4 dereferenceable(4) %65)
          to label %913 unwind label %938

913:                                              ; preds = %911
  %914 = icmp ne i64 %912, 0
  br i1 %914, label %915, label %920

915:                                              ; preds = %913
  %916 = load ptr, ptr %8, align 8, !tbaa !5
  %917 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %916, i32 0, i32 2
  %918 = load i32, ptr %917, align 8, !tbaa !46
  %919 = icmp eq i32 %918, 15
  br label %920

920:                                              ; preds = %915, %913
  %921 = phi i1 [ true, %913 ], [ %919, %915 ]
  br label %922

922:                                              ; preds = %920, %903, %900
  %923 = phi i1 [ false, %903 ], [ false, %900 ], [ %921, %920 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #7
  br i1 %923, label %924, label %986

924:                                              ; preds = %922
  %925 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br i1 %925, label %963, label %926

926:                                              ; preds = %924
  %927 = load ptr, ptr %8, align 8, !tbaa !5
  %928 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %90, ptr noundef nonnull align 8 dereferenceable(336) %927)
          to label %929 unwind label %276

929:                                              ; preds = %926
  br i1 %928, label %930, label %955

930:                                              ; preds = %929
  %931 = load ptr, ptr %15, align 8, !tbaa !5
  %932 = load i8, ptr %931, align 1, !tbaa !203
  %933 = sext i8 %932 to i32
  %934 = icmp eq i32 %933, 0
  br i1 %934, label %935, label %942

935:                                              ; preds = %930
  %936 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 32)
          to label %937 unwind label %276

937:                                              ; preds = %935
  br label %942

938:                                              ; preds = %911, %906
  %939 = landingpad { ptr, i32 }
          cleanup
  %940 = extractvalue { ptr, i32 } %939, 0
  store ptr %940, ptr %18, align 8
  %941 = extractvalue { ptr, i32 } %939, 1
  store i32 %941, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #7
  br label %1214

942:                                              ; preds = %937, %930
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.60)
          to label %943 unwind label %946

943:                                              ; preds = %942
  %944 = 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) %66)
          to label %945 unwind label %950

945:                                              ; preds = %943
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #7
  br label %962

946:                                              ; preds = %942
  %947 = landingpad { ptr, i32 }
          cleanup
  %948 = extractvalue { ptr, i32 } %947, 0
  store ptr %948, ptr %18, align 8
  %949 = extractvalue { ptr, i32 } %947, 1
  store i32 %949, ptr %19, align 4
  br label %954

950:                                              ; preds = %943
  %951 = landingpad { ptr, i32 }
          cleanup
  %952 = extractvalue { ptr, i32 } %951, 0
  store ptr %952, ptr %18, align 8
  %953 = extractvalue { ptr, i32 } %951, 1
  store i32 %953, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  br label %954

954:                                              ; preds = %950, %946
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #7
  br label %1214

955:                                              ; preds = %929
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %956 unwind label %958

956:                                              ; preds = %955
  %957 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #7
  br label %962

958:                                              ; preds = %955
  %959 = landingpad { ptr, i32 }
          cleanup
  %960 = extractvalue { ptr, i32 } %959, 0
  store ptr %960, ptr %18, align 8
  %961 = extractvalue { ptr, i32 } %959, 1
  store i32 %961, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #7
  br label %1214

962:                                              ; preds = %956, %945
  br label %963

963:                                              ; preds = %962, %924
  %964 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1120)
          to label %965 unwind label %276

965:                                              ; preds = %963
  %966 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.60)
          to label %967 unwind label %276

967:                                              ; preds = %965
  %968 = load i32, ptr %11, align 4, !tbaa !39
  %969 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL11to_restrictEjb(ptr noundef nonnull align 8 dereferenceable(12482) %90, i32 noundef %968, i1 noundef zeroext true)
          to label %970 unwind label %276

970:                                              ; preds = %967
  %971 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %969)
          to label %972 unwind label %276

972:                                              ; preds = %970
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #7
  %973 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %973, i1 noundef zeroext true)
          to label %974 unwind label %977

974:                                              ; preds = %972
  %975 = 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) %68)
          to label %976 unwind label %981

976:                                              ; preds = %974
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #7
  br label %1107

977:                                              ; preds = %972
  %978 = landingpad { ptr, i32 }
          cleanup
  %979 = extractvalue { ptr, i32 } %978, 0
  store ptr %979, ptr %18, align 8
  %980 = extractvalue { ptr, i32 } %978, 1
  store i32 %980, ptr %19, align 4
  br label %985

981:                                              ; preds = %974
  %982 = landingpad { ptr, i32 }
          cleanup
  %983 = extractvalue { ptr, i32 } %982, 0
  store ptr %983, ptr %18, align 8
  %984 = extractvalue { ptr, i32 } %982, 1
  store i32 %984, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #7
  br label %985

985:                                              ; preds = %981, %977
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #7
  br label %1214

986:                                              ; preds = %922
  %987 = load i8, ptr %13, align 1, !tbaa !45, !range !42, !noundef !43
  %988 = trunc i8 %987 to i1
  br i1 %988, label %992, label %989

989:                                              ; preds = %986
  %990 = load i8, ptr %14, align 1, !tbaa !45, !range !42, !noundef !43
  %991 = trunc i8 %990 to i1
  br i1 %991, label %992, label %1081

992:                                              ; preds = %989, %986
  %993 = load ptr, ptr %7, align 8, !tbaa !5
  %994 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25is_var_runtime_size_arrayERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(176) %993)
          to label %995 unwind label %276

995:                                              ; preds = %992
  br i1 %994, label %996, label %1028

996:                                              ; preds = %995
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.60)
          to label %997 unwind label %1004

997:                                              ; preds = %996
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %998 unwind label %1008

998:                                              ; preds = %997
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef @.str.60)
          to label %999 unwind label %1012

999:                                              ; preds = %998
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #7
  %1000 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %1000, i1 noundef zeroext true)
          to label %1001 unwind label %1016

1001:                                             ; preds = %999
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef nonnull align 8 dereferenceable(32) %73)
          to label %1002 unwind label %1020

1002:                                             ; preds = %1001
  %1003 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %69) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #7
  br label %1080

1004:                                             ; preds = %996
  %1005 = landingpad { ptr, i32 }
          cleanup
  %1006 = extractvalue { ptr, i32 } %1005, 0
  store ptr %1006, ptr %18, align 8
  %1007 = extractvalue { ptr, i32 } %1005, 1
  store i32 %1007, ptr %19, align 4
  br label %1027

1008:                                             ; preds = %997
  %1009 = landingpad { ptr, i32 }
          cleanup
  %1010 = extractvalue { ptr, i32 } %1009, 0
  store ptr %1010, ptr %18, align 8
  %1011 = extractvalue { ptr, i32 } %1009, 1
  store i32 %1011, ptr %19, align 4
  br label %1026

1012:                                             ; preds = %998
  %1013 = landingpad { ptr, i32 }
          cleanup
  %1014 = extractvalue { ptr, i32 } %1013, 0
  store ptr %1014, ptr %18, align 8
  %1015 = extractvalue { ptr, i32 } %1013, 1
  store i32 %1015, ptr %19, align 4
  br label %1025

1016:                                             ; preds = %999
  %1017 = landingpad { ptr, i32 }
          cleanup
  %1018 = extractvalue { ptr, i32 } %1017, 0
  store ptr %1018, ptr %18, align 8
  %1019 = extractvalue { ptr, i32 } %1017, 1
  store i32 %1019, ptr %19, align 4
  br label %1024

1020:                                             ; preds = %1001
  %1021 = landingpad { ptr, i32 }
          cleanup
  %1022 = extractvalue { ptr, i32 } %1021, 0
  store ptr %1022, ptr %18, align 8
  %1023 = extractvalue { ptr, i32 } %1021, 1
  store i32 %1023, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #7
  br label %1024

1024:                                             ; preds = %1020, %1016
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  br label %1025

1025:                                             ; preds = %1024, %1012
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #7
  br label %1026

1026:                                             ; preds = %1025, %1008
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #7
  br label %1027

1027:                                             ; preds = %1026, %1004
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #7
  br label %1214

1028:                                             ; preds = %995
  %1029 = load ptr, ptr %8, align 8, !tbaa !5
  %1030 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1029, i32 0, i32 6
  %1031 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1030) #7
  br i1 %1031, label %1032, label %1048

1032:                                             ; preds = %1028
  %1033 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.60)
          to label %1034 unwind label %276

1034:                                             ; preds = %1032
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #7
  %1035 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %1035, i1 noundef zeroext true)
          to label %1036 unwind label %1039

1036:                                             ; preds = %1034
  %1037 = 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) %74)
          to label %1038 unwind label %1043

1038:                                             ; preds = %1036
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #7
  br label %1079

1039:                                             ; preds = %1034
  %1040 = landingpad { ptr, i32 }
          cleanup
  %1041 = extractvalue { ptr, i32 } %1040, 0
  store ptr %1041, ptr %18, align 8
  %1042 = extractvalue { ptr, i32 } %1040, 1
  store i32 %1042, ptr %19, align 4
  br label %1047

1043:                                             ; preds = %1036
  %1044 = landingpad { ptr, i32 }
          cleanup
  %1045 = extractvalue { ptr, i32 } %1044, 0
  store ptr %1045, ptr %18, align 8
  %1046 = extractvalue { ptr, i32 } %1044, 1
  store i32 %1046, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #7
  br label %1047

1047:                                             ; preds = %1043, %1039
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #7
  br label %1214

1048:                                             ; preds = %1028
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #7
  %1049 = load i32, ptr %11, align 4, !tbaa !39
  %1050 = load i32, ptr %10, align 4, !tbaa !38
  %1051 = invoke noundef ptr @_ZNK11spirv_cross11CompilerMSL24descriptor_address_spaceEjN3spv12StorageClassEPKc(ptr noundef nonnull align 8 dereferenceable(12482) %90, i32 noundef %1049, i32 noundef %1050, ptr noundef @.str.283)
          to label %1052 unwind label %1061

1052:                                             ; preds = %1048
  store ptr %1051, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #7
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %1053 unwind label %1065

1053:                                             ; preds = %1052
  %1054 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #7
  %1055 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1189)
          to label %1056 unwind label %1061

1056:                                             ; preds = %1053
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #7
  %1057 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %1057, i1 noundef zeroext true)
          to label %1058 unwind label %1069

1058:                                             ; preds = %1056
  %1059 = 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) %77)
          to label %1060 unwind label %1073

1060:                                             ; preds = %1058
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  br label %1079

1061:                                             ; preds = %1053, %1048
  %1062 = landingpad { ptr, i32 }
          cleanup
  %1063 = extractvalue { ptr, i32 } %1062, 0
  store ptr %1063, ptr %18, align 8
  %1064 = extractvalue { ptr, i32 } %1062, 1
  store i32 %1064, ptr %19, align 4
  br label %1078

1065:                                             ; preds = %1052
  %1066 = landingpad { ptr, i32 }
          cleanup
  %1067 = extractvalue { ptr, i32 } %1066, 0
  store ptr %1067, ptr %18, align 8
  %1068 = extractvalue { ptr, i32 } %1066, 1
  store i32 %1068, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #7
  br label %1078

1069:                                             ; preds = %1056
  %1070 = landingpad { ptr, i32 }
          cleanup
  %1071 = extractvalue { ptr, i32 } %1070, 0
  store ptr %1071, ptr %18, align 8
  %1072 = extractvalue { ptr, i32 } %1070, 1
  store i32 %1072, ptr %19, align 4
  br label %1077

1073:                                             ; preds = %1058
  %1074 = landingpad { ptr, i32 }
          cleanup
  %1075 = extractvalue { ptr, i32 } %1074, 0
  store ptr %1075, ptr %18, align 8
  %1076 = extractvalue { ptr, i32 } %1074, 1
  store i32 %1076, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #7
  br label %1077

1077:                                             ; preds = %1073, %1069
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #7
  br label %1078

1078:                                             ; preds = %1077, %1065, %1061
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  br label %1214

1079:                                             ; preds = %1060, %1038
  br label %1080

1080:                                             ; preds = %1079, %1002
  br label %1106

1081:                                             ; preds = %989
  %1082 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br i1 %1082, label %1090, label %1083

1083:                                             ; preds = %1081
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %1084 unwind label %1086

1084:                                             ; preds = %1083
  %1085 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %78) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #7
  br label %1090

1086:                                             ; preds = %1083
  %1087 = landingpad { ptr, i32 }
          cleanup
  %1088 = extractvalue { ptr, i32 } %1087, 0
  store ptr %1088, ptr %18, align 8
  %1089 = extractvalue { ptr, i32 } %1087, 1
  store i32 %1089, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #7
  br label %1214

1090:                                             ; preds = %1084, %1081
  %1091 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.60)
          to label %1092 unwind label %276

1092:                                             ; preds = %1090
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #7
  %1093 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %1093, i1 noundef zeroext true)
          to label %1094 unwind label %1097

1094:                                             ; preds = %1092
  %1095 = 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) %79)
          to label %1096 unwind label %1101

1096:                                             ; preds = %1094
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #7
  br label %1106

1097:                                             ; preds = %1092
  %1098 = landingpad { ptr, i32 }
          cleanup
  %1099 = extractvalue { ptr, i32 } %1098, 0
  store ptr %1099, ptr %18, align 8
  %1100 = extractvalue { ptr, i32 } %1098, 1
  store i32 %1100, ptr %19, align 4
  br label %1105

1101:                                             ; preds = %1094
  %1102 = landingpad { ptr, i32 }
          cleanup
  %1103 = extractvalue { ptr, i32 } %1102, 0
  store ptr %1103, ptr %18, align 8
  %1104 = extractvalue { ptr, i32 } %1102, 1
  store i32 %1104, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #7
  br label %1105

1105:                                             ; preds = %1101, %1097
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #7
  br label %1214

1106:                                             ; preds = %1096, %1080
  br label %1107

1107:                                             ; preds = %1106, %976
  br label %1108

1108:                                             ; preds = %1107, %899
  br label %1109

1109:                                             ; preds = %1108, %702
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #7
  %1110 = load i32, ptr %11, align 4, !tbaa !39
  %1111 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 noundef %1110)
          to label %1112 unwind label %1159

1112:                                             ; preds = %1109
  store ptr %1111, ptr %80, align 8, !tbaa !5
  %1113 = load ptr, ptr %80, align 8, !tbaa !5
  %1114 = icmp ne ptr %1113, null
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #7
  br i1 %1114, label %1115, label %1124

1115:                                             ; preds = %1112
  %1116 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 109
  %1117 = load ptr, ptr %80, align 8, !tbaa !5
  %1118 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1117, i32 0, i32 1
  %1119 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1118)
          to label %1120 unwind label %1163

1120:                                             ; preds = %1115
  store i32 %1119, ptr %81, align 4, !tbaa !39
  %1121 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1116, ptr noundef nonnull align 4 dereferenceable(4) %81)
          to label %1122 unwind label %1163

1122:                                             ; preds = %1120
  %1123 = icmp ne i64 %1121, 0
  br label %1124

1124:                                             ; preds = %1122, %1112
  %1125 = phi i1 [ false, %1112 ], [ %1123, %1122 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #7
  br i1 %1125, label %1126, label %1210

1126:                                             ; preds = %1124
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #7
  %1127 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %90, i32 0, i32 1
  %1128 = load ptr, ptr %80, align 8, !tbaa !5
  %1129 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1128, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %83, ptr align 8 %1129, i64 4, i1 false), !tbaa.struct !50
  %1130 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %83, i32 0, i32 0
  %1131 = load i32, ptr %1130, align 4
  %1132 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8ParsedIR21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %1127, i32 %1131)
          to label %1133 unwind label %1167

1133:                                             ; preds = %1126
  store ptr %1132, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #7
  %1134 = load ptr, ptr %82, align 8, !tbaa !5
  %1135 = invoke noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL32decoration_flags_signal_volatileERKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(64) %1134)
          to label %1136 unwind label %1171

1136:                                             ; preds = %1133
  %1137 = zext i1 %1135 to i64
  %1138 = select i1 %1135, ptr @.str.1118, ptr @.str.35
  store ptr %1138, ptr %84, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #7
  %1139 = load ptr, ptr %9, align 8, !tbaa !5
  %1140 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1139, i32 0, i32 14
  %1141 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1140, i32 0, i32 0
  %1142 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1141)
          to label %1143 unwind label %1175

1143:                                             ; preds = %1136
  %1144 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %90, i32 noundef %1142)
          to label %1145 unwind label %1175

1145:                                             ; preds = %1143
  %1146 = load ptr, ptr %90, align 8, !tbaa !53
  %1147 = getelementptr inbounds ptr, ptr %1146, i64 19
  %1148 = load ptr, ptr %1147, align 8
  invoke void %1148(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 8 dereferenceable(12482) %90, ptr noundef nonnull align 8 dereferenceable(336) %1144, i32 noundef 0)
          to label %1149 unwind label %1175

1149:                                             ; preds = %1145
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRPS1_RA15_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESD_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(8) %84, ptr noundef nonnull align 1 dereferenceable(15) @.str.1381, ptr noundef nonnull align 8 dereferenceable(32) %86)
          to label %1150 unwind label %1179

1150:                                             ; preds = %1149
  %1151 = 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) %85)
          to label %1152 unwind label %1183

1152:                                             ; preds = %1150
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %88) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #7
  %1153 = load i32, ptr %11, align 4, !tbaa !39
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %89, ptr noundef nonnull align 8 dereferenceable(9848) %90, i32 noundef %1153, i1 noundef zeroext true)
          to label %1154 unwind label %1189

1154:                                             ; preds = %1152
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %88, ptr noundef @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %89)
          to label %1155 unwind label %1193

1155:                                             ; preds = %1154
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull align 8 dereferenceable(32) %88, ptr noundef @.str.1293)
          to label %1156 unwind label %1197

1156:                                             ; preds = %1155
  %1157 = 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) %87)
          to label %1158 unwind label %1201

1158:                                             ; preds = %1156
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #7
  br label %1210

1159:                                             ; preds = %1109
  %1160 = landingpad { ptr, i32 }
          cleanup
  %1161 = extractvalue { ptr, i32 } %1160, 0
  store ptr %1161, ptr %18, align 8
  %1162 = extractvalue { ptr, i32 } %1160, 1
  store i32 %1162, ptr %19, align 4
  br label %1213

1163:                                             ; preds = %1120, %1115
  %1164 = landingpad { ptr, i32 }
          cleanup
  %1165 = extractvalue { ptr, i32 } %1164, 0
  store ptr %1165, ptr %18, align 8
  %1166 = extractvalue { ptr, i32 } %1164, 1
  store i32 %1166, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #7
  br label %1213

1167:                                             ; preds = %1126
  %1168 = landingpad { ptr, i32 }
          cleanup
  %1169 = extractvalue { ptr, i32 } %1168, 0
  store ptr %1169, ptr %18, align 8
  %1170 = extractvalue { ptr, i32 } %1168, 1
  store i32 %1170, ptr %19, align 4
  br label %1209

1171:                                             ; preds = %1133
  %1172 = landingpad { ptr, i32 }
          cleanup
  %1173 = extractvalue { ptr, i32 } %1172, 0
  store ptr %1173, ptr %18, align 8
  %1174 = extractvalue { ptr, i32 } %1172, 1
  store i32 %1174, ptr %19, align 4
  br label %1208

1175:                                             ; preds = %1145, %1143, %1136
  %1176 = landingpad { ptr, i32 }
          cleanup
  %1177 = extractvalue { ptr, i32 } %1176, 0
  store ptr %1177, ptr %18, align 8
  %1178 = extractvalue { ptr, i32 } %1176, 1
  store i32 %1178, ptr %19, align 4
  br label %1188

1179:                                             ; preds = %1149
  %1180 = landingpad { ptr, i32 }
          cleanup
  %1181 = extractvalue { ptr, i32 } %1180, 0
  store ptr %1181, ptr %18, align 8
  %1182 = extractvalue { ptr, i32 } %1180, 1
  store i32 %1182, ptr %19, align 4
  br label %1187

1183:                                             ; preds = %1150
  %1184 = landingpad { ptr, i32 }
          cleanup
  %1185 = extractvalue { ptr, i32 } %1184, 0
  store ptr %1185, ptr %18, align 8
  %1186 = extractvalue { ptr, i32 } %1184, 1
  store i32 %1186, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #7
  br label %1187

1187:                                             ; preds = %1183, %1179
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #7
  br label %1188

1188:                                             ; preds = %1187, %1175
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #7
  br label %1208

1189:                                             ; preds = %1152
  %1190 = landingpad { ptr, i32 }
          cleanup
  %1191 = extractvalue { ptr, i32 } %1190, 0
  store ptr %1191, ptr %18, align 8
  %1192 = extractvalue { ptr, i32 } %1190, 1
  store i32 %1192, ptr %19, align 4
  br label %1207

1193:                                             ; preds = %1154
  %1194 = landingpad { ptr, i32 }
          cleanup
  %1195 = extractvalue { ptr, i32 } %1194, 0
  store ptr %1195, ptr %18, align 8
  %1196 = extractvalue { ptr, i32 } %1194, 1
  store i32 %1196, ptr %19, align 4
  br label %1206

1197:                                             ; preds = %1155
  %1198 = landingpad { ptr, i32 }
          cleanup
  %1199 = extractvalue { ptr, i32 } %1198, 0
  store ptr %1199, ptr %18, align 8
  %1200 = extractvalue { ptr, i32 } %1198, 1
  store i32 %1200, ptr %19, align 4
  br label %1205

1201:                                             ; preds = %1156
  %1202 = landingpad { ptr, i32 }
          cleanup
  %1203 = extractvalue { ptr, i32 } %1202, 0
  store ptr %1203, ptr %18, align 8
  %1204 = extractvalue { ptr, i32 } %1202, 1
  store i32 %1204, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #7
  br label %1205

1205:                                             ; preds = %1201, %1197
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #7
  br label %1206

1206:                                             ; preds = %1205, %1193
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #7
  br label %1207

1207:                                             ; preds = %1206, %1189
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #7
  br label %1208

1208:                                             ; preds = %1207, %1188, %1171
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  br label %1209

1209:                                             ; preds = %1208, %1167
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #7
  br label %1213

1210:                                             ; preds = %1158, %1124
  %1211 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %90, i32 0, i32 74
  store i8 0, ptr %1211, align 2, !tbaa !55
  store i1 true, ptr %16, align 1
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #7
  %1212 = load i1, ptr %16, align 1
  br i1 %1212, label %1219, label %1218

1213:                                             ; preds = %1209, %1163, %1159
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #7
  br label %1214

1214:                                             ; preds = %1213, %1105, %1086, %1078, %1047, %1027, %985, %958, %954, %938, %897, %834, %810, %736, %715, %701, %682, %676, %638, %584, %562, %550, %526, %495, %457, %390, %288, %276
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %1215

1215:                                             ; preds = %1214, %272
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br label %1216

1216:                                             ; preds = %1215, %268
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #7
  br label %1217

1217:                                             ; preds = %1216, %264, %260
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  br label %1220

1218:                                             ; preds = %1210
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  br label %1219

1219:                                             ; preds = %1218, %1210
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  ret void

1220:                                             ; preds = %1217
  %1221 = load ptr, ptr %18, align 8
  %1222 = load i32, ptr %19, align 4
  %1223 = insertvalue { ptr, i32 } poison, ptr %1221, 0
  %1224 = insertvalue { ptr, i32 } %1223, i32 %1222, 1
  resume { ptr, i32 } %1224
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_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 8 dereferenceable(32)) #2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_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_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEES6_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)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_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)) #2

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

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

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


; 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 }

@.str.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 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.61 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.283 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.290 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1118 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1120 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1189 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1275 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1293 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1381 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1383 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1384 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1385 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1386 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1387 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1388 = external hidden unnamed_addr constant [3 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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef 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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL26get_argument_address_spaceB5cxx11ERKNS_12SPIRVariableE(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(176)) local_unnamed_addr #2 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: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare 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: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #5

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(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 4 dereferenceable(17) %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::allocator.71", 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::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca i32, align 4
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca i32, align 4
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca ptr, align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca i32, align 4
  %57 = alloca ptr, align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = getelementptr inbounds i8, ptr %2, i64 4
  %64 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  %65 = tail call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %64)
  %66 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(176) %65)
  %67 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2)
  %68 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %67)
  %69 = getelementptr inbounds i8, ptr %68, i64 128
  %70 = load i32, ptr %69, align 8, !tbaa !5
  %71 = getelementptr inbounds i8, ptr %65, i64 8
  %72 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %71)
  %73 = getelementptr inbounds i8, ptr %2, i64 16
  %74 = load i8, ptr %73, align 4, !tbaa !37, !range !39, !noundef !40
  %75 = trunc nuw i8 %74 to i1
  br i1 %75, label %76, label %81

76:                                               ; preds = %3
  %77 = getelementptr inbounds i8, ptr %65, i64 28
  %78 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %77)
  %.not = icmp eq i32 %78, 0
  br i1 %.not, label %81, label %79

79:                                               ; preds = %76
  %80 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %77)
  br label %81

81:                                               ; preds = %79, %76, %3
  %.0 = phi i32 [ %80, %79 ], [ %72, %76 ], [ %72, %3 ]
  %82 = load i8, ptr %73, align 4, !tbaa !37, !range !39, !noundef !40
  %83 = trunc nuw i8 %82 to i1
  br i1 %83, label %90, label %84

84:                                               ; preds = %81
  %85 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %68)
  br i1 %85, label %86, label %90

86:                                               ; preds = %84
  %87 = getelementptr inbounds i8, ptr %2, i64 12
  %88 = load i32, ptr %87, align 4, !tbaa !41
  %89 = icmp eq i32 %88, 0
  br label %90

90:                                               ; preds = %86, %84, %81
  %91 = phi i1 [ false, %84 ], [ false, %81 ], [ %89, %86 ]
  %92 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL29type_is_msl_framebuffer_fetchERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %66)
  br i1 %92, label %switch.edge, label %93

93:                                               ; preds = %90
  %94 = icmp eq i32 %70, 0
  %spec.select = select i1 %94, i1 true, i1 %91
  br label %switch.edge

switch.edge:                                      ; preds = %93, %90
  %.0148 = phi i1 [ false, %90 ], [ %spec.select, %93 ]
  %95 = getelementptr inbounds i8, ptr %66, i64 16
  %96 = load i32, ptr %95, align 8, !tbaa !42
  %97 = add i32 %96, -19
  %switch = icmp ult i32 %97, -3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  %98 = and i1 %.0148, %switch
  %99 = select i1 %98, ptr @.str.1383, ptr @.str.35
  store ptr %99, ptr %4, align 8, !tbaa !43
  tail call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  %100 = load i8, ptr %73, align 4, !tbaa !37, !range !39, !noundef !40
  %101 = trunc nuw i8 %100 to i1
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #6
  %.not286 = xor i1 %101, true
  %102 = load i32, ptr %95, align 8
  %103 = icmp eq i32 %102, 17
  %or.cond = select i1 %.not286, i1 %103, i1 false
  %104 = getelementptr inbounds i8, ptr %66, i64 252
  %105 = load i32, ptr %104, align 4
  %106 = icmp eq i32 %105, 1
  %or.cond290 = select i1 %or.cond, i1 %106, i1 false
  br i1 %or.cond290, label %107, label %118

107:                                              ; preds = %switch.edge
  %108 = getelementptr inbounds i8, ptr %66, i64 248
  %109 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %108)
  %110 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %109)
          to label %111 unwind label %145

111:                                              ; preds = %107
  %112 = tail call noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %110)
  br i1 %112, label %113, label %118

113:                                              ; preds = %111
  %114 = getelementptr inbounds i8, ptr %1, i64 10176
  store i8 66, ptr %5, align 1, !tbaa !44
  %115 = invoke noundef i64 @_ZNKSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE5countERKS2_(ptr noundef nonnull align 8 dereferenceable(48) %114, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %116 unwind label %147

116:                                              ; preds = %113
  %117 = icmp ne i64 %115, 0
  br label %118

118:                                              ; preds = %116, %111, %switch.edge
  %119 = phi i1 [ false, %111 ], [ false, %switch.edge ], [ %117, %116 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #6
  invoke void @_ZN11spirv_cross11CompilerMSL26get_argument_address_spaceB5cxx11ERKNS_12SPIRVariableE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(176) %65)
          to label %120 unwind label %149

120:                                              ; preds = %118
  %.sroa.045.0.copyload = load i32, ptr %71, align 8, !tbaa !46
  %121 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.045.0.copyload, i32 noundef 11)
          to label %122 unwind label %151

122:                                              ; preds = %120
  %.sroa.032.0.copyload = load i32, ptr %63, align 4, !tbaa !46
  %123 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.032.0.copyload, i32 noundef 11)
          to label %124 unwind label %153

124:                                              ; preds = %122
  %125 = getelementptr inbounds i8, ptr %65, i64 28
  %126 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %125)
  %.not204 = icmp eq i32 %126, 0
  br i1 %.not204, label %160, label %127

127:                                              ; preds = %124
  %128 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %125)
  %129 = getelementptr inbounds i8, ptr %1, i64 11148
  %130 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %129)
  %131 = icmp eq i32 %128, %130
  br i1 %131, label %137, label %132

132:                                              ; preds = %127
  %133 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %125)
  %134 = getelementptr inbounds i8, ptr %1, i64 11152
  %135 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %134)
  %136 = icmp eq i32 %133, %135
  br i1 %136, label %137, label %160

137:                                              ; preds = %132, %127
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #6
  %138 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  %139 = load ptr, ptr %1, align 8, !tbaa !47
  %140 = getelementptr inbounds i8, ptr %139, i64 152
  %141 = load ptr, ptr %140, align 8
  invoke void %141(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %66, i32 noundef %138)
          to label %142 unwind label %155

142:                                              ; preds = %137
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %143 unwind label %157

143:                                              ; preds = %142
  %144 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %332

145:                                              ; preds = %107
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %719

147:                                              ; preds = %113
  %148 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  br label %719

149:                                              ; preds = %118
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %718

151:                                              ; preds = %120
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %717

153:                                              ; preds = %644, %606, %579, %568, %566, %564, %562, %544, %537, %471, %426, %414, %404, %393, %346, %341, %333, %296, %288, %257, %214, %122
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %717

155:                                              ; preds = %137
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %159

157:                                              ; preds = %142
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  br label %159

159:                                              ; preds = %157, %155
  %.pn223 = phi { ptr, i32 } [ %158, %157 ], [ %156, %155 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %717

160:                                              ; preds = %132, %124
  %161 = add i32 %123, -5297
  %162 = icmp ult i32 %161, -3
  %or.cond5 = and i1 %121, %162
  br i1 %or.cond5, label %163, label %214

163:                                              ; preds = %160
  %164 = getelementptr inbounds i8, ptr %65, i64 12
  %165 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %164)
  %166 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %165)
          to label %167 unwind label %172

167:                                              ; preds = %163
  %168 = getelementptr inbounds i8, ptr %166, i64 128
  %169 = load i32, ptr %168, align 8, !tbaa !5
  %170 = icmp eq i32 %169, 1
  %171 = add i32 %123, -11
  %or.cond7 = icmp ult i32 %171, 2
  %or.cond291 = and i1 %or.cond7, %170
  br i1 %or.cond291, label %.sink.split, label %174

172:                                              ; preds = %183, %180, %163
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %717

174:                                              ; preds = %167
  %175 = add i32 %123, -5
  %or.cond9 = icmp ult i32 %175, -2
  br i1 %or.cond9, label %176, label %178

176:                                              ; preds = %174
  %177 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 1, ptr %177, align 2, !tbaa !49
  br label %178

178:                                              ; preds = %174, %176
  %179 = icmp eq i32 %169, 3
  br i1 %179, label %180, label %187

180:                                              ; preds = %178
  %181 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef 3)
          to label %182 unwind label %172

182:                                              ; preds = %180
  br i1 %181, label %183, label %187

183:                                              ; preds = %182
  %184 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30is_stage_output_builtin_maskedEN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %123)
          to label %185 unwind label %172

185:                                              ; preds = %183
  br i1 %184, label %187, label %.sink.split

.sink.split:                                      ; preds = %185, %167
  %.sink = phi i8 [ 0, %167 ], [ 1, %185 ]
  %186 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 %.sink, ptr %186, align 2, !tbaa !49
  br label %187

187:                                              ; preds = %.sink.split, %185, %182, %178
  %188 = getelementptr inbounds i8, ptr %1, i64 11186
  %189 = load i8, ptr %188, align 2, !tbaa !49, !range !39, !noundef !40
  %190 = trunc nuw i8 %189 to i1
  br i1 %190, label %191, label %201

191:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  %192 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  invoke void @_ZN11spirv_cross11CompilerMSL17builtin_type_declB5cxx11EN3spv7BuiltInEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %123, i32 noundef %192)
          to label %193 unwind label %196

193:                                              ; preds = %191
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %194 unwind label %198

194:                                              ; preds = %193
  %195 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %332

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

198:                                              ; preds = %193
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  br label %200

200:                                              ; preds = %198, %196
  %.pn220 = phi { ptr, i32 } [ %199, %198 ], [ %197, %196 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %717

201:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  %202 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  %203 = load ptr, ptr %1, align 8, !tbaa !47
  %204 = getelementptr inbounds i8, ptr %203, i64 152
  %205 = load ptr, ptr %204, align 8
  invoke void %205(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) %66, i32 noundef %202)
          to label %206 unwind label %209

206:                                              ; preds = %201
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %207 unwind label %211

207:                                              ; preds = %206
  %208 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %332

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

211:                                              ; preds = %206
  %212 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  br label %213

213:                                              ; preds = %211, %209
  %.pn218 = phi { ptr, i32 } [ %212, %211 ], [ %210, %209 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %717

214:                                              ; preds = %160
  %215 = 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) %65)
          to label %216 unwind label %153

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

217:                                              ; preds = %216
  %218 = getelementptr inbounds i8, ptr %66, i64 276
  %219 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %218)
  %220 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %219)
          to label %221 unwind label %232

221:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  %222 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  %223 = load ptr, ptr %1, align 8, !tbaa !47
  %224 = getelementptr inbounds i8, ptr %223, i64 152
  %225 = load ptr, ptr %224, align 8
  invoke void %225(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %220, i32 noundef %222)
          to label %226 unwind label %234

226:                                              ; preds = %221
  %227 = load i32, ptr %95, align 8, !tbaa !42
  %228 = icmp eq i32 %227, 19
  br i1 %228, label %229, label %238

229:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  invoke void @_ZN11spirv_cross4joinIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 1 dereferenceable(20) @.str.77, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %230 unwind label %236

230:                                              ; preds = %229
  %231 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  br label %249

232:                                              ; preds = %217
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %717

234:                                              ; preds = %221
  %235 = landingpad { ptr, i32 }
          cleanup
  br label %255

236:                                              ; preds = %229
  %237 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  br label %254

238:                                              ; preds = %226
  br i1 %switch, label %244, label %239

239:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  invoke void @_ZN11spirv_cross4joinIJRA20_KcRPS1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 1 dereferenceable(20) @.str.77, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %240 unwind label %242

240:                                              ; preds = %239
  %241 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %249

242:                                              ; preds = %239
  %243 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %254

244:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #6
  invoke void @_ZN11spirv_cross4joinIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 1 dereferenceable(20) @.str.77, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 1 dereferenceable(3) @.str.1384)
          to label %245 unwind label %247

245:                                              ; preds = %244
  %246 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %249

247:                                              ; preds = %244
  %248 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %254

249:                                              ; preds = %240, %245, %230
  %250 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.1385)
          to label %251 unwind label %252

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

252:                                              ; preds = %249
  %253 = landingpad { ptr, i32 }
          cleanup
  br label %254

254:                                              ; preds = %252, %247, %242, %236
  %.pn214 = phi { ptr, i32 } [ %253, %252 ], [ %237, %236 ], [ %243, %242 ], [ %248, %247 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  br label %255

255:                                              ; preds = %254, %234
  %.pn214.pn = phi { ptr, i32 } [ %.pn214, %254 ], [ %235, %234 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %717

256:                                              ; preds = %216
  switch i32 %70, label %278 [
    i32 12, label %257
    i32 2, label %257
  ]

257:                                              ; preds = %256, %256
  %258 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %66)
          to label %259 unwind label %153

259:                                              ; preds = %257
  br i1 %258, label %260, label %278

260:                                              ; preds = %259
  %261 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 1, ptr %261, align 2, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  %262 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  %263 = load ptr, ptr %1, align 8, !tbaa !47
  %264 = getelementptr inbounds i8, ptr %263, i64 152
  %265 = load ptr, ptr %264, align 8
  invoke void %265(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) %66, i32 noundef %262)
          to label %266 unwind label %270

266:                                              ; preds = %260
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(2) @.str.960)
          to label %267 unwind label %272

267:                                              ; preds = %266
  %268 = 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) %17)
          to label %269 unwind label %274

269:                                              ; preds = %267
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  br label %332

270:                                              ; preds = %260
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %277

272:                                              ; preds = %266
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %276

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

276:                                              ; preds = %274, %272
  %.pn211 = phi { ptr, i32 } [ %275, %274 ], [ %273, %272 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  br label %277

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

278:                                              ; preds = %256, %259
  br i1 %119, label %279, label %296

279:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #6
  %280 = getelementptr inbounds i8, ptr %66, i64 248
  %281 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %280)
  %282 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %281)
          to label %283 unwind label %291

283:                                              ; preds = %279
  %284 = load ptr, ptr %1, align 8, !tbaa !47
  %285 = getelementptr inbounds i8, ptr %284, i64 152
  %286 = load ptr, ptr %285, align 8
  invoke void %286(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %282, i32 noundef 0)
          to label %287 unwind label %291

287:                                              ; preds = %283
  invoke void @_ZN11spirv_cross4joinIJRPKcRA24_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 1 dereferenceable(24) @.str.1275, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(2) @.str.290)
          to label %288 unwind label %293

288:                                              ; preds = %287
  %289 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  %290 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %290, i32 noundef 12, i32 noundef 0)
          to label %332 unwind label %153

291:                                              ; preds = %283, %279
  %292 = landingpad { ptr, i32 }
          cleanup
  br label %295

293:                                              ; preds = %287
  %294 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  br label %295

295:                                              ; preds = %293, %291
  %.pn209 = phi { ptr, i32 } [ %294, %293 ], [ %292, %291 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  br label %717

296:                                              ; preds = %278
  %297 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %66)
          to label %298 unwind label %153

298:                                              ; preds = %296
  br i1 %297, label %299, label %319

299:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #6
  %300 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  %301 = load ptr, ptr %1, align 8, !tbaa !47
  %302 = getelementptr inbounds i8, ptr %301, i64 152
  %303 = load ptr, ptr %302, align 8
  invoke void %303(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %66, i32 noundef %300)
          to label %304 unwind label %312

304:                                              ; preds = %299
  %305 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  %306 = load ptr, ptr %4, align 8, !tbaa !43
  %307 = load i8, ptr %306, align 1, !tbaa !197
  %.not206 = icmp eq i8 %307, 0
  br i1 %.not206, label %332, label %308

308:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #6
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRPS1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %309 unwind label %314

309:                                              ; preds = %308
  %310 = 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) %22)
          to label %311 unwind label %316

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

312:                                              ; preds = %299
  %313 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  br label %717

314:                                              ; preds = %308
  %315 = landingpad { ptr, i32 }
          cleanup
  br label %318

316:                                              ; preds = %309
  %317 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  br label %318

318:                                              ; preds = %316, %314
  %.pn207 = phi { ptr, i32 } [ %317, %316 ], [ %315, %314 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #6
  br label %717

319:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #6
  %320 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  %321 = load ptr, ptr %1, align 8, !tbaa !47
  %322 = getelementptr inbounds i8, ptr %321, i64 152
  %323 = load ptr, ptr %322, align 8
  invoke void %323(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %66, i32 noundef %320)
          to label %324 unwind label %327

324:                                              ; preds = %319
  invoke void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %325 unwind label %329

325:                                              ; preds = %324
  %326 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  br label %332

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

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

331:                                              ; preds = %329, %327
  %.pn = phi { ptr, i32 } [ %330, %329 ], [ %328, %327 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  br label %717

332:                                              ; preds = %194, %207, %269, %325, %311, %304, %288, %251, %143
  br i1 %121, label %404, label %333

333:                                              ; preds = %332
  %334 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %68)
          to label %335 unwind label %153

335:                                              ; preds = %333
  %336 = add i32 %70, -9
  %or.cond13 = icmp ult i32 %336, -2
  %or.cond293.not = select i1 %334, i1 true, i1 %or.cond13
  br i1 %or.cond293.not, label %404, label %337

337:                                              ; preds = %335
  %338 = getelementptr inbounds i8, ptr %1, i64 10147
  %339 = load i8, ptr %338, align 1, !tbaa !198, !range !39, !noundef !40
  %340 = trunc nuw i8 %339 to i1
  br i1 %340, label %341, label %386

341:                                              ; preds = %337
  %342 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %66)
          to label %343 unwind label %153

343:                                              ; preds = %341
  br i1 %342, label %344, label %386

344:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %27) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull @.str.1386, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %345 unwind label %357

345:                                              ; preds = %344
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(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 align 8 dereferenceable(32) %0)
          to label %346 unwind label %359

346:                                              ; preds = %345
  %347 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  %348 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1387)
          to label %349 unwind label %153

349:                                              ; preds = %346
  %350 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL11to_restrictEjb(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %351 unwind label %362

351:                                              ; preds = %349
  %352 = load i8, ptr %350, align 1, !tbaa !197
  %.not229 = icmp eq i8 %352, 0
  br i1 %.not229, label %364, label %353

353:                                              ; preds = %351
  %354 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.60)
          to label %355 unwind label %362

355:                                              ; preds = %353
  %356 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %350)
          to label %364 unwind label %362

357:                                              ; preds = %344
  %358 = landingpad { ptr, i32 }
          cleanup
  br label %361

359:                                              ; preds = %345
  %360 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  br label %361

361:                                              ; preds = %359, %357
  %.pn227 = phi { ptr, i32 } [ %360, %359 ], [ %358, %357 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  br label %717

362:                                              ; preds = %367, %355, %353, %349
  %363 = landingpad { ptr, i32 }
          cleanup
  br label %717

364:                                              ; preds = %355, %351
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %365 unwind label %376

365:                                              ; preds = %364
  %366 = 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) %28)
          to label %367 unwind label %378

367:                                              ; preds = %365
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  %368 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.53)
          to label %369 unwind label %362

369:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #6
  %370 = load ptr, ptr %1, align 8, !tbaa !47
  %371 = getelementptr inbounds i8, ptr %370, i64 304
  %372 = load ptr, ptr %371, align 8
  invoke void %372(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %66, i32 noundef %.0)
          to label %373 unwind label %381

373:                                              ; preds = %369
  %374 = 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) %29)
          to label %375 unwind label %383

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

376:                                              ; preds = %364
  %377 = landingpad { ptr, i32 }
          cleanup
  br label %380

378:                                              ; preds = %365
  %379 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  br label %380

380:                                              ; preds = %378, %376
  %.pn230 = phi { ptr, i32 } [ %379, %378 ], [ %377, %376 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  br label %717

381:                                              ; preds = %369
  %382 = landingpad { ptr, i32 }
          cleanup
  br label %385

383:                                              ; preds = %373
  %384 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  br label %385

385:                                              ; preds = %383, %381
  %.pn232 = phi { ptr, i32 } [ %384, %383 ], [ %382, %381 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  br label %717

386:                                              ; preds = %343, %337
  %387 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  br i1 %387, label %393, label %388

388:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #6
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_EEES6_DpOT_(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 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %389 unwind label %391

389:                                              ; preds = %388
  %390 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #6
  br label %393

391:                                              ; preds = %388
  %392 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #6
  br label %717

393:                                              ; preds = %389, %386
  %394 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.60)
          to label %395 unwind label %153

395:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %396 unwind label %399

396:                                              ; preds = %395
  %397 = 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) %31)
          to label %398 unwind label %401

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

399:                                              ; preds = %395
  %400 = landingpad { ptr, i32 }
          cleanup
  br label %403

401:                                              ; preds = %396
  %402 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  br label %403

403:                                              ; preds = %401, %399
  %.pn225 = phi { ptr, i32 } [ %402, %401 ], [ %400, %399 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  br label %717

404:                                              ; preds = %335, %332
  %405 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %66)
          to label %406 unwind label %153

406:                                              ; preds = %404
  %brmerge.not = and i1 %switch, %405
  br i1 %brmerge.not, label %407, label %525

407:                                              ; preds = %406
  %408 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  br i1 %408, label %414, label %409

409:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #6
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %410 unwind label %412

410:                                              ; preds = %409
  %411 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %32) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #6
  br label %414

412:                                              ; preds = %409
  %413 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #6
  br label %717

414:                                              ; preds = %410, %407
  %415 = 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) %65)
          to label %416 unwind label %153

416:                                              ; preds = %414
  br i1 %415, label %426, label %417

417:                                              ; preds = %416
  %418 = invoke noundef ptr @_ZNK11spirv_cross11CompilerMSL24descriptor_address_spaceEjN3spv12StorageClassEPKc(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %.0, i32 noundef %70, ptr noundef null)
          to label %419 unwind label %424

419:                                              ; preds = %417
  %.not235 = icmp eq ptr %418, null
  br i1 %.not235, label %426, label %420

420:                                              ; preds = %419
  %421 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.60)
          to label %422 unwind label %424

422:                                              ; preds = %420
  %423 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %418)
          to label %426 unwind label %424

424:                                              ; preds = %422, %420, %417
  %425 = landingpad { ptr, i32 }
          cleanup
  br label %717

426:                                              ; preds = %419, %422, %416
  %427 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %1)
          to label %428 unwind label %153

428:                                              ; preds = %426
  %429 = add i32 %123, -11
  %or.cond15 = icmp ult i32 %429, 2
  %430 = and i1 %or.cond15, %427
  %or.cond298 = and i1 %121, %430
  br i1 %or.cond298, label %431, label %471

431:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #6
  %432 = invoke noundef i32 @_ZNK11spirv_cross11CompilerMSL34get_physical_tess_level_array_sizeEN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %123)
          to label %433 unwind label %441

433:                                              ; preds = %431
  store i32 %432, ptr %33, align 4, !tbaa !46
  %434 = icmp eq i32 %432, 1
  br i1 %434, label %435, label %448

435:                                              ; preds = %433
  %436 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1388)
          to label %437 unwind label %441

437:                                              ; preds = %435
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %438 unwind label %443

438:                                              ; preds = %437
  %439 = 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) %34)
          to label %440 unwind label %445

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

441:                                              ; preds = %453, %448, %435, %431
  %442 = landingpad { ptr, i32 }
          cleanup
  br label %470

443:                                              ; preds = %437
  %444 = landingpad { ptr, i32 }
          cleanup
  br label %447

445:                                              ; preds = %438
  %446 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #6
  br label %447

447:                                              ; preds = %445, %443
  %.pn250 = phi { ptr, i32 } [ %446, %445 ], [ %444, %443 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #6
  br label %470

448:                                              ; preds = %433
  %449 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1387)
          to label %450 unwind label %441

450:                                              ; preds = %448
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %451 unwind label %459

451:                                              ; preds = %450
  %452 = 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) %35)
          to label %453 unwind label %461

453:                                              ; preds = %451
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  %454 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.53)
          to label %455 unwind label %441

455:                                              ; preds = %453
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #6
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %456 unwind label %464

456:                                              ; preds = %455
  %457 = 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) %36)
          to label %458 unwind label %466

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

459:                                              ; preds = %450
  %460 = landingpad { ptr, i32 }
          cleanup
  br label %463

461:                                              ; preds = %451
  %462 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  br label %463

463:                                              ; preds = %461, %459
  %.pn246 = phi { ptr, i32 } [ %462, %461 ], [ %460, %459 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  br label %470

464:                                              ; preds = %455
  %465 = landingpad { ptr, i32 }
          cleanup
  br label %468

466:                                              ; preds = %456
  %467 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  br label %468

468:                                              ; preds = %466, %464
  %.pn248 = phi { ptr, i32 } [ %467, %466 ], [ %465, %464 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #6
  br label %470

469:                                              ; preds = %458, %440
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #6
  br label %655

470:                                              ; preds = %468, %463, %447, %441
  %.pn250.pn = phi { ptr, i32 } [ %.pn250, %447 ], [ %442, %441 ], [ %.pn248, %468 ], [ %.pn246, %463 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #6
  br label %717

471:                                              ; preds = %428
  %472 = 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) %65)
          to label %473 unwind label %153

473:                                              ; preds = %471
  br i1 %472, label %474, label %487

474:                                              ; preds = %473
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %475 unwind label %479

475:                                              ; preds = %474
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %476 unwind label %481

476:                                              ; preds = %475
  %477 = 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) %37)
          to label %478 unwind label %483

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

479:                                              ; preds = %474
  %480 = landingpad { ptr, i32 }
          cleanup
  br label %486

481:                                              ; preds = %475
  %482 = landingpad { ptr, i32 }
          cleanup
  br label %485

483:                                              ; preds = %476
  %484 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  br label %485

485:                                              ; preds = %483, %481
  %.pn243 = phi { ptr, i32 } [ %484, %483 ], [ %482, %481 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  br label %486

486:                                              ; preds = %485, %479
  %.pn243.pn = phi { ptr, i32 } [ %.pn243, %485 ], [ %480, %479 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #6
  br label %717

487:                                              ; preds = %473
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #6
  %488 = load ptr, ptr %1, align 8, !tbaa !47
  %489 = getelementptr inbounds i8, ptr %488, i64 304
  %490 = load ptr, ptr %489, align 8
  invoke void %490(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %66, i32 noundef %.0)
          to label %.invoke unwind label %494

.invoke:                                          ; preds = %487
  %491 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  %492 = select i1 %491, ptr @.str.1189, ptr @.str.1387
  %493 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %492)
          to label %498 unwind label %496

494:                                              ; preds = %487
  %495 = landingpad { ptr, i32 }
          cleanup
  br label %524

496:                                              ; preds = %.invoke
  %497 = landingpad { ptr, i32 }
          cleanup
  br label %523

498:                                              ; preds = %.invoke
  %499 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL11to_restrictEjb(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %500 unwind label %506

500:                                              ; preds = %498
  %501 = load i8, ptr %499, align 1, !tbaa !197
  %.not236 = icmp eq i8 %501, 0
  br i1 %.not236, label %508, label %502

502:                                              ; preds = %500
  %503 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.60)
          to label %504 unwind label %506

504:                                              ; preds = %502
  %505 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %499)
          to label %508 unwind label %506

506:                                              ; preds = %515, %513, %504, %502, %498
  %507 = landingpad { ptr, i32 }
          cleanup
  br label %523

508:                                              ; preds = %504, %500
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %509 unwind label %517

509:                                              ; preds = %508
  %510 = 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) %40)
          to label %511 unwind label %519

511:                                              ; preds = %509
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  %512 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  br i1 %512, label %522, label %513

513:                                              ; preds = %511
  %514 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.53)
          to label %515 unwind label %506

515:                                              ; preds = %513
  %516 = 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) %39)
          to label %522 unwind label %506

517:                                              ; preds = %508
  %518 = landingpad { ptr, i32 }
          cleanup
  br label %521

519:                                              ; preds = %509
  %520 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  br label %521

521:                                              ; preds = %519, %517
  %.pn237 = phi { ptr, i32 } [ %520, %519 ], [ %518, %517 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  br label %523

522:                                              ; preds = %515, %511
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #6
  br label %655

523:                                              ; preds = %506, %521, %496
  %.pn239.pn = phi { ptr, i32 } [ %497, %496 ], [ %507, %506 ], [ %.pn237, %521 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  br label %524

524:                                              ; preds = %523, %494
  %.pn239.pn.pn = phi { ptr, i32 } [ %.pn239.pn, %523 ], [ %495, %494 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #6
  br label %717

525:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %41) #6
  %526 = and i32 %96, -4
  %switch304 = icmp eq i32 %526, 16
  br i1 %switch304, label %579, label %527

527:                                              ; preds = %525
  %528 = getelementptr inbounds i8, ptr %1, i64 12080
  %529 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %125)
  store i32 %529, ptr %41, align 4, !tbaa !46
  %530 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %528, ptr noundef nonnull align 4 dereferenceable(4) %41)
          to label %531 unwind label %546

531:                                              ; preds = %527
  %.not253 = icmp eq i64 %530, 0
  br i1 %.not253, label %.critedge17, label %532

532:                                              ; preds = %531
  %533 = load i32, ptr %95, align 8, !tbaa !42
  %534 = icmp eq i32 %533, 15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #6
  br i1 %534, label %535, label %637

.critedge17:                                      ; preds = %531
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #6
  br label %535

535:                                              ; preds = %.critedge17, %532
  %536 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  br i1 %536, label %562, label %537

537:                                              ; preds = %535
  %538 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %66)
          to label %539 unwind label %153

539:                                              ; preds = %537
  br i1 %538, label %540, label %557

540:                                              ; preds = %539
  %541 = load ptr, ptr %4, align 8, !tbaa !43
  %542 = load i8, ptr %541, align 1, !tbaa !197
  %543 = icmp eq i8 %542, 0
  br i1 %543, label %544, label %548

544:                                              ; preds = %540
  %545 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 32)
          to label %548 unwind label %153

546:                                              ; preds = %527
  %547 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #6
  br label %717

548:                                              ; preds = %544, %540
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #6
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.60)
          to label %549 unwind label %552

549:                                              ; preds = %548
  %550 = 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) %42)
          to label %551 unwind label %554

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

552:                                              ; preds = %548
  %553 = landingpad { ptr, i32 }
          cleanup
  br label %556

554:                                              ; preds = %549
  %555 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #6
  br label %556

556:                                              ; preds = %554, %552
  %.pn254 = phi { ptr, i32 } [ %555, %554 ], [ %553, %552 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #6
  br label %717

557:                                              ; preds = %539
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #6
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %558 unwind label %560

558:                                              ; preds = %557
  %559 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  br label %562

560:                                              ; preds = %557
  %561 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  br label %717

562:                                              ; preds = %551, %558, %535
  %563 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1120)
          to label %564 unwind label %153

564:                                              ; preds = %562
  %565 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.60)
          to label %566 unwind label %153

566:                                              ; preds = %564
  %567 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL11to_restrictEjb(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %568 unwind label %153

568:                                              ; preds = %566
  %569 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %567)
          to label %570 unwind label %153

570:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %571 unwind label %574

571:                                              ; preds = %570
  %572 = 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) %44)
          to label %573 unwind label %576

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

574:                                              ; preds = %570
  %575 = landingpad { ptr, i32 }
          cleanup
  br label %578

576:                                              ; preds = %571
  %577 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  br label %578

578:                                              ; preds = %576, %574
  %.pn256 = phi { ptr, i32 } [ %577, %576 ], [ %575, %574 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #6
  br label %717

579:                                              ; preds = %525
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #6
  %580 = 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) %65)
          to label %581 unwind label %153

581:                                              ; preds = %579
  br i1 %580, label %582, label %603

582:                                              ; preds = %581
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #6
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.60)
          to label %583 unwind label %589

583:                                              ; preds = %582
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %584 unwind label %591

584:                                              ; preds = %583
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull @.str.60)
          to label %585 unwind label %593

585:                                              ; preds = %584
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %586 unwind label %595

586:                                              ; preds = %585
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %587 unwind label %597

587:                                              ; preds = %586
  %588 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  br label %655

589:                                              ; preds = %582
  %590 = landingpad { ptr, i32 }
          cleanup
  br label %602

591:                                              ; preds = %583
  %592 = landingpad { ptr, i32 }
          cleanup
  br label %601

593:                                              ; preds = %584
  %594 = landingpad { ptr, i32 }
          cleanup
  br label %600

595:                                              ; preds = %585
  %596 = landingpad { ptr, i32 }
          cleanup
  br label %599

597:                                              ; preds = %586
  %598 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  br label %599

599:                                              ; preds = %597, %595
  %.pn265 = phi { ptr, i32 } [ %598, %597 ], [ %596, %595 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #6
  br label %600

600:                                              ; preds = %599, %593
  %.pn265.pn = phi { ptr, i32 } [ %.pn265, %599 ], [ %594, %593 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  br label %601

601:                                              ; preds = %600, %591
  %.pn265.pn.pn = phi { ptr, i32 } [ %.pn265.pn, %600 ], [ %592, %591 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  br label %602

602:                                              ; preds = %601, %589
  %.pn265.pn.pn.pn = phi { ptr, i32 } [ %.pn265.pn.pn, %601 ], [ %590, %589 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  br label %717

603:                                              ; preds = %581
  %604 = getelementptr inbounds i8, ptr %66, i64 32
  %605 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %604) #6
  br i1 %605, label %606, label %617

606:                                              ; preds = %603
  %607 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.60)
          to label %608 unwind label %153

608:                                              ; preds = %606
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %609 unwind label %612

609:                                              ; preds = %608
  %610 = 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 %611 unwind label %614

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

612:                                              ; preds = %608
  %613 = landingpad { ptr, i32 }
          cleanup
  br label %616

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

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

617:                                              ; preds = %603
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %51) #6
  %618 = invoke noundef ptr @_ZNK11spirv_cross11CompilerMSL24descriptor_address_spaceEjN3spv12StorageClassEPKc(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %.0, i32 noundef %70, ptr noundef nonnull @.str.283)
          to label %619 unwind label %627

619:                                              ; preds = %617
  store ptr %618, ptr %51, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #6
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %620 unwind label %629

620:                                              ; preds = %619
  %621 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %52) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #6
  %622 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1189)
          to label %623 unwind label %627

623:                                              ; preds = %620
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %624 unwind label %631

624:                                              ; preds = %623
  %625 = 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) %53)
          to label %626 unwind label %633

626:                                              ; preds = %624
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #6
  br label %655

627:                                              ; preds = %620, %617
  %628 = landingpad { ptr, i32 }
          cleanup
  br label %636

629:                                              ; preds = %619
  %630 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #6
  br label %636

631:                                              ; preds = %623
  %632 = landingpad { ptr, i32 }
          cleanup
  br label %635

633:                                              ; preds = %624
  %634 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #6
  br label %635

635:                                              ; preds = %633, %631
  %.pn260 = phi { ptr, i32 } [ %634, %633 ], [ %632, %631 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #6
  br label %636

636:                                              ; preds = %635, %629, %627
  %.pn260.pn = phi { ptr, i32 } [ %.pn260, %635 ], [ %628, %627 ], [ %630, %629 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #6
  br label %717

637:                                              ; preds = %532
  %638 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  br i1 %638, label %644, label %639

639:                                              ; preds = %637
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #6
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %640 unwind label %642

640:                                              ; preds = %639
  %641 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %54) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #6
  br label %644

642:                                              ; preds = %639
  %643 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #6
  br label %717

644:                                              ; preds = %640, %637
  %645 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.60)
          to label %646 unwind label %153

646:                                              ; preds = %644
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %647 unwind label %650

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) %55)
          to label %649 unwind label %652

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

650:                                              ; preds = %646
  %651 = landingpad { ptr, i32 }
          cleanup
  br label %654

652:                                              ; preds = %647
  %653 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #6
  br label %654

654:                                              ; preds = %652, %650
  %.pn258 = phi { ptr, i32 } [ %653, %652 ], [ %651, %650 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #6
  br label %717

655:                                              ; preds = %478, %522, %469, %649, %611, %626, %587, %573, %375, %398
  %656 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %.0)
          to label %657 unwind label %687

657:                                              ; preds = %655
  %.not270 = icmp eq ptr %656, null
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %56) #6
  br i1 %.not270, label %.critedge19, label %658

658:                                              ; preds = %657
  %659 = getelementptr inbounds i8, ptr %1, i64 12024
  %660 = getelementptr inbounds i8, ptr %656, i64 8
  %661 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %660)
  store i32 %661, ptr %56, align 4, !tbaa !46
  %662 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %659, ptr noundef nonnull align 4 dereferenceable(4) %56)
          to label %663 unwind label %689

663:                                              ; preds = %658
  %.not271 = icmp eq i64 %662, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #6
  br i1 %.not271, label %715, label %664

664:                                              ; preds = %663
  %665 = getelementptr inbounds i8, ptr %1, i64 8
  %.sroa.0.0.copyload = load i32, ptr %660, align 8, !tbaa !46
  %666 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8ParsedIR21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %665, i32 %.sroa.0.0.copyload)
          to label %667 unwind label %691

667:                                              ; preds = %664
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #6
  %668 = invoke noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL32decoration_flags_signal_volatileERKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(64) %666)
          to label %669 unwind label %693

669:                                              ; preds = %667
  %670 = select i1 %668, ptr @.str.1118, ptr @.str.35
  store ptr %670, ptr %57, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #6
  %671 = getelementptr inbounds i8, ptr %68, i64 248
  %672 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %671)
  %673 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %672)
          to label %674 unwind label %695

674:                                              ; preds = %669
  %675 = load ptr, ptr %1, align 8, !tbaa !47
  %676 = getelementptr inbounds i8, ptr %675, i64 152
  %677 = load ptr, ptr %676, align 8
  invoke void %677(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(336) %673, i32 noundef 0)
          to label %678 unwind label %695

678:                                              ; preds = %674
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRPS1_RA15_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESD_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 1 dereferenceable(15) @.str.1381, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %679 unwind label %697

679:                                              ; preds = %678
  %680 = 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) %58)
          to label %681 unwind label %699

681:                                              ; preds = %679
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.0, i1 noundef zeroext true)
          to label %682 unwind label %703

682:                                              ; preds = %681
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull @.str.61, ptr noundef nonnull align 8 dereferenceable(32) %62)
          to label %683 unwind label %705

683:                                              ; preds = %682
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull @.str.1293)
          to label %684 unwind label %707

684:                                              ; preds = %683
  %685 = 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) %60)
          to label %686 unwind label %709

686:                                              ; preds = %684
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #6
  br label %715

687:                                              ; preds = %655
  %688 = landingpad { ptr, i32 }
          cleanup
  br label %717

689:                                              ; preds = %658
  %690 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #6
  br label %717

691:                                              ; preds = %664
  %692 = landingpad { ptr, i32 }
          cleanup
  br label %717

693:                                              ; preds = %667
  %694 = landingpad { ptr, i32 }
          cleanup
  br label %714

695:                                              ; preds = %674, %669
  %696 = landingpad { ptr, i32 }
          cleanup
  br label %702

697:                                              ; preds = %678
  %698 = landingpad { ptr, i32 }
          cleanup
  br label %701

699:                                              ; preds = %679
  %700 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #6
  br label %701

701:                                              ; preds = %699, %697
  %.pn272 = phi { ptr, i32 } [ %700, %699 ], [ %698, %697 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #6
  br label %702

702:                                              ; preds = %701, %695
  %.pn272.pn = phi { ptr, i32 } [ %.pn272, %701 ], [ %696, %695 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #6
  br label %714

703:                                              ; preds = %681
  %704 = landingpad { ptr, i32 }
          cleanup
  br label %713

705:                                              ; preds = %682
  %706 = landingpad { ptr, i32 }
          cleanup
  br label %712

707:                                              ; preds = %683
  %708 = landingpad { ptr, i32 }
          cleanup
  br label %711

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

711:                                              ; preds = %709, %707
  %.pn275 = phi { ptr, i32 } [ %710, %709 ], [ %708, %707 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #6
  br label %712

712:                                              ; preds = %711, %705
  %.pn275.pn = phi { ptr, i32 } [ %.pn275, %711 ], [ %706, %705 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #6
  br label %713

713:                                              ; preds = %712, %703
  %.pn275.pn.pn = phi { ptr, i32 } [ %.pn275.pn, %712 ], [ %704, %703 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #6
  br label %714

714:                                              ; preds = %713, %702, %693
  %.pn275.pn.pn.pn = phi { ptr, i32 } [ %.pn275.pn.pn, %713 ], [ %.pn272.pn, %702 ], [ %694, %693 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #6
  br label %717

.critedge19:                                      ; preds = %657
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #6
  br label %715

715:                                              ; preds = %.critedge19, %686, %663
  %716 = getelementptr inbounds i8, ptr %1, i64 11186
  store i8 0, ptr %716, align 2, !tbaa !49
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  ret void

717:                                              ; preds = %153, %159, %277, %295, %312, %318, %331, %361, %391, %403, %412, %424, %470, %486, %524, %546, %556, %560, %578, %602, %616, %636, %642, %654, %213, %200, %172, %255, %232, %385, %380, %362, %691, %714, %689, %687, %151
  %.pn275.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %152, %151 ], [ %.pn265.pn.pn.pn, %602 ], [ %.pn263, %616 ], [ %154, %153 ], [ %.pn260.pn, %636 ], [ %.pn258, %654 ], [ %643, %642 ], [ %.pn256, %578 ], [ %.pn254, %556 ], [ %561, %560 ], [ %547, %546 ], [ %.pn250.pn, %470 ], [ %.pn243.pn, %486 ], [ %.pn239.pn.pn, %524 ], [ %425, %424 ], [ %413, %412 ], [ %.pn227, %361 ], [ %.pn225, %403 ], [ %392, %391 ], [ %.pn223, %159 ], [ %.pn211.pn, %277 ], [ %.pn209, %295 ], [ %.pn207, %318 ], [ %313, %312 ], [ %.pn, %331 ], [ %.pn220, %200 ], [ %.pn218, %213 ], [ %173, %172 ], [ %.pn214.pn, %255 ], [ %233, %232 ], [ %.pn232, %385 ], [ %363, %362 ], [ %.pn230, %380 ], [ %690, %689 ], [ %688, %687 ], [ %.pn275.pn.pn.pn, %714 ], [ %692, %691 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  br label %718

718:                                              ; preds = %717, %149
  %.pn275.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn275.pn.pn.pn.pn.pn.pn.pn, %717 ], [ %150, %149 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  br label %719

719:                                              ; preds = %718, %147, %145
  %.pn275.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn275.pn.pn.pn.pn.pn.pn.pn.pn, %718 ], [ %148, %147 ], [ %146, %145 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  resume { ptr, i32 } %.pn275.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_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 8 dereferenceable(32)) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA20_KcRNSt7__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(20), 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_cross4joinIJRA20_KcRPS1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEESB_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(20), ptr noundef nonnull align 8 dereferenceable(8), 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_cross4joinIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(20), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcRA24_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_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(24), 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_cross4joinIJRA2_KcRPS1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_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_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEES6_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)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_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)) local_unnamed_addr #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !23, i64 128}
!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 = !{!38, !22, i64 16}
!38 = !{!"_ZTSN11spirv_cross12SPIRFunction9ParameterE", !28, i64 0, !8, i64 4, !9, i64 8, !9, i64 12, !22, i64 16}
!39 = !{i8 0, i8 2}
!40 = !{}
!41 = !{!38, !9, i64 12}
!42 = !{!6, !13, i64 16}
!43 = !{!16, !16, i64 0}
!44 = !{!45, !45, i64 0}
!45 = !{!"_ZTSN11spirv_cross11CompilerMSL11SPVFuncImplE", !10, i64 0}
!46 = !{!9, !9, i64 0}
!47 = !{!48, !48, i64 0}
!48 = !{!"vtable pointer", !11, i64 0}
!49 = !{!50, !22, i64 11186}
!50 = !{!"_ZTSN11spirv_cross11CompilerMSLE", !51, i64 0, !145, 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, !147, i64 10036, !151, i64 10176, !159, i64 10224, !164, i64 10272, !159, i64 10328, !164, i64 10376, !94, i64 10432, !94, i64 10488, !94, i64 10544, !94, i64 10600, !127, i64 10656, !127, i64 10712, !127, i64 10768, !166, i64 10824, !166, i64 10872, !14, i64 10920, !171, i64 10976, !173, i64 11032, !9, i64 11088, !9, i64 11092, !9, i64 11096, !10, i64 11100, !175, i64 11132, !175, i64 11136, !175, i64 11140, !175, i64 11144, !175, i64 11148, !175, i64 11152, !175, i64 11156, !175, i64 11160, !175, i64 11164, !175, i64 11168, !175, i64 11172, !176, i64 11176, !176, 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, !91, i64 11200, !91, i64 11232, !91, i64 11264, !91, i64 11296, !91, i64 11328, !91, i64 11360, !91, i64 11392, !91, i64 11424, !91, i64 11456, !91, i64 11488, !91, i64 11520, !91, i64 11552, !91, i64 11584, !91, i64 11616, !91, i64 11648, !91, i64 11680, !12, i64 11712, !177, i64 11720, !182, i64 11768, !94, i64 11824, !184, i64 11880, !14, i64 11968, !94, i64 12024, !94, i64 12080, !94, i64 12136, !187, i64 12192, !190, i64 12280, !14, i64 12328, !195, i64 12384, !10, i64 12440, !9, i64 12472, !9, i64 12476, !22, i64 12480, !22, i64 12481}
!51 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !52, i64 0, !16, i64 3176, !109, i64 3184, !22, i64 3272, !112, i64 3280, !16, i64 7616, !16, i64 7624, !22, i64 7632, !22, i64 7633, !117, i64 7636, !32, i64 7680, !32, i64 7736, !32, i64 7792, !32, i64 7848, !32, i64 7904, !32, i64 7960, !32, i64 8016, !121, i64 8072, !107, i64 8128, !22, i64 8184, !123, i64 8192, !9, i64 8416, !94, i64 8424, !94, i64 8480, !94, i64 8536, !124, i64 8592, !126, i64 8648, !127, i64 8656, !77, i64 8712, !77, i64 8992, !127, i64 9272, !24, i64 9328, !9, i64 9384, !9, i64 9388, !9, i64 9392, !22, i64 9396, !22, i64 9397, !129, i64 9400, !129, i64 9424, !133, i64 9448, !137, i64 9472, !127, i64 9496, !94, i64 9552, !94, i64 9608, !10, i64 9664, !141, i64 9672, !94, i64 9728, !16, i64 9784, !143, i64 9792}
!52 = !{!"_ZTSN11spirv_cross8CompilerE", !53, i64 8, !14, i64 1928, !14, i64 1984, !16, i64 2040, !16, i64 2048, !9, i64 2056, !96, i64 2064, !22, i64 2120, !94, i64 2128, !22, i64 2184, !22, i64 2185, !98, i64 2192, !14, i64 2312, !101, i64 2368, !94, i64 2400, !94, i64 2456, !94, i64 2512, !94, i64 2568, !94, i64 2624, !93, i64 2680, !93, i64 2744, !9, i64 2808, !9, i64 2812, !22, i64 2816, !94, i64 2824, !22, i64 2880, !22, i64 2881, !9, i64 2884, !103, i64 2888, !14, i64 2944, !105, i64 3000, !94, i64 3056, !22, i64 3112, !107, i64 3120}
!53 = !{!"_ZTSN11spirv_cross8ParsedIRE", !54, i64 0, !60, i64 8, !64, i64 32, !67, i64 248, !10, i64 304, !69, i64 1088, !69, i64 1144, !72, i64 1200, !74, i64 1256, !77, i64 1312, !80, i64 1592, !83, i64 1624, !85, i64 1680, !87, i64 1736, !88, i64 1740, !89, i64 1748, !90, i64 1752, !9, i64 1756, !9, i64 1760, !91, i64 1768, !93, i64 1800, !94, i64 1864}
!54 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !55, i64 0}
!55 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !56, i64 0}
!56 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !57, i64 0}
!57 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !58, i64 0}
!58 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !59, i64 0}
!59 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !16, i64 0}
!60 = !{!"_ZTSSt6vectorIjSaIjEE", !61, i64 0}
!61 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !63, i64 0}
!63 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!64 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !65, i64 0, !17, i64 16, !66, i64 24}
!65 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !16, i64 0, !17, i64 8}
!66 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !10, i64 0}
!67 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !68, i64 0}
!68 = !{!"_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}
!69 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !70, i64 0, !17, i64 16, !71, i64 24}
!70 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !16, i64 0, !17, i64 8}
!71 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !10, i64 0}
!72 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !73, i64 0}
!73 = !{!"_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}
!74 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !75, i64 0, !17, i64 16, !76, i64 24}
!75 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !16, i64 0, !17, i64 8}
!76 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !10, i64 0}
!77 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !78, i64 0, !17, i64 16, !79, i64 24}
!78 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !16, i64 0, !17, i64 8}
!79 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !10, i64 0}
!80 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !81, i64 0, !17, i64 16, !82, i64 24}
!81 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !16, i64 0, !17, i64 8}
!82 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !10, i64 0}
!83 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !84, i64 0}
!84 = !{!"_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}
!85 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !86, i64 0}
!86 = !{!"_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}
!87 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !9, i64 0}
!88 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !9, i64 0, !22, i64 4, !22, i64 5, !22, i64 6}
!89 = !{!"_ZTSN3spv15AddressingModelE", !10, i64 0}
!90 = !{!"_ZTSN3spv11MemoryModelE", !10, i64 0}
!91 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !92, i64 0, !17, i64 8, !10, i64 16}
!92 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !16, i64 0}
!93 = !{!"_ZTSN11spirv_cross6BitsetE", !17, i64 0, !94, i64 8}
!94 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !95, i64 0}
!95 = !{!"_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}
!96 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !97, i64 0}
!97 = !{!"_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}
!98 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !99, i64 0, !17, i64 16, !100, i64 24}
!99 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !16, i64 0, !17, i64 8}
!100 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !10, i64 0}
!101 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !102, i64 0, !16, i64 24}
!102 = !{!"_ZTSSt14_Function_base", !10, i64 0, !16, i64 16}
!103 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !104, i64 0}
!104 = !{!"_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}
!105 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !106, i64 0}
!106 = !{!"_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}
!107 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !108, i64 0}
!108 = !{!"_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}
!109 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !110, i64 0, !17, i64 16, !111, i64 24}
!110 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !16, i64 0, !17, i64 8}
!111 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !10, i64 0}
!112 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !113, i64 0, !10, i64 24, !114, i64 4120}
!113 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !16, i64 0, !17, i64 8, !17, i64 16}
!114 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !115, i64 0, !17, i64 16, !116, i64 24}
!115 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !16, i64 0, !17, i64 8}
!116 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !10, i64 0}
!117 = !{!"_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, !118, i64 28, !119, i64 32}
!118 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !22, i64 0, !22, i64 1, !22, i64 2}
!119 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !120, i64 0, !120, i64 4}
!120 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !10, i64 0}
!121 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !122, i64 0}
!122 = !{!"_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}
!123 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !91, i64 0, !91, i64 32, !91, 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}
!124 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !125, i64 0}
!125 = !{!"_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}
!126 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !9, i64 0}
!127 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !128, i64 0}
!128 = !{!"_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}
!129 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !130, i64 0}
!130 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !131, i64 0}
!131 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !132, i64 0}
!132 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!133 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !134, i64 0}
!134 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !135, i64 0}
!135 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !136, i64 0}
!136 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!137 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !138, i64 0}
!138 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !139, i64 0}
!139 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !140, i64 0}
!140 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!141 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !142, i64 0}
!142 = !{!"_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}
!143 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !144, i64 0}
!144 = !{!"_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}
!145 = !{!"_ZTSSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEE", !146, i64 0}
!146 = !{!"_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}
!147 = !{!"_ZTSN11spirv_cross11CompilerMSL7OptionsE", !148, 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, !149, 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, !150, 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}
!148 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options8PlatformE", !10, i64 0}
!149 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options19ArgumentBuffersTierE", !10, i64 0}
!150 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options9IndexTypeE", !10, i64 0}
!151 = !{!"_ZTSSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE", !152, i64 0}
!152 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE", !153, i64 0}
!153 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !154, i64 0, !156, i64 8}
!154 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEEE", !155, i64 0}
!155 = !{!"_ZTSSt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEE"}
!156 = !{!"_ZTSSt15_Rb_tree_header", !157, i64 0, !17, i64 32}
!157 = !{!"_ZTSSt18_Rb_tree_node_base", !158, i64 0, !16, i64 8, !16, i64 16, !16, i64 24}
!158 = !{!"_ZTSSt14_Rb_tree_color", !10, i64 0}
!159 = !{!"_ZTSSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE", !160, i64 0}
!160 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !161, i64 0}
!161 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !162, i64 0, !156, i64 8}
!162 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross21LocationComponentPairEEE", !163, i64 0}
!163 = !{!"_ZTSSt4lessIN11spirv_cross21LocationComponentPairEE"}
!164 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE", !165, i64 0}
!165 = !{!"_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}
!166 = !{!"_ZTSSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE", !167, i64 0}
!167 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE", !168, i64 0}
!168 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !169, i64 0, !156, i64 8}
!169 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !170, i64 0}
!170 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!171 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingESt4pairINS0_18MSLResourceBindingEbENS0_14InternalHasherESt8equal_toIS1_ESaIS2_IKS1_S4_EEE", !172, i64 0}
!172 = !{!"_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}
!173 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingEjNS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_jEEE", !174, i64 0}
!174 = !{!"_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}
!175 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !9, i64 0}
!176 = !{!"_ZTSN11spirv_cross11CompilerMSL8TriStateE", !10, i64 0}
!177 = !{!"_ZTSSt3mapIjN11spirv_cross19MSLConstexprSamplerESt4lessIjESaISt4pairIKjS1_EEE", !178, i64 0}
!178 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE", !179, i64 0}
!179 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !180, i64 0, !156, i64 8}
!180 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIjEE", !181, i64 0}
!181 = !{!"_ZTSSt4lessIjE"}
!182 = !{!"_ZTSSt13unordered_mapIN11spirv_cross14SetBindingPairENS0_19MSLConstexprSamplerENS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_S2_EEE", !183, i64 0}
!183 = !{!"_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}
!184 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !185, i64 0, !17, i64 16, !186, i64 24}
!185 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !16, i64 0, !17, i64 8}
!186 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !10, i64 0}
!187 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEE", !188, i64 0, !17, i64 16, !189, i64 24}
!188 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_12SPIRVariableEEE", !16, i64 0, !17, i64 8}
!189 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_12SPIRVariableELm8EEE", !10, i64 0}
!190 = !{!"_ZTSSt3mapIN11spirv_cross14SetBindingPairESt4pairIjjESt4lessIS1_ESaIS2_IKS1_S3_EEE", !191, i64 0}
!191 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !192, i64 0}
!192 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !193, i64 0, !156, i64 8}
!193 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross14SetBindingPairEEE", !194, i64 0}
!194 = !{!"_ZTSSt4lessIN11spirv_cross14SetBindingPairEE"}
!195 = !{!"_ZTSSt13unordered_setIN11spirv_cross14SetBindingPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !196, i64 0}
!196 = !{!"_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}
!197 = !{!10, !10, i64 0}
!198 = !{!50, !22, i64 10147}


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