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

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

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

@.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.58 = external hidden unnamed_addr constant [2 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.283 = external hidden unnamed_addr constant [13 x i8], align 1
@_ZL12force_inline = external hidden global ptr, align 8
@.str.910 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1130 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1186 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1187 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1188 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1189 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1190 = external hidden unnamed_addr constant [16 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), 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) #3 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) #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef) #3 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 nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(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) #3 align 2

declare void @_ZN11spirv_cross12CompilerGLSL23add_local_variable_nameEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #4

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) #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) #3 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)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(8)) #6 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL23emit_function_prototypeERNS_12SPIRFunctionERKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(795) %1, ptr noundef nonnull align 8 dereferenceable(64) %2) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, 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 %"struct.std::__detail::_Node_iterator.569", align 8
  %18 = alloca %"struct.std::__detail::_Node_iterator.569", align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca %"class.spirv_cross::TypedID.413", align 4
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca %"struct.spirv_cross::SPIRFunction::Parameter", align 4
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca i8, align 1
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca ptr, align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca i8, align 1
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.spirv_cross::TypedID.350", align 4
  %61 = alloca i8, align 1
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %64 = load ptr, ptr %4, align 8
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %65, i32 0, i32 1
  %67 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %66)
  %68 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %64, i32 0, i32 1
  %69 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %68, i32 0, i32 13
  %70 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %69)
  %71 = icmp ne i32 %67, %70
  br i1 %71, label %72, label %74

72:                                               ; preds = %3
  %73 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL21add_function_overloadERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(9848) %64, ptr noundef nonnull align 8 dereferenceable(795) %73)
  br label %74

74:                                               ; preds = %72, %3
  %75 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %64, i32 0, i32 11
  %76 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %64, i32 0, i32 10
  %77 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EEaSERKSB_(ptr noundef nonnull align 8 dereferenceable(56) %76, ptr noundef nonnull align 8 dereferenceable(56) %75)
  call void @llvm.lifetime.start.p0(i64 32, ptr %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %78, i32 0, i32 1
  %80 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %79)
          to label %81 unwind label %94

81:                                               ; preds = %74
  %82 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %64, i32 0, i32 1
  %83 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %82, i32 0, i32 13
  %84 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %83)
          to label %85 unwind label %94

85:                                               ; preds = %81
  %86 = icmp eq i32 %80, %84
  %87 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %64, i32 0, i32 19
  %88 = zext i1 %86 to i8
  store i8 %88, ptr %87, align 8, !tbaa !9
  %89 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %64, i32 0, i32 19
  %90 = load i8, ptr %89, align 8, !tbaa !9, !range !119, !noundef !120
  %91 = trunc i8 %90 to i1
  br i1 %91, label %98, label %92

92:                                               ; preds = %85
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %64, ptr noundef nonnull align 8 dereferenceable(8) @_ZL12force_inline)
          to label %93 unwind label %94

93:                                               ; preds = %92
  br label %98

94:                                               ; preds = %92, %81, %74
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %8, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %9, align 4
  br label %781

98:                                               ; preds = %93, %85
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %99 = load ptr, ptr %5, align 8, !tbaa !5
  %100 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %99, i32 0, i32 1
  %101 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %100)
          to label %102 unwind label %116

102:                                              ; preds = %98
  %103 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %64, i32 noundef %101)
          to label %104 unwind label %116

104:                                              ; preds = %102
  store ptr %103, ptr %10, align 8, !tbaa !5
  %105 = load ptr, ptr %10, align 8, !tbaa !5
  %106 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %105, i32 0, i32 6
  %107 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %106) #7
  br i1 %107, label %120, label %108

108:                                              ; preds = %104
  %109 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %64, i32 0, i32 37
  %110 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %109, i32 0, i32 46
  %111 = load i8, ptr %110, align 1, !tbaa !121, !range !119, !noundef !120
  %112 = trunc i8 %111 to i1
  br i1 %112, label %113, label %120

113:                                              ; preds = %108
  %114 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef @.str.910)
          to label %115 unwind label %116

115:                                              ; preds = %113
  br label %134

116:                                              ; preds = %778, %776, %253, %179, %166, %157, %146, %134, %113, %102, %98
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %8, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %9, align 4
  br label %780

120:                                              ; preds = %108, %104
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #7
  %121 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL14func_type_declB5cxx11ERNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(12482) %64, ptr noundef nonnull align 8 dereferenceable(336) %121)
          to label %122 unwind label %125

122:                                              ; preds = %120
  %123 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %124 unwind label %129

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

125:                                              ; preds = %120
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %8, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %9, align 4
  br label %133

129:                                              ; preds = %122
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %8, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  br label %133

133:                                              ; preds = %129, %125
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #7
  br label %780

134:                                              ; preds = %124, %115
  %135 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef @.str.60)
          to label %136 unwind label %116

136:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 32, ptr %12) #7
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %137, i32 0, i32 1
  %139 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %138)
          to label %140 unwind label %182

140:                                              ; preds = %136
  %141 = load ptr, ptr %64, align 8, !tbaa !176
  %142 = getelementptr inbounds ptr, ptr %141, i64 6
  %143 = load ptr, ptr %142, align 8
  invoke void %143(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(12482) %64, i32 noundef %139, i1 noundef zeroext true)
          to label %144 unwind label %182

144:                                              ; preds = %140
  %145 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %146 unwind label %186

146:                                              ; preds = %144
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #7
  %147 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef @.str.58)
          to label %148 unwind label %116

148:                                              ; preds = %146
  %149 = load ptr, ptr %10, align 8, !tbaa !5
  %150 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %149, i32 0, i32 6
  %151 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %150) #7
  br i1 %151, label %210, label %152

152:                                              ; preds = %148
  %153 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %64, i32 0, i32 37
  %154 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %153, i32 0, i32 46
  %155 = load i8, ptr %154, align 1, !tbaa !121, !range !119, !noundef !120
  %156 = trunc i8 %155 to i1
  br i1 %156, label %157, label %210

157:                                              ; preds = %152
  %158 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef @.str.1186)
          to label %159 unwind label %116

159:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 32, ptr %13) #7
  %160 = load ptr, ptr %10, align 8, !tbaa !5
  %161 = load ptr, ptr %64, align 8, !tbaa !176
  %162 = getelementptr inbounds ptr, ptr %161, i64 19
  %163 = load ptr, ptr %162, align 8
  invoke void %163(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(12482) %64, ptr noundef nonnull align 8 dereferenceable(336) %160, i32 noundef 0)
          to label %164 unwind label %191

164:                                              ; preds = %159
  %165 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %166 unwind label %195

166:                                              ; preds = %164
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #7
  %167 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef @.str.1187)
          to label %168 unwind label %116

168:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #7
  %169 = load ptr, ptr %10, align 8, !tbaa !5
  %170 = load ptr, ptr %64, align 8, !tbaa !176
  %171 = getelementptr inbounds ptr, ptr %170, i64 38
  %172 = load ptr, ptr %171, align 8
  invoke void %172(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(12482) %64, ptr noundef nonnull align 8 dereferenceable(336) %169, i32 noundef 0)
          to label %173 unwind label %200

173:                                              ; preds = %168
  %174 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %175 unwind label %204

175:                                              ; preds = %173
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #7
  %176 = load ptr, ptr %5, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %176, i32 0, i32 4
  %178 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %177) #7
  br i1 %178, label %209, label %179

179:                                              ; preds = %175
  %180 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef @.str.55)
          to label %181 unwind label %116

181:                                              ; preds = %179
  br label %209

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

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

190:                                              ; preds = %186, %182
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #7
  br label %780

191:                                              ; preds = %159
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %8, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %9, align 4
  br label %199

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

199:                                              ; preds = %195, %191
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #7
  br label %780

200:                                              ; preds = %168
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %8, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %9, align 4
  br label %208

204:                                              ; preds = %173
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %8, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %208

208:                                              ; preds = %204, %200
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #7
  br label %780

209:                                              ; preds = %181, %175
  br label %210

210:                                              ; preds = %209, %152, %148
  %211 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %64, i32 0, i32 19
  %212 = load i8, ptr %211, align 8, !tbaa !9, !range !119, !noundef !120
  %213 = trunc i8 %212 to i1
  br i1 %213, label %214, label %431

214:                                              ; preds = %210
  %215 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %64, i32 0, i32 37
  %216 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %215, i32 0, i32 32
  %217 = load i8, ptr %216, align 4, !tbaa !178, !range !119, !noundef !120
  %218 = trunc i8 %217 to i1
  br i1 %218, label %219, label %236

219:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #7
  %220 = load ptr, ptr %5, align 8, !tbaa !5
  %221 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %220, i32 0, i32 4
  %222 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %221) #7
  %223 = xor i1 %222, true
  invoke void @_ZN11spirv_cross11CompilerMSL32entry_point_args_argument_bufferB5cxx11Eb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(12482) %64, i1 noundef zeroext %223)
          to label %224 unwind label %227

224:                                              ; preds = %219
  %225 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %226 unwind label %231

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

227:                                              ; preds = %219
  %228 = landingpad { ptr, i32 }
          cleanup
  %229 = extractvalue { ptr, i32 } %228, 0
  store ptr %229, ptr %8, align 8
  %230 = extractvalue { ptr, i32 } %228, 1
  store i32 %230, ptr %9, align 4
  br label %235

231:                                              ; preds = %224
  %232 = landingpad { ptr, i32 }
          cleanup
  %233 = extractvalue { ptr, i32 } %232, 0
  store ptr %233, ptr %8, align 8
  %234 = extractvalue { ptr, i32 } %232, 1
  store i32 %234, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  br label %235

