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

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.163 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.178 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.179 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.378 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.921 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.924 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.965 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1001 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1017 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1102 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.1103 = external hidden unnamed_addr constant [46 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj = external hidden unnamed_addr constant [157 x i8], align 1
@.str.1104 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1105 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1107 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.1108 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1109 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1110 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1111 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1112 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1113 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1114 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1115 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1116 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1117 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1118 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1119 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1120 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1121 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.1122 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1123 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1124 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1125 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1126 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1127 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1128 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1129 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.1130 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1131 = external hidden unnamed_addr constant [10 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) #5

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #7 align 2

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

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

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

; 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_cross11CompilerMSL26get_argument_address_spaceB5cxx11ERKNS_12SPIRVariableE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(176)) #2 align 2

declare void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) #5

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

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef) #6

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) #5

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

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

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

declare noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) #5

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef) #6

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i32 noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i1 noundef zeroext %7, i32 noundef %8, i32 noundef %9, i1 noundef zeroext %10, i1 noundef zeroext %11, i32 noundef %12) #2 align 2 personality ptr @__gxx_personality_v0 {
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i8, align 1
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca i32, align 4
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i8, align 1
  %34 = alloca %"struct.spirv_cross::SPIRType", align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i8, align 1
  %38 = alloca i8, align 1
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca %"struct.spirv_cross::SPIRType", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca i64, align 8
  %47 = alloca i8, align 1
  %48 = alloca ptr, align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca i8, align 1
  %52 = alloca ptr, align 8
  %53 = alloca %"struct.spirv_cross::SPIRType", align 8
  %54 = alloca %"struct.spirv_cross::SPIRType", align 8
  %55 = alloca %"class.spirv_cross::TypedID.414", align 4
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::allocator.71", align 1
  %66 = alloca ptr, align 8
  %67 = alloca %"class.spirv_cross::TypedID.413", align 4
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca %"class.std::__cxx11::basic_string", align 8
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::__cxx11::basic_string", align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  %88 = alloca %"class.std::allocator.71", align 1
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  %90 = alloca %"class.std::__cxx11::basic_string", align 8
  %91 = alloca %"class.std::allocator.71", align 1
  %92 = alloca %"class.std::__cxx11::basic_string", align 8
  %93 = alloca %"class.std::__cxx11::basic_string", align 8
  %94 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %14, align 8, !tbaa !5
  store i32 %1, ptr %15, align 4, !tbaa !9
  store i32 %2, ptr %16, align 4, !tbaa !9
  store ptr %3, ptr %17, align 8, !tbaa !5
  store i32 %4, ptr %18, align 4, !tbaa !11
  store i32 %5, ptr %19, align 4, !tbaa !9
  store i32 %6, ptr %20, align 4, !tbaa !9
  %95 = zext i1 %7 to i8
  store i8 %95, ptr %21, align 1, !tbaa !13
  store i32 %8, ptr %22, align 4, !tbaa !9
  store i32 %9, ptr %23, align 4, !tbaa !9
  %96 = zext i1 %10 to i8
  store i8 %96, ptr %24, align 1, !tbaa !13
  %97 = zext i1 %11 to i8
  store i8 %97, ptr %25, align 1, !tbaa !13
  store i32 %12, ptr %26, align 4, !tbaa !9
  %98 = load ptr, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  %99 = load i32, ptr %22, align 4, !tbaa !9
  %100 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %99)
          to label %101 unwind label %119

101:                                              ; preds = %13
  store ptr %100, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  %102 = load ptr, ptr %28, align 8, !tbaa !5
  %103 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %98, ptr noundef nonnull align 8 dereferenceable(336) %102)
          to label %104 unwind label %123

104:                                              ; preds = %101
  store ptr %103, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  %105 = load ptr, ptr %31, align 8, !tbaa !5
  %106 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %105, i32 0, i32 2
  %107 = load i32, ptr %106, align 8, !tbaa !15
  store i32 %107, ptr %32, align 4, !tbaa !41
  %108 = load i32, ptr %18, align 4, !tbaa !11
  %109 = icmp eq i32 %108, 239
  br i1 %109, label %113, label %110

110:                                              ; preds = %104
  %111 = load i32, ptr %18, align 4, !tbaa !11
  %112 = icmp eq i32 %111, 237
  br i1 %112, label %113, label %131

113:                                              ; preds = %110, %104
  %114 = load ptr, ptr %31, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %114, i32 0, i32 3
  %116 = load i32, ptr %115, align 4, !tbaa !42
  %117 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %116)
          to label %118 unwind label %127

118:                                              ; preds = %113
  store i32 %117, ptr %32, align 4, !tbaa !41
  br label %144

119:                                              ; preds = %13
  %120 = landingpad { ptr, i32 }
          cleanup
  %121 = extractvalue { ptr, i32 } %120, 0
  store ptr %121, ptr %29, align 8
  %122 = extractvalue { ptr, i32 } %120, 1
  store i32 %122, ptr %30, align 4
  br label %1142

123:                                              ; preds = %101
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %29, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %30, align 4
  br label %1141

127:                                              ; preds = %137, %113
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %29, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %30, align 4
  br label %1140

131:                                              ; preds = %110
  %132 = load i32, ptr %18, align 4, !tbaa !11
  %133 = icmp eq i32 %132, 238
  br i1 %133, label %137, label %134

134:                                              ; preds = %131
  %135 = load i32, ptr %18, align 4, !tbaa !11
  %136 = icmp eq i32 %135, 236
  br i1 %136, label %137, label %143

137:                                              ; preds = %134, %131
  %138 = load ptr, ptr %31, align 8, !tbaa !5
  %139 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %138, i32 0, i32 3
  %140 = load i32, ptr %139, align 4, !tbaa !42
  %141 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %140)
          to label %142 unwind label %127

142:                                              ; preds = %137
  store i32 %141, ptr %32, align 4, !tbaa !41
  br label %143

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

144:                                              ; preds = %143, %118
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #10
  %145 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %98, i32 0, i32 37
  %146 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %145, i32 noundef 3, i32 noundef 1, i32 noundef 0)
          to label %147 unwind label %153

147:                                              ; preds = %144
  br i1 %146, label %148, label %157

148:                                              ; preds = %147
  %149 = load i32, ptr %22, align 4, !tbaa !9
  %150 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %149)
          to label %151 unwind label %153

151:                                              ; preds = %148
  %152 = zext i1 %150 to i8
  store i8 %152, ptr %33, align 1, !tbaa !13
  br label %158

153:                                              ; preds = %165, %148, %144
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %29, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %30, align 4
  br label %1139

157:                                              ; preds = %147
  store i8 0, ptr %33, align 1, !tbaa !13
  br label %158

158:                                              ; preds = %157, %151
  %159 = load ptr, ptr %31, align 8, !tbaa !5
  %160 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %159, i32 0, i32 3
  %161 = load i32, ptr %160, align 4, !tbaa !42
  %162 = icmp eq i32 %161, 64
  br i1 %162, label %163, label %170

163:                                              ; preds = %158
  %164 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %164, ptr noundef @.str.1102)
          to label %165 unwind label %166

165:                                              ; preds = %163
  invoke void @__cxa_throw(ptr %164, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %1148 unwind label %153

166:                                              ; preds = %163
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %29, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %30, align 4
  call void @__cxa_free_exception(ptr %164) #10
  br label %1139

170:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 336, ptr %34) #10
  %171 = load ptr, ptr %31, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %34, ptr noundef nonnull align 8 dereferenceable(336) %171)
          to label %172 unwind label %201

172:                                              ; preds = %170
  %173 = load i32, ptr %32, align 4, !tbaa !41
  %174 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %34, i32 0, i32 2
  store i32 %173, ptr %174, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #10
  %175 = load i32, ptr %22, align 4, !tbaa !9
  %176 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %175)
          to label %177 unwind label %205

177:                                              ; preds = %172
  store ptr %176, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %178 = load ptr, ptr %35, align 8, !tbaa !5
  %179 = icmp ne ptr %178, null
  br i1 %179, label %180, label %187

180:                                              ; preds = %177
  %181 = load ptr, ptr %35, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %181, i32 0, i32 1
  %183 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %182)
          to label %184 unwind label %209

184:                                              ; preds = %180
  %185 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %183)
          to label %186 unwind label %209

186:                                              ; preds = %184
  br label %188

187:                                              ; preds = %177
  br label %188

188:                                              ; preds = %187, %186
  %189 = phi ptr [ %185, %186 ], [ null, %187 ]
  store ptr %189, ptr %36, align 8, !tbaa !5
  %190 = load ptr, ptr %31, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %190, i32 0, i32 11
  %192 = load i32, ptr %191, align 8, !tbaa !43
  %193 = icmp ne i32 %192, 11
  br i1 %193, label %197, label %194

194:                                              ; preds = %188
  %195 = load ptr, ptr %36, align 8, !tbaa !5
  %196 = icmp ne ptr %195, null
  br label %197

197:                                              ; preds = %194, %188
  %198 = phi i1 [ true, %188 ], [ %196, %194 ]
  br i1 %198, label %199, label %200

199:                                              ; preds = %197
  br label %214

200:                                              ; preds = %197
  call void @__assert_fail(ptr noundef @.str.1103, ptr noundef @.str.25, i32 noundef 10478, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #12
  unreachable

201:                                              ; preds = %170
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %29, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %30, align 4
  br label %1138

205:                                              ; preds = %172
  %206 = landingpad { ptr, i32 }
          cleanup
  %207 = extractvalue { ptr, i32 } %206, 0
  store ptr %207, ptr %29, align 8
  %208 = extractvalue { ptr, i32 } %206, 1
  store i32 %208, ptr %30, align 4
  br label %1137

209:                                              ; preds = %184, %180
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %29, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %30, align 4
  br label %1136

213:                                              ; No predecessors!
  br label %214

214:                                              ; preds = %213, %199
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #10
  %215 = load i8, ptr %24, align 1, !tbaa !13, !range !44, !noundef !45
  %216 = trunc i8 %215 to i1
  br i1 %216, label %217, label %220

217:                                              ; preds = %214
  %218 = load i32, ptr %23, align 4, !tbaa !9
  %219 = icmp ne i32 %218, 0
  br label %220

220:                                              ; preds = %217, %214
  %221 = phi i1 [ false, %214 ], [ %219, %217 ]
  %222 = zext i1 %221 to i8
  store i8 %222, ptr %37, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #10
  %223 = load i32, ptr %18, align 4, !tbaa !11
  %224 = icmp ne i32 %223, 227
  br i1 %224, label %225, label %233

225:                                              ; preds = %220
  %226 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %98)
          to label %227 unwind label %263

227:                                              ; preds = %225
  br i1 %226, label %228, label %233

228:                                              ; preds = %227
  %229 = load ptr, ptr %28, align 8, !tbaa !5
  %230 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %229, i32 0, i32 11
  %231 = load i32, ptr %230, align 8, !tbaa !43
  %232 = icmp ne i32 %231, 4
  br label %233

233:                                              ; preds = %228, %227, %220
  %234 = phi i1 [ false, %227 ], [ false, %220 ], [ %232, %228 ]
  %235 = zext i1 %234 to i8
  store i8 %235, ptr %38, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  store i32 0, ptr %39, align 4, !tbaa !9
  %236 = load i8, ptr %33, align 1, !tbaa !13, !range !44, !noundef !45
  %237 = trunc i8 %236 to i1
  br i1 %237, label %238, label %284

238:                                              ; preds = %233
  %239 = load i8, ptr %37, align 1, !tbaa !13, !range !44, !noundef !45
  %240 = trunc i8 %239 to i1
  br i1 %240, label %241, label %284

241:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %242 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %98, i32 0, i32 31
  %243 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %242, ptr noundef nonnull align 4 dereferenceable(4) %16)
          to label %244 unwind label %267

244:                                              ; preds = %241
  store ptr %243, ptr %40, align 8, !tbaa !5
  %245 = load ptr, ptr %40, align 8, !tbaa !5
  %246 = load i32, ptr %245, align 4, !tbaa !9
  %247 = icmp ne i32 %246, 0
  br i1 %247, label %280, label %248

248:                                              ; preds = %244
  %249 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %98, i32 0, i32 1
  %250 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %249, i32 noundef 2)
          to label %251 unwind label %267

251:                                              ; preds = %248
  %252 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 %250, ptr %252, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 336, ptr %41) #10
  %253 = load i32, ptr %15, align 4, !tbaa !9
  %254 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %253)
          to label %255 unwind label %271

255:                                              ; preds = %251
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %41, ptr noundef nonnull align 8 dereferenceable(336) %254)
          to label %256 unwind label %271

256:                                              ; preds = %255
  %257 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %41, i32 0, i32 4
  store i32 4, ptr %257, align 8, !tbaa !46
  %258 = load ptr, ptr %40, align 8, !tbaa !5
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = add i32 %259, 1
  %261 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %260, ptr noundef nonnull align 8 dereferenceable(336) %41)
          to label %262 unwind label %275

262:                                              ; preds = %256
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #10
  call void @llvm.lifetime.end.p0(i64 336, ptr %41) #10
  br label %280

263:                                              ; preds = %225
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %29, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %30, align 4
  br label %1135

267:                                              ; preds = %248, %241
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %29, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %30, align 4
  br label %283

271:                                              ; preds = %255, %251
  %272 = landingpad { ptr, i32 }
          cleanup
  %273 = extractvalue { ptr, i32 } %272, 0
  store ptr %273, ptr %29, align 8
  %274 = extractvalue { ptr, i32 } %272, 1
  store i32 %274, ptr %30, align 4
  br label %279

275:                                              ; preds = %256
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %29, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %30, align 4
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #10
  br label %279

279:                                              ; preds = %275, %271
  call void @llvm.lifetime.end.p0(i64 336, ptr %41) #10
  br label %283

280:                                              ; preds = %262, %244
  %281 = load ptr, ptr %40, align 8, !tbaa !5
  %282 = load i32, ptr %281, align 4, !tbaa !9
  store i32 %282, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %284

283:                                              ; preds = %279, %267
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %1134

284:                                              ; preds = %280, %238, %233
  %285 = load i8, ptr %38, align 1, !tbaa !13, !range !44, !noundef !45
  %286 = trunc i8 %285 to i1
  br i1 %286, label %287, label %340

287:                                              ; preds = %284
  %288 = load i8, ptr %37, align 1, !tbaa !13, !range !44, !noundef !45
  %289 = trunc i8 %288 to i1
  br i1 %289, label %290, label %323

290:                                              ; preds = %287
  %291 = load i32, ptr %15, align 4, !tbaa !9
  %292 = load i32, ptr %16, align 4, !tbaa !9
  %293 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %291, i32 noundef %292)
          to label %294 unwind label %303