235:                                              ; preds = %231, %227
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #7
  br label %780

236:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #7
  %237 = load ptr, ptr %5, align 8, !tbaa !5
  %238 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %237, i32 0, i32 4
  %239 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %238) #7
  %240 = xor i1 %239, true
  invoke void @_ZN11spirv_cross11CompilerMSL24entry_point_args_classicB5cxx11Eb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(12482) %64, i1 noundef zeroext %240)
          to label %241 unwind label %244

241:                                              ; preds = %236
  %242 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %243 unwind label %248

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

244:                                              ; preds = %236
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %8, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %9, align 4
  br label %252

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

252:                                              ; preds = %248, %244
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #7
  br label %780

253:                                              ; preds = %243, %226
  %254 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %64, i32 0, i32 10
  %255 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %64, i32 0, i32 11
  %256 = call ptr @_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %255) #7
  %257 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.569", ptr %17, i32 0, i32 0
  %258 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.570", ptr %257, i32 0, i32 0
  store ptr %256, ptr %258, align 8
  %259 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %64, i32 0, i32 11
  %260 = call ptr @_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %259) #7
  %261 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.569", ptr %18, i32 0, i32 0
  %262 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.570", ptr %261, i32 0, i32 0
  store ptr %260, ptr %262, align 8
  %263 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.569", ptr %17, i32 0, i32 0
  %264 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.570", ptr %263, i32 0, i32 0
  %265 = load ptr, ptr %264, align 8
  %266 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.569", ptr %18, i32 0, i32 0
  %267 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.570", ptr %266, i32 0, i32 0
  %268 = load ptr, ptr %267, align 8
  invoke void @_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE6insertINSt8__detail14_Node_iteratorIS5_Lb1ELb1EEEEEvT_SG_(ptr noundef nonnull align 8 dereferenceable(56) %254, ptr %265, ptr %268)
          to label %269 unwind label %116

269:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %270 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %64, i32 0, i32 52
  store ptr %270, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %271 = load ptr, ptr %19, align 8, !tbaa !5
  %272 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %271) #7
  store ptr %272, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %273 = load ptr, ptr %19, align 8, !tbaa !5
  %274 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %273) #7
  store ptr %274, ptr %21, align 8, !tbaa !5
  br label %275

275:                                              ; preds = %346, %269
  %276 = load ptr, ptr %20, align 8, !tbaa !5
  %277 = load ptr, ptr %21, align 8, !tbaa !5
  %278 = icmp ne ptr %276, %277
  br i1 %278, label %280, label %279

279:                                              ; preds = %275
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %351

280:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %281 = load ptr, ptr %20, align 8, !tbaa !5
  %282 = load i32, ptr %281, align 4, !tbaa !179
  store i32 %282, ptr %22, align 4, !tbaa !179
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %283 = load i32, ptr %22, align 4, !tbaa !179
  %284 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %64, i32 noundef %283)
          to label %285 unwind label %298

285:                                              ; preds = %280
  store ptr %284, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %286 = load ptr, ptr %23, align 8, !tbaa !5
  %287 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %286, i32 0, i32 4
  store ptr %287, ptr %24, align 8, !tbaa !5
  %288 = load ptr, ptr %24, align 8, !tbaa !5
  %289 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %288)
          to label %290 unwind label %302

290:                                              ; preds = %285
  %291 = icmp ne i32 %289, 0
  br i1 %291, label %310, label %292

292:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %293 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %64, i32 0, i32 1
  %294 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %293, i32 noundef 1)
          to label %295 unwind label %306

295:                                              ; preds = %292
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %25, i32 noundef %294)
          to label %296 unwind label %306

296:                                              ; preds = %295
  %297 = load ptr, ptr %24, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %297, ptr align 4 %25, i64 4, i1 false), !tbaa.struct !180
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %310

298:                                              ; preds = %280
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %8, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %9, align 4
  br label %350

302:                                              ; preds = %332, %326, %321, %315, %310, %285
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %8, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %9, align 4
  br label %349

306:                                              ; preds = %295, %292
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %8, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %349

310:                                              ; preds = %296, %290
  %311 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %64, i32 0, i32 1
  %312 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %311, i32 0, i32 2
  %313 = load ptr, ptr %24, align 8, !tbaa !5
  %314 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %313)
          to label %315 unwind label %302

315:                                              ; preds = %310
  %316 = zext i32 %314 to i64
  %317 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %312, i64 noundef %316) #7
  %318 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %317)
          to label %319 unwind label %302

319:                                              ; preds = %315
  %320 = icmp eq i32 %318, 0
  br i1 %320, label %332, label %321

321:                                              ; preds = %319
  %322 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %64, i32 0, i32 1
  %323 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %322, i32 0, i32 2
  %324 = load ptr, ptr %24, align 8, !tbaa !5
  %325 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %324)
          to label %326 unwind label %302

326:                                              ; preds = %321
  %327 = zext i32 %325 to i64
  %328 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %323, i64 noundef %327) #7
  %329 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %328)
          to label %330 unwind label %302

330:                                              ; preds = %326
  %331 = icmp eq i32 %329, 8
  br i1 %331, label %332, label %345

332:                                              ; preds = %330, %319
  %333 = load ptr, ptr %23, align 8, !tbaa !5
  %334 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %333, i32 0, i32 4
  %335 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %334)
          to label %336 unwind label %302

336:                                              ; preds = %332
  %337 = load ptr, ptr %23, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %337, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #7
  store i8 1, ptr %26, align 1, !tbaa !181
  %339 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRA3_KcRNS_7TypedIDILNS_5TypesE1EEEbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %64, i32 noundef %335, ptr noundef nonnull align 1 dereferenceable(3) @.str.1130, ptr noundef nonnull align 4 dereferenceable(4) %338, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %340 unwind label %341

340:                                              ; preds = %336
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #7
  br label %345

341:                                              ; preds = %336
  %342 = landingpad { ptr, i32 }
          cleanup
  %343 = extractvalue { ptr, i32 } %342, 0
  store ptr %343, ptr %8, align 8
  %344 = extractvalue { ptr, i32 } %342, 1
  store i32 %344, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #7
  br label %349

345:                                              ; preds = %340, %330
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %346

346:                                              ; preds = %345
  %347 = load ptr, ptr %20, align 8, !tbaa !5
  %348 = getelementptr inbounds i32, ptr %347, i32 1
  store ptr %348, ptr %20, align 8, !tbaa !5
  br label %275

349:                                              ; preds = %341, %306, %302
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  br label %350

350:                                              ; preds = %349, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %780

351:                                              ; preds = %279
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %352 = load ptr, ptr %5, align 8, !tbaa !5
  %353 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %352, i32 0, i32 6
  store ptr %353, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %354 = load ptr, ptr %27, align 8, !tbaa !5
  %355 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %354) #7
  store ptr %355, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %356 = load ptr, ptr %27, align 8, !tbaa !5
  %357 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %356) #7
  store ptr %357, ptr %29, align 8, !tbaa !5
  br label %358

358:                                              ; preds = %407, %351
  %359 = load ptr, ptr %28, align 8, !tbaa !5
  %360 = load ptr, ptr %29, align 8, !tbaa !5
  %361 = icmp ne ptr %359, %360
  br i1 %361, label %363, label %362

362:                                              ; preds = %358
  store i32 4, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %430

363:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %364 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %364, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %365 = load ptr, ptr %31, align 8, !tbaa !5
  %366 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %365)
          to label %367 unwind label %375

367:                                              ; preds = %363
  %368 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %64, i32 noundef %366)
          to label %369 unwind label %375

369:                                              ; preds = %367
  store ptr %368, ptr %32, align 8, !tbaa !5
  %370 = load ptr, ptr %32, align 8, !tbaa !5
  %371 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %370, i32 0, i32 2
  %372 = load i32, ptr %371, align 8, !tbaa !182
  %373 = icmp ne i32 %372, 5402
  br i1 %373, label %374, label %379

374:                                              ; preds = %369
  store i32 5, ptr %30, align 4
  br label %401

375:                                              ; preds = %382, %379, %367, %363
  %376 = landingpad { ptr, i32 }
          cleanup
  %377 = extractvalue { ptr, i32 } %376, 0
  store ptr %377, ptr %8, align 8
  %378 = extractvalue { ptr, i32 } %376, 1
  store i32 %378, ptr %9, align 4
  br label %429

379:                                              ; preds = %369
  %380 = load ptr, ptr %31, align 8, !tbaa !5
  %381 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %380)
          to label %382 unwind label %375

382:                                              ; preds = %379
  invoke void @_ZN11spirv_cross12CompilerGLSL23add_local_variable_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %64, i32 noundef %381)
          to label %383 unwind label %375

383:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 20, ptr %33) #7
  %384 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %33, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 4 %384, i8 0, i64 4, i1 false)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %384) #7
  %385 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %33, i32 0, i32 1
  call void @llvm.memset.p0.i64(ptr align 4 %385, i8 0, i64 4, i1 false)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %385) #7
  %386 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %33, i32 0, i32 2
  store i32 0, ptr %386, align 4, !tbaa !189
  %387 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %33, i32 0, i32 3
  store i32 0, ptr %387, align 4, !tbaa !191
  %388 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %33, i32 0, i32 4
  store i8 0, ptr %388, align 4, !tbaa !192
  %389 = load ptr, ptr %31, align 8, !tbaa !5
  %390 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %33, i32 0, i32 1
  %391 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_2EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %390, ptr noundef nonnull align 4 dereferenceable(4) %389)
          to label %392 unwind label %410