294:                                              ; preds = %290
  %295 = load i32, ptr %39, align 4, !tbaa !9
  %296 = icmp ne i32 %295, 0
  br i1 %296, label %297, label %307

297:                                              ; preds = %294
  %298 = load i32, ptr %39, align 4, !tbaa !9
  %299 = add i32 %298, 1
  %300 = load i32, ptr %39, align 4, !tbaa !9
  %301 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %299, i32 noundef %300)
          to label %302 unwind label %303

302:                                              ; preds = %297
  br label %307

303:                                              ; preds = %1132, %1129, %1124, %1102, %1099, %1068, %1062, %1057, %955, %847, %846, %839, %832, %827, %806, %803, %801, %799, %796, %794, %785, %769, %722, %720, %712, %702, %638, %312, %297, %290
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %29, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %30, align 4
  br label %1134

307:                                              ; preds = %302, %294
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #10
  %308 = load ptr, ptr %98, align 8, !tbaa !47
  %309 = getelementptr inbounds ptr, ptr %308, i64 20
  %310 = load ptr, ptr %309, align 8
  invoke void %310(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(12482) %98, i32 noundef 23, i32 noundef 1)
          to label %311 unwind label %314

311:                                              ; preds = %307
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %98, ptr noundef nonnull align 1 dereferenceable(6) @.str.1001, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %312 unwind label %318

312:                                              ; preds = %311
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #10
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %98)
          to label %313 unwind label %303

313:                                              ; preds = %312
  br label %339

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

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

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

323:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #10
  %324 = load ptr, ptr %98, align 8, !tbaa !47
  %325 = getelementptr inbounds ptr, ptr %324, i64 20
  %326 = load ptr, ptr %325, align 8
  invoke void %326(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(12482) %98, i32 noundef 23, i32 noundef 1)
          to label %327 unwind label %330

327:                                              ; preds = %323
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 1 dereferenceable(3) @.str.1104, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(4) @.str.1105)
          to label %328 unwind label %334

328:                                              ; preds = %327
  %329 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %43) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #10
  br label %339

330:                                              ; preds = %323
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %29, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %30, align 4
  br label %338

334:                                              ; preds = %327
  %335 = landingpad { ptr, i32 }
          cleanup
  %336 = extractvalue { ptr, i32 } %335, 0
  store ptr %336, ptr %29, align 8
  %337 = extractvalue { ptr, i32 } %335, 1
  store i32 %337, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #10
  br label %338

338:                                              ; preds = %334, %330
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #10
  br label %1134

339:                                              ; preds = %328, %313
  br label %340

340:                                              ; preds = %339, %284
  %341 = load i8, ptr %33, align 1, !tbaa !13, !range !44, !noundef !45
  %342 = trunc i8 %341 to i1
  br i1 %342, label %343, label %633

343:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #10
  %344 = load i32, ptr %22, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %344, i1 noundef zeroext true)
          to label %345 unwind label %382

345:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  %346 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %45, i8 noundef signext 64, i64 noundef 0) #10
  store i64 %346, ptr %46, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #10
  %347 = load i32, ptr %18, align 4, !tbaa !11
  %348 = icmp eq i32 %347, 239
  br i1 %348, label %358, label %349

349:                                              ; preds = %345
  %350 = load i32, ptr %18, align 4, !tbaa !11
  %351 = icmp eq i32 %350, 237
  br i1 %351, label %358, label %352

352:                                              ; preds = %349
  %353 = load i32, ptr %18, align 4, !tbaa !11
  %354 = icmp eq i32 %353, 238
  br i1 %354, label %358, label %355

355:                                              ; preds = %352
  %356 = load i32, ptr %18, align 4, !tbaa !11
  %357 = icmp eq i32 %356, 236
  br label %358

358:                                              ; preds = %355, %352, %349, %345
  %359 = phi i1 [ true, %352 ], [ true, %349 ], [ true, %345 ], [ %357, %355 ]
  %360 = zext i1 %359 to i8
  store i8 %360, ptr %47, align 1, !tbaa !13
  %361 = load ptr, ptr %31, align 8, !tbaa !5
  %362 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %361, i32 0, i32 2
  %363 = load i32, ptr %362, align 8, !tbaa !15
  %364 = load i32, ptr %32, align 4, !tbaa !41
  %365 = icmp ne i32 %363, %364
  %366 = zext i1 %365 to i32
  %367 = load i8, ptr %47, align 1, !tbaa !13, !range !44, !noundef !45
  %368 = trunc i8 %367 to i1
  %369 = zext i1 %368 to i32
  %370 = and i32 %369, %366
  %371 = icmp ne i32 %370, 0
  %372 = zext i1 %371 to i8
  store i8 %372, ptr %47, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  store ptr null, ptr %48, align 8, !tbaa !5
  %373 = load i8, ptr %47, align 1, !tbaa !13, !range !44, !noundef !45
  %374 = trunc i8 %373 to i1
  br i1 %374, label %375, label %390

375:                                              ; preds = %358
  %376 = load i32, ptr %22, align 4, !tbaa !9
  %377 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %376)
          to label %378 unwind label %386

378:                                              ; preds = %375
  store ptr %377, ptr %48, align 8, !tbaa !5
  %379 = icmp ne ptr %377, null
  br i1 %379, label %380, label %390

380:                                              ; preds = %378
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %98, i8 noundef zeroext 74)
          to label %381 unwind label %386

381:                                              ; preds = %380
  br label %390

382:                                              ; preds = %343
  %383 = landingpad { ptr, i32 }
          cleanup
  %384 = extractvalue { ptr, i32 } %383, 0
  store ptr %384, ptr %29, align 8
  %385 = extractvalue { ptr, i32 } %383, 1
  store i32 %385, ptr %30, align 4
  br label %632

386:                                              ; preds = %627, %380, %375
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %29, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %30, align 4
  br label %631

390:                                              ; preds = %381, %378, %358
  %391 = load i64, ptr %46, align 8, !tbaa !49
  %392 = icmp ne i64 %391, -1
  br i1 %392, label %393, label %627

393:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #10
  %394 = load i64, ptr %46, align 8, !tbaa !49
  %395 = add i64 %394, 1
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(32) %45, i64 noundef %395, i64 noundef -1)
          to label %396 unwind label %414

396:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #10
  %397 = load i64, ptr %46, align 8, !tbaa !49
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(32) %45, i64 noundef 0, i64 noundef %397)
          to label %398 unwind label %418

398:                                              ; preds = %396
  %399 = load i8, ptr %47, align 1, !tbaa !13, !range !44, !noundef !45
  %400 = trunc i8 %399 to i1
  br i1 %400, label %401, label %505

401:                                              ; preds = %398
  %402 = load ptr, ptr %48, align 8, !tbaa !5
  %403 = icmp ne ptr %402, null
  br i1 %403, label %404, label %505

404:                                              ; preds = %401
  %405 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %98, i32 0, i32 38
  call void @llvm.lifetime.start.p0(i64 1, ptr %51) #10
  store i8 74, ptr %51, align 1, !tbaa !50
  %406 = invoke noundef i64 @_ZNKSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE5countERKS2_(ptr noundef nonnull align 8 dereferenceable(48) %405, ptr noundef nonnull align 1 dereferenceable(1) %51)
          to label %407 unwind label %422

407:                                              ; preds = %404
  %408 = icmp ne i64 %406, 0
  br i1 %408, label %409, label %410

409:                                              ; preds = %407
  br label %410

410:                                              ; preds = %409, %407
  %411 = phi i1 [ false, %407 ], [ true, %409 ]
  br i1 %411, label %412, label %413

412:                                              ; preds = %410
  br label %427

413:                                              ; preds = %410
  call void @__assert_fail(ptr noundef @.str.1107, ptr noundef @.str.25, i32 noundef 10540, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #12
  unreachable

414:                                              ; preds = %393
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %29, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %30, align 4
  br label %626

418:                                              ; preds = %396
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %29, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %30, align 4
  br label %625

422:                                              ; preds = %404
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %29, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #10
  br label %624

426:                                              ; No predecessors!
  br label %427

427:                                              ; preds = %426, %412
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #10
  %428 = load ptr, ptr %48, align 8, !tbaa !5
  %429 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %428, i32 0, i32 1
  %430 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %429)
          to label %431 unwind label %446

431:                                              ; preds = %427
  %432 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %430)
          to label %433 unwind label %446

433:                                              ; preds = %431
  store ptr %432, ptr %52, align 8, !tbaa !5
  br label %434

434:                                              ; preds = %445, %433
  %435 = load ptr, ptr %52, align 8, !tbaa !5
  %436 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %435, i32 0, i32 1
  %437 = load i32, ptr %436, align 4, !tbaa !52
  %438 = icmp ne i32 %437, 25
  br i1 %438, label %439, label %450

439:                                              ; preds = %434
  %440 = load ptr, ptr %52, align 8, !tbaa !5
  %441 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %440, i32 0, i32 16
  %442 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %441)
          to label %443 unwind label %446

443:                                              ; preds = %439
  %444 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %442)
          to label %445 unwind label %446

445:                                              ; preds = %443
  store ptr %444, ptr %52, align 8, !tbaa !5
  br label %434, !llvm.loop !53

446:                                              ; preds = %443, %439, %431, %427
  %447 = landingpad { ptr, i32 }
          cleanup
  %448 = extractvalue { ptr, i32 } %447, 0
  store ptr %448, ptr %29, align 8
  %449 = extractvalue { ptr, i32 } %447, 1
  store i32 %449, ptr %30, align 4
  br label %504

450:                                              ; preds = %434
  call void @llvm.lifetime.start.p0(i64 336, ptr %53) #10
  %451 = load ptr, ptr %52, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %53, ptr noundef nonnull align 8 dereferenceable(336) %451)
          to label %452 unwind label %476

452:                                              ; preds = %450
  call void @llvm.lifetime.start.p0(i64 336, ptr %54) #10
  %453 = load ptr, ptr %31, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %54, ptr noundef nonnull align 8 dereferenceable(336) %453)
          to label %454 unwind label %480

454:                                              ; preds = %452
  %455 = load i32, ptr %32, align 4, !tbaa !41
  %456 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %54, i32 0, i32 2
  store i32 %455, ptr %456, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #10
  %457 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %98, i32 0, i32 1
  %458 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %457, i32 noundef 1)
          to label %459 unwind label %484

459:                                              ; preds = %454
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %55, i32 noundef %458)
          to label %460 unwind label %484

460:                                              ; preds = %459
  %461 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %53, i32 0, i32 14
  %462 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %461, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %462, ptr align 4 %55, i64 4, i1 false), !tbaa.struct !55
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #10
  %463 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %53, i32 0, i32 14
  %464 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %463, i32 0, i32 0
  %465 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %464)
          to label %466 unwind label %488

466:                                              ; preds = %460
  %467 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %465, ptr noundef nonnull align 8 dereferenceable(336) %54)
          to label %468 unwind label %488

468:                                              ; preds = %466
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #10
  %469 = load i32, ptr %22, align 4, !tbaa !9
  %470 = load ptr, ptr %98, align 8, !tbaa !47
  %471 = getelementptr inbounds ptr, ptr %470, i64 19
  %472 = load ptr, ptr %471, align 8
  invoke void %472(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(12482) %98, ptr noundef nonnull align 8 dereferenceable(336) %53, i32 noundef %469)
          to label %473 unwind label %492

473:                                              ; preds = %468
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 1 dereferenceable(16) @.str.1108, ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %474 unwind label %496

474:                                              ; preds = %473
  %475 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %56) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #10
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %54) #10
  call void @llvm.lifetime.end.p0(i64 336, ptr %54) #10
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %53) #10
  call void @llvm.lifetime.end.p0(i64 336, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  br label %505

476:                                              ; preds = %450
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %29, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %30, align 4
  br label %503

480:                                              ; preds = %452
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %29, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %30, align 4
  br label %502

484:                                              ; preds = %459, %454
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %29, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #10
  br label %501

488:                                              ; preds = %466, %460
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %29, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %30, align 4
  br label %501

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

496:                                              ; preds = %473
  %497 = landingpad { ptr, i32 }
          cleanup
  %498 = extractvalue { ptr, i32 } %497, 0
  store ptr %498, ptr %29, align 8
  %499 = extractvalue { ptr, i32 } %497, 1
  store i32 %499, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  br label %500

500:                                              ; preds = %496, %492
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #10
  br label %501

501:                                              ; preds = %500, %488, %484
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %54) #10
  br label %502

502:                                              ; preds = %501, %480
  call void @llvm.lifetime.end.p0(i64 336, ptr %54) #10
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %53) #10
  br label %503

503:                                              ; preds = %502, %476
  call void @llvm.lifetime.end.p0(i64 336, ptr %53) #10
  br label %504

504:                                              ; preds = %503, %446
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  br label %624

505:                                              ; preds = %474, %401, %398
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #10
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS8_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.58)
          to label %506 unwind label %524

506:                                              ; preds = %505
  %507 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %58)
          to label %508 unwind label %528

508:                                              ; preds = %506
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #10
  %509 = load ptr, ptr %28, align 8, !tbaa !5
  %510 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %509, i32 0, i32 11
  %511 = load i32, ptr %510, align 8, !tbaa !43
  %512 = icmp eq i32 %511, 11
  br i1 %512, label %513, label %590

513:                                              ; preds = %508
  %514 = load ptr, ptr %36, align 8, !tbaa !5
  %515 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %514, i32 0, i32 14
  %516 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %515, i32 0, i32 3
  %517 = load i8, ptr %516, align 1, !tbaa !56, !range !44, !noundef !45
  %518 = trunc i8 %517 to i1
  br i1 %518, label %519, label %590

519:                                              ; preds = %513
  %520 = load ptr, ptr %36, align 8, !tbaa !5
  %521 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %520, i32 0, i32 14
  %522 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %521, i32 0, i32 1
  %523 = load i32, ptr %522, align 4, !tbaa !57
  switch i32 %523, label %578 [
    i32 0, label %533
    i32 1, label %565
  ]

524:                                              ; preds = %505
  %525 = landingpad { ptr, i32 }
          cleanup
  %526 = extractvalue { ptr, i32 } %525, 0
  store ptr %526, ptr %29, align 8
  %527 = extractvalue { ptr, i32 } %525, 1
  store i32 %527, ptr %30, align 4
  br label %532

528:                                              ; preds = %506
  %529 = landingpad { ptr, i32 }
          cleanup
  %530 = extractvalue { ptr, i32 } %529, 0
  store ptr %530, ptr %29, align 8
  %531 = extractvalue { ptr, i32 } %529, 1
  store i32 %531, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  br label %532

532:                                              ; preds = %528, %524
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #10
  br label %624