392:                                              ; preds = %383
  %393 = load ptr, ptr %32, align 8, !tbaa !5
  %394 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %393, i32 0, i32 1
  %395 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %33, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %395, ptr align 4 %394, i64 4, i1 false), !tbaa.struct !180
  %396 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %33, i32 0, i32 4
  store i8 1, ptr %396, align 4, !tbaa !192
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #7
  invoke void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(12482) %64, ptr noundef nonnull align 4 dereferenceable(17) %33)
          to label %397 unwind label %414

397:                                              ; preds = %392
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA13_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(13) @.str.1188)
          to label %398 unwind label %418

398:                                              ; preds = %397
  %399 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %400 unwind label %422

400:                                              ; preds = %398
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #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
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 20, ptr %33) #7
  store i32 0, ptr %30, align 4
  br label %401

401:                                              ; preds = %400, %374
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  %402 = load i32, ptr %30, align 4
  switch i32 %402, label %404 [
    i32 0, label %403
  ]

403:                                              ; preds = %401
  store i32 0, ptr %30, align 4
  br label %404

404:                                              ; preds = %403, %401
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  %405 = load i32, ptr %30, align 4
  switch i32 %405, label %787 [
    i32 0, label %406
    i32 5, label %407
  ]

406:                                              ; preds = %404
  br label %407

407:                                              ; preds = %406, %404
  %408 = load ptr, ptr %28, align 8, !tbaa !5
  %409 = getelementptr inbounds %"class.spirv_cross::TypedID.350", ptr %408, i32 1
  store ptr %409, ptr %28, align 8, !tbaa !5
  br label %358

410:                                              ; preds = %383
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %8, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %9, align 4
  br label %428

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

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

422:                                              ; preds = %398
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %8, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %426

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

427:                                              ; preds = %426, %414
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #7
  br label %428

428:                                              ; preds = %427, %410
  call void @llvm.lifetime.end.p0(i64 20, ptr %33) #7
  br label %429

429:                                              ; preds = %428, %375
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %780

430:                                              ; preds = %362
  br label %431

431:                                              ; preds = %430, %210
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %432 = load ptr, ptr %5, align 8, !tbaa !5
  %433 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %432, i32 0, i32 4
  store ptr %433, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %434 = load ptr, ptr %36, align 8, !tbaa !5
  %435 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %434) #7
  store ptr %435, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %436 = load ptr, ptr %36, align 8, !tbaa !5
  %437 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %436) #7
  store ptr %437, ptr %38, align 8, !tbaa !5
  br label %438

438:                                              ; preds = %769, %431
  %439 = load ptr, ptr %37, align 8, !tbaa !5
  %440 = load ptr, ptr %38, align 8, !tbaa !5
  %441 = icmp ne ptr %439, %440
  br i1 %441, label %443, label %442

442:                                              ; preds = %438
  store i32 6, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  br label %776

443:                                              ; preds = %438
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %444 = load ptr, ptr %37, align 8, !tbaa !5
  store ptr %444, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  %445 = load ptr, ptr %39, align 8, !tbaa !5
  %446 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %445, i32 0, i32 1
  %447 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %446)
          to label %448 unwind label %473

448:                                              ; preds = %443
  store i32 %447, ptr %40, align 4, !tbaa !179
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %449 = load ptr, ptr %39, align 8, !tbaa !5
  %450 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %449, i32 0, i32 1
  %451 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %450)
          to label %452 unwind label %477

452:                                              ; preds = %448
  %453 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %64, i32 noundef %451)
          to label %454 unwind label %477

454:                                              ; preds = %452
  store ptr %453, ptr %41, align 8, !tbaa !5
  %455 = load ptr, ptr %41, align 8, !tbaa !5
  %456 = icmp ne ptr %455, null
  br i1 %456, label %457, label %485

457:                                              ; preds = %454
  %458 = load ptr, ptr %39, align 8, !tbaa !5
  %459 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %458, i32 0, i32 4
  %460 = load i8, ptr %459, align 4, !tbaa !192, !range !119, !noundef !120
  %461 = trunc i8 %460 to i1
  br i1 %461, label %462, label %481

462:                                              ; preds = %457
  %463 = load ptr, ptr %41, align 8, !tbaa !5
  %464 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %463, i32 0, i32 5
  %465 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %464)
          to label %466 unwind label %477

466:                                              ; preds = %462
  %467 = icmp ne i32 %465, 0
  br i1 %467, label %468, label %481

468:                                              ; preds = %466
  %469 = load ptr, ptr %41, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %469, i32 0, i32 5
  %471 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %470)
          to label %472 unwind label %477

472:                                              ; preds = %468
  store i32 %471, ptr %40, align 4, !tbaa !179
  br label %481

473:                                              ; preds = %443
  %474 = landingpad { ptr, i32 }
          cleanup
  %475 = extractvalue { ptr, i32 } %474, 0
  store ptr %475, ptr %8, align 8
  %476 = extractvalue { ptr, i32 } %474, 1
  store i32 %476, ptr %9, align 4
  br label %775

477:                                              ; preds = %485, %468, %462, %452, %448
  %478 = landingpad { ptr, i32 }
          cleanup
  %479 = extractvalue { ptr, i32 } %478, 0
  store ptr %479, ptr %8, align 8
  %480 = extractvalue { ptr, i32 } %478, 1
  store i32 %480, ptr %9, align 4
  br label %774

481:                                              ; preds = %472, %466, %457
  %482 = load ptr, ptr %39, align 8, !tbaa !5
  %483 = load ptr, ptr %41, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %483, i32 0, i32 20
  store ptr %482, ptr %484, align 8, !tbaa !193
  br label %485

485:                                              ; preds = %481, %454
  %486 = load i32, ptr %40, align 4, !tbaa !179
  invoke void @_ZN11spirv_cross12CompilerGLSL23add_local_variable_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %64, i32 noundef %486)
          to label %487 unwind label %477

487:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #7
  %488 = load ptr, ptr %39, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(12482) %64, ptr noundef nonnull align 4 dereferenceable(17) %488)
          to label %489 unwind label %527

489:                                              ; preds = %487
  %490 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %491 unwind label %531

491:                                              ; preds = %489
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #7
  %492 = load ptr, ptr %39, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %492, i32 0, i32 1
  %494 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %493)
          to label %495 unwind label %536

495:                                              ; preds = %491
  %496 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %64, i32 noundef %494, i32 noundef 12)
          to label %497 unwind label %536

497:                                              ; preds = %495
  %498 = zext i1 %496 to i8
  store i8 %498, ptr %43, align 1, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  %499 = load ptr, ptr %39, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %499, i32 0, i32 0
  %501 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %500)
          to label %502 unwind label %540

502:                                              ; preds = %497
  %503 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %64, i32 noundef %501)
          to label %504 unwind label %540

504:                                              ; preds = %502
  store ptr %503, ptr %44, align 8, !tbaa !5
  %505 = load ptr, ptr %44, align 8, !tbaa !5
  %506 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %505, i32 0, i32 2
  %507 = load i32, ptr %506, align 8, !tbaa !194
  %508 = icmp eq i32 %507, 17
  br i1 %508, label %509, label %674

509:                                              ; preds = %504
  %510 = load i8, ptr %43, align 1, !tbaa !181, !range !119, !noundef !120
  %511 = trunc i8 %510 to i1
  br i1 %511, label %674, label %512

512:                                              ; preds = %509
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  store i32 1, ptr %45, align 4, !tbaa !179
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  %513 = load i32, ptr %40, align 4, !tbaa !179
  %514 = invoke noundef ptr @_ZNK11spirv_cross11CompilerMSL22find_constexpr_samplerEj(ptr noundef nonnull align 8 dereferenceable(12482) %64, i32 noundef %513)
          to label %515 unwind label %544

515:                                              ; preds = %512
  store ptr %514, ptr %46, align 8, !tbaa !5
  %516 = load ptr, ptr %46, align 8, !tbaa !5
  %517 = icmp ne ptr %516, null
  br i1 %517, label %518, label %549

518:                                              ; preds = %515
  %519 = load ptr, ptr %46, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.spirv_cross::MSLConstexprSampler", ptr %519, i32 0, i32 24
  %521 = load i8, ptr %520, align 1, !tbaa !203, !range !119, !noundef !120
  %522 = trunc i8 %521 to i1
  br i1 %522, label %523, label %548

523:                                              ; preds = %518
  %524 = load ptr, ptr %46, align 8, !tbaa !5
  %525 = getelementptr inbounds %"struct.spirv_cross::MSLConstexprSampler", ptr %524, i32 0, i32 12
  %526 = load i32, ptr %525, align 4, !tbaa !215
  store i32 %526, ptr %45, align 4, !tbaa !179
  br label %548

527:                                              ; preds = %487
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %8, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %9, align 4
  br label %535

531:                                              ; preds = %489
  %532 = landingpad { ptr, i32 }
          cleanup
  %533 = extractvalue { ptr, i32 } %532, 0
  store ptr %533, ptr %8, align 8
  %534 = extractvalue { ptr, i32 } %532, 1
  store i32 %534, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  br label %535

535:                                              ; preds = %531, %527
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  br label %774

536:                                              ; preds = %495, %491
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %8, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %9, align 4
  br label %773

540:                                              ; preds = %765, %723, %721, %683, %502, %497
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %8, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %9, align 4
  br label %772

544:                                              ; preds = %512
  %545 = landingpad { ptr, i32 }
          cleanup
  %546 = extractvalue { ptr, i32 } %545, 0
  store ptr %546, ptr %8, align 8
  %547 = extractvalue { ptr, i32 } %545, 1
  store i32 %547, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  br label %673

548:                                              ; preds = %523, %518
  br label %549