533:                                              ; preds = %519
  %534 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %98, i32 0, i32 37
  %535 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %534, i32 0, i32 31
  %536 = load i8, ptr %535, align 1, !tbaa !58, !range !44, !noundef !45
  %537 = trunc i8 %536 to i1
  br i1 %537, label %538, label %551

538:                                              ; preds = %533
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #10
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA9_S1_SA_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 1 dereferenceable(7) @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(9) @.str.1110, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(3) @.str.1111)
          to label %539 unwind label %542

539:                                              ; preds = %538
  %540 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %541 unwind label %546

541:                                              ; preds = %539
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #10
  br label %564

542:                                              ; preds = %538
  %543 = landingpad { ptr, i32 }
          cleanup
  %544 = extractvalue { ptr, i32 } %543, 0
  store ptr %544, ptr %29, align 8
  %545 = extractvalue { ptr, i32 } %543, 1
  store i32 %545, ptr %30, align 4
  br label %550

546:                                              ; preds = %539
  %547 = landingpad { ptr, i32 }
          cleanup
  %548 = extractvalue { ptr, i32 } %547, 0
  store ptr %548, ptr %29, align 8
  %549 = extractvalue { ptr, i32 } %547, 1
  store i32 %549, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  br label %550

550:                                              ; preds = %546, %542
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #10
  br label %624

551:                                              ; preds = %533
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #10
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcS7_RA3_S8_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(5) @.str.1112, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(3) @.str.1111)
          to label %552 unwind label %555

552:                                              ; preds = %551
  %553 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %554 unwind label %559

554:                                              ; preds = %552
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #10
  br label %564

555:                                              ; preds = %551
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %29, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %30, align 4
  br label %563

559:                                              ; preds = %552
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %29, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #10
  br label %563

563:                                              ; preds = %559, %555
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #10
  br label %624

564:                                              ; preds = %554, %541
  br label %589

565:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #10
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcS7_RA3_S8_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(6) @.str.1113, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(3) @.str.1114)
          to label %566 unwind label %569

566:                                              ; preds = %565
  %567 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %568 unwind label %573

568:                                              ; preds = %566
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #10
  br label %589

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

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

577:                                              ; preds = %573, %569
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #10
  br label %624

578:                                              ; preds = %519
  %579 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %579, ptr noundef @.str.1115)
          to label %580 unwind label %581

580:                                              ; preds = %578
  invoke void @__cxa_throw(ptr %579, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %1148 unwind label %585

581:                                              ; preds = %578
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %29, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %30, align 4
  call void @__cxa_free_exception(ptr %579) #10
  br label %624

585:                                              ; preds = %619, %580
  %586 = landingpad { ptr, i32 }
          cleanup
  %587 = extractvalue { ptr, i32 } %586, 0
  store ptr %587, ptr %29, align 8
  %588 = extractvalue { ptr, i32 } %586, 1
  store i32 %588, ptr %30, align 4
  br label %624

589:                                              ; preds = %568, %564
  br label %623

590:                                              ; preds = %513, %508
  %591 = load ptr, ptr %28, align 8, !tbaa !5
  %592 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %591, i32 0, i32 11
  %593 = load i32, ptr %592, align 8, !tbaa !43
  %594 = icmp eq i32 %593, 11
  br i1 %594, label %595, label %619

595:                                              ; preds = %590
  %596 = load ptr, ptr %36, align 8, !tbaa !5
  %597 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %596, i32 0, i32 14
  %598 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %597, i32 0, i32 1
  %599 = load i32, ptr %598, align 4, !tbaa !57
  %600 = icmp eq i32 %599, 0
  br i1 %600, label %601, label %619

601:                                              ; preds = %595
  %602 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %98, i32 0, i32 37
  %603 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %602, i32 0, i32 31
  %604 = load i8, ptr %603, align 1, !tbaa !58, !range !44, !noundef !45
  %605 = trunc i8 %604 to i1
  br i1 %605, label %606, label %619

606:                                              ; preds = %601
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #10
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 1 dereferenceable(7) @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(5) @.str.1116)
          to label %607 unwind label %610

607:                                              ; preds = %606
  %608 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %62)
          to label %609 unwind label %614

609:                                              ; preds = %607
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #10
  br label %622

610:                                              ; preds = %606
  %611 = landingpad { ptr, i32 }
          cleanup
  %612 = extractvalue { ptr, i32 } %611, 0
  store ptr %612, ptr %29, align 8
  %613 = extractvalue { ptr, i32 } %611, 1
  store i32 %613, ptr %30, align 4
  br label %618

614:                                              ; preds = %607
  %615 = landingpad { ptr, i32 }
          cleanup
  %616 = extractvalue { ptr, i32 } %615, 0
  store ptr %616, ptr %29, align 8
  %617 = extractvalue { ptr, i32 } %615, 1
  store i32 %617, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #10
  br label %618

618:                                              ; preds = %614, %610
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #10
  br label %624

619:                                              ; preds = %601, %595, %590
  %620 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %621 unwind label %585

621:                                              ; preds = %619
  br label %622

622:                                              ; preds = %621, %609
  br label %623

623:                                              ; preds = %622, %589
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #10
  br label %630

624:                                              ; preds = %618, %585, %581, %577, %563, %550, %532, %504, %422
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #10
  br label %625

625:                                              ; preds = %624, %418
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #10
  br label %626

626:                                              ; preds = %625, %414
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #10
  br label %631

627:                                              ; preds = %390
  %628 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %629 unwind label %386

629:                                              ; preds = %627
  br label %630

630:                                              ; preds = %629, %623
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #10
  br label %747

631:                                              ; preds = %626, %386
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #10
  br label %632

632:                                              ; preds = %631, %382
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #10
  br label %1134

633:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #10
  %634 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %65) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef %634, ptr noundef nonnull align 1 dereferenceable(1) %65)
          to label %635 unwind label %659

635:                                              ; preds = %633
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef @.str.1117)
          to label %636 unwind label %663

636:                                              ; preds = %635
  %637 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %638 unwind label %667

638:                                              ; preds = %636
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #10
  %639 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.58)
          to label %640 unwind label %303

640:                                              ; preds = %638
  %641 = load ptr, ptr %28, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %641, i32 0, i32 11
  %643 = load i32, ptr %642, align 8, !tbaa !43
  %644 = icmp eq i32 %643, 11
  br i1 %644, label %645, label %680

645:                                              ; preds = %640
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #10
  %646 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %98, i32 0, i32 1
  %647 = load ptr, ptr %35, align 8, !tbaa !5
  %648 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %647, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %67, ptr align 8 %648, i64 4, i1 false), !tbaa.struct !55
  %649 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %67, i32 0, i32 0
  %650 = load i32, ptr %649, align 4
  %651 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8ParsedIR21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %646, i32 %650)
          to label %652 unwind label %673

652:                                              ; preds = %645
  store ptr %651, ptr %66, align 8, !tbaa !5
  %653 = load ptr, ptr %66, align 8, !tbaa !5
  %654 = invoke noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL32decoration_flags_signal_volatileERKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(64) %653)
          to label %655 unwind label %673

655:                                              ; preds = %652
  br i1 %654, label %656, label %677

656:                                              ; preds = %655
  %657 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.1118)
          to label %658 unwind label %673

658:                                              ; preds = %656
  br label %677

659:                                              ; preds = %633
  %660 = landingpad { ptr, i32 }
          cleanup
  %661 = extractvalue { ptr, i32 } %660, 0
  store ptr %661, ptr %29, align 8
  %662 = extractvalue { ptr, i32 } %660, 1
  store i32 %662, ptr %30, align 4
  br label %672

663:                                              ; preds = %635
  %664 = landingpad { ptr, i32 }
          cleanup
  %665 = extractvalue { ptr, i32 } %664, 0
  store ptr %665, ptr %29, align 8
  %666 = extractvalue { ptr, i32 } %664, 1
  store i32 %666, ptr %30, align 4
  br label %671

667:                                              ; preds = %636
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %29, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  br label %671

671:                                              ; preds = %667, %663
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  br label %672

672:                                              ; preds = %671, %659
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #10
  br label %1134

673:                                              ; preds = %677, %656, %652, %645
  %674 = landingpad { ptr, i32 }
          cleanup
  %675 = extractvalue { ptr, i32 } %674, 0
  store ptr %675, ptr %29, align 8
  %676 = extractvalue { ptr, i32 } %674, 1
  store i32 %676, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #10
  br label %1134

677:                                              ; preds = %658, %655
  %678 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.178)
          to label %679 unwind label %673

679:                                              ; preds = %677
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #10
  br label %712

680:                                              ; preds = %640
  %681 = load ptr, ptr %35, align 8, !tbaa !5
  %682 = icmp ne ptr %681, null
  br i1 %682, label %683, label %702

683:                                              ; preds = %680
  %684 = load ptr, ptr %28, align 8, !tbaa !5
  %685 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %684, i32 0, i32 11
  %686 = load i32, ptr %685, align 8, !tbaa !43
  %687 = icmp ne i32 %686, 5349
  br i1 %687, label %688, label %702

688:                                              ; preds = %683
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #10
  %689 = load ptr, ptr %35, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL26get_argument_address_spaceB5cxx11ERKNS_12SPIRVariableE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(12482) %98, ptr noundef nonnull align 8 dereferenceable(176) %689)
          to label %690 unwind label %693

690:                                              ; preds = %688
  %691 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %692 unwind label %697

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

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

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

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

702:                                              ; preds = %683, %680
  %703 = load ptr, ptr %28, align 8, !tbaa !5
  %704 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %703, i32 0, i32 11
  %705 = load i32, ptr %704, align 8, !tbaa !43
  %706 = icmp eq i32 %705, 4
  %707 = zext i1 %706 to i64
  %708 = select i1 %706, ptr @.str.179, ptr @.str.178
  %709 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef %708)
          to label %710 unwind label %303

710:                                              ; preds = %702
  br label %711

711:                                              ; preds = %710, %692
  br label %712

712:                                              ; preds = %711, %679
  %713 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.1119)
          to label %714 unwind label %303

714:                                              ; preds = %712
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #10
  %715 = load ptr, ptr %98, align 8, !tbaa !47
  %716 = getelementptr inbounds ptr, ptr %715, i64 19
  %717 = load ptr, ptr %716, align 8
  invoke void %717(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(12482) %98, ptr noundef nonnull align 8 dereferenceable(336) %34, i32 noundef 0)
          to label %718 unwind label %729

718:                                              ; preds = %714
  %719 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %69)
          to label %720 unwind label %733

720:                                              ; preds = %718
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #10
  %721 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.89)
          to label %722 unwind label %303

722:                                              ; preds = %720
  %723 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.1120)
          to label %724 unwind label %303

724:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #10
  %725 = load i32, ptr %22, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %725, i1 noundef zeroext true)
          to label %726 unwind label %738

726:                                              ; preds = %724
  %727 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %70)
          to label %728 unwind label %742

728:                                              ; preds = %726
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #10
  br label %747

729:                                              ; preds = %714
  %730 = landingpad { ptr, i32 }
          cleanup
  %731 = extractvalue { ptr, i32 } %730, 0
  store ptr %731, ptr %29, align 8
  %732 = extractvalue { ptr, i32 } %730, 1
  store i32 %732, ptr %30, align 4
  br label %737

733:                                              ; preds = %718
  %734 = landingpad { ptr, i32 }
          cleanup
  %735 = extractvalue { ptr, i32 } %734, 0
  store ptr %735, ptr %29, align 8
  %736 = extractvalue { ptr, i32 } %734, 1
  store i32 %736, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #10
  br label %737

737:                                              ; preds = %733, %729
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #10
  br label %1134

738:                                              ; preds = %724
  %739 = landingpad { ptr, i32 }
          cleanup
  %740 = extractvalue { ptr, i32 } %739, 0
  store ptr %740, ptr %29, align 8
  %741 = extractvalue { ptr, i32 } %739, 1
  store i32 %741, ptr %30, align 4
  br label %746

742:                                              ; preds = %726
  %743 = landingpad { ptr, i32 }
          cleanup
  %744 = extractvalue { ptr, i32 } %743, 0
  store ptr %744, ptr %29, align 8
  %745 = extractvalue { ptr, i32 } %743, 1
  store i32 %745, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  br label %746

746:                                              ; preds = %742, %738
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #10
  br label %1134

747:                                              ; preds = %728, %630
  %748 = load i8, ptr %37, align 1, !tbaa !13, !range !44, !noundef !45
  %749 = trunc i8 %748 to i1
  br i1 %749, label %750, label %945

750:                                              ; preds = %747
  %751 = load ptr, ptr %17, align 8, !tbaa !5
  %752 = call i32 @strcmp(ptr noundef %751, ptr noundef @.str.965) #13
  %753 = icmp eq i32 %752, 0
  br i1 %753, label %754, label %755

754:                                              ; preds = %750
  br label %757

755:                                              ; preds = %750
  call void @__assert_fail(ptr noundef @.str.1121, ptr noundef @.str.25, i32 noundef 10618, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #12
  unreachable

756:                                              ; No predecessors!
  br label %757

757:                                              ; preds = %756, %754
  %758 = load i32, ptr %26, align 4, !tbaa !9
  %759 = icmp ne i32 %758, 0
  br i1 %759, label %760, label %761

760:                                              ; preds = %757
  br label %763

761:                                              ; preds = %757
  call void @__assert_fail(ptr noundef @.str.1122, ptr noundef @.str.25, i32 noundef 10619, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #12
  unreachable

762:                                              ; No predecessors!
  br label %763

763:                                              ; preds = %762, %760
  %764 = load i8, ptr %21, align 1, !tbaa !13, !range !44, !noundef !45
  %765 = trunc i8 %764 to i1
  br i1 %765, label %766, label %767

766:                                              ; preds = %763
  br label %769

767:                                              ; preds = %763
  call void @__assert_fail(ptr noundef @.str.1123, ptr noundef @.str.25, i32 noundef 10620, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #12
  unreachable

768:                                              ; No predecessors!
  br label %769

769:                                              ; preds = %768, %766
  %770 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.1124)
          to label %771 unwind label %303

771:                                              ; preds = %769
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #10
  %772 = load i32, ptr %39, align 4, !tbaa !9
  %773 = icmp ne i32 %772, 0
  br i1 %773, label %774, label %776

774:                                              ; preds = %771
  %775 = load i32, ptr %39, align 4, !tbaa !9
  br label %778

776:                                              ; preds = %771
  %777 = load i32, ptr %16, align 4, !tbaa !9
  br label %778

778:                                              ; preds = %776, %774
  %779 = phi i32 [ %775, %774 ], [ %777, %776 ]
  %780 = load ptr, ptr %98, align 8, !tbaa !47
  %781 = getelementptr inbounds ptr, ptr %780, i64 6
  %782 = load ptr, ptr %781, align 8
  invoke void %782(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(12482) %98, i32 noundef %779, i1 noundef zeroext true)
          to label %783 unwind label %809

783:                                              ; preds = %778
  %784 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %71)
          to label %785 unwind label %813

785:                                              ; preds = %783
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #10
  %786 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.55)
          to label %787 unwind label %303

787:                                              ; preds = %785
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #10
  %788 = load i32, ptr %26, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %788, i1 noundef zeroext true)
          to label %789 unwind label %818

789:                                              ; preds = %787
  %790 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %72)
          to label %791 unwind label %822

791:                                              ; preds = %789
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #10
  %792 = load i8, ptr %33, align 1, !tbaa !13, !range !44, !noundef !45
  %793 = trunc i8 %792 to i1
  br i1 %793, label %827, label %794

794:                                              ; preds = %791
  %795 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.55)
          to label %796 unwind label %303

796:                                              ; preds = %794
  %797 = load i32, ptr %19, align 4, !tbaa !9
  %798 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL16get_memory_orderEj(ptr noundef nonnull align 8 dereferenceable(12482) %98, i32 noundef %797)
          to label %799 unwind label %303

799:                                              ; preds = %796
  %800 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef %798)
          to label %801 unwind label %303

801:                                              ; preds = %799
  %802 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.55)
          to label %803 unwind label %303

803:                                              ; preds = %801
  %804 = load i32, ptr %20, align 4, !tbaa !9
  %805 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL16get_memory_orderEj(ptr noundef nonnull align 8 dereferenceable(12482) %98, i32 noundef %804)
          to label %806 unwind label %303

806:                                              ; preds = %803
  %807 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef %805)
          to label %808 unwind label %303

808:                                              ; preds = %806
  br label %827

809:                                              ; preds = %778
  %810 = landingpad { ptr, i32 }
          cleanup
  %811 = extractvalue { ptr, i32 } %810, 0
  store ptr %811, ptr %29, align 8
  %812 = extractvalue { ptr, i32 } %810, 1
  store i32 %812, ptr %30, align 4
  br label %817

813:                                              ; preds = %783
  %814 = landingpad { ptr, i32 }
          cleanup
  %815 = extractvalue { ptr, i32 } %814, 0
  store ptr %815, ptr %29, align 8
  %816 = extractvalue { ptr, i32 } %814, 1
  store i32 %816, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #10
  br label %817

817:                                              ; preds = %813, %809
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #10
  br label %1134

818:                                              ; preds = %787
  %819 = landingpad { ptr, i32 }
          cleanup
  %820 = extractvalue { ptr, i32 } %819, 0
  store ptr %820, ptr %29, align 8
  %821 = extractvalue { ptr, i32 } %819, 1
  store i32 %821, ptr %30, align 4
  br label %826

822:                                              ; preds = %789
  %823 = landingpad { ptr, i32 }
          cleanup
  %824 = extractvalue { ptr, i32 } %823, 0
  store ptr %824, ptr %29, align 8
  %825 = extractvalue { ptr, i32 } %823, 1
  store i32 %825, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  br label %826

826:                                              ; preds = %822, %818
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #10
  br label %1134

827:                                              ; preds = %808, %791
  %828 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.53)
          to label %829 unwind label %303

829:                                              ; preds = %827
  %830 = load i8, ptr %38, align 1, !tbaa !13, !range !44, !noundef !45
  %831 = trunc i8 %830 to i1
  br i1 %831, label %846, label %832

832:                                              ; preds = %829
  %833 = load i32, ptr %15, align 4, !tbaa !9
  %834 = load i32, ptr %16, align 4, !tbaa !9
  %835 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %833, i32 noundef %834)
          to label %836 unwind label %303

836:                                              ; preds = %832
  %837 = load i32, ptr %39, align 4, !tbaa !9
  %838 = icmp ne i32 %837, 0
  br i1 %838, label %839, label %845

839:                                              ; preds = %836
  %840 = load i32, ptr %39, align 4, !tbaa !9
  %841 = add i32 %840, 1
  %842 = load i32, ptr %39, align 4, !tbaa !9
  %843 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %841, i32 noundef %842)
          to label %844 unwind label %303

844:                                              ; preds = %839
  br label %845

845:                                              ; preds = %844, %836
  br label %846

846:                                              ; preds = %845, %829
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %98, ptr noundef nonnull align 1 dereferenceable(3) @.str.1125)
          to label %847 unwind label %303

847:                                              ; preds = %846
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %98)
          to label %848 unwind label %303

848:                                              ; preds = %847
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #10
  %849 = load i32, ptr %39, align 4, !tbaa !9
  %850 = icmp ne i32 %849, 0
  br i1 %850, label %851, label %865

851:                                              ; preds = %848
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %75) #10
  %852 = load i32, ptr %39, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %852, i1 noundef zeroext true)
          to label %853 unwind label %856

853:                                              ; preds = %851
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull align 1 dereferenceable(3) @.str.163)
          to label %854 unwind label %860

854:                                              ; preds = %853
  %855 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 8 dereferenceable(32) %74) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #10
  br label %873

856:                                              ; preds = %851
  %857 = landingpad { ptr, i32 }
          cleanup
  %858 = extractvalue { ptr, i32 } %857, 0
  store ptr %858, ptr %29, align 8
  %859 = extractvalue { ptr, i32 } %857, 1
  store i32 %859, ptr %30, align 4
  br label %864

860:                                              ; preds = %853
  %861 = landingpad { ptr, i32 }
          cleanup
  %862 = extractvalue { ptr, i32 } %861, 0
  store ptr %862, ptr %29, align 8
  %863 = extractvalue { ptr, i32 } %861, 1
  store i32 %863, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #10
  br label %864

864:                                              ; preds = %860, %856
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #10
  br label %944

865:                                              ; preds = %848
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #10
  %866 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %866, i1 noundef zeroext true)
          to label %867 unwind label %869

867:                                              ; preds = %865
  %868 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 8 dereferenceable(32) %76) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #10
  br label %873

869:                                              ; preds = %865
  %870 = landingpad { ptr, i32 }
          cleanup
  %871 = extractvalue { ptr, i32 } %870, 0
  store ptr %871, ptr %29, align 8
  %872 = extractvalue { ptr, i32 } %870, 1
  store i32 %872, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #10
  br label %944

873:                                              ; preds = %867, %854
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #10
  %874 = load i32, ptr %23, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %874, i1 noundef zeroext true)
          to label %875 unwind label %887

875:                                              ; preds = %873
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %98, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %876 unwind label %891

876:                                              ; preds = %875
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #10
  %877 = load i32, ptr %23, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %877, i1 noundef zeroext true)
          to label %878 unwind label %896

878:                                              ; preds = %876
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_SA_SC_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 1 dereferenceable(9) @.str.1126, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(5) @.str.1127, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 1 dereferenceable(5) @.str.1128, ptr noundef nonnull align 8 dereferenceable(32) %79, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %879 unwind label %900

879:                                              ; preds = %878
  invoke void @_ZN11spirv_cross12CompilerGLSL14end_scope_declERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %98, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %880 unwind label %904

880:                                              ; preds = %879
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #10
  %881 = load i32, ptr %39, align 4, !tbaa !9
  %882 = icmp ne i32 %881, 0
  br i1 %882, label %883, label %919

883:                                              ; preds = %880
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #10
  %884 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %884, i1 noundef zeroext true)
          to label %885 unwind label %910

885:                                              ; preds = %883
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcRS7_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %98, ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %886 unwind label %914

886:                                              ; preds = %885
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #10
  br label %919

887:                                              ; preds = %873
  %888 = landingpad { ptr, i32 }
          cleanup
  %889 = extractvalue { ptr, i32 } %888, 0
  store ptr %889, ptr %29, align 8
  %890 = extractvalue { ptr, i32 } %888, 1
  store i32 %890, ptr %30, align 4
  br label %895

891:                                              ; preds = %875
  %892 = landingpad { ptr, i32 }
          cleanup
  %893 = extractvalue { ptr, i32 } %892, 0
  store ptr %893, ptr %29, align 8
  %894 = extractvalue { ptr, i32 } %892, 1
  store i32 %894, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  br label %895

895:                                              ; preds = %891, %887
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #10
  br label %944

896:                                              ; preds = %876
  %897 = landingpad { ptr, i32 }
          cleanup
  %898 = extractvalue { ptr, i32 } %897, 0
  store ptr %898, ptr %29, align 8
  %899 = extractvalue { ptr, i32 } %897, 1
  store i32 %899, ptr %30, align 4
  br label %909

900:                                              ; preds = %878
  %901 = landingpad { ptr, i32 }
          cleanup
  %902 = extractvalue { ptr, i32 } %901, 0
  store ptr %902, ptr %29, align 8
  %903 = extractvalue { ptr, i32 } %901, 1
  store i32 %903, ptr %30, align 4
  br label %908

904:                                              ; preds = %879
  %905 = landingpad { ptr, i32 }
          cleanup
  %906 = extractvalue { ptr, i32 } %905, 0
  store ptr %906, ptr %29, align 8
  %907 = extractvalue { ptr, i32 } %905, 1
  store i32 %907, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #10
  br label %908

908:                                              ; preds = %904, %900
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #10
  br label %909

909:                                              ; preds = %908, %896
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #10
  br label %944

910:                                              ; preds = %883
  %911 = landingpad { ptr, i32 }
          cleanup
  %912 = extractvalue { ptr, i32 } %911, 0
  store ptr %912, ptr %29, align 8
  %913 = extractvalue { ptr, i32 } %911, 1
  store i32 %913, ptr %30, align 4
  br label %918

914:                                              ; preds = %885
  %915 = landingpad { ptr, i32 }
          cleanup
  %916 = extractvalue { ptr, i32 } %915, 0
  store ptr %916, ptr %29, align 8
  %917 = extractvalue { ptr, i32 } %915, 1
  store i32 %917, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  br label %918

918:                                              ; preds = %914, %910
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #10
  br label %944

919:                                              ; preds = %886, %880
  %920 = load i8, ptr %38, align 1, !tbaa !13, !range !44, !noundef !45
  %921 = trunc i8 %920 to i1
  br i1 %921, label %922, label %943

922:                                              ; preds = %919
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %98)
          to label %923 unwind label %930

923:                                              ; preds = %922
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %98, ptr noundef nonnull align 1 dereferenceable(5) @.str.378)
          to label %924 unwind label %930

924:                                              ; preds = %923
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %98)
          to label %925 unwind label %930

925:                                              ; preds = %924
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #10
  %926 = load i32, ptr %16, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %926, i1 noundef zeroext true)
          to label %927 unwind label %934

927:                                              ; preds = %925
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %98, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef nonnull align 1 dereferenceable(7) @.str.924)
          to label %928 unwind label %938

928:                                              ; preds = %927
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #10
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %98)
          to label %929 unwind label %930

929:                                              ; preds = %928
  br label %943

930:                                              ; preds = %928, %924, %923, %922
  %931 = landingpad { ptr, i32 }
          cleanup
  %932 = extractvalue { ptr, i32 } %931, 0
  store ptr %932, ptr %29, align 8
  %933 = extractvalue { ptr, i32 } %931, 1
  store i32 %933, ptr %30, align 4
  br label %944

934:                                              ; preds = %925
  %935 = landingpad { ptr, i32 }
          cleanup
  %936 = extractvalue { ptr, i32 } %935, 0
  store ptr %936, ptr %29, align 8
  %937 = extractvalue { ptr, i32 } %935, 1
  store i32 %937, ptr %30, align 4
  br label %942

938:                                              ; preds = %927
  %939 = landingpad { ptr, i32 }
          cleanup
  %940 = extractvalue { ptr, i32 } %939, 0
  store ptr %940, ptr %29, align 8
  %941 = extractvalue { ptr, i32 } %939, 1
  store i32 %941, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #10
  br label %942

942:                                              ; preds = %938, %934
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #10
  br label %944

943:                                              ; preds = %929, %919
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #10
  br label %1132

944:                                              ; preds = %942, %930, %918, %909, %895, %869, %864
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #10
  br label %1134

945:                                              ; preds = %747
  %946 = load ptr, ptr %17, align 8, !tbaa !5
  %947 = call i32 @strcmp(ptr noundef %946, ptr noundef @.str.965) #13
  %948 = icmp ne i32 %947, 0
  br i1 %948, label %949, label %950

949:                                              ; preds = %945
  br label %952

950:                                              ; preds = %945
  call void @__assert_fail(ptr noundef @.str.1129, ptr noundef @.str.25, i32 noundef 10674, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #12
  unreachable

951:                                              ; No predecessors!
  br label %952

952:                                              ; preds = %951, %949
  %953 = load i32, ptr %23, align 4, !tbaa !9
  %954 = icmp ne i32 %953, 0
  br i1 %954, label %955, label %984

955:                                              ; preds = %952
  %956 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.55)
          to label %957 unwind label %303

957:                                              ; preds = %955
  %958 = load i8, ptr %25, align 1, !tbaa !13, !range !44, !noundef !45
  %959 = trunc i8 %958 to i1
  br i1 %959, label %960, label %968

960:                                              ; preds = %957
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #10
  %961 = load i32, ptr %23, align 4, !tbaa !9
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, i32 noundef %961) #10
  %962 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %963 unwind label %964

963:                                              ; preds = %960
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #10
  br label %983

964:                                              ; preds = %960
  %965 = landingpad { ptr, i32 }
          cleanup
  %966 = extractvalue { ptr, i32 } %965, 0
  store ptr %966, ptr %29, align 8
  %967 = extractvalue { ptr, i32 } %965, 1
  store i32 %967, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #10
  br label %1134

968:                                              ; preds = %957
  call void @llvm.lifetime.start.p0(i64 32, ptr %83) #10
  %969 = load i32, ptr %32, align 4, !tbaa !41
  %970 = load i32, ptr %23, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %969, i32 noundef %970)
          to label %971 unwind label %974

971:                                              ; preds = %968
  %972 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %83)
          to label %973 unwind label %978

973:                                              ; preds = %971
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #10
  br label %983

974:                                              ; preds = %968
  %975 = landingpad { ptr, i32 }
          cleanup
  %976 = extractvalue { ptr, i32 } %975, 0
  store ptr %976, ptr %29, align 8
  %977 = extractvalue { ptr, i32 } %975, 1
  store i32 %977, ptr %30, align 4
  br label %982

978:                                              ; preds = %971
  %979 = landingpad { ptr, i32 }
          cleanup
  %980 = extractvalue { ptr, i32 } %979, 0
  store ptr %980, ptr %29, align 8
  %981 = extractvalue { ptr, i32 } %979, 1
  store i32 %981, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #10
  br label %982