549:                                              ; preds = %548, %515
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #7
  store i32 1, ptr %47, align 4, !tbaa !179
  br label %550

550:                                              ; preds = %562, %549
  %551 = load i32, ptr %47, align 4, !tbaa !179
  %552 = load i32, ptr %45, align 4, !tbaa !179
  %553 = icmp ult i32 %551, %552
  br i1 %553, label %555, label %554

554:                                              ; preds = %550
  store i32 8, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #7
  br label %579

555:                                              ; preds = %550
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #7
  %556 = load ptr, ptr %39, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(12482) %64, ptr noundef nonnull align 4 dereferenceable(17) %556)
          to label %557 unwind label %565

557:                                              ; preds = %555
  %558 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %64, i32 0, i32 94
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_RjEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(32) %558, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %559 unwind label %569

559:                                              ; preds = %557
  %560 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %561 unwind label %573

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

562:                                              ; preds = %561
  %563 = load i32, ptr %47, align 4, !tbaa !179
  %564 = add i32 %563, 1
  store i32 %564, ptr %47, align 4, !tbaa !179
  br label %550, !llvm.loop !216

565:                                              ; preds = %555
  %566 = landingpad { ptr, i32 }
          cleanup
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %8, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %9, align 4
  br label %578

569:                                              ; preds = %557
  %570 = landingpad { ptr, i32 }
          cleanup
  %571 = extractvalue { ptr, i32 } %570, 0
  store ptr %571, ptr %8, align 8
  %572 = extractvalue { ptr, i32 } %570, 1
  store i32 %572, ptr %9, align 4
  br label %577

573:                                              ; preds = %559
  %574 = landingpad { ptr, i32 }
          cleanup
  %575 = extractvalue { ptr, i32 } %574, 0
  store ptr %575, ptr %8, align 8
  %576 = extractvalue { ptr, i32 } %574, 1
  store i32 %576, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  br label %577

577:                                              ; preds = %573, %569
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  br label %578

578:                                              ; preds = %577, %565
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #7
  br label %673

579:                                              ; preds = %554
  %580 = load ptr, ptr %44, align 8, !tbaa !5
  %581 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %580, i32 0, i32 14
  %582 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %581, i32 0, i32 1
  %583 = load i32, ptr %582, align 4, !tbaa !218
  %584 = icmp ne i32 %583, 5
  br i1 %584, label %585, label %672

585:                                              ; preds = %579
  %586 = load ptr, ptr %44, align 8, !tbaa !5
  %587 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %586, i32 0, i32 6
  %588 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %587) #7
  br i1 %588, label %600, label %589

589:                                              ; preds = %585
  %590 = load ptr, ptr %41, align 8, !tbaa !5
  %591 = icmp ne ptr %590, null
  br i1 %591, label %592, label %596

592:                                              ; preds = %589
  %593 = load ptr, ptr %41, align 8, !tbaa !5
  %594 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25is_var_runtime_size_arrayERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %64, ptr noundef nonnull align 8 dereferenceable(176) %593)
          to label %595 unwind label %612

595:                                              ; preds = %592
  br i1 %594, label %600, label %635

596:                                              ; preds = %589
  %597 = load ptr, ptr %44, align 8, !tbaa !5
  %598 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_runtime_size_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %597)
          to label %599 unwind label %612

599:                                              ; preds = %596
  br i1 %598, label %600, label %635

600:                                              ; preds = %599, %595, %585
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #7
  %601 = load ptr, ptr %44, align 8, !tbaa !5
  %602 = load ptr, ptr %39, align 8, !tbaa !5
  %603 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %602, i32 0, i32 1
  %604 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %603)
          to label %605 unwind label %616

605:                                              ; preds = %600
  invoke void @_ZN11spirv_cross11CompilerMSL12sampler_typeB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(12482) %64, ptr noundef nonnull align 8 dereferenceable(336) %601, i32 noundef %604, i1 noundef zeroext false)
          to label %606 unwind label %616

606:                                              ; preds = %605
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #7
  %607 = load i32, ptr %40, align 4, !tbaa !179
  invoke void @_ZN11spirv_cross11CompilerMSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(12482) %64, i32 noundef %607)
          to label %608 unwind label %620

608:                                              ; preds = %606
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_S9_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %609 unwind label %624

609:                                              ; preds = %608
  %610 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %611 unwind label %628

611:                                              ; preds = %609
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #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
  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 32, ptr %50) #7
  br label %671

612:                                              ; preds = %596, %592
  %613 = landingpad { ptr, i32 }
          cleanup
  %614 = extractvalue { ptr, i32 } %613, 0
  store ptr %614, ptr %8, align 8
  %615 = extractvalue { ptr, i32 } %613, 1
  store i32 %615, ptr %9, align 4
  br label %673

616:                                              ; preds = %605, %600
  %617 = landingpad { ptr, i32 }
          cleanup
  %618 = extractvalue { ptr, i32 } %617, 0
  store ptr %618, ptr %8, align 8
  %619 = extractvalue { ptr, i32 } %617, 1
  store i32 %619, ptr %9, align 4
  br label %634

620:                                              ; preds = %606
  %621 = landingpad { ptr, i32 }
          cleanup
  %622 = extractvalue { ptr, i32 } %621, 0
  store ptr %622, ptr %8, align 8
  %623 = extractvalue { ptr, i32 } %621, 1
  store i32 %623, ptr %9, align 4
  br label %633

624:                                              ; preds = %608
  %625 = landingpad { ptr, i32 }
          cleanup
  %626 = extractvalue { ptr, i32 } %625, 0
  store ptr %626, ptr %8, align 8
  %627 = extractvalue { ptr, i32 } %625, 1
  store i32 %627, ptr %9, align 4
  br label %632

628:                                              ; preds = %609
  %629 = landingpad { ptr, i32 }
          cleanup
  %630 = extractvalue { ptr, i32 } %629, 0
  store ptr %630, ptr %8, align 8
  %631 = extractvalue { ptr, i32 } %629, 1
  store i32 %631, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  br label %632

632:                                              ; preds = %628, %624
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  br label %633

633:                                              ; preds = %632, %620
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  br label %634

634:                                              ; preds = %633, %616
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #7
  br label %673

635:                                              ; preds = %599, %595
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  %636 = load i32, ptr %40, align 4, !tbaa !179
  %637 = invoke noundef ptr @_ZNK11spirv_cross11CompilerMSL24descriptor_address_spaceEjN3spv12StorageClassEPKc(ptr noundef nonnull align 8 dereferenceable(12482) %64, i32 noundef %636, i32 noundef 0, ptr noundef @.str.283)
          to label %638 unwind label %647

638:                                              ; preds = %635
  store ptr %637, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #7
  %639 = load ptr, ptr %44, align 8, !tbaa !5
  %640 = load i32, ptr %40, align 4, !tbaa !179
  invoke void @_ZN11spirv_cross11CompilerMSL12sampler_typeB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(12482) %64, ptr noundef nonnull align 8 dereferenceable(336) %639, i32 noundef %640, i1 noundef zeroext false)
          to label %641 unwind label %651

641:                                              ; preds = %638
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #7
  %642 = load i32, ptr %40, align 4, !tbaa !179
  invoke void @_ZN11spirv_cross11CompilerMSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(12482) %64, i32 noundef %642)
          to label %643 unwind label %655

643:                                              ; preds = %641
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRPS1_RA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_SD_EEESD_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 1 dereferenceable(3) @.str.1189, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %644 unwind label %659

644:                                              ; preds = %643
  %645 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %646 unwind label %663

646:                                              ; preds = %644
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  br label %671

647:                                              ; preds = %635
  %648 = landingpad { ptr, i32 }
          cleanup
  %649 = extractvalue { ptr, i32 } %648, 0
  store ptr %649, ptr %8, align 8
  %650 = extractvalue { ptr, i32 } %648, 1
  store i32 %650, ptr %9, align 4
  br label %670

651:                                              ; preds = %638
  %652 = landingpad { ptr, i32 }
          cleanup
  %653 = extractvalue { ptr, i32 } %652, 0
  store ptr %653, ptr %8, align 8
  %654 = extractvalue { ptr, i32 } %652, 1
  store i32 %654, ptr %9, align 4
  br label %669

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

659:                                              ; preds = %643
  %660 = landingpad { ptr, i32 }
          cleanup
  %661 = extractvalue { ptr, i32 } %660, 0
  store ptr %661, ptr %8, align 8
  %662 = extractvalue { ptr, i32 } %660, 1
  store i32 %662, ptr %9, align 4
  br label %667

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

667:                                              ; preds = %663, %659
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  br label %668

668:                                              ; preds = %667, %655
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  br label %669

669:                                              ; preds = %668, %651
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  br label %670

670:                                              ; preds = %669, %647
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  br label %673

671:                                              ; preds = %646, %611
  br label %672

672:                                              ; preds = %671, %579
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  br label %674

673:                                              ; preds = %670, %634, %612, %578, %544
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  br label %772

674:                                              ; preds = %672, %509, %504
  %675 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %64, i32 0, i32 37
  %676 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %675, i32 0, i32 25
  %677 = load i8, ptr %676, align 1, !tbaa !219, !range !119, !noundef !120
  %678 = trunc i8 %677 to i1
  br i1 %678, label %679, label %721

679:                                              ; preds = %674
  %680 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %64, i32 0, i32 72
  %681 = load i8, ptr %680, align 8, !tbaa !220, !range !119, !noundef !120
  %682 = trunc i8 %681 to i1
  br i1 %682, label %683, label %721

683:                                              ; preds = %679
  %684 = load ptr, ptr %44, align 8, !tbaa !5
  %685 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_sampled_image_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %64, ptr noundef nonnull align 8 dereferenceable(336) %684)
          to label %686 unwind label %540

686:                                              ; preds = %683
  br i1 %685, label %687, label %721

687:                                              ; preds = %686
  %688 = load i8, ptr %43, align 1, !tbaa !181, !range !119, !noundef !120
  %689 = trunc i8 %688 to i1
  br i1 %689, label %721, label %690

690:                                              ; preds = %687
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #7
  %691 = load ptr, ptr %44, align 8, !tbaa !5
  %692 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %691, i32 0, i32 6
  %693 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %692) #7
  %694 = xor i1 %693, true
  %695 = zext i1 %694 to i8
  store i8 %695, ptr %57, align 1, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #7
  %696 = load i8, ptr %57, align 1, !tbaa !181, !range !119, !noundef !120
  %697 = trunc i8 %696 to i1
  br i1 %697, label %698, label %699

698:                                              ; preds = %690
  br label %700

699:                                              ; preds = %690
  br label %700

700:                                              ; preds = %699, %698
  %701 = phi ptr [ @.str.61, %698 ], [ @.str.1189, %699 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #7
  %702 = load i32, ptr %40, align 4, !tbaa !179
  invoke void @_ZN11spirv_cross11CompilerMSL21to_swizzle_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(12482) %64, i32 noundef %702)
          to label %703 unwind label %707

703:                                              ; preds = %700
  invoke void @_ZN11spirv_cross4joinIJRA16_KcRA3_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 1 dereferenceable(16) @.str.1190, ptr noundef nonnull align 1 dereferenceable(3) %701, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %704 unwind label %711

704:                                              ; preds = %703
  %705 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %58)
          to label %706 unwind label %715

706:                                              ; preds = %704
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  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
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #7
  br label %721

707:                                              ; preds = %700
  %708 = landingpad { ptr, i32 }
          cleanup
  %709 = extractvalue { ptr, i32 } %708, 0
  store ptr %709, ptr %8, align 8
  %710 = extractvalue { ptr, i32 } %708, 1
  store i32 %710, ptr %9, align 4
  br label %720

711:                                              ; preds = %703
  %712 = landingpad { ptr, i32 }
          cleanup
  %713 = extractvalue { ptr, i32 } %712, 0
  store ptr %713, ptr %8, align 8
  %714 = extractvalue { ptr, i32 } %712, 1
  store i32 %714, ptr %9, align 4
  br label %719

715:                                              ; preds = %704
  %716 = landingpad { ptr, i32 }
          cleanup
  %717 = extractvalue { ptr, i32 } %716, 0
  store ptr %717, ptr %8, align 8
  %718 = extractvalue { ptr, i32 } %716, 1
  store i32 %718, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  br label %719

719:                                              ; preds = %715, %711
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  br label %720

720:                                              ; preds = %719, %707
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #7
  br label %772

721:                                              ; preds = %706, %687, %686, %679, %674
  %722 = load i32, ptr %40, align 4, !tbaa !179
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %60, i32 noundef %722)
          to label %723 unwind label %540

723:                                              ; preds = %721
  %724 = getelementptr inbounds %"class.spirv_cross::TypedID.350", ptr %60, i32 0, i32 0
  %725 = load i32, ptr %724, align 4
  %726 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL28buffer_requires_array_lengthENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(12482) %64, i32 %725)
          to label %727 unwind label %540

727:                                              ; preds = %723
  br i1 %726, label %728, label %759

728:                                              ; preds = %727
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #7
  %729 = load ptr, ptr %44, align 8, !tbaa !5
  %730 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %729, i32 0, i32 6
  %731 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %730) #7
  %732 = xor i1 %731, true
  %733 = zext i1 %732 to i8
  store i8 %733, ptr %61, align 1, !tbaa !181
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #7
  %734 = load i8, ptr %61, align 1, !tbaa !181, !range !119, !noundef !120
  %735 = trunc i8 %734 to i1
  br i1 %735, label %736, label %737

736:                                              ; preds = %728
  br label %738

737:                                              ; preds = %728
  br label %738

738:                                              ; preds = %737, %736
  %739 = phi ptr [ @.str.61, %736 ], [ @.str.1189, %737 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #7
  %740 = load i32, ptr %40, align 4, !tbaa !179
  invoke void @_ZN11spirv_cross11CompilerMSL25to_buffer_size_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(12482) %64, i32 noundef %740)
          to label %741 unwind label %745

741:                                              ; preds = %738
  invoke void @_ZN11spirv_cross4joinIJRA16_KcRA3_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 1 dereferenceable(16) @.str.1190, ptr noundef nonnull align 1 dereferenceable(3) %739, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %742 unwind label %749

742:                                              ; preds = %741
  %743 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %62)
          to label %744 unwind label %753

744:                                              ; preds = %742
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #7
  br label %759

745:                                              ; preds = %738
  %746 = landingpad { ptr, i32 }
          cleanup
  %747 = extractvalue { ptr, i32 } %746, 0
  store ptr %747, ptr %8, align 8
  %748 = extractvalue { ptr, i32 } %746, 1
  store i32 %748, ptr %9, align 4
  br label %758

749:                                              ; preds = %741
  %750 = landingpad { ptr, i32 }
          cleanup
  %751 = extractvalue { ptr, i32 } %750, 0
  store ptr %751, ptr %8, align 8
  %752 = extractvalue { ptr, i32 } %750, 1
  store i32 %752, ptr %9, align 4
  br label %757

753:                                              ; preds = %742
  %754 = landingpad { ptr, i32 }
          cleanup
  %755 = extractvalue { ptr, i32 } %754, 0
  store ptr %755, ptr %8, align 8
  %756 = extractvalue { ptr, i32 } %754, 1
  store i32 %756, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  br label %757

757:                                              ; preds = %753, %749
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  br label %758

758:                                              ; preds = %757, %745
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #7
  br label %772

759:                                              ; preds = %744, %727
  %760 = load ptr, ptr %39, align 8, !tbaa !5
  %761 = load ptr, ptr %5, align 8, !tbaa !5
  %762 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %761, i32 0, i32 4
  %763 = call noundef nonnull align 4 dereferenceable(17) ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %762) #7
  %764 = icmp ne ptr %760, %763
  br i1 %764, label %765, label %768

765:                                              ; preds = %759
  %766 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef @.str.55)
          to label %767 unwind label %540

767:                                              ; preds = %765
  br label %768

768:                                              ; preds = %767, %759
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  br label %769

769:                                              ; preds = %768
  %770 = load ptr, ptr %37, align 8, !tbaa !5
  %771 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %770, i32 1
  store ptr %771, ptr %37, align 8, !tbaa !5
  br label %438

772:                                              ; preds = %758, %720, %673, %540
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  br label %773

773:                                              ; preds = %772, %536
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  br label %774

774:                                              ; preds = %773, %535, %477
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  br label %775

775:                                              ; preds = %774, %473
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  br label %780

776:                                              ; preds = %442
  %777 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef @.str.53)
          to label %778 unwind label %116

778:                                              ; preds = %776
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %64, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %779 unwind label %116

779:                                              ; preds = %778
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %7) #7
  ret void

780:                                              ; preds = %775, %429, %350, %252, %235, %208, %199, %190, %133, %116
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  br label %781

781:                                              ; preds = %780, %94
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %7) #7
  br label %782

782:                                              ; preds = %781
  %783 = load ptr, ptr %8, align 8
  %784 = load i32, ptr %9, align 4
  %785 = insertvalue { ptr, i32 } poison, ptr %783, 0
  %786 = insertvalue { ptr, i32 } %785, i32 %784, 1
  resume { ptr, i32 } %786

787:                                              ; preds = %404
  unreachable
}

declare void @_ZN11spirv_cross12CompilerGLSL21add_function_overloadERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(795)) #4

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRA3_KcRNS_7TypedIDILNS_5TypesE1EEEbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) #3 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(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 4 dereferenceable(17)) #3 align 2

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_sampled_image_typeERKNS_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_cross4joinIJRA16_KcRA3_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32)) #3

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

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

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

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

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


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"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 }
%"class.spirv_cross::TypedID.350" = type { i32 }

@.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.58 = external hidden unnamed_addr constant [2 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.283 = external hidden unnamed_addr constant [13 x i8], align 1
@_ZL12force_inline = external hidden global ptr, align 8
@.str.910 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1130 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1186 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1187 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1188 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1189 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1190 = external hidden unnamed_addr constant [16 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

; 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 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 zeroext i1 @_ZNK11spirv_cross11CompilerMSL25is_var_runtime_size_arrayERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #2 align 2

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

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), 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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(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

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

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

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

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

; 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 @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL23emit_function_prototypeERNS_12SPIRFunctionERKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(795) %1, ptr nocapture noundef nonnull readnone align 8 dereferenceable(64) %2) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %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.spirv_cross::TypedID.413", align 4
  %12 = alloca i8, align 1
  %13 = alloca %"struct.spirv_cross::SPIRFunction::Parameter", align 4
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca i32, align 4
  %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 ptr, align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.spirv_cross::TypedID.350", align 4
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = getelementptr inbounds i8, ptr %1, i64 8
  %33 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
  %34 = getelementptr inbounds i8, ptr %0, i64 8
  %35 = getelementptr inbounds i8, ptr %0, i64 1744
  %36 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %35)
  %.not = icmp eq i32 %33, %36
  br i1 %.not, label %38, label %37

37:                                               ; preds = %3
  tail call void @_ZN11spirv_cross12CompilerGLSL21add_function_overloadERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(795) %1)
  br label %38