982:                                              ; preds = %978, %974
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #10
  br label %1134

983:                                              ; preds = %973, %963
  br label %984

984:                                              ; preds = %983, %952
  %985 = load i32, ptr %26, align 4, !tbaa !9
  %986 = icmp ne i32 %985, 0
  br i1 %986, label %987, label %1007

987:                                              ; preds = %984
  call void @llvm.lifetime.start.p0(i64 32, ptr %84) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #10
  %988 = load i32, ptr %26, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %988, i1 noundef zeroext true)
          to label %989 unwind label %993

989:                                              ; preds = %987
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %85)
          to label %990 unwind label %997

990:                                              ; preds = %989
  %991 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %84)
          to label %992 unwind label %1001

992:                                              ; preds = %990
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #10
  br label %1007

993:                                              ; preds = %987
  %994 = landingpad { ptr, i32 }
          cleanup
  %995 = extractvalue { ptr, i32 } %994, 0
  store ptr %995, ptr %29, align 8
  %996 = extractvalue { ptr, i32 } %994, 1
  store i32 %996, ptr %30, align 4
  br label %1006

997:                                              ; preds = %989
  %998 = landingpad { ptr, i32 }
          cleanup
  %999 = extractvalue { ptr, i32 } %998, 0
  store ptr %999, ptr %29, align 8
  %1000 = extractvalue { ptr, i32 } %998, 1
  store i32 %1000, ptr %30, align 4
  br label %1005

1001:                                             ; preds = %990
  %1002 = landingpad { ptr, i32 }
          cleanup
  %1003 = extractvalue { ptr, i32 } %1002, 0
  store ptr %1003, ptr %29, align 8
  %1004 = extractvalue { ptr, i32 } %1002, 1
  store i32 %1004, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #10
  br label %1005

1005:                                             ; preds = %1001, %997
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #10
  br label %1006

1006:                                             ; preds = %1005, %993
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #10
  br label %1134

1007:                                             ; preds = %992, %984
  %1008 = load i8, ptr %33, align 1, !tbaa !13, !range !44, !noundef !45
  %1009 = trunc i8 %1008 to i1
  br i1 %1009, label %1057, label %1010

1010:                                             ; preds = %1007
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %88) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %88) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef @.str.55, ptr noundef nonnull align 1 dereferenceable(1) %88)
          to label %1011 unwind label %1028

1011:                                             ; preds = %1010
  %1012 = load i32, ptr %19, align 4, !tbaa !9
  %1013 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL16get_memory_orderEj(ptr noundef nonnull align 8 dereferenceable(12482) %98, i32 noundef %1012)
          to label %1014 unwind label %1032

1014:                                             ; preds = %1011
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef %1013)
          to label %1015 unwind label %1032

1015:                                             ; preds = %1014
  %1016 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %86)
          to label %1017 unwind label %1036

1017:                                             ; preds = %1015
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %88) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %88) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #10
  %1018 = load i8, ptr %21, align 1, !tbaa !13, !range !44, !noundef !45
  %1019 = trunc i8 %1018 to i1
  br i1 %1019, label %1020, label %1056

1020:                                             ; preds = %1017
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %90) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %91) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %91) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %90, ptr noundef @.str.55, ptr noundef nonnull align 1 dereferenceable(1) %91)
          to label %1021 unwind label %1042

1021:                                             ; preds = %1020
  %1022 = load i32, ptr %20, align 4, !tbaa !9
  %1023 = invoke noundef ptr @_ZN11spirv_cross11CompilerMSL16get_memory_orderEj(ptr noundef nonnull align 8 dereferenceable(12482) %98, i32 noundef %1022)
          to label %1024 unwind label %1046

1024:                                             ; preds = %1021
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %89, ptr noundef nonnull align 8 dereferenceable(32) %90, ptr noundef %1023)
          to label %1025 unwind label %1046

1025:                                             ; preds = %1024
  %1026 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %89)
          to label %1027 unwind label %1050

1027:                                             ; preds = %1025
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %91) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #10
  br label %1056

1028:                                             ; preds = %1010
  %1029 = landingpad { ptr, i32 }
          cleanup
  %1030 = extractvalue { ptr, i32 } %1029, 0
  store ptr %1030, ptr %29, align 8
  %1031 = extractvalue { ptr, i32 } %1029, 1
  store i32 %1031, ptr %30, align 4
  br label %1041

1032:                                             ; preds = %1014, %1011
  %1033 = landingpad { ptr, i32 }
          cleanup
  %1034 = extractvalue { ptr, i32 } %1033, 0
  store ptr %1034, ptr %29, align 8
  %1035 = extractvalue { ptr, i32 } %1033, 1
  store i32 %1035, ptr %30, align 4
  br label %1040

1036:                                             ; preds = %1015
  %1037 = landingpad { ptr, i32 }
          cleanup
  %1038 = extractvalue { ptr, i32 } %1037, 0
  store ptr %1038, ptr %29, align 8
  %1039 = extractvalue { ptr, i32 } %1037, 1
  store i32 %1039, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #10
  br label %1040

1040:                                             ; preds = %1036, %1032
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #10
  br label %1041

1041:                                             ; preds = %1040, %1028
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %88) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %88) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #10
  br label %1134

1042:                                             ; preds = %1020
  %1043 = landingpad { ptr, i32 }
          cleanup
  %1044 = extractvalue { ptr, i32 } %1043, 0
  store ptr %1044, ptr %29, align 8
  %1045 = extractvalue { ptr, i32 } %1043, 1
  store i32 %1045, ptr %30, align 4
  br label %1055

1046:                                             ; preds = %1024, %1021
  %1047 = landingpad { ptr, i32 }
          cleanup
  %1048 = extractvalue { ptr, i32 } %1047, 0
  store ptr %1048, ptr %29, align 8
  %1049 = extractvalue { ptr, i32 } %1047, 1
  store i32 %1049, ptr %30, align 4
  br label %1054

1050:                                             ; preds = %1025
  %1051 = landingpad { ptr, i32 }
          cleanup
  %1052 = extractvalue { ptr, i32 } %1051, 0
  store ptr %1052, ptr %29, align 8
  %1053 = extractvalue { ptr, i32 } %1051, 1
  store i32 %1053, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #10
  br label %1054

1054:                                             ; preds = %1050, %1046
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #10
  br label %1055

1055:                                             ; preds = %1054, %1042
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %91) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #10
  br label %1134

1056:                                             ; preds = %1027, %1017
  br label %1057

1057:                                             ; preds = %1056, %1007
  %1058 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.53)
          to label %1059 unwind label %303

1059:                                             ; preds = %1057
  %1060 = load i8, ptr %33, align 1, !tbaa !13, !range !44, !noundef !45
  %1061 = trunc i8 %1060 to i1
  br i1 %1061, label %1062, label %1065

1062:                                             ; preds = %1059
  %1063 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.163)
          to label %1064 unwind label %303

1064:                                             ; preds = %1062
  br label %1065

1065:                                             ; preds = %1064, %1059
  %1066 = load i8, ptr %38, align 1, !tbaa !13, !range !44, !noundef !45
  %1067 = trunc i8 %1066 to i1
  br i1 %1067, label %1068, label %1105

1068:                                             ; preds = %1065
  %1069 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.921)
          to label %1070 unwind label %303

1070:                                             ; preds = %1068
  %1071 = load ptr, ptr %17, align 8, !tbaa !5
  %1072 = call i32 @strcmp(ptr noundef %1071, ptr noundef @.str.968) #13
  %1073 = icmp ne i32 %1072, 0
  br i1 %1073, label %1074, label %1099

1074:                                             ; preds = %1070
  call void @llvm.lifetime.start.p0(i64 32, ptr %92) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %93) #10
  %1075 = load i32, ptr %15, align 4, !tbaa !9
  %1076 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %98, i32 noundef %1075)
          to label %1077 unwind label %1085

1077:                                             ; preds = %1074
  %1078 = load ptr, ptr %98, align 8, !tbaa !47
  %1079 = getelementptr inbounds ptr, ptr %1078, i64 19
  %1080 = load ptr, ptr %1079, align 8
  invoke void %1080(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %93, ptr noundef nonnull align 8 dereferenceable(12482) %98, ptr noundef nonnull align 8 dereferenceable(336) %1076, i32 noundef 0)
          to label %1081 unwind label %1085

1081:                                             ; preds = %1077
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %92, ptr noundef nonnull align 8 dereferenceable(32) %93, ptr noundef nonnull align 1 dereferenceable(3) @.str.1130)
          to label %1082 unwind label %1089

1082:                                             ; preds = %1081
  %1083 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %92)
          to label %1084 unwind label %1093

1084:                                             ; preds = %1082
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #10
  br label %1102

1085:                                             ; preds = %1077, %1074
  %1086 = landingpad { ptr, i32 }
          cleanup
  %1087 = extractvalue { ptr, i32 } %1086, 0
  store ptr %1087, ptr %29, align 8
  %1088 = extractvalue { ptr, i32 } %1086, 1
  store i32 %1088, ptr %30, align 4
  br label %1098

1089:                                             ; preds = %1081
  %1090 = landingpad { ptr, i32 }
          cleanup
  %1091 = extractvalue { ptr, i32 } %1090, 0
  store ptr %1091, ptr %29, align 8
  %1092 = extractvalue { ptr, i32 } %1090, 1
  store i32 %1092, ptr %30, align 4
  br label %1097

1093:                                             ; preds = %1082
  %1094 = landingpad { ptr, i32 }
          cleanup
  %1095 = extractvalue { ptr, i32 } %1094, 0
  store ptr %1095, ptr %29, align 8
  %1096 = extractvalue { ptr, i32 } %1094, 1
  store i32 %1096, ptr %30, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #10
  br label %1097

1097:                                             ; preds = %1093, %1089
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  br label %1098

1098:                                             ; preds = %1097, %1085
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #10
  br label %1134

1099:                                             ; preds = %1070
  %1100 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.1131)
          to label %1101 unwind label %303

1101:                                             ; preds = %1099
  br label %1102

1102:                                             ; preds = %1101, %1084
  %1103 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.53)
          to label %1104 unwind label %303

1104:                                             ; preds = %1102
  br label %1105

1105:                                             ; preds = %1104, %1065
  %1106 = load i32, ptr %32, align 4, !tbaa !41
  %1107 = load ptr, ptr %31, align 8, !tbaa !5
  %1108 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1107, i32 0, i32 2
  %1109 = load i32, ptr %1108, align 8, !tbaa !15
  %1110 = icmp ne i32 %1106, %1109
  br i1 %1110, label %1111, label %1120

1111:                                             ; preds = %1105
  call void @llvm.lifetime.start.p0(i64 32, ptr %94) #10
  %1112 = load ptr, ptr %31, align 8, !tbaa !5
  %1113 = load i32, ptr %32, align 4, !tbaa !41
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 8 dereferenceable(9848) %98, ptr noundef nonnull align 8 dereferenceable(336) %1112, i32 noundef %1113, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %1114 unwind label %1116

1114:                                             ; preds = %1111
  %1115 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %94) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #10
  br label %1120

1116:                                             ; preds = %1111
  %1117 = landingpad { ptr, i32 }
          cleanup
  %1118 = extractvalue { ptr, i32 } %1117, 0
  store ptr %1118, ptr %29, align 8
  %1119 = extractvalue { ptr, i32 } %1117, 1
  store i32 %1119, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #10
  br label %1134

1120:                                             ; preds = %1114, %1105
  %1121 = load ptr, ptr %17, align 8, !tbaa !5
  %1122 = call i32 @strcmp(ptr noundef %1121, ptr noundef @.str.968) #13
  %1123 = icmp ne i32 %1122, 0
  br i1 %1123, label %1124, label %1129

1124:                                             ; preds = %1120
  %1125 = load i32, ptr %15, align 4, !tbaa !9
  %1126 = load i32, ptr %16, align 4, !tbaa !9
  %1127 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %98, i32 noundef %1125, i32 noundef %1126, ptr noundef nonnull align 8 dereferenceable(32) %27, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1128 unwind label %303

1128:                                             ; preds = %1124
  br label %1131

1129:                                             ; preds = %1120
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %98, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %1130 unwind label %303

1130:                                             ; preds = %1129
  br label %1131

1131:                                             ; preds = %1130, %1128
  br label %1132

1132:                                             ; preds = %1131, %943
  invoke void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %98)
          to label %1133 unwind label %303

1133:                                             ; preds = %1132
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %34) #10
  call void @llvm.lifetime.end.p0(i64 336, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #10
  ret void

1134:                                             ; preds = %1116, %1098, %1055, %1041, %1006, %982, %964, %944, %826, %817, %746, %737, %701, %673, %672, %632, %338, %322, %303, %283
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  br label %1135

1135:                                             ; preds = %1134, %263
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #10
  br label %1136

1136:                                             ; preds = %1135, %209
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %1137

1137:                                             ; preds = %1136, %205
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %34) #10
  br label %1138

1138:                                             ; preds = %1137, %201
  call void @llvm.lifetime.end.p0(i64 336, ptr %34) #10
  br label %1139

1139:                                             ; preds = %1138, %166, %153
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #10
  br label %1140

1140:                                             ; preds = %1139, %127
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %1141

1141:                                             ; preds = %1140, %123
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  br label %1142

1142:                                             ; preds = %1141, %119
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #10
  br label %1143

1143:                                             ; preds = %1142
  %1144 = load ptr, ptr %29, align 8
  %1145 = load i32, ptr %30, align 4
  %1146 = insertvalue { ptr, i32 } poison, ptr %1144, 0
  %1147 = insertvalue { ptr, i32 } %1146, i32 %1145, 1
  resume { ptr, i32 } %1147

1148:                                             ; preds = %580, %165
  unreachable
}

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

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

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

declare noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) #5

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #9

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL14end_scope_declERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) #5

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

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

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

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

declare void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

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

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

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


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

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.163 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.178 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.179 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.378 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.921 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.924 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.965 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1001 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1017 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1102 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.1103 = external hidden unnamed_addr constant [46 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj = external hidden unnamed_addr constant [157 x i8], align 1
@.str.1104 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1105 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1107 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.1108 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1109 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1110 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1111 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1112 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1113 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1114 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1115 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1116 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1117 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1118 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1119 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1120 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1121 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.1122 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1123 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1124 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1125 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1126 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1127 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1128 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1129 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.1130 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1131 = external hidden unnamed_addr constant [10 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) local_unnamed_addr #4

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #6 align 2

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

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

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

; 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_cross11CompilerMSL26get_argument_address_spaceB5cxx11ERKNS_12SPIRVariableE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #2 align 2

declare void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef) local_unnamed_addr #5

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #4

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

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

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

declare noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i32 noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i1 noundef zeroext %7, i32 noundef %8, i32 noundef %9, i1 noundef zeroext %10, i1 noundef zeroext %11, i32 noundef %12) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"struct.spirv_cross::SPIRType", align 8
  %18 = alloca %"struct.spirv_cross::SPIRType", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca i8, align 1
  %26 = alloca %"struct.spirv_cross::SPIRType", align 8
  %27 = alloca %"struct.spirv_cross::SPIRType", align 8
  %28 = alloca %"class.spirv_cross::TypedID.414", align 4
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::allocator.71", align 1
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::allocator.71", align 1
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::allocator.71", align 1
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  store i32 %2, ptr %14, align 4, !tbaa !5
  store ptr %3, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  %66 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %8)
          to label %67 unwind label %76

67:                                               ; preds = %13
  %68 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %66)
          to label %69 unwind label %78

69:                                               ; preds = %67
  %70 = getelementptr inbounds i8, ptr %68, i64 16
  %71 = and i32 %4, -3
  %or.cond = icmp eq i32 %71, 237
  br i1 %or.cond, label %72, label %82

72:                                               ; preds = %69
  %73 = getelementptr inbounds i8, ptr %68, i64 20
  %74 = load i32, ptr %73, align 4, !tbaa !11
  %75 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %74)
          to label %88 unwind label %80

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

78:                                               ; preds = %67
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %660

80:                                               ; preds = %84, %72
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %660

82:                                               ; preds = %69
  %83 = load i32, ptr %70, align 8, !tbaa !39
  %or.cond3 = icmp eq i32 %71, 236
  br i1 %or.cond3, label %84, label %88

84:                                               ; preds = %82
  %85 = getelementptr inbounds i8, ptr %68, i64 20
  %86 = load i32, ptr %85, align 4, !tbaa !11
  %87 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %86)
          to label %88 unwind label %80

88:                                               ; preds = %84, %72, %82
  %.0174 = phi i32 [ %83, %82 ], [ %75, %72 ], [ %87, %84 ]
  %89 = getelementptr inbounds i8, ptr %0, i64 10036
  %90 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %89, i32 noundef 3, i32 noundef 1, i32 noundef 0)
  br i1 %90, label %91, label %95

91:                                               ; preds = %88
  %92 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %8)
          to label %95 unwind label %93

93:                                               ; preds = %101, %91
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %660

95:                                               ; preds = %88, %91
  %.0175 = phi i1 [ %92, %91 ], [ false, %88 ]
  %96 = getelementptr inbounds i8, ptr %68, i64 20
  %97 = load i32, ptr %96, align 4, !tbaa !11
  %98 = icmp eq i32 %97, 64
  br i1 %98, label %99, label %104

99:                                               ; preds = %95
  %100 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %100, ptr noundef nonnull @.str.1102)
          to label %101 unwind label %102

101:                                              ; preds = %99
  invoke void @__cxa_throw(ptr nonnull %100, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %661 unwind label %93

102:                                              ; preds = %99
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %100) #9
  br label %660

104:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %17) #9
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %17, ptr noundef nonnull align 8 dereferenceable(336) %68)
          to label %105 unwind label %117

105:                                              ; preds = %104
  %106 = getelementptr inbounds i8, ptr %17, i64 16
  store i32 %.0174, ptr %106, align 8, !tbaa !39
  %107 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %8)
          to label %108 unwind label %119

108:                                              ; preds = %105
  %.not = icmp eq ptr %107, null
  br i1 %.not, label %113, label %109

109:                                              ; preds = %108
  %110 = getelementptr inbounds i8, ptr %107, i64 12
  %111 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %110)
  %112 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %111)
          to label %.thread unwind label %121

113:                                              ; preds = %108
  %114 = getelementptr inbounds i8, ptr %68, i64 128
  %115 = load i32, ptr %114, align 8, !tbaa !40
  %.not285 = icmp eq i32 %115, 11
  br i1 %.not285, label %116, label %.thread

116:                                              ; preds = %113
  call void @__assert_fail(ptr noundef nonnull @.str.1103, ptr noundef nonnull @.str.25, i32 noundef 10478, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #11
  unreachable

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

119:                                              ; preds = %105
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %658

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

.thread:                                          ; preds = %109, %113
  %123 = phi ptr [ null, %113 ], [ %112, %109 ]
  %124 = icmp ne i32 %9, 0
  %125 = and i1 %124, %10
  %.not189 = icmp eq i32 %4, 227
  br i1 %.not189, label %133, label %126

126:                                              ; preds = %.thread
  %127 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %128 unwind label %152

128:                                              ; preds = %126
  br i1 %127, label %129, label %133

129:                                              ; preds = %128
  %130 = getelementptr inbounds i8, ptr %66, i64 128
  %131 = load i32, ptr %130, align 8, !tbaa !40
  %132 = icmp ne i32 %131, 4
  br label %133

133:                                              ; preds = %129, %128, %.thread
  %134 = phi i1 [ false, %128 ], [ false, %.thread ], [ %132, %129 ]
  %brmerge.demorgan = and i1 %125, %.0175
  br i1 %brmerge.demorgan, label %135, label %161

135:                                              ; preds = %133
  %136 = getelementptr inbounds i8, ptr %0, i64 9272
  %137 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %136, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %138 unwind label %154

138:                                              ; preds = %135
  %139 = load i32, ptr %137, align 4, !tbaa !5
  %.not190 = icmp eq i32 %139, 0
  br i1 %.not190, label %140, label %161

140:                                              ; preds = %138
  %141 = getelementptr inbounds i8, ptr %0, i64 8
  %142 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %141, i32 noundef 2)
          to label %143 unwind label %154

143:                                              ; preds = %140
  store i32 %142, ptr %137, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %18) #9
  %144 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
          to label %145 unwind label %156

145:                                              ; preds = %143
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %18, ptr noundef nonnull align 8 dereferenceable(336) %144)
          to label %146 unwind label %156

146:                                              ; preds = %145
  %147 = getelementptr inbounds i8, ptr %18, i64 24
  store i32 4, ptr %147, align 8, !tbaa !41
  %148 = load i32, ptr %137, align 4, !tbaa !5
  %149 = add i32 %148, 1
  %150 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %149, ptr noundef nonnull align 8 dereferenceable(336) %18)
          to label %151 unwind label %158

151:                                              ; preds = %146
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %18) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %18) #9
  %.pre = load i32, ptr %137, align 4, !tbaa !5
  br label %161

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

154:                                              ; preds = %140, %135
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %658

156:                                              ; preds = %145, %143
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %160

158:                                              ; preds = %146
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %18) #9
  br label %160

160:                                              ; preds = %158, %156
  %.pn = phi { ptr, i32 } [ %159, %158 ], [ %157, %156 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %18) #9
  br label %658

161:                                              ; preds = %138, %151, %133
  %.0176 = phi i32 [ 0, %133 ], [ %.pre, %151 ], [ %139, %138 ]
  br i1 %134, label %162, label %195

162:                                              ; preds = %161
  br i1 %125, label %163, label %183

163:                                              ; preds = %162
  %164 = load i32, ptr %14, align 4, !tbaa !5
  %165 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %164)
          to label %166 unwind label %170

166:                                              ; preds = %163
  %.not195 = icmp eq i32 %.0176, 0
  br i1 %.not195, label %172, label %167

167:                                              ; preds = %166
  %168 = add i32 %.0176, 1
  %169 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %168, i32 noundef %.0176)
          to label %172 unwind label %170

170:                                              ; preds = %656, %655, %652, %640, %638, %615, %612, %609, %549, %484, %483, %480, %476, %473, %460, %458, %455, %453, %447, %437, %411, %409, %401, %397, %360, %177, %167, %163
  %171 = landingpad { ptr, i32 }
          cleanup
  br label %658

172:                                              ; preds = %167, %166
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #9
  %173 = load ptr, ptr %0, align 8, !tbaa !42
  %174 = getelementptr inbounds i8, ptr %173, i64 160
  %175 = load ptr, ptr %174, align 8
  invoke void %175(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 23, i32 noundef 1)
          to label %176 unwind label %178

176:                                              ; preds = %172
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.1001, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %177 unwind label %180

177:                                              ; preds = %176
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %195 unwind label %170

178:                                              ; preds = %172
  %179 = landingpad { ptr, i32 }
          cleanup
  br label %182

180:                                              ; preds = %176
  %181 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  br label %182

182:                                              ; preds = %180, %178
  %.pn196 = phi { ptr, i32 } [ %181, %180 ], [ %179, %178 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #9
  br label %658

183:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #9
  %184 = load ptr, ptr %0, align 8, !tbaa !42
  %185 = getelementptr inbounds i8, ptr %184, i64 160
  %186 = load ptr, ptr %185, align 8
  invoke void %186(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 23, i32 noundef 1)
          to label %187 unwind label %190

187:                                              ; preds = %183
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_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.1104, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(4) @.str.1105)
          to label %188 unwind label %192

188:                                              ; preds = %187
  %189 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %20) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #9
  br label %195

190:                                              ; preds = %183
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %194

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

194:                                              ; preds = %192, %190
  %.pn193 = phi { ptr, i32 } [ %193, %192 ], [ %191, %190 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #9
  br label %658

195:                                              ; preds = %188, %177, %161
  br i1 %.0175, label %196, label %355

196:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %8, i1 noundef zeroext true)
          to label %197 unwind label %207

197:                                              ; preds = %196
  %198 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %22, i8 noundef signext 64, i64 noundef 0) #9
  %199 = and i32 %4, -4
  %switch.selectcmp = icmp eq i32 %199, 236
  %200 = load i32, ptr %70, align 8, !tbaa !39
  %201 = icmp ne i32 %200, %.0174
  %202 = and i1 %switch.selectcmp, %201
  br i1 %202, label %203, label %211

203:                                              ; preds = %197
  %204 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %8)
          to label %205 unwind label %209

205:                                              ; preds = %203
  %.not208 = icmp eq ptr %204, null
  br i1 %.not208, label %211, label %206

206:                                              ; preds = %205
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i8 noundef zeroext 74)
          to label %211 unwind label %209

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

209:                                              ; preds = %350, %206, %203
  %210 = landingpad { ptr, i32 }
          cleanup
  br label %353

211:                                              ; preds = %206, %205, %197
  %.0173 = phi ptr [ %204, %206 ], [ null, %205 ], [ null, %197 ]
  %.not209 = icmp eq i64 %198, -1
  br i1 %.not209, label %350, label %212

212:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #9
  %213 = add nuw i64 %198, 1
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(32) %22, i64 noundef %213, i64 noundef -1)
          to label %214 unwind label %222

214:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #9
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(32) %22, i64 noundef 0, i64 noundef %198)
          to label %215 unwind label %224

215:                                              ; preds = %214
  %216 = icmp ne ptr %.0173, null
  %or.cond9 = and i1 %202, %216
  br i1 %or.cond9, label %217, label %272

217:                                              ; preds = %215
  %218 = getelementptr inbounds i8, ptr %0, i64 10176
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #9
  store i8 74, ptr %25, align 1, !tbaa !44
  %219 = invoke noundef i64 @_ZNKSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE5countERKS2_(ptr noundef nonnull align 8 dereferenceable(48) %218, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %220 unwind label %226

220:                                              ; preds = %217
  %.not210 = icmp eq i64 %219, 0
  br i1 %.not210, label %221, label %228

221:                                              ; preds = %220
  call void @__assert_fail(ptr noundef nonnull @.str.1107, ptr noundef nonnull @.str.25, i32 noundef 10540, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #11
  unreachable

222:                                              ; preds = %212
  %223 = landingpad { ptr, i32 }
          cleanup
  br label %349

224:                                              ; preds = %214
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %348

226:                                              ; preds = %217
  %227 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #9
  br label %347

228:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #9
  %229 = getelementptr inbounds i8, ptr %.0173, i64 12
  %230 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %229)
  %231 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %230)
          to label %.preheader unwind label %.loopexit.split-lp

.preheader:                                       ; preds = %228, %234
  %.0172 = phi ptr [ %237, %234 ], [ %231, %228 ]
  %232 = getelementptr inbounds i8, ptr %.0172, i64 12
  %233 = load i32, ptr %232, align 4, !tbaa !46
  %.not211 = icmp eq i32 %233, 25
  br i1 %.not211, label %238, label %234

234:                                              ; preds = %.preheader
  %235 = getelementptr inbounds i8, ptr %.0172, i64 276
  %236 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %235)
  %237 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %236)
          to label %.preheader unwind label %.loopexit, !llvm.loop !47

.loopexit:                                        ; preds = %234
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %347

.loopexit.split-lp:                               ; preds = %228
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %347

238:                                              ; preds = %.preheader
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %26) #9
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %26, ptr noundef nonnull align 8 dereferenceable(336) %.0172)
          to label %239 unwind label %256

239:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %27) #9
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %27, ptr noundef nonnull align 8 dereferenceable(336) %68)
          to label %240 unwind label %258

240:                                              ; preds = %239
  %241 = getelementptr inbounds i8, ptr %27, i64 16
  store i32 %.0174, ptr %241, align 8, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #9
  %242 = getelementptr inbounds i8, ptr %0, i64 8
  %243 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %242, i32 noundef 1)
          to label %244 unwind label %260

244:                                              ; preds = %240
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef %243)
  %245 = getelementptr inbounds i8, ptr %26, i64 248
  %246 = load i32, ptr %28, align 4, !tbaa !5
  store i32 %246, ptr %245, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #9
  %247 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %245)
  %248 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %247, ptr noundef nonnull align 8 dereferenceable(336) %27)
          to label %249 unwind label %262

249:                                              ; preds = %244
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #9
  %250 = load ptr, ptr %0, align 8, !tbaa !42
  %251 = getelementptr inbounds i8, ptr %250, i64 152
  %252 = load ptr, ptr %251, align 8
  invoke void %252(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %26, i32 noundef %8)
          to label %253 unwind label %264

253:                                              ; preds = %249
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 1 dereferenceable(16) @.str.1108, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %254 unwind label %266

254:                                              ; preds = %253
  %255 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %27) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %27) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %26) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %26) #9
  br label %272

256:                                              ; preds = %238
  %257 = landingpad { ptr, i32 }
          cleanup
  br label %271

258:                                              ; preds = %239
  %259 = landingpad { ptr, i32 }
          cleanup
  br label %270

260:                                              ; preds = %240
  %261 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #9
  br label %269

262:                                              ; preds = %244
  %263 = landingpad { ptr, i32 }
          cleanup
  br label %269

264:                                              ; preds = %249
  %265 = landingpad { ptr, i32 }
          cleanup
  br label %268