38:                                               ; preds = %37, %3
  %39 = getelementptr inbounds i8, ptr %0, i64 7736
  %40 = getelementptr inbounds i8, ptr %0, i64 7680
  %41 = tail call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EEaSERKSB_(ptr noundef nonnull align 8 dereferenceable(56) %40, ptr noundef nonnull align 8 dereferenceable(56) %39)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  %42 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
  %43 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %35)
  %44 = icmp eq i32 %42, %43
  %45 = getelementptr inbounds i8, ptr %0, i64 8184
  %46 = zext i1 %44 to i8
  store i8 %46, ptr %45, align 8, !tbaa !5
  br i1 %44, label %50, label %47

47:                                               ; preds = %38
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(8) @_ZL12force_inline)
          to label %50 unwind label %48

48:                                               ; preds = %47
  %49 = landingpad { ptr, i32 }
          cleanup
  br label %416

50:                                               ; preds = %47, %38
  %51 = getelementptr inbounds i8, ptr %1, i64 12
  %52 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
  %53 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %52)
          to label %54 unwind label %63

54:                                               ; preds = %50
  %55 = getelementptr inbounds i8, ptr %53, i64 32
  %56 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %55) #6
  br i1 %56, label %65, label %57

57:                                               ; preds = %54
  %58 = getelementptr inbounds i8, ptr %0, i64 10147
  %59 = load i8, ptr %58, align 1, !tbaa !118, !range !173, !noundef !174
  %60 = trunc nuw i8 %59 to i1
  br i1 %60, label %61, label %65

61:                                               ; preds = %57
  %62 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.910)
          to label %74 unwind label %63

63:                                               ; preds = %414, %._crit_edge206, %157, %110, %99, %91, %83, %74, %61, %50
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %416

65:                                               ; preds = %57, %54
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #6
  invoke void @_ZN11spirv_cross11CompilerMSL14func_type_declB5cxx11ERNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %5, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %53)
          to label %66 unwind label %69

66:                                               ; preds = %65
  %67 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %5)
          to label %68 unwind label %71

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

69:                                               ; preds = %65
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %73

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

73:                                               ; preds = %71, %69
  %.pn = phi { ptr, i32 } [ %72, %71 ], [ %70, %69 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  br label %416

74:                                               ; preds = %61, %68
  %75 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.60)
          to label %76 unwind label %63

76:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #6
  %77 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
  %78 = load ptr, ptr %0, align 8, !tbaa !175
  %79 = getelementptr inbounds i8, ptr %78, i64 48
  %80 = load ptr, ptr %79, align 8
  invoke void %80(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %77, i1 noundef zeroext true)
          to label %81 unwind label %112

81:                                               ; preds = %76
  %82 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %83 unwind label %114

83:                                               ; preds = %81
  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
  %84 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.58)
          to label %85 unwind label %63

85:                                               ; preds = %83
  %86 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %55) #6
  br i1 %86, label %127, label %87

87:                                               ; preds = %85
  %88 = getelementptr inbounds i8, ptr %0, i64 10147
  %89 = load i8, ptr %88, align 1, !tbaa !118, !range !173, !noundef !174
  %90 = trunc nuw i8 %89 to i1
  br i1 %90, label %91, label %127

91:                                               ; preds = %87
  %92 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.1186)
          to label %93 unwind label %63

93:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #6
  %94 = load ptr, ptr %0, align 8, !tbaa !175
  %95 = getelementptr inbounds i8, ptr %94, i64 152
  %96 = load ptr, ptr %95, align 8
  invoke void %96(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %53, i32 noundef 0)
          to label %97 unwind label %117

97:                                               ; preds = %93
  %98 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %99 unwind label %119

99:                                               ; preds = %97
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  %100 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.1187)
          to label %101 unwind label %63

101:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #6
  %102 = load ptr, ptr %0, align 8, !tbaa !175
  %103 = getelementptr inbounds i8, ptr %102, i64 304
  %104 = load ptr, ptr %103, align 8
  invoke void %104(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %53, i32 noundef 0)
          to label %105 unwind label %122

105:                                              ; preds = %101
  %106 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %107 unwind label %124

107:                                              ; preds = %105
  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
  %108 = getelementptr inbounds i8, ptr %1, i64 24
  %109 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %108) #6
  br i1 %109, label %127, label %110

110:                                              ; preds = %107
  %111 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.55)
          to label %127 unwind label %63

112:                                              ; preds = %76
  %113 = landingpad { ptr, i32 }
          cleanup
  br label %116

114:                                              ; preds = %81
  %115 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  br label %116

116:                                              ; preds = %114, %112
  %.pn136 = phi { ptr, i32 } [ %115, %114 ], [ %113, %112 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  br label %416

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

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

121:                                              ; preds = %119, %117
  %.pn138 = phi { ptr, i32 } [ %120, %119 ], [ %118, %117 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %416

122:                                              ; preds = %101
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %126

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

126:                                              ; preds = %124, %122
  %.pn140 = phi { ptr, i32 } [ %125, %124 ], [ %123, %122 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  br label %416

127:                                              ; preds = %107, %110, %87, %85
  %128 = load i8, ptr %45, align 8, !tbaa !5, !range !173, !noundef !174
  %129 = trunc nuw i8 %128 to i1
  br i1 %129, label %130, label %.loopexit

130:                                              ; preds = %127
  %131 = getelementptr inbounds i8, ptr %0, i64 10128
  %132 = load i8, ptr %131, align 8, !tbaa !177, !range !173, !noundef !174
  %133 = trunc nuw i8 %132 to i1
  %134 = getelementptr inbounds i8, ptr %1, i64 24
  br i1 %133, label %135, label %146

135:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  %136 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %134) #6
  %137 = xor i1 %136, true
  invoke void @_ZN11spirv_cross11CompilerMSL32entry_point_args_argument_bufferB5cxx11Eb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(12482) %0, i1 noundef zeroext %137)
          to label %138 unwind label %141

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

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

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

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

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

146:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  %147 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %134) #6
  %148 = xor i1 %147, true
  invoke void @_ZN11spirv_cross11CompilerMSL24entry_point_args_classicB5cxx11Eb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(12482) %0, i1 noundef zeroext %148)
          to label %149 unwind label %152

149:                                              ; preds = %146
  %150 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %151 unwind label %154

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

152:                                              ; preds = %146
  %153 = landingpad { ptr, i32 }
          cleanup
  br label %156

154:                                              ; preds = %149
  %155 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  br label %156

156:                                              ; preds = %154, %152
  %.pn142 = phi { ptr, i32 } [ %155, %154 ], [ %153, %152 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %416

157:                                              ; preds = %151, %140
  %158 = call ptr @_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %39) #6
  %159 = call ptr @_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %39) #6
  invoke void @_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE6insertINSt8__detail14_Node_iteratorIS5_Lb1ELb1EEEEEvT_SG_(ptr noundef nonnull align 8 dereferenceable(56) %40, ptr %158, ptr %159)
          to label %160 unwind label %63

160:                                              ; preds = %157
  %161 = getelementptr inbounds i8, ptr %0, i64 10920
  %162 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %161) #6
  %163 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %161) #6
  %.not146193 = icmp eq ptr %162, %163
  br i1 %.not146193, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %160
  %164 = getelementptr inbounds i8, ptr %0, i64 40
  br label %171

._crit_edge:                                      ; preds = %204, %160
  %165 = getelementptr inbounds i8, ptr %1, i64 392
  %166 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %165) #6
  %167 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %165) #6
  %.not147195 = icmp eq ptr %166, %167
  br i1 %.not147195, label %.loopexit, label %.lr.ph198

.lr.ph198:                                        ; preds = %._crit_edge
  %168 = getelementptr inbounds i8, ptr %13, i64 4
  %169 = getelementptr inbounds i8, ptr %13, i64 8
  %170 = getelementptr inbounds i8, ptr %13, i64 16
  br label %206

171:                                              ; preds = %.lr.ph, %204
  %.0125194 = phi ptr [ %162, %.lr.ph ], [ %205, %204 ]
  %172 = load i32, ptr %.0125194, align 4, !tbaa !178
  %173 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %172)
          to label %174 unwind label %181

174:                                              ; preds = %171
  %175 = getelementptr inbounds i8, ptr %173, i64 24
  %176 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %175)
  %.not184 = icmp eq i32 %176, 0
  br i1 %.not184, label %177, label %185

177:                                              ; preds = %174
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #6
  %178 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %34, i32 noundef 1)
          to label %179 unwind label %183

179:                                              ; preds = %177
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %11, i32 noundef %178)
  %180 = load i32, ptr %11, align 4, !tbaa !178
  store i32 %180, ptr %175, align 8, !tbaa !178
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #6
  br label %185

181:                                              ; preds = %171
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %416

183:                                              ; preds = %177
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #6
  br label %416

185:                                              ; preds = %179, %174
  %186 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %175)
  %187 = zext i32 %186 to i64
  %188 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %164, i64 noundef %187) #6
  %189 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %188)
  %190 = icmp eq i32 %189, 0
  br i1 %190, label %197, label %191

191:                                              ; preds = %185
  %192 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %175)
  %193 = zext i32 %192 to i64
  %194 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %164, i64 noundef %193) #6
  %195 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %194)
  %196 = icmp eq i32 %195, 8
  br i1 %196, label %197, label %204

197:                                              ; preds = %191, %185
  %198 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %175)
  %199 = getelementptr inbounds i8, ptr %173, i64 12
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #6
  store i8 1, ptr %12, align 1, !tbaa !179
  %200 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRA3_KcRNS_7TypedIDILNS_5TypesE1EEEbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %198, ptr noundef nonnull align 1 dereferenceable(3) @.str.1130, ptr noundef nonnull align 4 dereferenceable(4) %199, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %201 unwind label %202

201:                                              ; preds = %197
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  br label %204

202:                                              ; preds = %197
  %203 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  br label %416

204:                                              ; preds = %201, %191
  %205 = getelementptr inbounds i8, ptr %.0125194, i64 4
  %.not146 = icmp eq ptr %205, %163
  br i1 %.not146, label %._crit_edge, label %171

206:                                              ; preds = %.lr.ph198, %224
  %.0127196 = phi ptr [ %166, %.lr.ph198 ], [ %225, %224 ]
  %207 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0127196)
  %208 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %207)
          to label %209 unwind label %212

209:                                              ; preds = %206
  %210 = getelementptr inbounds i8, ptr %208, i64 16
  %211 = load i32, ptr %210, align 8, !tbaa !180
  %.not179 = icmp eq i32 %211, 5402
  br i1 %.not179, label %214, label %224

212:                                              ; preds = %214, %206
  %213 = landingpad { ptr, i32 }
          cleanup
  br label %416

214:                                              ; preds = %209
  %215 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0127196)
  invoke void @_ZN11spirv_cross12CompilerGLSL23add_local_variable_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %215)
          to label %216 unwind label %212

216:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %13) #6
  store i32 0, ptr %13, align 4
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %13) #6
  store i32 0, ptr %168, align 4
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %168) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(9) %169, i8 0, i64 9, i1 false)
  %217 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_2EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %168, ptr noundef nonnull align 4 dereferenceable(4) %.0127196)
  %218 = getelementptr inbounds i8, ptr %208, i64 12
  %219 = load i32, ptr %218, align 4, !tbaa !178
  store i32 %219, ptr %13, align 4, !tbaa !178
  store i8 1, ptr %170, align 4, !tbaa !187
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  invoke void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 4 dereferenceable(17) %13)
          to label %220 unwind label %226

220:                                              ; preds = %216
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA13_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(13) @.str.1188)
          to label %221 unwind label %228

221:                                              ; preds = %220
  %222 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %223 unwind label %230

223:                                              ; preds = %221
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %13) #6
  br label %224

224:                                              ; preds = %209, %223
  %225 = getelementptr inbounds i8, ptr %.0127196, i64 4
  %.not147 = icmp eq ptr %225, %167
  br i1 %.not147, label %.loopexit, label %206

226:                                              ; preds = %216
  %227 = landingpad { ptr, i32 }
          cleanup
  br label %233

228:                                              ; preds = %220
  %229 = landingpad { ptr, i32 }
          cleanup
  br label %232

230:                                              ; preds = %221
  %231 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  br label %232

232:                                              ; preds = %230, %228
  %.pn180 = phi { ptr, i32 } [ %231, %230 ], [ %229, %228 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %233

233:                                              ; preds = %232, %226
  %.pn180.pn = phi { ptr, i32 } [ %.pn180, %232 ], [ %227, %226 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %13) #6
  br label %416

.loopexit:                                        ; preds = %224, %._crit_edge, %127
  %234 = getelementptr inbounds i8, ptr %1, i64 24
  %235 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %234) #6
  %236 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %234) #6
  %.not148202 = icmp eq ptr %235, %236
  br i1 %.not148202, label %._crit_edge206, label %.lr.ph205

.lr.ph205:                                        ; preds = %.loopexit
  %237 = getelementptr inbounds i8, ptr %0, i64 11456
  %238 = getelementptr inbounds i8, ptr %0, i64 10121
  %239 = getelementptr inbounds i8, ptr %0, i64 11184
  br label %241

._crit_edge206:                                   ; preds = %412, %.loopexit
  %240 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.53)
          to label %414 unwind label %63

241:                                              ; preds = %.lr.ph205, %412
  %.0129203 = phi ptr [ %235, %.lr.ph205 ], [ %413, %412 ]
  %242 = getelementptr inbounds i8, ptr %.0129203, i64 4
  %243 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %242)
  %244 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %242)
  %245 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %244)
          to label %246 unwind label %256

246:                                              ; preds = %241
  %.not149 = icmp eq ptr %245, null
  br i1 %.not149, label %260, label %247

247:                                              ; preds = %246
  %248 = getelementptr inbounds i8, ptr %.0129203, i64 16
  %249 = load i8, ptr %248, align 4, !tbaa !187, !range !173, !noundef !174
  %250 = trunc nuw i8 %249 to i1
  br i1 %250, label %251, label %258

251:                                              ; preds = %247
  %252 = getelementptr inbounds i8, ptr %245, i64 28
  %253 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %252)
  %.not150 = icmp eq i32 %253, 0
  br i1 %.not150, label %258, label %254

254:                                              ; preds = %251
  %255 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %252)
  br label %258

256:                                              ; preds = %260, %241
  %257 = landingpad { ptr, i32 }
          cleanup
  br label %416

258:                                              ; preds = %254, %251, %247
  %.0130 = phi i32 [ %255, %254 ], [ %243, %251 ], [ %243, %247 ]
  %259 = getelementptr inbounds i8, ptr %245, i64 168
  store ptr %.0129203, ptr %259, align 8, !tbaa !189
  br label %260

260:                                              ; preds = %258, %246
  %.1131 = phi i32 [ %.0130, %258 ], [ %243, %246 ]
  invoke void @_ZN11spirv_cross12CompilerGLSL23add_local_variable_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.1131)
          to label %261 unwind label %256

261:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #6
  invoke void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 4 dereferenceable(17) %.0129203)
          to label %262 unwind label %281

262:                                              ; preds = %261
  %263 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %264 unwind label %283

264:                                              ; preds = %262
  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
  %265 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %242)
  %266 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %265, i32 noundef 12)
          to label %267 unwind label %286

267:                                              ; preds = %264
  %268 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0129203)
  %269 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %268)
          to label %270 unwind label %288

270:                                              ; preds = %267
  %271 = getelementptr inbounds i8, ptr %269, i64 16
  %272 = load i32, ptr %271, align 8, !tbaa !190
  %273 = icmp ne i32 %272, 17
  %brmerge = or i1 %266, %273
  br i1 %brmerge, label %365, label %274

274:                                              ; preds = %270
  %275 = invoke noundef ptr @_ZNK11spirv_cross11CompilerMSL22find_constexpr_samplerEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %.1131)
          to label %276 unwind label %290

276:                                              ; preds = %274
  %.not153 = icmp eq ptr %275, null
  br i1 %.not153, label %.thread, label %277

277:                                              ; preds = %276
  %278 = getelementptr inbounds i8, ptr %275, i64 99
  %279 = load i8, ptr %278, align 1, !tbaa !199, !range !173, !noundef !174
  %280 = trunc nuw i8 %279 to i1
  br i1 %280, label %292, label %.thread

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

283:                                              ; preds = %262
  %284 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  br label %285

285:                                              ; preds = %283, %281
  %.pn151 = phi { ptr, i32 } [ %284, %283 ], [ %282, %281 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %416

286:                                              ; preds = %264
  %287 = landingpad { ptr, i32 }
          cleanup
  br label %416

288:                                              ; preds = %410, %389, %371, %267
  %289 = landingpad { ptr, i32 }
          cleanup
  br label %416

290:                                              ; preds = %274
  %291 = landingpad { ptr, i32 }
          cleanup
  br label %416

.thread:                                          ; preds = %277, %276
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #6
  br label %._crit_edge201

292:                                              ; preds = %277
  %293 = getelementptr inbounds i8, ptr %275, i64 48
  %294 = load i32, ptr %293, align 4, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #6
  store i32 1, ptr %17, align 4, !tbaa !178
  %295 = icmp ugt i32 %294, 1
  br i1 %295, label %.lr.ph200, label %._crit_edge201

._crit_edge201:                                   ; preds = %301, %.thread, %292
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  %296 = getelementptr inbounds i8, ptr %269, i64 252
  %297 = load i32, ptr %296, align 4, !tbaa !212
  %.not154 = icmp eq i32 %297, 5
  br i1 %.not154, label %365, label %313

.lr.ph200:                                        ; preds = %292, %301
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  invoke void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 4 dereferenceable(17) %.0129203)
          to label %298 unwind label %305

298:                                              ; preds = %.lr.ph200
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_RjEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(32) %237, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %299 unwind label %307

299:                                              ; preds = %298
  %300 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %301 unwind label %309

301:                                              ; preds = %299
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  %302 = load i32, ptr %17, align 4, !tbaa !178
  %303 = add i32 %302, 1
  store i32 %303, ptr %17, align 4, !tbaa !178
  %304 = icmp ult i32 %303, %294
  br i1 %304, label %.lr.ph200, label %._crit_edge201, !llvm.loop !213

305:                                              ; preds = %.lr.ph200
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %312

307:                                              ; preds = %298
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %311

309:                                              ; preds = %299
  %310 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  br label %311

311:                                              ; preds = %309, %307
  %.pn164 = phi { ptr, i32 } [ %310, %309 ], [ %308, %307 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  br label %312

312:                                              ; preds = %311, %305
  %.pn164.pn = phi { ptr, i32 } [ %.pn164, %311 ], [ %306, %305 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  br label %416

313:                                              ; preds = %._crit_edge201
  %314 = getelementptr inbounds i8, ptr %269, i64 32
  %315 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %314) #6
  br i1 %315, label %323, label %316

316:                                              ; preds = %313
  br i1 %.not149, label %320, label %317

317:                                              ; preds = %316
  %318 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25is_var_runtime_size_arrayERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(176) %245)
          to label %319 unwind label %330

319:                                              ; preds = %317
  br i1 %318, label %323, label %343