266:                                              ; preds = %253
  %267 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  br label %268

268:                                              ; preds = %266, %264
  %.pn212 = phi { ptr, i32 } [ %267, %266 ], [ %265, %264 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #9
  br label %269

269:                                              ; preds = %268, %262, %260
  %.pn212.pn = phi { ptr, i32 } [ %.pn212, %268 ], [ %263, %262 ], [ %261, %260 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %27) #9
  br label %270

270:                                              ; preds = %269, %258
  %.pn212.pn.pn = phi { ptr, i32 } [ %.pn212.pn, %269 ], [ %259, %258 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %27) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %26) #9
  br label %271

271:                                              ; preds = %270, %256
  %.pn212.pn.pn.pn = phi { ptr, i32 } [ %.pn212.pn.pn, %270 ], [ %257, %256 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %26) #9
  br label %347

272:                                              ; preds = %254, %215
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #9
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS8_SA_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.58)
          to label %273 unwind label %286

273:                                              ; preds = %272
  %274 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %275 unwind label %288

275:                                              ; preds = %273
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #9
  %276 = getelementptr inbounds i8, ptr %66, i64 128
  %277 = load i32, ptr %276, align 8, !tbaa !40
  %278 = icmp eq i32 %277, 11
  br i1 %278, label %279, label %344

279:                                              ; preds = %275
  %280 = getelementptr inbounds i8, ptr %123, i64 257
  %281 = load i8, ptr %280, align 1, !tbaa !49, !range !50, !noundef !51
  %282 = trunc nuw i8 %281 to i1
  %283 = getelementptr inbounds i8, ptr %123, i64 252
  %284 = load i32, ptr %283, align 4, !tbaa !52
  br i1 %282, label %285, label %329

285:                                              ; preds = %279
  switch i32 %284, label %322 [
    i32 0, label %291
    i32 1, label %313
  ]

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

288:                                              ; preds = %273
  %289 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  br label %290

290:                                              ; preds = %288, %286
  %.pn217 = phi { ptr, i32 } [ %289, %288 ], [ %287, %286 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #9
  br label %347

291:                                              ; preds = %285
  %292 = getelementptr inbounds i8, ptr %0, i64 10127
  %293 = load i8, ptr %292, align 1, !tbaa !53, !range !50, !noundef !51
  %294 = trunc nuw i8 %293 to i1
  br i1 %294, label %295, label %304

295:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #9
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA9_S1_SA_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 1 dereferenceable(7) @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(9) @.str.1110, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(3) @.str.1111)
          to label %296 unwind label %299

296:                                              ; preds = %295
  %297 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %298 unwind label %301

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

299:                                              ; preds = %295
  %300 = landingpad { ptr, i32 }
          cleanup
  br label %303

301:                                              ; preds = %296
  %302 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #9
  br label %303

303:                                              ; preds = %301, %299
  %.pn225 = phi { ptr, i32 } [ %302, %301 ], [ %300, %299 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #9
  br label %347

304:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #9
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcS7_RA3_S8_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(5) @.str.1112, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(3) @.str.1111)
          to label %305 unwind label %308

305:                                              ; preds = %304
  %306 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %33)
          to label %307 unwind label %310

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

308:                                              ; preds = %304
  %309 = landingpad { ptr, i32 }
          cleanup
  br label %312

310:                                              ; preds = %305
  %311 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  br label %312

312:                                              ; preds = %310, %308
  %.pn223 = phi { ptr, i32 } [ %311, %310 ], [ %309, %308 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #9
  br label %347

313:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #9
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcS7_RA3_S8_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(6) @.str.1113, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(3) @.str.1114)
          to label %314 unwind label %317

314:                                              ; preds = %313
  %315 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %316 unwind label %319

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

317:                                              ; preds = %313
  %318 = landingpad { ptr, i32 }
          cleanup
  br label %321

319:                                              ; preds = %314
  %320 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #9
  br label %321

321:                                              ; preds = %319, %317
  %.pn221 = phi { ptr, i32 } [ %320, %319 ], [ %318, %317 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #9
  br label %347

322:                                              ; preds = %285
  %323 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %323, ptr noundef nonnull @.str.1115)
          to label %324 unwind label %325

324:                                              ; preds = %322
  invoke void @__cxa_throw(ptr nonnull %323, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %661 unwind label %327

325:                                              ; preds = %322
  %326 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %323) #9
  br label %347

327:                                              ; preds = %344, %324
  %328 = landingpad { ptr, i32 }
          cleanup
  br label %347

329:                                              ; preds = %279
  %330 = icmp eq i32 %284, 0
  br i1 %330, label %331, label %344

331:                                              ; preds = %329
  %332 = getelementptr inbounds i8, ptr %0, i64 10127
  %333 = load i8, ptr %332, align 1, !tbaa !53, !range !50, !noundef !51
  %334 = trunc nuw i8 %333 to i1
  br i1 %334, label %335, label %344

335:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #9
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 1 dereferenceable(7) @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(5) @.str.1116)
          to label %336 unwind label %339

336:                                              ; preds = %335
  %337 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %338 unwind label %341

338:                                              ; preds = %336
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #9
  br label %346

339:                                              ; preds = %335
  %340 = landingpad { ptr, i32 }
          cleanup
  br label %343

341:                                              ; preds = %336
  %342 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #9
  br label %343

343:                                              ; preds = %341, %339
  %.pn219 = phi { ptr, i32 } [ %342, %341 ], [ %340, %339 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #9
  br label %347

344:                                              ; preds = %275, %331, %329
  %345 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %23)
          to label %346 unwind label %327

346:                                              ; preds = %338, %344, %316, %307, %298
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #9
  br label %352

347:                                              ; preds = %.loopexit, %.loopexit.split-lp, %271, %343, %327, %325, %321, %312, %303, %290, %226
  %.pn265.pn = phi { ptr, i32 } [ %328, %327 ], [ %326, %325 ], [ %.pn221, %321 ], [ %.pn225, %303 ], [ %.pn223, %312 ], [ %.pn219, %343 ], [ %.pn217, %290 ], [ %227, %226 ], [ %.pn212.pn.pn.pn, %271 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #9
  br label %348

348:                                              ; preds = %347, %224
  %.pn265.pn.pn = phi { ptr, i32 } [ %.pn265.pn, %347 ], [ %225, %224 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  br label %349

349:                                              ; preds = %348, %222
  %.pn265.pn.pn.pn = phi { ptr, i32 } [ %.pn265.pn.pn, %348 ], [ %223, %222 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #9
  br label %353

350:                                              ; preds = %211
  %351 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %352 unwind label %209

352:                                              ; preds = %350, %346
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #9
  br label %427

353:                                              ; preds = %349, %209
  %.pn265.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn265.pn.pn.pn, %349 ], [ %210, %209 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  br label %354

354:                                              ; preds = %353, %207
  %.pn265.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn265.pn.pn.pn.pn, %353 ], [ %208, %207 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #9
  br label %658

355:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #9
  %356 = load ptr, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %38) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef %356, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %357 unwind label %375

357:                                              ; preds = %355
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull @.str.1117)
          to label %358 unwind label %377

358:                                              ; preds = %357
  %359 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %360 unwind label %379

360:                                              ; preds = %358
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %38) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #9
  %361 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.58)
          to label %362 unwind label %170

362:                                              ; preds = %360
  %363 = getelementptr inbounds i8, ptr %66, i64 128
  %364 = load i32, ptr %363, align 8, !tbaa !40
  %365 = icmp eq i32 %364, 11
  br i1 %365, label %366, label %387

366:                                              ; preds = %362
  %367 = getelementptr inbounds i8, ptr %0, i64 8
  %368 = getelementptr inbounds i8, ptr %107, i64 8
  %.sroa.0.0.copyload = load i32, ptr %368, align 8, !tbaa !5
  %369 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8ParsedIR21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %367, i32 %.sroa.0.0.copyload)
          to label %370 unwind label %383

370:                                              ; preds = %366
  %371 = invoke noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL32decoration_flags_signal_volatileERKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(64) %369)
          to label %372 unwind label %383

372:                                              ; preds = %370
  br i1 %371, label %373, label %385

373:                                              ; preds = %372
  %374 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.1118)
          to label %385 unwind label %383

375:                                              ; preds = %355
  %376 = landingpad { ptr, i32 }
          cleanup
  br label %382

377:                                              ; preds = %357
  %378 = landingpad { ptr, i32 }
          cleanup
  br label %381

379:                                              ; preds = %358
  %380 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #9
  br label %381

381:                                              ; preds = %379, %377
  %.pn198 = phi { ptr, i32 } [ %380, %379 ], [ %378, %377 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #9
  br label %382

382:                                              ; preds = %381, %375
  %.pn198.pn = phi { ptr, i32 } [ %.pn198, %381 ], [ %376, %375 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %38) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #9
  br label %658

383:                                              ; preds = %385, %373, %370, %366
  %384 = landingpad { ptr, i32 }
          cleanup
  br label %658

385:                                              ; preds = %373, %372
  %386 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.178)
          to label %401 unwind label %383

387:                                              ; preds = %362
  %.not201 = icmp eq i32 %364, 5349
  %or.cond283 = or i1 %.not, %.not201
  br i1 %or.cond283, label %397, label %388

388:                                              ; preds = %387
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #9
  invoke void @_ZN11spirv_cross11CompilerMSL26get_argument_address_spaceB5cxx11ERKNS_12SPIRVariableE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(176) %107)
          to label %389 unwind label %392

389:                                              ; preds = %388
  %390 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %391 unwind label %394

391:                                              ; preds = %389
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #9
  br label %401

392:                                              ; preds = %388
  %393 = landingpad { ptr, i32 }
          cleanup
  br label %396

394:                                              ; preds = %389
  %395 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #9
  br label %396

396:                                              ; preds = %394, %392
  %.pn202 = phi { ptr, i32 } [ %395, %394 ], [ %393, %392 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #9
  br label %658

397:                                              ; preds = %387
  %398 = icmp eq i32 %364, 4
  %399 = select i1 %398, ptr @.str.179, ptr @.str.178
  %400 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull %399)
          to label %401 unwind label %170

401:                                              ; preds = %385, %391, %397
  %402 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.1119)
          to label %403 unwind label %170

403:                                              ; preds = %401
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #9
  %404 = load ptr, ptr %0, align 8, !tbaa !42
  %405 = getelementptr inbounds i8, ptr %404, i64 152
  %406 = load ptr, ptr %405, align 8
  invoke void %406(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %17, i32 noundef 0)
          to label %407 unwind label %417

407:                                              ; preds = %403
  %408 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %40)
          to label %409 unwind label %419

409:                                              ; preds = %407
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #9
  %410 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.89)
          to label %411 unwind label %170

411:                                              ; preds = %409
  %412 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.1120)
          to label %413 unwind label %170

413:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %8, i1 noundef zeroext true)
          to label %414 unwind label %422

414:                                              ; preds = %413
  %415 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %416 unwind label %424

416:                                              ; preds = %414
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #9
  br label %427

417:                                              ; preds = %403
  %418 = landingpad { ptr, i32 }
          cleanup
  br label %421

419:                                              ; preds = %407
  %420 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #9
  br label %421

421:                                              ; preds = %419, %417
  %.pn204 = phi { ptr, i32 } [ %420, %419 ], [ %418, %417 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #9
  br label %658

422:                                              ; preds = %413
  %423 = landingpad { ptr, i32 }
          cleanup
  br label %426

424:                                              ; preds = %414
  %425 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #9
  br label %426

426:                                              ; preds = %424, %422
  %.pn206 = phi { ptr, i32 } [ %425, %424 ], [ %423, %422 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #9
  br label %658

427:                                              ; preds = %416, %352
  %428 = load ptr, ptr %15, align 8, !tbaa !9
  %429 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %428, ptr noundef nonnull dereferenceable(1) @.str.965) #12
  %430 = icmp eq i32 %429, 0
  br i1 %125, label %431, label %546

431:                                              ; preds = %427
  br i1 %430, label %433, label %432

432:                                              ; preds = %431
  call void @__assert_fail(ptr noundef nonnull @.str.1121, ptr noundef nonnull @.str.25, i32 noundef 10618, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #11
  unreachable

433:                                              ; preds = %431
  %.not246 = icmp eq i32 %12, 0
  br i1 %.not246, label %434, label %435

434:                                              ; preds = %433
  call void @__assert_fail(ptr noundef nonnull @.str.1122, ptr noundef nonnull @.str.25, i32 noundef 10619, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #11
  unreachable

435:                                              ; preds = %433
  br i1 %7, label %437, label %436

436:                                              ; preds = %435
  call void @__assert_fail(ptr noundef nonnull @.str.1123, ptr noundef nonnull @.str.25, i32 noundef 10620, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #11
  unreachable

437:                                              ; preds = %435
  %438 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.1124)
          to label %439 unwind label %170

439:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #9
  %.not247 = icmp eq i32 %.0176, 0
  %440 = load i32, ptr %14, align 4
  %441 = select i1 %.not247, i32 %440, i32 %.0176
  %442 = load ptr, ptr %0, align 8, !tbaa !42
  %443 = getelementptr inbounds i8, ptr %442, i64 48
  %444 = load ptr, ptr %443, align 8
  invoke void %444(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %441, i1 noundef zeroext true)
          to label %445 unwind label %463

445:                                              ; preds = %439
  %446 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %447 unwind label %465

447:                                              ; preds = %445
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #9
  %448 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.55)
          to label %449 unwind label %170

449:                                              ; preds = %447
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %12, i1 noundef zeroext true)
          to label %450 unwind label %468

450:                                              ; preds = %449
  %451 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %452 unwind label %470

452:                                              ; preds = %450
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #9
  br i1 %.0175, label %473, label %453

453:                                              ; preds = %452
  %454 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.55)
          to label %455 unwind label %170

455:                                              ; preds = %453
  %456 = call noundef ptr @_ZN11spirv_cross11CompilerMSL16get_memory_orderEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %5)
  %457 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef %456)
          to label %458 unwind label %170

458:                                              ; preds = %455
  %459 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.55)
          to label %460 unwind label %170

460:                                              ; preds = %458
  %461 = call noundef ptr @_ZN11spirv_cross11CompilerMSL16get_memory_orderEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %6)
  %462 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef %461)
          to label %473 unwind label %170

463:                                              ; preds = %439
  %464 = landingpad { ptr, i32 }
          cleanup
  br label %467

465:                                              ; preds = %445
  %466 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  br label %467

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

468:                                              ; preds = %449
  %469 = landingpad { ptr, i32 }
          cleanup
  br label %472

470:                                              ; preds = %450
  %471 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  br label %472

472:                                              ; preds = %470, %468
  %.pn250 = phi { ptr, i32 } [ %471, %470 ], [ %469, %468 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #9
  br label %658

473:                                              ; preds = %460, %452
  %474 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.53)
          to label %475 unwind label %170

475:                                              ; preds = %473
  br i1 %134, label %483, label %476

476:                                              ; preds = %475
  %477 = load i32, ptr %14, align 4, !tbaa !5
  %478 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %477)
          to label %479 unwind label %170

479:                                              ; preds = %476
  br i1 %.not247, label %483, label %480

480:                                              ; preds = %479
  %481 = add i32 %.0176, 1
  %482 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %481, i32 noundef %.0176)
          to label %483 unwind label %170

483:                                              ; preds = %479, %480, %475
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(3) @.str.1125)
          to label %484 unwind label %170

484:                                              ; preds = %483
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %485 unwind label %170

485:                                              ; preds = %484
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #9
  br i1 %.not247, label %495, label %486

486:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.0176, i1 noundef zeroext true)
          to label %487 unwind label %490

487:                                              ; preds = %486
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 1 dereferenceable(3) @.str.163)
          to label %488 unwind label %492

488:                                              ; preds = %487
  %489 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(32) %45) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #9
  br label %501

490:                                              ; preds = %486
  %491 = landingpad { ptr, i32 }
          cleanup
  br label %494

492:                                              ; preds = %487
  %493 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #9
  br label %494

494:                                              ; preds = %492, %490
  %.pn252 = phi { ptr, i32 } [ %493, %492 ], [ %491, %490 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #9
  br label %545

495:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #9
  %496 = load i32, ptr %14, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %496, i1 noundef zeroext true)
          to label %497 unwind label %499

497:                                              ; preds = %495
  %498 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #9
  br label %501

499:                                              ; preds = %495
  %500 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #9
  br label %545

501:                                              ; preds = %497, %488
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %9, i1 noundef zeroext true)
          to label %502 unwind label %511

502:                                              ; preds = %501
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %503 unwind label %513

503:                                              ; preds = %502
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %9, i1 noundef zeroext true)
          to label %504 unwind label %516

504:                                              ; preds = %503
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_SA_SC_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 1 dereferenceable(9) @.str.1126, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(5) @.str.1127, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(5) @.str.1128, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %505 unwind label %518

505:                                              ; preds = %504
  invoke void @_ZN11spirv_cross12CompilerGLSL14end_scope_declERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %506 unwind label %520

506:                                              ; preds = %505
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #9
  br i1 %.not247, label %529, label %507

507:                                              ; preds = %506
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #9
  %508 = load i32, ptr %14, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %508, i1 noundef zeroext true)
          to label %509 unwind label %524

509:                                              ; preds = %507
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcRS7_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %510 unwind label %526

510:                                              ; preds = %509
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #9
  br label %529

511:                                              ; preds = %501
  %512 = landingpad { ptr, i32 }
          cleanup
  br label %515

513:                                              ; preds = %502
  %514 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  br label %515

515:                                              ; preds = %513, %511
  %.pn254 = phi { ptr, i32 } [ %514, %513 ], [ %512, %511 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #9
  br label %545

516:                                              ; preds = %503
  %517 = landingpad { ptr, i32 }
          cleanup
  br label %523

518:                                              ; preds = %504
  %519 = landingpad { ptr, i32 }
          cleanup
  br label %522

520:                                              ; preds = %505
  %521 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  br label %522

522:                                              ; preds = %520, %518
  %.pn256 = phi { ptr, i32 } [ %521, %520 ], [ %519, %518 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #9
  br label %523

523:                                              ; preds = %522, %516
  %.pn256.pn = phi { ptr, i32 } [ %.pn256, %522 ], [ %517, %516 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #9
  br label %545

524:                                              ; preds = %507
  %525 = landingpad { ptr, i32 }
          cleanup
  br label %528

526:                                              ; preds = %509
  %527 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  br label %528

528:                                              ; preds = %526, %524
  %.pn259 = phi { ptr, i32 } [ %527, %526 ], [ %525, %524 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #9
  br label %545

529:                                              ; preds = %510, %506
  br i1 %134, label %530, label %544

530:                                              ; preds = %529
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %531 unwind label %537

531:                                              ; preds = %530
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.378)
          to label %532 unwind label %537

532:                                              ; preds = %531
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %533 unwind label %537

533:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #9
  %534 = load i32, ptr %14, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %534, i1 noundef zeroext true)
          to label %535 unwind label %539

535:                                              ; preds = %533
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef nonnull align 1 dereferenceable(7) @.str.924)
          to label %536 unwind label %541

536:                                              ; preds = %535
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %544 unwind label %537

537:                                              ; preds = %536, %532, %531, %530
  %538 = landingpad { ptr, i32 }
          cleanup
  br label %545

539:                                              ; preds = %533
  %540 = landingpad { ptr, i32 }
          cleanup
  br label %543

541:                                              ; preds = %535
  %542 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #9
  br label %543

543:                                              ; preds = %541, %539
  %.pn261 = phi { ptr, i32 } [ %542, %541 ], [ %540, %539 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #9
  br label %545

544:                                              ; preds = %536, %529
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #9
  br label %656

545:                                              ; preds = %543, %537, %528, %523, %515, %499, %494
  %.pn263 = phi { ptr, i32 } [ %538, %537 ], [ %.pn261, %543 ], [ %.pn259, %528 ], [ %.pn256.pn, %523 ], [ %.pn254, %515 ], [ %.pn252, %494 ], [ %500, %499 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #9
  br label %658

546:                                              ; preds = %427
  br i1 %430, label %547, label %548

547:                                              ; preds = %546
  call void @__assert_fail(ptr noundef nonnull @.str.1129, ptr noundef nonnull @.str.25, i32 noundef 10674, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj) #11
  unreachable

548:                                              ; preds = %546
  br i1 %124, label %549, label %566

549:                                              ; preds = %548
  %550 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.55)
          to label %551 unwind label %170

551:                                              ; preds = %549
  br i1 %11, label %552, label %557

552:                                              ; preds = %551
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #9
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, i32 noundef %9) #9
  %553 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %53)
          to label %554 unwind label %555

554:                                              ; preds = %552
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #9
  br label %566

555:                                              ; preds = %552
  %556 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #9
  br label %658

557:                                              ; preds = %551
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.0174, i32 noundef %9)
          to label %558 unwind label %561

558:                                              ; preds = %557
  %559 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %560 unwind label %563

560:                                              ; preds = %558
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #9
  br label %566

561:                                              ; preds = %557
  %562 = landingpad { ptr, i32 }
          cleanup
  br label %565

563:                                              ; preds = %558
  %564 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  br label %565

565:                                              ; preds = %563, %561
  %.pn228 = phi { ptr, i32 } [ %564, %563 ], [ %562, %561 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #9
  br label %658

566:                                              ; preds = %554, %560, %548
  %.not230 = icmp eq i32 %12, 0
  br i1 %.not230, label %580, label %567

567:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %12, i1 noundef zeroext true)
          to label %568 unwind label %572

568:                                              ; preds = %567
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %569 unwind label %574

569:                                              ; preds = %568
  %570 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %571 unwind label %576

571:                                              ; preds = %569
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #9
  br label %580

572:                                              ; preds = %567
  %573 = landingpad { ptr, i32 }
          cleanup
  br label %579

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

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

578:                                              ; preds = %576, %574
  %.pn231 = phi { ptr, i32 } [ %577, %576 ], [ %575, %574 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #9
  br label %579

579:                                              ; preds = %578, %572
  %.pn231.pn = phi { ptr, i32 } [ %.pn231, %578 ], [ %573, %572 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #9
  br label %658

580:                                              ; preds = %571, %566
  br i1 %.0175, label %609, label %581

581:                                              ; preds = %580
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %59) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %59) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull @.str.55, ptr noundef nonnull align 1 dereferenceable(1) %59)
          to label %582 unwind label %593

582:                                              ; preds = %581
  %583 = call noundef ptr @_ZN11spirv_cross11CompilerMSL16get_memory_orderEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %5)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef %583)
          to label %584 unwind label %595

584:                                              ; preds = %582
  %585 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %586 unwind label %597

586:                                              ; preds = %584
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %59) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #9
  br i1 %7, label %587, label %609

587:                                              ; preds = %586
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %62) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull @.str.55, ptr noundef nonnull align 1 dereferenceable(1) %62)
          to label %588 unwind label %601

588:                                              ; preds = %587
  %589 = call noundef ptr @_ZN11spirv_cross11CompilerMSL16get_memory_orderEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %6)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef %589)
          to label %590 unwind label %603

590:                                              ; preds = %588
  %591 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %592 unwind label %605

592:                                              ; preds = %590
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %62) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #9
  br label %609

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

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

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

599:                                              ; preds = %597, %595
  %.pn234 = phi { ptr, i32 } [ %598, %597 ], [ %596, %595 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  br label %600

600:                                              ; preds = %599, %593
  %.pn234.pn = phi { ptr, i32 } [ %.pn234, %599 ], [ %594, %593 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %59) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #9
  br label %658

601:                                              ; preds = %587
  %602 = landingpad { ptr, i32 }
          cleanup
  br label %608

603:                                              ; preds = %588
  %604 = landingpad { ptr, i32 }
          cleanup
  br label %607

605:                                              ; preds = %590
  %606 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  br label %607

607:                                              ; preds = %605, %603
  %.pn237 = phi { ptr, i32 } [ %606, %605 ], [ %604, %603 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #9
  br label %608

608:                                              ; preds = %607, %601
  %.pn237.pn = phi { ptr, i32 } [ %.pn237, %607 ], [ %602, %601 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %62) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #9
  br label %658

609:                                              ; preds = %586, %592, %580
  %610 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.53)
          to label %611 unwind label %170

611:                                              ; preds = %609
  br i1 %.0175, label %612, label %614

612:                                              ; preds = %611
  %613 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.163)
          to label %614 unwind label %170

614:                                              ; preds = %612, %611
  br i1 %134, label %615, label %642

615:                                              ; preds = %614
  %616 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.921)
          to label %617 unwind label %170

617:                                              ; preds = %615
  %618 = load ptr, ptr %15, align 8, !tbaa !9
  %619 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %618, ptr noundef nonnull dereferenceable(1) @.str.968) #12
  %.not240 = icmp eq i32 %619, 0
  br i1 %.not240, label %638, label %620

620:                                              ; preds = %617
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #9
  %621 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
          to label %622 unwind label %630

622:                                              ; preds = %620
  %623 = load ptr, ptr %0, align 8, !tbaa !42
  %624 = getelementptr inbounds i8, ptr %623, i64 152
  %625 = load ptr, ptr %624, align 8
  invoke void %625(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %621, i32 noundef 0)
          to label %626 unwind label %630

626:                                              ; preds = %622
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 1 dereferenceable(3) @.str.1130)
          to label %627 unwind label %632

627:                                              ; preds = %626
  %628 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %629 unwind label %634

629:                                              ; preds = %627
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #9
  br label %640

630:                                              ; preds = %622, %620
  %631 = landingpad { ptr, i32 }
          cleanup
  br label %637

632:                                              ; preds = %626
  %633 = landingpad { ptr, i32 }
          cleanup
  br label %636

634:                                              ; preds = %627
  %635 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #9
  br label %636

636:                                              ; preds = %634, %632
  %.pn241 = phi { ptr, i32 } [ %635, %634 ], [ %633, %632 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #9
  br label %637

637:                                              ; preds = %636, %630
  %.pn241.pn = phi { ptr, i32 } [ %.pn241, %636 ], [ %631, %630 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #9
  br label %658

638:                                              ; preds = %617
  %639 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.1131)
          to label %640 unwind label %170

640:                                              ; preds = %638, %629
  %641 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.53)
          to label %642 unwind label %170

642:                                              ; preds = %640, %614
  %643 = load i32, ptr %70, align 8, !tbaa !39
  %.not244 = icmp eq i32 %.0174, %643
  br i1 %.not244, label %649, label %644

644:                                              ; preds = %642
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %68, i32 noundef %.0174, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %645 unwind label %647

645:                                              ; preds = %644
  %646 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %65) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #9
  br label %649

647:                                              ; preds = %644
  %648 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #9
  br label %658

649:                                              ; preds = %645, %642
  %650 = load ptr, ptr %15, align 8, !tbaa !9
  %651 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %650, ptr noundef nonnull dereferenceable(1) @.str.968) #12
  %.not245 = icmp eq i32 %651, 0
  br i1 %.not245, label %655, label %652

652:                                              ; preds = %649
  %653 = load i32, ptr %14, align 4, !tbaa !5
  %654 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %653, ptr noundef nonnull align 8 dereferenceable(32) %16, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %656 unwind label %170

655:                                              ; preds = %649
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %656 unwind label %170

656:                                              ; preds = %652, %655, %544
  invoke void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %657 unwind label %170

657:                                              ; preds = %656
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %17) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %17) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #9
  ret void

658:                                              ; preds = %121, %170, %182, %194, %354, %382, %383, %396, %421, %426, %467, %472, %545, %555, %565, %579, %600, %608, %637, %647, %160, %154, %152, %119
  %.pn265.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %120, %119 ], [ %122, %121 ], [ %153, %152 ], [ %.pn265.pn.pn.pn.pn.pn, %354 ], [ %171, %170 ], [ %.pn263, %545 ], [ %.pn250, %472 ], [ %.pn248, %467 ], [ %648, %647 ], [ %.pn241.pn, %637 ], [ %.pn237.pn, %608 ], [ %.pn234.pn, %600 ], [ %.pn231.pn, %579 ], [ %556, %555 ], [ %.pn228, %565 ], [ %.pn206, %426 ], [ %.pn204, %421 ], [ %384, %383 ], [ %.pn202, %396 ], [ %.pn198.pn, %382 ], [ %.pn196, %182 ], [ %.pn193, %194 ], [ %.pn, %160 ], [ %155, %154 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %17) #9
  br label %659

659:                                              ; preds = %658, %117
  %.pn265.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn265.pn.pn.pn.pn.pn.pn.pn.pn.pn, %658 ], [ %118, %117 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %17) #9
  br label %660

660:                                              ; preds = %78, %93, %102, %659, %80, %76
  %.pn277.pn.pn.pn = phi { ptr, i32 } [ %77, %76 ], [ %79, %78 ], [ %81, %80 ], [ %94, %93 ], [ %103, %102 ], [ %.pn265.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %659 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #9
  resume { ptr, i32 } %.pn277.pn.pn.pn

661:                                              ; preds = %324, %101
  unreachable
}

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

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

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

declare noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #8

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL14end_scope_declERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

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

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

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

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

declare void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #4

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

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

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


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