320:                                              ; preds = %316
  %321 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_runtime_size_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %269)
          to label %322 unwind label %330

322:                                              ; preds = %320
  br i1 %321, label %323, label %343

323:                                              ; preds = %322, %319, %313
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #6
  %324 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %242)
  invoke void @_ZN11spirv_cross11CompilerMSL12sampler_typeB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %269, i32 noundef %324, i1 noundef zeroext false)
          to label %325 unwind label %332

325:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #6
  invoke void @_ZN11spirv_cross11CompilerMSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %.1131)
          to label %326 unwind label %334

326:                                              ; preds = %325
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_S9_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %327 unwind label %336

327:                                              ; preds = %326
  %328 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %329 unwind label %338

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

330:                                              ; preds = %320, %317
  %331 = landingpad { ptr, i32 }
          cleanup
  br label %416

332:                                              ; preds = %323
  %333 = landingpad { ptr, i32 }
          cleanup
  br label %342

334:                                              ; preds = %325
  %335 = landingpad { ptr, i32 }
          cleanup
  br label %341

336:                                              ; preds = %326
  %337 = landingpad { ptr, i32 }
          cleanup
  br label %340

338:                                              ; preds = %327
  %339 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  br label %340

340:                                              ; preds = %338, %336
  %.pn160 = phi { ptr, i32 } [ %339, %338 ], [ %337, %336 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  br label %341

341:                                              ; preds = %340, %334
  %.pn160.pn = phi { ptr, i32 } [ %.pn160, %340 ], [ %335, %334 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  br label %342

342:                                              ; preds = %341, %332
  %.pn160.pn.pn = phi { ptr, i32 } [ %.pn160.pn, %341 ], [ %333, %332 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  br label %416

343:                                              ; preds = %322, %319
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #6
  %344 = invoke noundef ptr @_ZNK11spirv_cross11CompilerMSL24descriptor_address_spaceEjN3spv12StorageClassEPKc(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %.1131, i32 noundef 0, ptr noundef nonnull @.str.283)
          to label %345 unwind label %351

345:                                              ; preds = %343
  store ptr %344, ptr %23, align 8, !tbaa !215
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #6
  invoke void @_ZN11spirv_cross11CompilerMSL12sampler_typeB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %269, i32 noundef %.1131, i1 noundef zeroext false)
          to label %346 unwind label %353

346:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #6
  invoke void @_ZN11spirv_cross11CompilerMSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %.1131)
          to label %347 unwind label %355

347:                                              ; preds = %346
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRPS1_RA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_SD_EEESD_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 1 dereferenceable(3) @.str.1189, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %348 unwind label %357

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

350:                                              ; preds = %348
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  br label %365

351:                                              ; preds = %343
  %352 = landingpad { ptr, i32 }
          cleanup
  br label %364

353:                                              ; preds = %345
  %354 = landingpad { ptr, i32 }
          cleanup
  br label %363

355:                                              ; preds = %346
  %356 = landingpad { ptr, i32 }
          cleanup
  br label %362

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

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

361:                                              ; preds = %359, %357
  %.pn155 = phi { ptr, i32 } [ %360, %359 ], [ %358, %357 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  br label %362

362:                                              ; preds = %361, %355
  %.pn155.pn = phi { ptr, i32 } [ %.pn155, %361 ], [ %356, %355 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  br label %363

363:                                              ; preds = %362, %353
  %.pn155.pn.pn = phi { ptr, i32 } [ %.pn155.pn, %362 ], [ %354, %353 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  br label %364

364:                                              ; preds = %363, %351
  %.pn155.pn.pn.pn = phi { ptr, i32 } [ %.pn155.pn.pn, %363 ], [ %352, %351 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  br label %416

365:                                              ; preds = %._crit_edge201, %350, %329, %270
  %366 = load i8, ptr %238, align 1, !tbaa !216, !range !173, !noundef !174
  %367 = trunc nuw i8 %366 to i1
  br i1 %367, label %368, label %389

368:                                              ; preds = %365
  %369 = load i8, ptr %239, align 8, !tbaa !217, !range !173, !noundef !174
  %370 = trunc nuw i8 %369 to i1
  br i1 %370, label %371, label %389

371:                                              ; preds = %368
  %372 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_sampled_image_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %269)
          to label %373 unwind label %288

373:                                              ; preds = %371
  %.not191 = xor i1 %372, true
  %brmerge192 = or i1 %266, %.not191
  br i1 %brmerge192, label %389, label %374

374:                                              ; preds = %373
  %375 = getelementptr inbounds i8, ptr %269, i64 32
  %376 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %375) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #6
  invoke void @_ZN11spirv_cross11CompilerMSL21to_swizzle_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %.1131)
          to label %377 unwind label %381

377:                                              ; preds = %374
  %.str.61..str.1189 = select i1 %376, ptr @.str.1189, ptr @.str.61
  invoke void @_ZN11spirv_cross4joinIJRA16_KcRA3_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 1 dereferenceable(16) @.str.1190, ptr noundef nonnull align 1 dereferenceable(3) %.str.61..str.1189, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %378 unwind label %383

378:                                              ; preds = %377
  %379 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %380 unwind label %385

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

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

383:                                              ; preds = %377
  %384 = landingpad { ptr, i32 }
          cleanup
  br label %387

385:                                              ; preds = %378
  %386 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  br label %387

387:                                              ; preds = %385, %383
  %.pn168 = phi { ptr, i32 } [ %386, %385 ], [ %384, %383 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  br label %388

388:                                              ; preds = %387, %381
  %.pn168.pn = phi { ptr, i32 } [ %.pn168, %387 ], [ %382, %381 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  br label %416

389:                                              ; preds = %373, %380, %368, %365
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %29, i32 noundef %.1131)
  %390 = load i32, ptr %29, align 4
  %391 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL28buffer_requires_array_lengthENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 %390)
          to label %392 unwind label %288

392:                                              ; preds = %389
  br i1 %391, label %393, label %408

393:                                              ; preds = %392
  %394 = getelementptr inbounds i8, ptr %269, i64 32
  %395 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %394) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #6
  invoke void @_ZN11spirv_cross11CompilerMSL25to_buffer_size_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %.1131)
          to label %396 unwind label %400

396:                                              ; preds = %393
  %.str.61..str.11891 = select i1 %395, ptr @.str.1189, ptr @.str.61
  invoke void @_ZN11spirv_cross4joinIJRA16_KcRA3_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 1 dereferenceable(16) @.str.1190, ptr noundef nonnull align 1 dereferenceable(3) %.str.61..str.11891, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %397 unwind label %402

397:                                              ; preds = %396
  %398 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %399 unwind label %404

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

400:                                              ; preds = %393
  %401 = landingpad { ptr, i32 }
          cleanup
  br label %407

402:                                              ; preds = %396
  %403 = landingpad { ptr, i32 }
          cleanup
  br label %406

404:                                              ; preds = %397
  %405 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  br label %406

406:                                              ; preds = %404, %402
  %.pn171 = phi { ptr, i32 } [ %405, %404 ], [ %403, %402 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  br label %407

407:                                              ; preds = %406, %400
  %.pn171.pn = phi { ptr, i32 } [ %.pn171, %406 ], [ %401, %400 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #6
  br label %416

408:                                              ; preds = %399, %392
  %409 = call noundef nonnull align 4 dereferenceable(17) ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %234) #6
  %.not174 = icmp eq ptr %.0129203, %409
  br i1 %.not174, label %412, label %410

410:                                              ; preds = %408
  %411 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.55)
          to label %412 unwind label %288

412:                                              ; preds = %410, %408
  %413 = getelementptr inbounds i8, ptr %.0129203, i64 20
  %.not148 = icmp eq ptr %413, %236
  br i1 %.not148, label %._crit_edge206, label %241

414:                                              ; preds = %._crit_edge206
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %415 unwind label %63

415:                                              ; preds = %414
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  ret void

416:                                              ; preds = %63, %73, %116, %121, %126, %145, %156, %183, %202, %181, %233, %212, %286, %290, %312, %330, %342, %364, %407, %388, %288, %285, %256, %48
  %.pn185.pn.pn.pn = phi { ptr, i32 } [ %49, %48 ], [ %64, %63 ], [ %.pn144, %145 ], [ %.pn142, %156 ], [ %.pn140, %126 ], [ %.pn138, %121 ], [ %.pn136, %116 ], [ %.pn, %73 ], [ %182, %181 ], [ %203, %202 ], [ %184, %183 ], [ %.pn180.pn, %233 ], [ %213, %212 ], [ %.pn151, %285 ], [ %257, %256 ], [ %287, %286 ], [ %289, %288 ], [ %.pn171.pn, %407 ], [ %.pn168.pn, %388 ], [ %.pn164.pn, %312 ], [ %.pn160.pn.pn, %342 ], [ %.pn155.pn.pn.pn, %364 ], [ %331, %330 ], [ %291, %290 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  resume { ptr, i32 } %.pn185.pn.pn.pn
}

declare void @_ZN11spirv_cross12CompilerGLSL21add_function_overloadERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(795)) local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL13argument_declB5cxx11ERKNS_12SPIRFunction9ParameterE(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 4 dereferenceable(17)) local_unnamed_addr #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_S9_EEES9_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(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_cross11CompilerMSL12sampler_typeB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, i1 noundef zeroext) local_unnamed_addr #2 align 2

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

declare noundef zeroext i1 @_ZN11spirv_cross8Compiler21is_sampled_image_typeERKNS_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_cross4joinIJRA16_KcRA3_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEESB_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2

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

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

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

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


; Effective O3 passes: DSEPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass