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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.std::pair.444" = type <{ %"struct.std::__detail::_Node_iterator.446", i8, [7 x i8] }>
%"struct.std::__detail::_Node_iterator.446" = type { %"struct.std::__detail::_Node_iterator_base.447" }
%"struct.std::__detail::_Node_iterator_base.447" = type { ptr }
%"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 }
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.517", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.413"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.413"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.517" = type { %"class.spirv_cross::VectorView.518", i64, %"class.spirv_cross::AlignedBuffer.519" }
%"class.spirv_cross::VectorView.518" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.519" = type { [32 x 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::SPIRExpression" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.413", %"class.std::__cxx11::basic_string", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.413", i8, i8, i8, i8, [4 x i8], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", i32, [4 x i8] }>

@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1014 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1028 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1133 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1134 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1135 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1136 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1137 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1138 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1139 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1140 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1141 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1142 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1143 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1144 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1145 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1146 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1147 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1148 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1149 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1150 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1151 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1152 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1153 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1154 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1155 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1156 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1157 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.1158 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1159 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1160 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1161 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1162 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1163 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1164 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1165 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1166 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1167 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1168 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1169 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1170 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1171 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1172 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1173 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1174 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1175 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1176 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1177 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1178 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1179 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1180 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1181 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1182 = external hidden unnamed_addr constant [5 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: 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 noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) #2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare 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 { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #2

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

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

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) #2

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

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

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_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) #2

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

declare void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_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) #2

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

declare void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360), i32 noundef, i32 noundef) #5 align 2

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

declare void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, ptr noundef) #2

declare void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef) #2

declare void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #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) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL29storage_class_array_is_threadN3spv12StorageClassE(i32 noundef) #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca i32, align 4
  %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 ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca ptr, 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 i32, align 4
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca i32, align 4
  %49 = alloca ptr, align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca ptr, align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca i32, align 4
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca i32, align 4
  %61 = alloca ptr, 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 ptr, align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca ptr, align 8
  %76 = alloca i8, align 1
  %77 = alloca %"struct.std::pair.444", align 8
  %78 = alloca ptr, align 8
  %79 = alloca i32, align 4
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store i32 %2, ptr %9, align 4, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !9
  store ptr %4, ptr %11, align 8, !tbaa !5
  store i32 %5, ptr %12, align 4, !tbaa !9
  %82 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  %83 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %83, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  %84 = load i32, ptr %13, align 4, !tbaa !11
  %85 = load ptr, ptr %11, align 8, !tbaa !5
  %86 = load i32, ptr %12, align 4, !tbaa !9
  %87 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL38get_integer_width_for_glsl_instructionE10GLSLstd450PKjj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %84, ptr noundef %85, i32 noundef %86)
  store i32 %87, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  %88 = load i32, ptr %14, align 4, !tbaa !9
  %89 = call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %88)
  store i32 %89, ptr %15, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  %90 = load i32, ptr %14, align 4, !tbaa !9
  %91 = call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %90)
  store i32 %91, ptr %16, align 4, !tbaa !13
  %92 = load i32, ptr %13, align 4, !tbaa !11
  %93 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL20get_remapped_glsl_opE10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %92)
  store i32 %93, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %94 = load i32, ptr %8, align 4, !tbaa !9
  %95 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %94)
  store ptr %95, ptr %17, align 8, !tbaa !5
  %96 = load i32, ptr %13, align 4, !tbaa !11
  switch i32 %96, label %1296 [
    i32 19, label %97
    i32 20, label %137
    i32 21, label %177
    i32 25, label %217
    i32 32, label %282
    i32 2, label %288
    i32 73, label %294
    i32 74, label %308
    i32 75, label %316
    i32 54, label %324
    i32 55, label %330
    i32 56, label %336
    i32 57, label %342
    i32 58, label %348
    i32 63, label %376
    i32 64, label %382
    i32 60, label %388
    i32 61, label %394
    i32 62, label %400
    i32 59, label %428
    i32 65, label %434
    i32 34, label %440
    i32 37, label %466
    i32 40, label %491
    i32 43, label %516
    i32 79, label %547
    i32 80, label %572
    i32 81, label %597
    i32 76, label %628
    i32 77, label %737
    i32 78, label %863
    i32 67, label %989
    i32 66, label %1052
    i32 69, label %1073
    i32 71, label %1112
    i32 72, label %1134
    i32 70, label %1159
    i32 35, label %1184
    i32 51, label %1184
    i32 26, label %1287
  ]

97:                                               ; preds = %6
  %98 = load ptr, ptr %17, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %98, i32 0, i32 2
  %100 = load i32, ptr %99, align 8, !tbaa !15
  %101 = icmp eq i32 %100, 12
  br i1 %101, label %102, label %130

102:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #6
  %103 = load ptr, ptr %11, align 8, !tbaa !5
  %104 = getelementptr inbounds i32, ptr %103, i64 0
  %105 = load i32, ptr %104, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %105, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA17_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 1 dereferenceable(17) @.str.1133, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %106 unwind label %121

106:                                              ; preds = %102
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #6
  %107 = load i32, ptr %8, align 4, !tbaa !9
  %108 = load i32, ptr %9, align 4, !tbaa !9
  %109 = load ptr, ptr %11, align 8, !tbaa !5
  %110 = getelementptr inbounds i32, ptr %109, i64 0
  %111 = load i32, ptr %110, align 4, !tbaa !9
  %112 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %111)
          to label %113 unwind label %125

113:                                              ; preds = %106
  %114 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %107, i32 noundef %108, ptr noundef nonnull align 8 dereferenceable(32) %18, i1 noundef zeroext %112, i1 noundef zeroext false)
          to label %115 unwind label %125

115:                                              ; preds = %113
  %116 = load i32, ptr %9, align 4, !tbaa !9
  %117 = load ptr, ptr %11, align 8, !tbaa !5
  %118 = getelementptr inbounds i32, ptr %117, i64 0
  %119 = load i32, ptr %118, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %116, i32 noundef %119)
          to label %120 unwind label %125

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

121:                                              ; preds = %102
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %20, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #6
  br label %129

125:                                              ; preds = %115, %113, %106
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %20, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  br label %129

129:                                              ; preds = %125, %121
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #6
  br label %1303

130:                                              ; preds = %97
  %131 = load i32, ptr %8, align 4, !tbaa !9
  %132 = load i32, ptr %9, align 4, !tbaa !9
  %133 = load ptr, ptr %11, align 8, !tbaa !5
  %134 = getelementptr inbounds i32, ptr %133, i64 0
  %135 = load i32, ptr %134, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %131, i32 noundef %132, i32 noundef %135, ptr noundef @.str.1134)
  br label %136

136:                                              ; preds = %130, %120
  br label %1302

137:                                              ; preds = %6
  %138 = load ptr, ptr %17, align 8, !tbaa !5
  %139 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %138, i32 0, i32 2
  %140 = load i32, ptr %139, align 8, !tbaa !15
  %141 = icmp eq i32 %140, 12
  br i1 %141, label %142, label %170

142:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #6
  %143 = load ptr, ptr %11, align 8, !tbaa !5
  %144 = getelementptr inbounds i32, ptr %143, i64 0
  %145 = load i32, ptr %144, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %145, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA17_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 1 dereferenceable(17) @.str.1135, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %146 unwind label %161

146:                                              ; preds = %142
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #6
  %147 = load i32, ptr %8, align 4, !tbaa !9
  %148 = load i32, ptr %9, align 4, !tbaa !9
  %149 = load ptr, ptr %11, align 8, !tbaa !5
  %150 = getelementptr inbounds i32, ptr %149, i64 0
  %151 = load i32, ptr %150, align 4, !tbaa !9
  %152 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %151)
          to label %153 unwind label %165

153:                                              ; preds = %146
  %154 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %147, i32 noundef %148, ptr noundef nonnull align 8 dereferenceable(32) %22, i1 noundef zeroext %152, i1 noundef zeroext false)
          to label %155 unwind label %165

155:                                              ; preds = %153
  %156 = load i32, ptr %9, align 4, !tbaa !9
  %157 = load ptr, ptr %11, align 8, !tbaa !5
  %158 = getelementptr inbounds i32, ptr %157, i64 0
  %159 = load i32, ptr %158, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %156, i32 noundef %159)
          to label %160 unwind label %165

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

161:                                              ; preds = %142
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %20, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #6
  br label %169

165:                                              ; preds = %155, %153, %146
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %20, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  br label %169

169:                                              ; preds = %165, %161
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  br label %1303

170:                                              ; preds = %137
  %171 = load i32, ptr %8, align 4, !tbaa !9
  %172 = load i32, ptr %9, align 4, !tbaa !9
  %173 = load ptr, ptr %11, align 8, !tbaa !5
  %174 = getelementptr inbounds i32, ptr %173, i64 0
  %175 = load i32, ptr %174, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %171, i32 noundef %172, i32 noundef %175, ptr noundef @.str.1136)
  br label %176

176:                                              ; preds = %170, %160
  br label %1302

177:                                              ; preds = %6
  %178 = load ptr, ptr %17, align 8, !tbaa !5
  %179 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %178, i32 0, i32 2
  %180 = load i32, ptr %179, align 8, !tbaa !15
  %181 = icmp eq i32 %180, 12
  br i1 %181, label %182, label %210

182:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #6
  %183 = load ptr, ptr %11, align 8, !tbaa !5
  %184 = getelementptr inbounds i32, ptr %183, i64 0
  %185 = load i32, ptr %184, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %185, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA17_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 1 dereferenceable(17) @.str.1137, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %186 unwind label %201

186:                                              ; preds = %182
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  %187 = load i32, ptr %8, align 4, !tbaa !9
  %188 = load i32, ptr %9, align 4, !tbaa !9
  %189 = load ptr, ptr %11, align 8, !tbaa !5
  %190 = getelementptr inbounds i32, ptr %189, i64 0
  %191 = load i32, ptr %190, align 4, !tbaa !9
  %192 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %191)
          to label %193 unwind label %205

193:                                              ; preds = %186
  %194 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %187, i32 noundef %188, ptr noundef nonnull align 8 dereferenceable(32) %24, i1 noundef zeroext %192, i1 noundef zeroext false)
          to label %195 unwind label %205

195:                                              ; preds = %193
  %196 = load i32, ptr %9, align 4, !tbaa !9
  %197 = load ptr, ptr %11, align 8, !tbaa !5
  %198 = getelementptr inbounds i32, ptr %197, i64 0
  %199 = load i32, ptr %198, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %196, i32 noundef %199)
          to label %200 unwind label %205

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

201:                                              ; preds = %182
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %20, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  br label %209

205:                                              ; preds = %195, %193, %186
  %206 = landingpad { ptr, i32 }
          cleanup
  %207 = extractvalue { ptr, i32 } %206, 0
  store ptr %207, ptr %20, align 8
  %208 = extractvalue { ptr, i32 } %206, 1
  store i32 %208, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  br label %209

209:                                              ; preds = %205, %201
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  br label %1303

210:                                              ; preds = %177
  %211 = load i32, ptr %8, align 4, !tbaa !9
  %212 = load i32, ptr %9, align 4, !tbaa !9
  %213 = load ptr, ptr %11, align 8, !tbaa !5
  %214 = getelementptr inbounds i32, ptr %213, i64 0
  %215 = load i32, ptr %214, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %211, i32 noundef %212, i32 noundef %215, ptr noundef @.str.1138)
  br label %216

216:                                              ; preds = %210, %200
  br label %1302

217:                                              ; preds = %6
  %218 = load ptr, ptr %17, align 8, !tbaa !5
  %219 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %218, i32 0, i32 2
  %220 = load i32, ptr %219, align 8, !tbaa !15
  %221 = icmp eq i32 %220, 12
  br i1 %221, label %222, label %272

222:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #6
  %223 = load ptr, ptr %11, align 8, !tbaa !5
  %224 = getelementptr inbounds i32, ptr %223, i64 0
  %225 = load i32, ptr %224, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %225, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #6
  %226 = load ptr, ptr %11, align 8, !tbaa !5
  %227 = getelementptr inbounds i32, ptr %226, i64 1
  %228 = load i32, ptr %227, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %228, i1 noundef zeroext true)
          to label %229 unwind label %258

229:                                              ; preds = %222
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 1 dereferenceable(18) @.str.1139, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %230 unwind label %262

230:                                              ; preds = %229
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #6
  %231 = load i32, ptr %8, align 4, !tbaa !9
  %232 = load i32, ptr %9, align 4, !tbaa !9
  %233 = load ptr, ptr %11, align 8, !tbaa !5
  %234 = getelementptr inbounds i32, ptr %233, i64 0
  %235 = load i32, ptr %234, align 4, !tbaa !9
  %236 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %235)
          to label %237 unwind label %267

237:                                              ; preds = %230
  br i1 %236, label %238, label %244

238:                                              ; preds = %237
  %239 = load ptr, ptr %11, align 8, !tbaa !5
  %240 = getelementptr inbounds i32, ptr %239, i64 1
  %241 = load i32, ptr %240, align 4, !tbaa !9
  %242 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %241)
          to label %243 unwind label %267

243:                                              ; preds = %238
  br label %244

244:                                              ; preds = %243, %237
  %245 = phi i1 [ false, %237 ], [ %242, %243 ]
  %246 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %231, i32 noundef %232, ptr noundef nonnull align 8 dereferenceable(32) %26, i1 noundef zeroext %245, i1 noundef zeroext false)
          to label %247 unwind label %267

247:                                              ; preds = %244
  %248 = load i32, ptr %9, align 4, !tbaa !9
  %249 = load ptr, ptr %11, align 8, !tbaa !5
  %250 = getelementptr inbounds i32, ptr %249, i64 0
  %251 = load i32, ptr %250, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %248, i32 noundef %251)
          to label %252 unwind label %267

252:                                              ; preds = %247
  %253 = load i32, ptr %9, align 4, !tbaa !9
  %254 = load ptr, ptr %11, align 8, !tbaa !5
  %255 = getelementptr inbounds i32, ptr %254, i64 1
  %256 = load i32, ptr %255, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %253, i32 noundef %256)
          to label %257 unwind label %267

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

258:                                              ; preds = %222
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %20, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %21, align 4
  br label %266

262:                                              ; preds = %229
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %20, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  br label %266

266:                                              ; preds = %262, %258
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #6
  br label %271

267:                                              ; preds = %252, %247, %244, %238, %230
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %20, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  br label %271

271:                                              ; preds = %267, %266
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #6
  br label %1303

272:                                              ; preds = %217
  %273 = load i32, ptr %8, align 4, !tbaa !9
  %274 = load i32, ptr %9, align 4, !tbaa !9
  %275 = load ptr, ptr %11, align 8, !tbaa !5
  %276 = getelementptr inbounds i32, ptr %275, i64 0
  %277 = load i32, ptr %276, align 4, !tbaa !9
  %278 = load ptr, ptr %11, align 8, !tbaa !5
  %279 = getelementptr inbounds i32, ptr %278, i64 1
  %280 = load i32, ptr %279, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %273, i32 noundef %274, i32 noundef %277, i32 noundef %280, ptr noundef @.str.1140)
  br label %281

281:                                              ; preds = %272, %257
  br label %1302

282:                                              ; preds = %6
  %283 = load i32, ptr %8, align 4, !tbaa !9
  %284 = load i32, ptr %9, align 4, !tbaa !9
  %285 = load ptr, ptr %11, align 8, !tbaa !5
  %286 = getelementptr inbounds i32, ptr %285, i64 0
  %287 = load i32, ptr %286, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %283, i32 noundef %284, i32 noundef %287, ptr noundef @.str.1141)
  br label %1302

288:                                              ; preds = %6
  %289 = load i32, ptr %8, align 4, !tbaa !9
  %290 = load i32, ptr %9, align 4, !tbaa !9
  %291 = load ptr, ptr %11, align 8, !tbaa !5
  %292 = getelementptr inbounds i32, ptr %291, i64 0
  %293 = load i32, ptr %292, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %289, i32 noundef %290, i32 noundef %293, ptr noundef @.str.1142)
  br label %1302

294:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %295 = load ptr, ptr %11, align 8, !tbaa !5
  %296 = getelementptr inbounds i32, ptr %295, i64 0
  %297 = load i32, ptr %296, align 4, !tbaa !9
  %298 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %297)
  %299 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %298, i32 0, i32 2
  %300 = load i32, ptr %299, align 8, !tbaa !15
  store i32 %300, ptr %29, align 4, !tbaa !13
  %301 = load i32, ptr %8, align 4, !tbaa !9
  %302 = load i32, ptr %9, align 4, !tbaa !9
  %303 = load ptr, ptr %11, align 8, !tbaa !5
  %304 = getelementptr inbounds i32, ptr %303, i64 0
  %305 = load i32, ptr %304, align 4, !tbaa !9
  %306 = load i32, ptr %29, align 4, !tbaa !13
  %307 = load i32, ptr %29, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %301, i32 noundef %302, i32 noundef %305, ptr noundef @.str.1143, i32 noundef %306, i32 noundef %307)
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  br label %1302

308:                                              ; preds = %6
  %309 = load i32, ptr %8, align 4, !tbaa !9
  %310 = load i32, ptr %9, align 4, !tbaa !9
  %311 = load ptr, ptr %11, align 8, !tbaa !5
  %312 = getelementptr inbounds i32, ptr %311, i64 0
  %313 = load i32, ptr %312, align 4, !tbaa !9
  %314 = load i32, ptr %15, align 4, !tbaa !13
  %315 = load i32, ptr %15, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %309, i32 noundef %310, i32 noundef %313, ptr noundef @.str.1144, i32 noundef %314, i32 noundef %315)
  br label %1302

316:                                              ; preds = %6
  %317 = load i32, ptr %8, align 4, !tbaa !9
  %318 = load i32, ptr %9, align 4, !tbaa !9
  %319 = load ptr, ptr %11, align 8, !tbaa !5
  %320 = getelementptr inbounds i32, ptr %319, i64 0
  %321 = load i32, ptr %320, align 4, !tbaa !9
  %322 = load i32, ptr %16, align 4, !tbaa !13
  %323 = load i32, ptr %16, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %317, i32 noundef %318, i32 noundef %321, ptr noundef @.str.1145, i32 noundef %322, i32 noundef %323)
  br label %1302

324:                                              ; preds = %6
  %325 = load i32, ptr %8, align 4, !tbaa !9
  %326 = load i32, ptr %9, align 4, !tbaa !9
  %327 = load ptr, ptr %11, align 8, !tbaa !5
  %328 = getelementptr inbounds i32, ptr %327, i64 0
  %329 = load i32, ptr %328, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %325, i32 noundef %326, i32 noundef %329, ptr noundef @.str.1146)
  br label %1302

330:                                              ; preds = %6
  %331 = load i32, ptr %8, align 4, !tbaa !9
  %332 = load i32, ptr %9, align 4, !tbaa !9
  %333 = load ptr, ptr %11, align 8, !tbaa !5
  %334 = getelementptr inbounds i32, ptr %333, i64 0
  %335 = load i32, ptr %334, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %331, i32 noundef %332, i32 noundef %335, ptr noundef @.str.1147)
  br label %1302

336:                                              ; preds = %6
  %337 = load i32, ptr %8, align 4, !tbaa !9
  %338 = load i32, ptr %9, align 4, !tbaa !9
  %339 = load ptr, ptr %11, align 8, !tbaa !5
  %340 = getelementptr inbounds i32, ptr %339, i64 0
  %341 = load i32, ptr %340, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %337, i32 noundef %338, i32 noundef %341, ptr noundef @.str.1148)
  br label %1302

342:                                              ; preds = %6
  %343 = load i32, ptr %8, align 4, !tbaa !9
  %344 = load i32, ptr %9, align 4, !tbaa !9
  %345 = load ptr, ptr %11, align 8, !tbaa !5
  %346 = getelementptr inbounds i32, ptr %345, i64 0
  %347 = load i32, ptr %346, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %343, i32 noundef %344, i32 noundef %347, ptr noundef @.str.1149)
  br label %1302

348:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #6
  %349 = load ptr, ptr %11, align 8, !tbaa !5
  %350 = getelementptr inbounds i32, ptr %349, i64 0
  %351 = load i32, ptr %350, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %351, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 1 dereferenceable(21) @.str.1150, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %352 unwind label %367

352:                                              ; preds = %348
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #6
  %353 = load i32, ptr %8, align 4, !tbaa !9
  %354 = load i32, ptr %9, align 4, !tbaa !9
  %355 = load ptr, ptr %11, align 8, !tbaa !5
  %356 = getelementptr inbounds i32, ptr %355, i64 0
  %357 = load i32, ptr %356, align 4, !tbaa !9
  %358 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %357)
          to label %359 unwind label %371

359:                                              ; preds = %352
  %360 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %353, i32 noundef %354, ptr noundef nonnull align 8 dereferenceable(32) %30, i1 noundef zeroext %358, i1 noundef zeroext false)
          to label %361 unwind label %371

361:                                              ; preds = %359
  %362 = load i32, ptr %9, align 4, !tbaa !9
  %363 = load ptr, ptr %11, align 8, !tbaa !5
  %364 = getelementptr inbounds i32, ptr %363, i64 0
  %365 = load i32, ptr %364, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %362, i32 noundef %365)
          to label %366 unwind label %371

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

367:                                              ; preds = %348
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %20, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #6
  br label %375

371:                                              ; preds = %361, %359, %352
  %372 = landingpad { ptr, i32 }
          cleanup
  %373 = extractvalue { ptr, i32 } %372, 0
  store ptr %373, ptr %20, align 8
  %374 = extractvalue { ptr, i32 } %372, 1
  store i32 %374, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  br label %375

375:                                              ; preds = %371, %367
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #6
  br label %1303

376:                                              ; preds = %6
  %377 = load i32, ptr %8, align 4, !tbaa !9
  %378 = load i32, ptr %9, align 4, !tbaa !9
  %379 = load ptr, ptr %11, align 8, !tbaa !5
  %380 = getelementptr inbounds i32, ptr %379, i64 0
  %381 = load i32, ptr %380, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %377, i32 noundef %378, i32 noundef %381, ptr noundef @.str.1151)
  br label %1302

382:                                              ; preds = %6
  %383 = load i32, ptr %8, align 4, !tbaa !9
  %384 = load i32, ptr %9, align 4, !tbaa !9
  %385 = load ptr, ptr %11, align 8, !tbaa !5
  %386 = getelementptr inbounds i32, ptr %385, i64 0
  %387 = load i32, ptr %386, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %383, i32 noundef %384, i32 noundef %387, ptr noundef @.str.1152)
  br label %1302

388:                                              ; preds = %6
  %389 = load i32, ptr %8, align 4, !tbaa !9
  %390 = load i32, ptr %9, align 4, !tbaa !9
  %391 = load ptr, ptr %11, align 8, !tbaa !5
  %392 = getelementptr inbounds i32, ptr %391, i64 0
  %393 = load i32, ptr %392, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %389, i32 noundef %390, i32 noundef %393, ptr noundef @.str.1153)
  br label %1302

394:                                              ; preds = %6
  %395 = load i32, ptr %8, align 4, !tbaa !9
  %396 = load i32, ptr %9, align 4, !tbaa !9
  %397 = load ptr, ptr %11, align 8, !tbaa !5
  %398 = getelementptr inbounds i32, ptr %397, i64 0
  %399 = load i32, ptr %398, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %395, i32 noundef %396, i32 noundef %399, ptr noundef @.str.1154)
  br label %1302

400:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #6
  %401 = load ptr, ptr %11, align 8, !tbaa !5
  %402 = getelementptr inbounds i32, ptr %401, i64 0
  %403 = load i32, ptr %402, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %403, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA23_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 1 dereferenceable(23) @.str.1155, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %404 unwind label %419

404:                                              ; preds = %400
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #6
  %405 = load i32, ptr %8, align 4, !tbaa !9
  %406 = load i32, ptr %9, align 4, !tbaa !9
  %407 = load ptr, ptr %11, align 8, !tbaa !5
  %408 = getelementptr inbounds i32, ptr %407, i64 0
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %409)
          to label %411 unwind label %423

411:                                              ; preds = %404
  %412 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %405, i32 noundef %406, ptr noundef nonnull align 8 dereferenceable(32) %32, i1 noundef zeroext %410, i1 noundef zeroext false)
          to label %413 unwind label %423

413:                                              ; preds = %411
  %414 = load i32, ptr %9, align 4, !tbaa !9
  %415 = load ptr, ptr %11, align 8, !tbaa !5
  %416 = getelementptr inbounds i32, ptr %415, i64 0
  %417 = load i32, ptr %416, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %414, i32 noundef %417)
          to label %418 unwind label %423

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

419:                                              ; preds = %400
  %420 = landingpad { ptr, i32 }
          cleanup
  %421 = extractvalue { ptr, i32 } %420, 0
  store ptr %421, ptr %20, align 8
  %422 = extractvalue { ptr, i32 } %420, 1
  store i32 %422, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #6
  br label %427

423:                                              ; preds = %413, %411, %404
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %20, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #6
  br label %427

427:                                              ; preds = %423, %419
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #6
  br label %1303

428:                                              ; preds = %6
  %429 = load i32, ptr %8, align 4, !tbaa !9
  %430 = load i32, ptr %9, align 4, !tbaa !9
  %431 = load ptr, ptr %11, align 8, !tbaa !5
  %432 = getelementptr inbounds i32, ptr %431, i64 0
  %433 = load i32, ptr %432, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %429, i32 noundef %430, i32 noundef %433, ptr noundef @.str.1156)
  br label %1302

434:                                              ; preds = %6
  %435 = load i32, ptr %8, align 4, !tbaa !9
  %436 = load i32, ptr %9, align 4, !tbaa !9
  %437 = load ptr, ptr %11, align 8, !tbaa !5
  %438 = getelementptr inbounds i32, ptr %437, i64 0
  %439 = load i32, ptr %438, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %435, i32 noundef %436, i32 noundef %439, ptr noundef @.str.1157)
  br label %1302

440:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %441 = load i32, ptr %8, align 4, !tbaa !9
  %442 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %441)
  store ptr %442, ptr %34, align 8, !tbaa !5
  %443 = load ptr, ptr %34, align 8, !tbaa !5
  %444 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %443, i32 0, i32 5
  %445 = load i32, ptr %444, align 4, !tbaa !42
  switch i32 %445, label %464 [
    i32 2, label %446
    i32 3, label %452
    i32 4, label %458
  ]

446:                                              ; preds = %440
  %447 = load i32, ptr %8, align 4, !tbaa !9
  %448 = load i32, ptr %9, align 4, !tbaa !9
  %449 = load ptr, ptr %11, align 8, !tbaa !5
  %450 = getelementptr inbounds i32, ptr %449, i64 0
  %451 = load i32, ptr %450, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %447, i32 noundef %448, i32 noundef %451, ptr noundef @.str.1158)
  br label %465

452:                                              ; preds = %440
  %453 = load i32, ptr %8, align 4, !tbaa !9
  %454 = load i32, ptr %9, align 4, !tbaa !9
  %455 = load ptr, ptr %11, align 8, !tbaa !5
  %456 = getelementptr inbounds i32, ptr %455, i64 0
  %457 = load i32, ptr %456, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %453, i32 noundef %454, i32 noundef %457, ptr noundef @.str.1159)
  br label %465

458:                                              ; preds = %440
  %459 = load i32, ptr %8, align 4, !tbaa !9
  %460 = load i32, ptr %9, align 4, !tbaa !9
  %461 = load ptr, ptr %11, align 8, !tbaa !5
  %462 = getelementptr inbounds i32, ptr %461, i64 0
  %463 = load i32, ptr %462, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %459, i32 noundef %460, i32 noundef %463, ptr noundef @.str.1160)
  br label %465

464:                                              ; preds = %440
  br label %465

465:                                              ; preds = %464, %458, %452, %446
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %1302

466:                                              ; preds = %6
  %467 = load i32, ptr %8, align 4, !tbaa !9
  %468 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %467)
  %469 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %468, i32 0, i32 2
  %470 = load i32, ptr %469, align 8, !tbaa !15
  %471 = icmp ne i32 %470, 13
  br i1 %471, label %472, label %481

472:                                              ; preds = %466
  %473 = load i32, ptr %8, align 4, !tbaa !9
  %474 = load i32, ptr %9, align 4, !tbaa !9
  %475 = load ptr, ptr %11, align 8, !tbaa !5
  %476 = getelementptr inbounds i32, ptr %475, i64 0
  %477 = load i32, ptr %476, align 4, !tbaa !9
  %478 = load ptr, ptr %11, align 8, !tbaa !5
  %479 = getelementptr inbounds i32, ptr %478, i64 1
  %480 = load i32, ptr %479, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %473, i32 noundef %474, i32 noundef %477, i32 noundef %480, ptr noundef @.str.1161)
  br label %490

481:                                              ; preds = %466
  %482 = load i32, ptr %8, align 4, !tbaa !9
  %483 = load i32, ptr %9, align 4, !tbaa !9
  %484 = load ptr, ptr %11, align 8, !tbaa !5
  %485 = getelementptr inbounds i32, ptr %484, i64 0
  %486 = load i32, ptr %485, align 4, !tbaa !9
  %487 = load ptr, ptr %11, align 8, !tbaa !5
  %488 = getelementptr inbounds i32, ptr %487, i64 1
  %489 = load i32, ptr %488, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %482, i32 noundef %483, i32 noundef %486, i32 noundef %489, ptr noundef @.str.1162)
  br label %490

490:                                              ; preds = %481, %472
  br label %1302

491:                                              ; preds = %6
  %492 = load i32, ptr %8, align 4, !tbaa !9
  %493 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %492)
  %494 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %493, i32 0, i32 2
  %495 = load i32, ptr %494, align 8, !tbaa !15
  %496 = icmp ne i32 %495, 13
  br i1 %496, label %497, label %506

497:                                              ; preds = %491
  %498 = load i32, ptr %8, align 4, !tbaa !9
  %499 = load i32, ptr %9, align 4, !tbaa !9
  %500 = load ptr, ptr %11, align 8, !tbaa !5
  %501 = getelementptr inbounds i32, ptr %500, i64 0
  %502 = load i32, ptr %501, align 4, !tbaa !9
  %503 = load ptr, ptr %11, align 8, !tbaa !5
  %504 = getelementptr inbounds i32, ptr %503, i64 1
  %505 = load i32, ptr %504, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %498, i32 noundef %499, i32 noundef %502, i32 noundef %505, ptr noundef @.str.1163)
  br label %515

506:                                              ; preds = %491
  %507 = load i32, ptr %8, align 4, !tbaa !9
  %508 = load i32, ptr %9, align 4, !tbaa !9
  %509 = load ptr, ptr %11, align 8, !tbaa !5
  %510 = getelementptr inbounds i32, ptr %509, i64 0
  %511 = load i32, ptr %510, align 4, !tbaa !9
  %512 = load ptr, ptr %11, align 8, !tbaa !5
  %513 = getelementptr inbounds i32, ptr %512, i64 1
  %514 = load i32, ptr %513, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %507, i32 noundef %508, i32 noundef %511, i32 noundef %514, ptr noundef @.str.1164)
  br label %515

515:                                              ; preds = %506, %497
  br label %1302

516:                                              ; preds = %6
  %517 = load i32, ptr %8, align 4, !tbaa !9
  %518 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %517)
  %519 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %518, i32 0, i32 2
  %520 = load i32, ptr %519, align 8, !tbaa !15
  %521 = icmp ne i32 %520, 13
  br i1 %521, label %522, label %534

522:                                              ; preds = %516
  %523 = load i32, ptr %8, align 4, !tbaa !9
  %524 = load i32, ptr %9, align 4, !tbaa !9
  %525 = load ptr, ptr %11, align 8, !tbaa !5
  %526 = getelementptr inbounds i32, ptr %525, i64 0
  %527 = load i32, ptr %526, align 4, !tbaa !9
  %528 = load ptr, ptr %11, align 8, !tbaa !5
  %529 = getelementptr inbounds i32, ptr %528, i64 1
  %530 = load i32, ptr %529, align 4, !tbaa !9
  %531 = load ptr, ptr %11, align 8, !tbaa !5
  %532 = getelementptr inbounds i32, ptr %531, i64 2
  %533 = load i32, ptr %532, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %523, i32 noundef %524, i32 noundef %527, i32 noundef %530, i32 noundef %533, ptr noundef @.str.1165)
  br label %546

534:                                              ; preds = %516
  %535 = load i32, ptr %8, align 4, !tbaa !9
  %536 = load i32, ptr %9, align 4, !tbaa !9
  %537 = load ptr, ptr %11, align 8, !tbaa !5
  %538 = getelementptr inbounds i32, ptr %537, i64 0
  %539 = load i32, ptr %538, align 4, !tbaa !9
  %540 = load ptr, ptr %11, align 8, !tbaa !5
  %541 = getelementptr inbounds i32, ptr %540, i64 1
  %542 = load i32, ptr %541, align 4, !tbaa !9
  %543 = load ptr, ptr %11, align 8, !tbaa !5
  %544 = getelementptr inbounds i32, ptr %543, i64 2
  %545 = load i32, ptr %544, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %535, i32 noundef %536, i32 noundef %539, i32 noundef %542, i32 noundef %545, ptr noundef @.str.1166)
  br label %546

546:                                              ; preds = %534, %522
  br label %1302

547:                                              ; preds = %6
  %548 = load i32, ptr %8, align 4, !tbaa !9
  %549 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %548)
  %550 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %549, i32 0, i32 2
  %551 = load i32, ptr %550, align 8, !tbaa !15
  %552 = icmp ne i32 %551, 13
  br i1 %552, label %553, label %562

553:                                              ; preds = %547
  %554 = load i32, ptr %8, align 4, !tbaa !9
  %555 = load i32, ptr %9, align 4, !tbaa !9
  %556 = load ptr, ptr %11, align 8, !tbaa !5
  %557 = getelementptr inbounds i32, ptr %556, i64 0
  %558 = load i32, ptr %557, align 4, !tbaa !9
  %559 = load ptr, ptr %11, align 8, !tbaa !5
  %560 = getelementptr inbounds i32, ptr %559, i64 1
  %561 = load i32, ptr %560, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %554, i32 noundef %555, i32 noundef %558, i32 noundef %561, ptr noundef @.str.1161)
  br label %571

562:                                              ; preds = %547
  %563 = load i32, ptr %8, align 4, !tbaa !9
  %564 = load i32, ptr %9, align 4, !tbaa !9
  %565 = load ptr, ptr %11, align 8, !tbaa !5
  %566 = getelementptr inbounds i32, ptr %565, i64 0
  %567 = load i32, ptr %566, align 4, !tbaa !9
  %568 = load ptr, ptr %11, align 8, !tbaa !5
  %569 = getelementptr inbounds i32, ptr %568, i64 1
  %570 = load i32, ptr %569, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %563, i32 noundef %564, i32 noundef %567, i32 noundef %570, ptr noundef @.str.1167)
  br label %571

571:                                              ; preds = %562, %553
  br label %1302

572:                                              ; preds = %6
  %573 = load i32, ptr %8, align 4, !tbaa !9
  %574 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %573)
  %575 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %574, i32 0, i32 2
  %576 = load i32, ptr %575, align 8, !tbaa !15
  %577 = icmp ne i32 %576, 13
  br i1 %577, label %578, label %587

578:                                              ; preds = %572
  %579 = load i32, ptr %8, align 4, !tbaa !9
  %580 = load i32, ptr %9, align 4, !tbaa !9
  %581 = load ptr, ptr %11, align 8, !tbaa !5
  %582 = getelementptr inbounds i32, ptr %581, i64 0
  %583 = load i32, ptr %582, align 4, !tbaa !9
  %584 = load ptr, ptr %11, align 8, !tbaa !5
  %585 = getelementptr inbounds i32, ptr %584, i64 1
  %586 = load i32, ptr %585, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %579, i32 noundef %580, i32 noundef %583, i32 noundef %586, ptr noundef @.str.1163)
  br label %596

587:                                              ; preds = %572
  %588 = load i32, ptr %8, align 4, !tbaa !9
  %589 = load i32, ptr %9, align 4, !tbaa !9
  %590 = load ptr, ptr %11, align 8, !tbaa !5
  %591 = getelementptr inbounds i32, ptr %590, i64 0
  %592 = load i32, ptr %591, align 4, !tbaa !9
  %593 = load ptr, ptr %11, align 8, !tbaa !5
  %594 = getelementptr inbounds i32, ptr %593, i64 1
  %595 = load i32, ptr %594, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %588, i32 noundef %589, i32 noundef %592, i32 noundef %595, ptr noundef @.str.1168)
  br label %596

596:                                              ; preds = %587, %578
  br label %1302

597:                                              ; preds = %6
  %598 = load i32, ptr %8, align 4, !tbaa !9
  %599 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %598)
  %600 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %599, i32 0, i32 2
  %601 = load i32, ptr %600, align 8, !tbaa !15
  %602 = icmp ne i32 %601, 13
  br i1 %602, label %603, label %615

603:                                              ; preds = %597
  %604 = load i32, ptr %8, align 4, !tbaa !9
  %605 = load i32, ptr %9, align 4, !tbaa !9
  %606 = load ptr, ptr %11, align 8, !tbaa !5
  %607 = getelementptr inbounds i32, ptr %606, i64 0
  %608 = load i32, ptr %607, align 4, !tbaa !9
  %609 = load ptr, ptr %11, align 8, !tbaa !5
  %610 = getelementptr inbounds i32, ptr %609, i64 1
  %611 = load i32, ptr %610, align 4, !tbaa !9
  %612 = load ptr, ptr %11, align 8, !tbaa !5
  %613 = getelementptr inbounds i32, ptr %612, i64 2
  %614 = load i32, ptr %613, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %604, i32 noundef %605, i32 noundef %608, i32 noundef %611, i32 noundef %614, ptr noundef @.str.1165)
  br label %627

615:                                              ; preds = %597
  %616 = load i32, ptr %8, align 4, !tbaa !9
  %617 = load i32, ptr %9, align 4, !tbaa !9
  %618 = load ptr, ptr %11, align 8, !tbaa !5
  %619 = getelementptr inbounds i32, ptr %618, i64 0
  %620 = load i32, ptr %619, align 4, !tbaa !9
  %621 = load ptr, ptr %11, align 8, !tbaa !5
  %622 = getelementptr inbounds i32, ptr %621, i64 1
  %623 = load i32, ptr %622, align 4, !tbaa !9
  %624 = load ptr, ptr %11, align 8, !tbaa !5
  %625 = getelementptr inbounds i32, ptr %624, i64 2
  %626 = load i32, ptr %625, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %616, i32 noundef %617, i32 noundef %620, i32 noundef %623, i32 noundef %626, ptr noundef @.str.1169)
  br label %627

627:                                              ; preds = %615, %603
  br label %1302

628:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  %629 = load ptr, ptr %11, align 8, !tbaa !5
  %630 = getelementptr inbounds i32, ptr %629, i64 0
  %631 = load i32, ptr %630, align 4, !tbaa !9
  %632 = call noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %631, i32 noundef 4)
  store i32 %632, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  %633 = load ptr, ptr %11, align 8, !tbaa !5
  %634 = getelementptr inbounds i32, ptr %633, i64 0
  %635 = load i32, ptr %634, align 4, !tbaa !9
  %636 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %635, i32 noundef 15)
          to label %637 unwind label %659

637:                                              ; preds = %628
  br i1 %636, label %638, label %695

638:                                              ; preds = %637
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  %639 = load ptr, ptr %11, align 8, !tbaa !5
  %640 = getelementptr inbounds i32, ptr %639, i64 0
  %641 = load i32, ptr %640, align 4, !tbaa !9
  %642 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %641, i32 noundef 15)
          to label %643 unwind label %663

643:                                              ; preds = %638
  store i32 %642, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %644 = load i32, ptr %37, align 4, !tbaa !9
  %645 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %644)
          to label %646 unwind label %667

646:                                              ; preds = %643
  store ptr %645, ptr %38, align 8, !tbaa !5
  %647 = load ptr, ptr %38, align 8, !tbaa !5
  %648 = icmp ne ptr %647, null
  br i1 %648, label %649, label %654

649:                                              ; preds = %646
  %650 = load ptr, ptr %38, align 8, !tbaa !5
  %651 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %650, i32 0, i32 3
  %652 = load i8, ptr %651, align 8, !tbaa !43, !range !51, !noundef !52
  %653 = trunc i8 %652 to i1
  br i1 %653, label %654, label %680

654:                                              ; preds = %649, %646
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #6
  %655 = load i32, ptr %37, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %655, i1 noundef zeroext true)
          to label %656 unwind label %671

656:                                              ; preds = %654
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %657 unwind label %675

657:                                              ; preds = %656
  %658 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #6
  br label %692

659:                                              ; preds = %628
  %660 = landingpad { ptr, i32 }
          cleanup
  %661 = extractvalue { ptr, i32 } %660, 0
  store ptr %661, ptr %20, align 8
  %662 = extractvalue { ptr, i32 } %660, 1
  store i32 %662, ptr %21, align 4
  br label %736

663:                                              ; preds = %638
  %664 = landingpad { ptr, i32 }
          cleanup
  %665 = extractvalue { ptr, i32 } %664, 0
  store ptr %665, ptr %20, align 8
  %666 = extractvalue { ptr, i32 } %664, 1
  store i32 %666, ptr %21, align 4
  br label %694

667:                                              ; preds = %643
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %20, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %21, align 4
  br label %693

671:                                              ; preds = %654
  %672 = landingpad { ptr, i32 }
          cleanup
  %673 = extractvalue { ptr, i32 } %672, 0
  store ptr %673, ptr %20, align 8
  %674 = extractvalue { ptr, i32 } %672, 1
  store i32 %674, ptr %21, align 4
  br label %679

675:                                              ; preds = %656
  %676 = landingpad { ptr, i32 }
          cleanup
  %677 = extractvalue { ptr, i32 } %676, 0
  store ptr %677, ptr %20, align 8
  %678 = extractvalue { ptr, i32 } %676, 1
  store i32 %678, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  br label %679

679:                                              ; preds = %675, %671
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #6
  br label %693

680:                                              ; preds = %649
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %681 = load ptr, ptr %38, align 8, !tbaa !5
  %682 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %681, i32 noundef 0, i32 noundef 0)
          to label %683 unwind label %688

683:                                              ; preds = %680
  %684 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %682)
          to label %685 unwind label %688

685:                                              ; preds = %683
  store ptr %684, ptr %42, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA2_KcPS1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %686 unwind label %688

686:                                              ; preds = %685
  %687 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #6
  br label %692

688:                                              ; preds = %685, %683, %680
  %689 = landingpad { ptr, i32 }
          cleanup
  %690 = extractvalue { ptr, i32 } %689, 0
  store ptr %690, ptr %20, align 8
  %691 = extractvalue { ptr, i32 } %689, 1
  store i32 %691, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #6
  br label %693

692:                                              ; preds = %686, %657
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  br label %695

693:                                              ; preds = %688, %679, %667
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %694

694:                                              ; preds = %693, %663
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  br label %736

695:                                              ; preds = %692, %637
  %696 = load i32, ptr %8, align 4, !tbaa !9
  %697 = load i32, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #6
  %698 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %82, i32 0, i32 59
  %699 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %698)
          to label %700 unwind label %717

700:                                              ; preds = %695
  %701 = load ptr, ptr %82, align 8, !tbaa !53
  %702 = getelementptr inbounds ptr, ptr %701, i64 6
  %703 = load ptr, ptr %702, align 8
  invoke void %703(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(12482) %82, i32 noundef %699, i1 noundef zeroext true)
          to label %704 unwind label %717

704:                                              ; preds = %700
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #6
  %705 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %82)
          to label %706 unwind label %721

706:                                              ; preds = %704
  %707 = load i32, ptr %35, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %82, ptr noundef nonnull align 8 dereferenceable(336) %705, i32 noundef %707)
          to label %708 unwind label %721

708:                                              ; preds = %706
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA27_S7_RS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 1 dereferenceable(27) @.str.124, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %709 unwind label %725

709:                                              ; preds = %708
  %710 = load ptr, ptr %11, align 8, !tbaa !5
  %711 = getelementptr inbounds i32, ptr %710, i64 0
  %712 = load i32, ptr %711, align 4, !tbaa !9
  %713 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %712)
          to label %714 unwind label %729

714:                                              ; preds = %709
  %715 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %696, i32 noundef %697, ptr noundef nonnull align 8 dereferenceable(32) %43, i1 noundef zeroext %713, i1 noundef zeroext false)
          to label %716 unwind label %729

716:                                              ; preds = %714
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %1302

717:                                              ; preds = %700, %695
  %718 = landingpad { ptr, i32 }
          cleanup
  %719 = extractvalue { ptr, i32 } %718, 0
  store ptr %719, ptr %20, align 8
  %720 = extractvalue { ptr, i32 } %718, 1
  store i32 %720, ptr %21, align 4
  br label %735

721:                                              ; preds = %706, %704
  %722 = landingpad { ptr, i32 }
          cleanup
  %723 = extractvalue { ptr, i32 } %722, 0
  store ptr %723, ptr %20, align 8
  %724 = extractvalue { ptr, i32 } %722, 1
  store i32 %724, ptr %21, align 4
  br label %734

725:                                              ; preds = %708
  %726 = landingpad { ptr, i32 }
          cleanup
  %727 = extractvalue { ptr, i32 } %726, 0
  store ptr %727, ptr %20, align 8
  %728 = extractvalue { ptr, i32 } %726, 1
  store i32 %728, ptr %21, align 4
  br label %733

729:                                              ; preds = %714, %709
  %730 = landingpad { ptr, i32 }
          cleanup
  %731 = extractvalue { ptr, i32 } %730, 0
  store ptr %731, ptr %20, align 8
  %732 = extractvalue { ptr, i32 } %730, 1
  store i32 %732, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  br label %733

733:                                              ; preds = %729, %725
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  br label %734

734:                                              ; preds = %733, %721
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  br label %735

735:                                              ; preds = %734, %717
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #6
  br label %736

736:                                              ; preds = %735, %694, %659
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %1303

737:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  %738 = load ptr, ptr %11, align 8, !tbaa !5
  %739 = getelementptr inbounds i32, ptr %738, i64 0
  %740 = load i32, ptr %739, align 4, !tbaa !9
  %741 = call noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %740, i32 noundef 4)
  store i32 %741, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  %742 = load ptr, ptr %11, align 8, !tbaa !5
  %743 = getelementptr inbounds i32, ptr %742, i64 0
  %744 = load i32, ptr %743, align 4, !tbaa !9
  %745 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %744, i32 noundef 15)
          to label %746 unwind label %768

746:                                              ; preds = %737
  br i1 %745, label %747, label %804

747:                                              ; preds = %746
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  %748 = load ptr, ptr %11, align 8, !tbaa !5
  %749 = getelementptr inbounds i32, ptr %748, i64 0
  %750 = load i32, ptr %749, align 4, !tbaa !9
  %751 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %750, i32 noundef 15)
          to label %752 unwind label %772

752:                                              ; preds = %747
  store i32 %751, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #6
  %753 = load i32, ptr %48, align 4, !tbaa !9
  %754 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %753)
          to label %755 unwind label %776

755:                                              ; preds = %752
  store ptr %754, ptr %49, align 8, !tbaa !5
  %756 = load ptr, ptr %49, align 8, !tbaa !5
  %757 = icmp ne ptr %756, null
  br i1 %757, label %758, label %763

758:                                              ; preds = %755
  %759 = load ptr, ptr %49, align 8, !tbaa !5
  %760 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %759, i32 0, i32 3
  %761 = load i8, ptr %760, align 8, !tbaa !43, !range !51, !noundef !52
  %762 = trunc i8 %761 to i1
  br i1 %762, label %763, label %789

763:                                              ; preds = %758, %755
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #6
  %764 = load i32, ptr %48, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %764, i1 noundef zeroext true)
          to label %765 unwind label %780

765:                                              ; preds = %763
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %766 unwind label %784

766:                                              ; preds = %765
  %767 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(32) %50) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #6
  br label %801

768:                                              ; preds = %737
  %769 = landingpad { ptr, i32 }
          cleanup
  %770 = extractvalue { ptr, i32 } %769, 0
  store ptr %770, ptr %20, align 8
  %771 = extractvalue { ptr, i32 } %769, 1
  store i32 %771, ptr %21, align 4
  br label %862

772:                                              ; preds = %747
  %773 = landingpad { ptr, i32 }
          cleanup
  %774 = extractvalue { ptr, i32 } %773, 0
  store ptr %774, ptr %20, align 8
  %775 = extractvalue { ptr, i32 } %773, 1
  store i32 %775, ptr %21, align 4
  br label %803

776:                                              ; preds = %752
  %777 = landingpad { ptr, i32 }
          cleanup
  %778 = extractvalue { ptr, i32 } %777, 0
  store ptr %778, ptr %20, align 8
  %779 = extractvalue { ptr, i32 } %777, 1
  store i32 %779, ptr %21, align 4
  br label %802

780:                                              ; preds = %763
  %781 = landingpad { ptr, i32 }
          cleanup
  %782 = extractvalue { ptr, i32 } %781, 0
  store ptr %782, ptr %20, align 8
  %783 = extractvalue { ptr, i32 } %781, 1
  store i32 %783, ptr %21, align 4
  br label %788

784:                                              ; preds = %765
  %785 = landingpad { ptr, i32 }
          cleanup
  %786 = extractvalue { ptr, i32 } %785, 0
  store ptr %786, ptr %20, align 8
  %787 = extractvalue { ptr, i32 } %785, 1
  store i32 %787, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  br label %788

788:                                              ; preds = %784, %780
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #6
  br label %802

789:                                              ; preds = %758
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  %790 = load ptr, ptr %49, align 8, !tbaa !5
  %791 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %790, i32 noundef 0, i32 noundef 0)
          to label %792 unwind label %797

792:                                              ; preds = %789
  %793 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %791)
          to label %794 unwind label %797

794:                                              ; preds = %792
  store ptr %793, ptr %53, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA2_KcPS1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %795 unwind label %797

795:                                              ; preds = %794
  %796 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(32) %52) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #6
  br label %801

797:                                              ; preds = %794, %792, %789
  %798 = landingpad { ptr, i32 }
          cleanup
  %799 = extractvalue { ptr, i32 } %798, 0
  store ptr %799, ptr %20, align 8
  %800 = extractvalue { ptr, i32 } %798, 1
  store i32 %800, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #6
  br label %802

801:                                              ; preds = %795, %766
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  br label %804

802:                                              ; preds = %797, %788, %776
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  br label %803

803:                                              ; preds = %802, %772
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  br label %862

804:                                              ; preds = %801, %746
  %805 = load i32, ptr %8, align 4, !tbaa !9
  %806 = load i32, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #6
  %807 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %82, i32 0, i32 59
  %808 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %807)
          to label %809 unwind label %838

809:                                              ; preds = %804
  %810 = load ptr, ptr %82, align 8, !tbaa !53
  %811 = getelementptr inbounds ptr, ptr %810, i64 6
  %812 = load ptr, ptr %811, align 8
  invoke void %812(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(12482) %82, i32 noundef %808, i1 noundef zeroext true)
          to label %813 unwind label %838

813:                                              ; preds = %809
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #6
  %814 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %82)
          to label %815 unwind label %842

815:                                              ; preds = %813
  %816 = load i32, ptr %46, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %82, ptr noundef nonnull align 8 dereferenceable(336) %814, i32 noundef %816)
          to label %817 unwind label %842

817:                                              ; preds = %815
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #6
  %818 = load ptr, ptr %11, align 8, !tbaa !5
  %819 = getelementptr inbounds i32, ptr %818, i64 1
  %820 = load i32, ptr %819, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %820, i1 noundef zeroext true)
          to label %821 unwind label %846

821:                                              ; preds = %817
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA24_S7_S6_S9_RS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 1 dereferenceable(24) @.str.125, ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 1 dereferenceable(2) @.str.53, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %822 unwind label %850

822:                                              ; preds = %821
  %823 = load ptr, ptr %11, align 8, !tbaa !5
  %824 = getelementptr inbounds i32, ptr %823, i64 0
  %825 = load i32, ptr %824, align 4, !tbaa !9
  %826 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %825)
          to label %827 unwind label %854

827:                                              ; preds = %822
  br i1 %826, label %828, label %834

828:                                              ; preds = %827
  %829 = load ptr, ptr %11, align 8, !tbaa !5
  %830 = getelementptr inbounds i32, ptr %829, i64 1
  %831 = load i32, ptr %830, align 4, !tbaa !9
  %832 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %831)
          to label %833 unwind label %854

833:                                              ; preds = %828
  br label %834

834:                                              ; preds = %833, %827
  %835 = phi i1 [ false, %827 ], [ %832, %833 ]
  %836 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %805, i32 noundef %806, ptr noundef nonnull align 8 dereferenceable(32) %54, i1 noundef zeroext %835, i1 noundef zeroext false)
          to label %837 unwind label %854

837:                                              ; preds = %834
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  br label %1302

838:                                              ; preds = %809, %804
  %839 = landingpad { ptr, i32 }
          cleanup
  %840 = extractvalue { ptr, i32 } %839, 0
  store ptr %840, ptr %20, align 8
  %841 = extractvalue { ptr, i32 } %839, 1
  store i32 %841, ptr %21, align 4
  br label %861

842:                                              ; preds = %815, %813
  %843 = landingpad { ptr, i32 }
          cleanup
  %844 = extractvalue { ptr, i32 } %843, 0
  store ptr %844, ptr %20, align 8
  %845 = extractvalue { ptr, i32 } %843, 1
  store i32 %845, ptr %21, align 4
  br label %860

846:                                              ; preds = %817
  %847 = landingpad { ptr, i32 }
          cleanup
  %848 = extractvalue { ptr, i32 } %847, 0
  store ptr %848, ptr %20, align 8
  %849 = extractvalue { ptr, i32 } %847, 1
  store i32 %849, ptr %21, align 4
  br label %859

850:                                              ; preds = %821
  %851 = landingpad { ptr, i32 }
          cleanup
  %852 = extractvalue { ptr, i32 } %851, 0
  store ptr %852, ptr %20, align 8
  %853 = extractvalue { ptr, i32 } %851, 1
  store i32 %853, ptr %21, align 4
  br label %858

854:                                              ; preds = %834, %828, %822
  %855 = landingpad { ptr, i32 }
          cleanup
  %856 = extractvalue { ptr, i32 } %855, 0
  store ptr %856, ptr %20, align 8
  %857 = extractvalue { ptr, i32 } %855, 1
  store i32 %857, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #6
  br label %858

858:                                              ; preds = %854, %850
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #6
  br label %859

859:                                              ; preds = %858, %846
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #6
  br label %860

860:                                              ; preds = %859, %842
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #6
  br label %861

861:                                              ; preds = %860, %838
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #6
  br label %862

862:                                              ; preds = %861, %803, %768
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  br label %1303

863:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  %864 = load ptr, ptr %11, align 8, !tbaa !5
  %865 = getelementptr inbounds i32, ptr %864, i64 0
  %866 = load i32, ptr %865, align 4, !tbaa !9
  %867 = call noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %866, i32 noundef 4)
  store i32 %867, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #6
  %868 = load ptr, ptr %11, align 8, !tbaa !5
  %869 = getelementptr inbounds i32, ptr %868, i64 0
  %870 = load i32, ptr %869, align 4, !tbaa !9
  %871 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %870, i32 noundef 15)
          to label %872 unwind label %894

872:                                              ; preds = %863
  br i1 %871, label %873, label %930

873:                                              ; preds = %872
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #6
  %874 = load ptr, ptr %11, align 8, !tbaa !5
  %875 = getelementptr inbounds i32, ptr %874, i64 0
  %876 = load i32, ptr %875, align 4, !tbaa !9
  %877 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %876, i32 noundef 15)
          to label %878 unwind label %898

878:                                              ; preds = %873
  store i32 %877, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #6
  %879 = load i32, ptr %60, align 4, !tbaa !9
  %880 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %879)
          to label %881 unwind label %902

881:                                              ; preds = %878
  store ptr %880, ptr %61, align 8, !tbaa !5
  %882 = load ptr, ptr %61, align 8, !tbaa !5
  %883 = icmp ne ptr %882, null
  br i1 %883, label %884, label %889

884:                                              ; preds = %881
  %885 = load ptr, ptr %61, align 8, !tbaa !5
  %886 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %885, i32 0, i32 3
  %887 = load i8, ptr %886, align 8, !tbaa !43, !range !51, !noundef !52
  %888 = trunc i8 %887 to i1
  br i1 %888, label %889, label %915

889:                                              ; preds = %884, %881
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #6
  %890 = load i32, ptr %60, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %890, i1 noundef zeroext true)
          to label %891 unwind label %906

891:                                              ; preds = %889
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %892 unwind label %910

892:                                              ; preds = %891
  %893 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 8 dereferenceable(32) %62) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #6
  br label %927

894:                                              ; preds = %863
  %895 = landingpad { ptr, i32 }
          cleanup
  %896 = extractvalue { ptr, i32 } %895, 0
  store ptr %896, ptr %20, align 8
  %897 = extractvalue { ptr, i32 } %895, 1
  store i32 %897, ptr %21, align 4
  br label %988

898:                                              ; preds = %873
  %899 = landingpad { ptr, i32 }
          cleanup
  %900 = extractvalue { ptr, i32 } %899, 0
  store ptr %900, ptr %20, align 8
  %901 = extractvalue { ptr, i32 } %899, 1
  store i32 %901, ptr %21, align 4
  br label %929

902:                                              ; preds = %878
  %903 = landingpad { ptr, i32 }
          cleanup
  %904 = extractvalue { ptr, i32 } %903, 0
  store ptr %904, ptr %20, align 8
  %905 = extractvalue { ptr, i32 } %903, 1
  store i32 %905, ptr %21, align 4
  br label %928

906:                                              ; preds = %889
  %907 = landingpad { ptr, i32 }
          cleanup
  %908 = extractvalue { ptr, i32 } %907, 0
  store ptr %908, ptr %20, align 8
  %909 = extractvalue { ptr, i32 } %907, 1
  store i32 %909, ptr %21, align 4
  br label %914

910:                                              ; preds = %891
  %911 = landingpad { ptr, i32 }
          cleanup
  %912 = extractvalue { ptr, i32 } %911, 0
  store ptr %912, ptr %20, align 8
  %913 = extractvalue { ptr, i32 } %911, 1
  store i32 %913, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #6
  br label %914

914:                                              ; preds = %910, %906
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #6
  br label %928

915:                                              ; preds = %884
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #6
  %916 = load ptr, ptr %61, align 8, !tbaa !5
  %917 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %916, i32 noundef 0, i32 noundef 0)
          to label %918 unwind label %923

918:                                              ; preds = %915
  %919 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %917)
          to label %920 unwind label %923

920:                                              ; preds = %918
  store ptr %919, ptr %65, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA2_KcPS1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(8) %65)
          to label %921 unwind label %923

921:                                              ; preds = %920
  %922 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 8 dereferenceable(32) %64) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #6
  br label %927

923:                                              ; preds = %920, %918, %915
  %924 = landingpad { ptr, i32 }
          cleanup
  %925 = extractvalue { ptr, i32 } %924, 0
  store ptr %925, ptr %20, align 8
  %926 = extractvalue { ptr, i32 } %924, 1
  store i32 %926, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #6
  br label %928

927:                                              ; preds = %921, %892
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  br label %930

928:                                              ; preds = %923, %914, %902
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #6
  br label %929

929:                                              ; preds = %928, %898
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  br label %988

930:                                              ; preds = %927, %872
  %931 = load i32, ptr %8, align 4, !tbaa !9
  %932 = load i32, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #6
  %933 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %82, i32 0, i32 59
  %934 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %933)
          to label %935 unwind label %964

935:                                              ; preds = %930
  %936 = load ptr, ptr %82, align 8, !tbaa !53
  %937 = getelementptr inbounds ptr, ptr %936, i64 6
  %938 = load ptr, ptr %937, align 8
  invoke void %938(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(12482) %82, i32 noundef %934, i1 noundef zeroext true)
          to label %939 unwind label %964

939:                                              ; preds = %935
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #6
  %940 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %82)
          to label %941 unwind label %968

941:                                              ; preds = %939
  %942 = load i32, ptr %58, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(9848) %82, ptr noundef nonnull align 8 dereferenceable(336) %940, i32 noundef %942)
          to label %943 unwind label %968

943:                                              ; preds = %941
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #6
  %944 = load ptr, ptr %11, align 8, !tbaa !5
  %945 = getelementptr inbounds i32, ptr %944, i64 1
  %946 = load i32, ptr %945, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %946, i1 noundef zeroext true)
          to label %947 unwind label %972

947:                                              ; preds = %943
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA24_S7_S6_RA11_S7_RS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef nonnull align 1 dereferenceable(24) @.str.1170, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 1 dereferenceable(11) @.str.1171, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %948 unwind label %976

948:                                              ; preds = %947
  %949 = load ptr, ptr %11, align 8, !tbaa !5
  %950 = getelementptr inbounds i32, ptr %949, i64 0
  %951 = load i32, ptr %950, align 4, !tbaa !9
  %952 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %951)
          to label %953 unwind label %980

953:                                              ; preds = %948
  br i1 %952, label %954, label %960

954:                                              ; preds = %953
  %955 = load ptr, ptr %11, align 8, !tbaa !5
  %956 = getelementptr inbounds i32, ptr %955, i64 1
  %957 = load i32, ptr %956, align 4, !tbaa !9
  %958 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %957)
          to label %959 unwind label %980

959:                                              ; preds = %954
  br label %960

960:                                              ; preds = %959, %953
  %961 = phi i1 [ false, %953 ], [ %958, %959 ]
  %962 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %931, i32 noundef %932, ptr noundef nonnull align 8 dereferenceable(32) %66, i1 noundef zeroext %961, i1 noundef zeroext false)
          to label %963 unwind label %980

963:                                              ; preds = %960
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  br label %1302

964:                                              ; preds = %935, %930
  %965 = landingpad { ptr, i32 }
          cleanup
  %966 = extractvalue { ptr, i32 } %965, 0
  store ptr %966, ptr %20, align 8
  %967 = extractvalue { ptr, i32 } %965, 1
  store i32 %967, ptr %21, align 4
  br label %987

968:                                              ; preds = %941, %939
  %969 = landingpad { ptr, i32 }
          cleanup
  %970 = extractvalue { ptr, i32 } %969, 0
  store ptr %970, ptr %20, align 8
  %971 = extractvalue { ptr, i32 } %969, 1
  store i32 %971, ptr %21, align 4
  br label %986

972:                                              ; preds = %943
  %973 = landingpad { ptr, i32 }
          cleanup
  %974 = extractvalue { ptr, i32 } %973, 0
  store ptr %974, ptr %20, align 8
  %975 = extractvalue { ptr, i32 } %973, 1
  store i32 %975, ptr %21, align 4
  br label %985

976:                                              ; preds = %947
  %977 = landingpad { ptr, i32 }
          cleanup
  %978 = extractvalue { ptr, i32 } %977, 0
  store ptr %978, ptr %20, align 8
  %979 = extractvalue { ptr, i32 } %977, 1
  store i32 %979, ptr %21, align 4
  br label %984

980:                                              ; preds = %960, %954, %948
  %981 = landingpad { ptr, i32 }
          cleanup
  %982 = extractvalue { ptr, i32 } %981, 0
  store ptr %982, ptr %20, align 8
  %983 = extractvalue { ptr, i32 } %981, 1
  store i32 %983, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #6
  br label %984

984:                                              ; preds = %980, %976
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #6
  br label %985

985:                                              ; preds = %984, %972
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #6
  br label %986

986:                                              ; preds = %985, %968
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #6
  br label %987

987:                                              ; preds = %986, %964
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #6
  br label %988

988:                                              ; preds = %987, %929, %894
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  br label %1303

989:                                              ; preds = %6
  %990 = load ptr, ptr %11, align 8, !tbaa !5
  %991 = getelementptr inbounds i32, ptr %990, i64 0
  %992 = load i32, ptr %991, align 4, !tbaa !9
  %993 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %992)
  %994 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %993, i32 0, i32 4
  %995 = load i32, ptr %994, align 8, !tbaa !55
  %996 = icmp eq i32 %995, 1
  br i1 %996, label %997, label %1045

997:                                              ; preds = %989
  %998 = load i32, ptr %8, align 4, !tbaa !9
  %999 = load i32, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #6
  %1000 = load ptr, ptr %11, align 8, !tbaa !5
  %1001 = getelementptr inbounds i32, ptr %1000, i64 0
  %1002 = load i32, ptr %1001, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1002, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #6
  %1003 = load ptr, ptr %11, align 8, !tbaa !5
  %1004 = getelementptr inbounds i32, ptr %1003, i64 1
  %1005 = load i32, ptr %1004, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1005, i1 noundef zeroext true)
          to label %1006 unwind label %1031

1006:                                             ; preds = %997
  invoke void @_ZN11spirv_cross4joinIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 1 dereferenceable(5) @.str.1172, ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef nonnull align 1 dereferenceable(4) @.str.1014, ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1007 unwind label %1035

1007:                                             ; preds = %1006
  %1008 = load ptr, ptr %11, align 8, !tbaa !5
  %1009 = getelementptr inbounds i32, ptr %1008, i64 0
  %1010 = load i32, ptr %1009, align 4, !tbaa !9
  %1011 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1010)
          to label %1012 unwind label %1039

1012:                                             ; preds = %1007
  br i1 %1011, label %1013, label %1019

1013:                                             ; preds = %1012
  %1014 = load ptr, ptr %11, align 8, !tbaa !5
  %1015 = getelementptr inbounds i32, ptr %1014, i64 1
  %1016 = load i32, ptr %1015, align 4, !tbaa !9
  %1017 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1016)
          to label %1018 unwind label %1039

1018:                                             ; preds = %1013
  br label %1019

1019:                                             ; preds = %1018, %1012
  %1020 = phi i1 [ false, %1012 ], [ %1017, %1018 ]
  %1021 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %998, i32 noundef %999, ptr noundef nonnull align 8 dereferenceable(32) %70, i1 noundef zeroext %1020, i1 noundef zeroext false)
          to label %1022 unwind label %1039

1022:                                             ; preds = %1019
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #6
  %1023 = load i32, ptr %9, align 4, !tbaa !9
  %1024 = load ptr, ptr %11, align 8, !tbaa !5
  %1025 = getelementptr inbounds i32, ptr %1024, i64 0
  %1026 = load i32, ptr %1025, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1023, i32 noundef %1026)
  %1027 = load i32, ptr %9, align 4, !tbaa !9
  %1028 = load ptr, ptr %11, align 8, !tbaa !5
  %1029 = getelementptr inbounds i32, ptr %1028, i64 1
  %1030 = load i32, ptr %1029, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1027, i32 noundef %1030)
  br label %1051

1031:                                             ; preds = %997
  %1032 = landingpad { ptr, i32 }
          cleanup
  %1033 = extractvalue { ptr, i32 } %1032, 0
  store ptr %1033, ptr %20, align 8
  %1034 = extractvalue { ptr, i32 } %1032, 1
  store i32 %1034, ptr %21, align 4
  br label %1044

1035:                                             ; preds = %1006
  %1036 = landingpad { ptr, i32 }
          cleanup
  %1037 = extractvalue { ptr, i32 } %1036, 0
  store ptr %1037, ptr %20, align 8
  %1038 = extractvalue { ptr, i32 } %1036, 1
  store i32 %1038, ptr %21, align 4
  br label %1043

1039:                                             ; preds = %1019, %1013, %1007
  %1040 = landingpad { ptr, i32 }
          cleanup
  %1041 = extractvalue { ptr, i32 } %1040, 0
  store ptr %1041, ptr %20, align 8
  %1042 = extractvalue { ptr, i32 } %1040, 1
  store i32 %1042, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #6
  br label %1043

1043:                                             ; preds = %1039, %1035
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #6
  br label %1044

1044:                                             ; preds = %1043, %1031
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #6
  br label %1303

1045:                                             ; preds = %989
  %1046 = load i32, ptr %8, align 4, !tbaa !9
  %1047 = load i32, ptr %9, align 4, !tbaa !9
  %1048 = load i32, ptr %10, align 4, !tbaa !9
  %1049 = load ptr, ptr %11, align 8, !tbaa !5
  %1050 = load i32, ptr %12, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1046, i32 noundef %1047, i32 noundef %1048, ptr noundef %1049, i32 noundef %1050)
  br label %1051

1051:                                             ; preds = %1045, %1022
  br label %1302

1052:                                             ; preds = %6
  %1053 = load ptr, ptr %11, align 8, !tbaa !5
  %1054 = getelementptr inbounds i32, ptr %1053, i64 0
  %1055 = load i32, ptr %1054, align 4, !tbaa !9
  %1056 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1055)
  %1057 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1056, i32 0, i32 4
  %1058 = load i32, ptr %1057, align 8, !tbaa !55
  %1059 = icmp eq i32 %1058, 1
  br i1 %1059, label %1060, label %1066

1060:                                             ; preds = %1052
  %1061 = load i32, ptr %8, align 4, !tbaa !9
  %1062 = load i32, ptr %9, align 4, !tbaa !9
  %1063 = load ptr, ptr %11, align 8, !tbaa !5
  %1064 = getelementptr inbounds i32, ptr %1063, i64 0
  %1065 = load i32, ptr %1064, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1061, i32 noundef %1062, i32 noundef %1065, ptr noundef @.str.1173)
  br label %1072

1066:                                             ; preds = %1052
  %1067 = load i32, ptr %8, align 4, !tbaa !9
  %1068 = load i32, ptr %9, align 4, !tbaa !9
  %1069 = load i32, ptr %10, align 4, !tbaa !9
  %1070 = load ptr, ptr %11, align 8, !tbaa !5
  %1071 = load i32, ptr %12, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1067, i32 noundef %1068, i32 noundef %1069, ptr noundef %1070, i32 noundef %1071)
  br label %1072

1072:                                             ; preds = %1066, %1060
  br label %1302

1073:                                             ; preds = %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #6
  %1074 = load ptr, ptr %11, align 8, !tbaa !5
  %1075 = getelementptr inbounds i32, ptr %1074, i64 0
  %1076 = load i32, ptr %1075, align 4, !tbaa !9
  %1077 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1076)
  store ptr %1077, ptr %73, align 8, !tbaa !5
  %1078 = load ptr, ptr %73, align 8, !tbaa !5
  %1079 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1078, i32 0, i32 4
  %1080 = load i32, ptr %1079, align 8, !tbaa !55
  %1081 = icmp eq i32 %1080, 1
  br i1 %1081, label %1082, label %1088

1082:                                             ; preds = %1073
  %1083 = load i32, ptr %8, align 4, !tbaa !9
  %1084 = load i32, ptr %9, align 4, !tbaa !9
  %1085 = load ptr, ptr %11, align 8, !tbaa !5
  %1086 = getelementptr inbounds i32, ptr %1085, i64 0
  %1087 = load i32, ptr %1086, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1083, i32 noundef %1084, i32 noundef %1087, ptr noundef @.str.1174)
  br label %1111

1088:                                             ; preds = %1073
  %1089 = load ptr, ptr %73, align 8, !tbaa !5
  %1090 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1089, i32 0, i32 4
  %1091 = load i32, ptr %1090, align 8, !tbaa !55
  %1092 = icmp ule i32 %1091, 3
  br i1 %1092, label %1093, label %1104

1093:                                             ; preds = %1088
  %1094 = load ptr, ptr %73, align 8, !tbaa !5
  %1095 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1094, i32 0, i32 2
  %1096 = load i32, ptr %1095, align 8, !tbaa !15
  %1097 = icmp eq i32 %1096, 12
  br i1 %1097, label %1098, label %1104

1098:                                             ; preds = %1093
  %1099 = load i32, ptr %8, align 4, !tbaa !9
  %1100 = load i32, ptr %9, align 4, !tbaa !9
  %1101 = load ptr, ptr %11, align 8, !tbaa !5
  %1102 = getelementptr inbounds i32, ptr %1101, i64 0
  %1103 = load i32, ptr %1102, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1099, i32 noundef %1100, i32 noundef %1103, ptr noundef @.str.1175)
  br label %1110

1104:                                             ; preds = %1093, %1088
  %1105 = load i32, ptr %8, align 4, !tbaa !9
  %1106 = load i32, ptr %9, align 4, !tbaa !9
  %1107 = load ptr, ptr %11, align 8, !tbaa !5
  %1108 = getelementptr inbounds i32, ptr %1107, i64 0
  %1109 = load i32, ptr %1108, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1105, i32 noundef %1106, i32 noundef %1109, ptr noundef @.str.1176)
  br label %1110

1110:                                             ; preds = %1104, %1098
  br label %1111

1111:                                             ; preds = %1110, %1082
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #6
  br label %1302

1112:                                             ; preds = %6
  %1113 = load i32, ptr %8, align 4, !tbaa !9
  %1114 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1113)
  %1115 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1114, i32 0, i32 4
  %1116 = load i32, ptr %1115, align 8, !tbaa !55
  %1117 = icmp eq i32 %1116, 1
  br i1 %1117, label %1118, label %1127

1118:                                             ; preds = %1112
  %1119 = load i32, ptr %8, align 4, !tbaa !9
  %1120 = load i32, ptr %9, align 4, !tbaa !9
  %1121 = load ptr, ptr %11, align 8, !tbaa !5
  %1122 = getelementptr inbounds i32, ptr %1121, i64 0
  %1123 = load i32, ptr %1122, align 4, !tbaa !9
  %1124 = load ptr, ptr %11, align 8, !tbaa !5
  %1125 = getelementptr inbounds i32, ptr %1124, i64 1
  %1126 = load i32, ptr %1125, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1119, i32 noundef %1120, i32 noundef %1123, i32 noundef %1126, ptr noundef @.str.1177)
  br label %1133

1127:                                             ; preds = %1112
  %1128 = load i32, ptr %8, align 4, !tbaa !9
  %1129 = load i32, ptr %9, align 4, !tbaa !9
  %1130 = load i32, ptr %10, align 4, !tbaa !9
  %1131 = load ptr, ptr %11, align 8, !tbaa !5
  %1132 = load i32, ptr %12, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1128, i32 noundef %1129, i32 noundef %1130, ptr noundef %1131, i32 noundef %1132)
  br label %1133

1133:                                             ; preds = %1127, %1118
  br label %1302

1134:                                             ; preds = %6
  %1135 = load i32, ptr %8, align 4, !tbaa !9
  %1136 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1135)
  %1137 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1136, i32 0, i32 4
  %1138 = load i32, ptr %1137, align 8, !tbaa !55
  %1139 = icmp eq i32 %1138, 1
  br i1 %1139, label %1140, label %1152

1140:                                             ; preds = %1134
  %1141 = load i32, ptr %8, align 4, !tbaa !9
  %1142 = load i32, ptr %9, align 4, !tbaa !9
  %1143 = load ptr, ptr %11, align 8, !tbaa !5
  %1144 = getelementptr inbounds i32, ptr %1143, i64 0
  %1145 = load i32, ptr %1144, align 4, !tbaa !9
  %1146 = load ptr, ptr %11, align 8, !tbaa !5
  %1147 = getelementptr inbounds i32, ptr %1146, i64 1
  %1148 = load i32, ptr %1147, align 4, !tbaa !9
  %1149 = load ptr, ptr %11, align 8, !tbaa !5
  %1150 = getelementptr inbounds i32, ptr %1149, i64 2
  %1151 = load i32, ptr %1150, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1141, i32 noundef %1142, i32 noundef %1145, i32 noundef %1148, i32 noundef %1151, ptr noundef @.str.1178)
  br label %1158

1152:                                             ; preds = %1134
  %1153 = load i32, ptr %8, align 4, !tbaa !9
  %1154 = load i32, ptr %9, align 4, !tbaa !9
  %1155 = load i32, ptr %10, align 4, !tbaa !9
  %1156 = load ptr, ptr %11, align 8, !tbaa !5
  %1157 = load i32, ptr %12, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1153, i32 noundef %1154, i32 noundef %1155, ptr noundef %1156, i32 noundef %1157)
  br label %1158

1158:                                             ; preds = %1152, %1140
  br label %1302

1159:                                             ; preds = %6
  %1160 = load i32, ptr %8, align 4, !tbaa !9
  %1161 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1160)
  %1162 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1161, i32 0, i32 4
  %1163 = load i32, ptr %1162, align 8, !tbaa !55
  %1164 = icmp eq i32 %1163, 1
  br i1 %1164, label %1165, label %1177

1165:                                             ; preds = %1159
  %1166 = load i32, ptr %8, align 4, !tbaa !9
  %1167 = load i32, ptr %9, align 4, !tbaa !9
  %1168 = load ptr, ptr %11, align 8, !tbaa !5
  %1169 = getelementptr inbounds i32, ptr %1168, i64 0
  %1170 = load i32, ptr %1169, align 4, !tbaa !9
  %1171 = load ptr, ptr %11, align 8, !tbaa !5
  %1172 = getelementptr inbounds i32, ptr %1171, i64 1
  %1173 = load i32, ptr %1172, align 4, !tbaa !9
  %1174 = load ptr, ptr %11, align 8, !tbaa !5
  %1175 = getelementptr inbounds i32, ptr %1174, i64 2
  %1176 = load i32, ptr %1175, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1166, i32 noundef %1167, i32 noundef %1170, i32 noundef %1173, i32 noundef %1176, ptr noundef @.str.1179)
  br label %1183

1177:                                             ; preds = %1159
  %1178 = load i32, ptr %8, align 4, !tbaa !9
  %1179 = load i32, ptr %9, align 4, !tbaa !9
  %1180 = load i32, ptr %10, align 4, !tbaa !9
  %1181 = load ptr, ptr %11, align 8, !tbaa !5
  %1182 = load i32, ptr %12, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1178, i32 noundef %1179, i32 noundef %1180, ptr noundef %1181, i32 noundef %1182)
  br label %1183

1183:                                             ; preds = %1177, %1165
  br label %1302

1184:                                             ; preds = %6, %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #6
  %1185 = load ptr, ptr %11, align 8, !tbaa !5
  %1186 = getelementptr inbounds i32, ptr %1185, i64 1
  %1187 = load i32, ptr %1186, align 4, !tbaa !9
  %1188 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1187)
  store ptr %1188, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #6
  %1189 = load ptr, ptr %11, align 8, !tbaa !5
  %1190 = getelementptr inbounds i32, ptr %1189, i64 1
  %1191 = load i32, ptr %1190, align 4, !tbaa !9
  %1192 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1191)
  store ptr %1192, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %76) #6
  %1193 = load ptr, ptr %75, align 8, !tbaa !5
  %1194 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1193, i32 0, i32 11
  %1195 = load i32, ptr %1194, align 8, !tbaa !56
  %1196 = call noundef zeroext i1 @_ZL29storage_class_array_is_threadN3spv12StorageClassE(i32 noundef %1195)
  %1197 = zext i1 %1196 to i8
  store i8 %1197, ptr %76, align 1, !tbaa !57
  %1198 = load ptr, ptr %75, align 8, !tbaa !5
  %1199 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1198, i32 0, i32 11
  %1200 = load i32, ptr %1199, align 8, !tbaa !56
  %1201 = icmp eq i32 %1200, 3
  br i1 %1201, label %1202, label %1207

1202:                                             ; preds = %1184
  %1203 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %82, i32 0, i32 76
  %1204 = load i8, ptr %1203, align 4, !tbaa !58, !range !51, !noundef !52
  %1205 = trunc i8 %1204 to i1
  br i1 %1205, label %1206, label %1207

1206:                                             ; preds = %1202
  store i8 0, ptr %76, align 1, !tbaa !57
  br label %1207

1207:                                             ; preds = %1206, %1202, %1184
  %1208 = load i8, ptr %76, align 1, !tbaa !57, !range !51, !noundef !52
  %1209 = trunc i8 %1208 to i1
  br i1 %1209, label %1210, label %1224

1210:                                             ; preds = %1207
  %1211 = load ptr, ptr %74, align 8, !tbaa !5
  %1212 = icmp ne ptr %1211, null
  br i1 %1212, label %1213, label %1280

1213:                                             ; preds = %1210
  %1214 = load ptr, ptr %74, align 8, !tbaa !5
  %1215 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1214, i32 0, i32 7
  %1216 = load i8, ptr %1215, align 2, !tbaa !204, !range !51, !noundef !52
  %1217 = trunc i8 %1216 to i1
  br i1 %1217, label %1218, label %1280

1218:                                             ; preds = %1213
  %1219 = load ptr, ptr %11, align 8, !tbaa !5
  %1220 = getelementptr inbounds i32, ptr %1219, i64 1
  %1221 = load i32, ptr %1220, align 4, !tbaa !9
  %1222 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1221)
  %1223 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %82, ptr noundef nonnull align 8 dereferenceable(336) %1222)
  br i1 %1223, label %1224, label %1280

1224:                                             ; preds = %1218, %1207
  %1225 = load ptr, ptr %11, align 8, !tbaa !5
  %1226 = getelementptr inbounds i32, ptr %1225, i64 1
  %1227 = load i32, ptr %1226, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1227)
  %1228 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %82, i32 0, i32 15
  %1229 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %1228, ptr noundef nonnull align 4 dereferenceable(4) %9)
  %1230 = getelementptr inbounds { ptr, i8 }, ptr %77, i32 0, i32 0
  %1231 = extractvalue { ptr, i8 } %1229, 0
  store ptr %1231, ptr %1230, align 8
  %1232 = getelementptr inbounds { ptr, i8 }, ptr %77, i32 0, i32 1
  %1233 = extractvalue { ptr, i8 } %1229, 1
  store i8 %1233, ptr %1232, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #6
  %1234 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %82, i32 0, i32 31
  %1235 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %1234, ptr noundef nonnull align 4 dereferenceable(4) %9)
  store ptr %1235, ptr %78, align 8, !tbaa !5
  %1236 = load ptr, ptr %78, align 8, !tbaa !5
  %1237 = load i32, ptr %1236, align 4, !tbaa !9
  %1238 = icmp ne i32 %1237, 0
  br i1 %1238, label %1243, label %1239

1239:                                             ; preds = %1224
  %1240 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %82, i32 0, i32 1
  %1241 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1240, i32 noundef 1)
  %1242 = load ptr, ptr %78, align 8, !tbaa !5
  store i32 %1241, ptr %1242, align 4, !tbaa !9
  br label %1243

1243:                                             ; preds = %1239, %1224
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #6
  %1244 = load ptr, ptr %11, align 8, !tbaa !5
  %1245 = getelementptr inbounds i32, ptr %1244, i64 1
  %1246 = load i32, ptr %1245, align 4, !tbaa !9
  %1247 = call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1246)
  %1248 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %82, i32 noundef %1247)
  store i32 %1248, ptr %79, align 4, !tbaa !9
  %1249 = load i32, ptr %79, align 4, !tbaa !9
  %1250 = load ptr, ptr %78, align 8, !tbaa !5
  %1251 = load i32, ptr %1250, align 4, !tbaa !9
  %1252 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1249, i32 noundef %1251)
  %1253 = load i32, ptr %8, align 4, !tbaa !9
  %1254 = load i32, ptr %9, align 4, !tbaa !9
  %1255 = load ptr, ptr %11, align 8, !tbaa !5
  %1256 = getelementptr inbounds i32, ptr %1255, i64 0
  %1257 = load i32, ptr %1256, align 4, !tbaa !9
  %1258 = load ptr, ptr %78, align 8, !tbaa !5
  %1259 = load i32, ptr %1258, align 4, !tbaa !9
  %1260 = load i32, ptr %10, align 4, !tbaa !9
  %1261 = icmp eq i32 %1260, 35
  %1262 = zext i1 %1261 to i64
  %1263 = select i1 %1261, ptr @.str.1180, ptr @.str.1181
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1253, i32 noundef %1254, i32 noundef %1257, i32 noundef %1259, ptr noundef %1263)
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #6
  %1264 = load ptr, ptr %11, align 8, !tbaa !5
  %1265 = getelementptr inbounds i32, ptr %1264, i64 1
  %1266 = load i32, ptr %1265, align 4, !tbaa !9
  call 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) %82, i32 noundef %1266, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #6
  %1267 = load ptr, ptr %78, align 8, !tbaa !5
  %1268 = load i32, ptr %1267, 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) %82, i32 noundef %1268, i1 noundef zeroext true)
          to label %1269 unwind label %1271

1269:                                             ; preds = %1243
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %82, ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %1270 unwind label %1275

1270:                                             ; preds = %1269
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #6
  br label %1286

1271:                                             ; preds = %1243
  %1272 = landingpad { ptr, i32 }
          cleanup
  %1273 = extractvalue { ptr, i32 } %1272, 0
  store ptr %1273, ptr %20, align 8
  %1274 = extractvalue { ptr, i32 } %1272, 1
  store i32 %1274, ptr %21, align 4
  br label %1279

1275:                                             ; preds = %1269
  %1276 = landingpad { ptr, i32 }
          cleanup
  %1277 = extractvalue { ptr, i32 } %1276, 0
  store ptr %1277, ptr %20, align 8
  %1278 = extractvalue { ptr, i32 } %1276, 1
  store i32 %1278, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #6
  br label %1279

1279:                                             ; preds = %1275, %1271
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %76) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #6
  br label %1303

1280:                                             ; preds = %1218, %1213, %1210
  %1281 = load i32, ptr %8, align 4, !tbaa !9
  %1282 = load i32, ptr %9, align 4, !tbaa !9
  %1283 = load i32, ptr %10, align 4, !tbaa !9
  %1284 = load ptr, ptr %11, align 8, !tbaa !5
  %1285 = load i32, ptr %12, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1281, i32 noundef %1282, i32 noundef %1283, ptr noundef %1284, i32 noundef %1285)
  br label %1286

1286:                                             ; preds = %1280, %1270
  call void @llvm.lifetime.end.p0(i64 1, ptr %76) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #6
  br label %1302

1287:                                             ; preds = %6
  %1288 = load i32, ptr %8, align 4, !tbaa !9
  %1289 = load i32, ptr %9, align 4, !tbaa !9
  %1290 = load ptr, ptr %11, align 8, !tbaa !5
  %1291 = getelementptr inbounds i32, ptr %1290, i64 0
  %1292 = load i32, ptr %1291, align 4, !tbaa !9
  %1293 = load ptr, ptr %11, align 8, !tbaa !5
  %1294 = getelementptr inbounds i32, ptr %1293, i64 1
  %1295 = load i32, ptr %1294, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1288, i32 noundef %1289, i32 noundef %1292, i32 noundef %1295, ptr noundef @.str.1182)
  br label %1302

1296:                                             ; preds = %6
  %1297 = load i32, ptr %8, align 4, !tbaa !9
  %1298 = load i32, ptr %9, align 4, !tbaa !9
  %1299 = load i32, ptr %10, align 4, !tbaa !9
  %1300 = load ptr, ptr %11, align 8, !tbaa !5
  %1301 = load i32, ptr %12, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %82, i32 noundef %1297, i32 noundef %1298, i32 noundef %1299, ptr noundef %1300, i32 noundef %1301)
  br label %1302

1302:                                             ; preds = %1296, %1287, %1286, %1183, %1158, %1133, %1111, %1072, %1051, %963, %837, %716, %627, %596, %571, %546, %515, %490, %465, %434, %428, %418, %394, %388, %382, %376, %366, %342, %336, %330, %324, %316, %308, %294, %288, %282, %281, %216, %176, %136
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  ret void

1303:                                             ; preds = %1279, %1044, %988, %862, %736, %427, %375, %271, %209, %169, %129
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  br label %1304

1304:                                             ; preds = %1303
  %1305 = load ptr, ptr %20, align 8
  %1306 = load i32, ptr %21, align 4
  %1307 = insertvalue { ptr, i32 } poison, ptr %1305, 0
  %1308 = insertvalue { ptr, i32 } %1307, i32 %1306, 1
  resume { ptr, i32 } %1308
}

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL38get_integer_width_for_glsl_instructionE10GLSLstd450PKjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, ptr noundef, i32 noundef) #2

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL20get_remapped_glsl_opE10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #2

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

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #2

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

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

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_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(5), 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)) #3

declare void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) unnamed_addr #2

declare void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #2

declare noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!"_ZTS10GLSLstd450", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!15 = !{!16, !14, i64 16}
!16 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !17, i64 0, !19, i64 12, !14, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !20, i64 32, !24, i64 88, !10, i64 120, !27, i64 124, !27, i64 125, !28, i64 128, !29, i64 136, !20, i64 192, !32, i64 248, !33, i64 272, !33, i64 276, !37, i64 280}
!17 = !{!"_ZTSN11spirv_cross8IVariantE", !18, i64 8}
!18 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!19 = !{!"_ZTSN3spv2OpE", !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 = !{!"bool", !7, i64 0}
!28 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !30, i64 0, !22, i64 16, !31, i64 24}
!30 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !22, i64 8}
!31 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!32 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !33, i64 0, !34, i64 4, !27, i64 8, !27, i64 9, !27, i64 10, !10, i64 12, !35, i64 16, !36, i64 20}
!33 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!34 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!35 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!36 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!37 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !38, i64 0}
!38 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!39 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!40 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !41, i64 0, !22, i64 8}
!41 = !{!"float", !7, i64 0}
!42 = !{!16, !10, i64 28}
!43 = !{!44, !27, i64 264}
!44 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !17, i64 0, !33, i64 12, !45, i64 16, !27, i64 264, !27, i64 265, !27, i64 266, !46, i64 272, !49, i64 328}
!45 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !10, i64 240}
!46 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !47, i64 0, !22, i64 16, !48, i64 24}
!47 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !6, i64 0, !22, i64 8}
!48 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!49 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !50, i64 0, !22, i64 8, !7, i64 16}
!50 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!51 = !{i8 0, i8 2}
!52 = !{}
!53 = !{!54, !54, i64 0}
!54 = !{!"vtable pointer", !8, i64 0}
!55 = !{!16, !10, i64 24}
!56 = !{!16, !28, i64 128}
!57 = !{!27, !27, i64 0}
!58 = !{!59, !27, i64 11188}
!59 = !{!"_ZTSN11spirv_cross11CompilerMSLE", !60, i64 0, !152, 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, !27, i64 10032, !27, i64 10033, !154, i64 10036, !158, i64 10176, !166, i64 10224, !171, i64 10272, !166, i64 10328, !171, i64 10376, !101, i64 10432, !101, i64 10488, !101, i64 10544, !101, i64 10600, !134, i64 10656, !134, i64 10712, !134, i64 10768, !173, i64 10824, !173, i64 10872, !20, i64 10920, !178, i64 10976, !180, i64 11032, !10, i64 11088, !10, i64 11092, !10, i64 11096, !7, i64 11100, !182, i64 11132, !182, i64 11136, !182, i64 11140, !182, i64 11144, !182, i64 11148, !182, i64 11152, !182, i64 11156, !182, i64 11160, !182, i64 11164, !182, i64 11168, !182, i64 11172, !183, i64 11176, !183, i64 11180, !27, i64 11184, !27, i64 11185, !27, i64 11186, !27, i64 11187, !27, i64 11188, !27, i64 11189, !27, i64 11190, !27, i64 11191, !27, i64 11192, !27, i64 11193, !27, i64 11194, !27, i64 11195, !27, i64 11196, !49, i64 11200, !49, i64 11232, !49, i64 11264, !49, i64 11296, !49, i64 11328, !49, i64 11360, !49, i64 11392, !49, i64 11424, !49, i64 11456, !49, i64 11488, !49, i64 11520, !49, i64 11552, !49, i64 11584, !49, i64 11616, !49, i64 11648, !49, i64 11680, !19, i64 11712, !184, i64 11720, !189, i64 11768, !101, i64 11824, !191, i64 11880, !20, i64 11968, !101, i64 12024, !101, i64 12080, !101, i64 12136, !194, i64 12192, !197, i64 12280, !20, i64 12328, !202, i64 12384, !7, i64 12440, !10, i64 12472, !10, i64 12476, !27, i64 12480, !27, i64 12481}
!60 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !61, i64 0, !6, i64 3176, !116, i64 3184, !27, i64 3272, !119, i64 3280, !6, i64 7616, !6, i64 7624, !27, i64 7632, !27, i64 7633, !124, i64 7636, !37, i64 7680, !37, i64 7736, !37, i64 7792, !37, i64 7848, !37, i64 7904, !37, i64 7960, !37, i64 8016, !128, i64 8072, !114, i64 8128, !27, i64 8184, !130, i64 8192, !10, i64 8416, !101, i64 8424, !101, i64 8480, !101, i64 8536, !131, i64 8592, !133, i64 8648, !134, i64 8656, !86, i64 8712, !86, i64 8992, !134, i64 9272, !29, i64 9328, !10, i64 9384, !10, i64 9388, !10, i64 9392, !27, i64 9396, !27, i64 9397, !136, i64 9400, !136, i64 9424, !140, i64 9448, !144, i64 9472, !134, i64 9496, !101, i64 9552, !101, i64 9608, !7, i64 9664, !148, i64 9672, !101, i64 9728, !6, i64 9784, !150, i64 9792}
!61 = !{!"_ZTSN11spirv_cross8CompilerE", !62, i64 8, !20, i64 1928, !20, i64 1984, !6, i64 2040, !6, i64 2048, !10, i64 2056, !103, i64 2064, !27, i64 2120, !101, i64 2128, !27, i64 2184, !27, i64 2185, !105, i64 2192, !20, i64 2312, !108, i64 2368, !101, i64 2400, !101, i64 2456, !101, i64 2512, !101, i64 2568, !101, i64 2624, !100, i64 2680, !100, i64 2744, !10, i64 2808, !10, i64 2812, !27, i64 2816, !101, i64 2824, !27, i64 2880, !27, i64 2881, !10, i64 2884, !110, i64 2888, !20, i64 2944, !112, i64 3000, !101, i64 3056, !27, i64 3112, !114, 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, !49, i64 1768, !100, i64 1800, !101, 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, !39, i64 16, !22, i64 24, !40, 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, !39, i64 16, !22, i64 24, !40, 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, !39, i64 16, !22, i64 24, !40, 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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!96 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !10, i64 0}
!97 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !10, i64 0, !27, i64 4, !27, i64 5, !27, i64 6}
!98 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!99 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!100 = !{!"_ZTSN11spirv_cross6BitsetE", !22, i64 0, !101, i64 8}
!101 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !102, i64 0}
!102 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!103 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !104, i64 0}
!104 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!105 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !106, i64 0, !22, i64 16, !107, i64 24}
!106 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !22, i64 8}
!107 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!108 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !109, i64 0, !6, i64 24}
!109 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!110 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !111, i64 0}
!111 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!112 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !113, i64 0}
!113 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!114 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !115, i64 0}
!115 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!116 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !117, i64 0, !22, i64 16, !118, i64 24}
!117 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, i64 0, !22, i64 8}
!118 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!119 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !120, i64 0, !7, i64 24, !121, i64 4120}
!120 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !6, i64 0, !22, i64 8, !22, i64 16}
!121 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !122, i64 0, !22, i64 16, !123, i64 24}
!122 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !6, i64 0, !22, i64 8}
!123 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!124 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !10, i64 0, !27, i64 4, !27, i64 5, !10, i64 8, !27, i64 12, !27, i64 13, !27, i64 14, !27, i64 15, !27, i64 16, !27, i64 17, !27, i64 18, !27, i64 19, !27, i64 20, !27, i64 21, !27, i64 22, !27, i64 23, !10, i64 24, !125, i64 28, !126, i64 32}
!125 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !27, i64 0, !27, i64 1, !27, i64 2}
!126 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !127, i64 0, !127, i64 4}
!127 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!128 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !129, i64 0}
!129 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!130 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !49, i64 0, !49, i64 32, !49, i64 64, !27, i64 96, !27, i64 97, !27, i64 98, !27, 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, !14, i64 184, !27, i64 188, !27, i64 189, !27, i64 190, !27, i64 191, !27, i64 192, !27, i64 193, !27, i64 194, !27, i64 195, !27, i64 196, !27, i64 197, !27, i64 198, !27, i64 199, !27, i64 200, !27, i64 201, !27, i64 202, !27, i64 203, !27, i64 204, !27, i64 205, !27, i64 206, !27, i64 207, !27, i64 208, !27, i64 209, !27, i64 210, !27, i64 211, !27, i64 212, !27, i64 213, !27, i64 214, !27, i64 215, !27, i64 216, !27, i64 217, !27, i64 218, !27, i64 219}
!131 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !132, i64 0}
!132 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!133 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !10, i64 0}
!134 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !135, i64 0}
!135 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!136 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !137, i64 0}
!137 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !138, i64 0}
!138 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !139, i64 0}
!139 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!140 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !141, i64 0}
!141 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !142, i64 0}
!142 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !143, i64 0}
!143 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!144 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !145, i64 0}
!145 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !146, i64 0}
!146 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !147, i64 0}
!147 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!148 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !149, i64 0}
!149 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!150 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !151, i64 0}
!151 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!152 = !{!"_ZTSSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEE", !153, i64 0}
!153 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!154 = !{!"_ZTSN11spirv_cross11CompilerMSL7OptionsE", !155, 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, !27, i64 80, !27, i64 81, !27, i64 82, !27, i64 83, !27, i64 84, !27, i64 85, !27, i64 86, !27, i64 87, !27, i64 88, !27, i64 89, !27, i64 90, !27, i64 91, !27, i64 92, !156, i64 96, !27, i64 100, !27, i64 101, !27, i64 102, !27, i64 103, !27, i64 104, !27, i64 105, !27, i64 106, !27, i64 107, !27, i64 108, !27, i64 109, !27, i64 110, !27, i64 111, !27, i64 112, !27, i64 113, !27, i64 114, !27, i64 115, !27, i64 116, !27, i64 117, !27, i64 118, !10, i64 120, !157, i64 124, !27, i64 128, !27, i64 129, !27, i64 130, !27, i64 131, !27, i64 132, !27, i64 133, !27, i64 134, !27, i64 135, !27, i64 136}
!155 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options8PlatformE", !7, i64 0}
!156 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options19ArgumentBuffersTierE", !7, i64 0}
!157 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options9IndexTypeE", !7, i64 0}
!158 = !{!"_ZTSSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE", !159, i64 0}
!159 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE", !160, i64 0}
!160 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !161, i64 0, !163, i64 8}
!161 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEEE", !162, i64 0}
!162 = !{!"_ZTSSt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEE"}
!163 = !{!"_ZTSSt15_Rb_tree_header", !164, i64 0, !22, i64 32}
!164 = !{!"_ZTSSt18_Rb_tree_node_base", !165, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!165 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!166 = !{!"_ZTSSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE", !167, i64 0}
!167 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !168, i64 0}
!168 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !169, i64 0, !163, i64 8}
!169 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross21LocationComponentPairEEE", !170, i64 0}
!170 = !{!"_ZTSSt4lessIN11spirv_cross21LocationComponentPairEE"}
!171 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE", !172, i64 0}
!172 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!173 = !{!"_ZTSSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE", !174, i64 0}
!174 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE", !175, i64 0}
!175 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !176, i64 0, !163, i64 8}
!176 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !177, i64 0}
!177 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!178 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingESt4pairINS0_18MSLResourceBindingEbENS0_14InternalHasherESt8equal_toIS1_ESaIS2_IKS1_S4_EEE", !179, i64 0}
!179 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!180 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingEjNS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_jEEE", !181, i64 0}
!181 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!182 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !10, i64 0}
!183 = !{!"_ZTSN11spirv_cross11CompilerMSL8TriStateE", !7, i64 0}
!184 = !{!"_ZTSSt3mapIjN11spirv_cross19MSLConstexprSamplerESt4lessIjESaISt4pairIKjS1_EEE", !185, i64 0}
!185 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE", !186, i64 0}
!186 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !187, i64 0, !163, i64 8}
!187 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIjEE", !188, i64 0}
!188 = !{!"_ZTSSt4lessIjE"}
!189 = !{!"_ZTSSt13unordered_mapIN11spirv_cross14SetBindingPairENS0_19MSLConstexprSamplerENS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_S2_EEE", !190, i64 0}
!190 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!191 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !192, i64 0, !22, i64 16, !193, i64 24}
!192 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !6, i64 0, !22, i64 8}
!193 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !7, i64 0}
!194 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEE", !195, i64 0, !22, i64 16, !196, i64 24}
!195 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_12SPIRVariableEEE", !6, i64 0, !22, i64 8}
!196 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_12SPIRVariableELm8EEE", !7, i64 0}
!197 = !{!"_ZTSSt3mapIN11spirv_cross14SetBindingPairESt4pairIjjESt4lessIS1_ESaIS2_IKS1_S3_EEE", !198, i64 0}
!198 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !199, i64 0}
!199 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !200, i64 0, !163, i64 8}
!200 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross14SetBindingPairEEE", !201, i64 0}
!201 = !{!"_ZTSSt4lessIN11spirv_cross14SetBindingPairEE"}
!202 = !{!"_ZTSSt13unordered_setIN11spirv_cross14SetBindingPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !203, i64 0}
!203 = !{!"_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, !39, i64 16, !22, i64 24, !40, i64 32, !6, i64 48}
!204 = !{!205, !27, i64 58}
!205 = !{!"_ZTSN11spirv_cross14SPIRExpressionE", !17, i64 0, !18, i64 12, !49, i64 16, !33, i64 48, !18, i64 52, !27, i64 56, !27, i64 57, !27, i64 58, !27, i64 59, !78, i64 64, !78, i64 120, !78, i64 176, !10, i64 232}


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

@.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.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1014 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1028 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1133 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1134 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1135 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1136 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1137 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1138 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1139 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1140 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1141 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1142 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1143 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1144 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1145 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1146 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1147 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1148 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1149 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1150 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1151 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1152 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1153 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1154 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1155 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1156 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1157 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.1158 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1159 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1160 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1161 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1162 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1163 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1164 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1165 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1166 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1167 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1168 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1169 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1170 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1171 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1172 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1173 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1174 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1175 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1176 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1177 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1178 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1179 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1180 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1181 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1182 = external hidden unnamed_addr constant [5 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 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 noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare 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 { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #2

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

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

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 #2

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

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

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_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 #2

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

declare void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_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 #2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360), i32 noundef, i32 noundef) local_unnamed_addr #5 align 2

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #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 #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL29storage_class_array_is_threadN3spv12StorageClassE(i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca i32, align 4
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca ptr, align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca ptr, align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca ptr, 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
  store i32 %2, ptr %7, align 4, !tbaa !5
  %52 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL38get_integer_width_for_glsl_instructionE10GLSLstd450PKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3, ptr noundef %4, i32 noundef %5)
  %53 = tail call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %52)
  %54 = tail call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %52)
  %55 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL20get_remapped_glsl_opE10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3)
  %56 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  switch i32 %55, label %663 [
    i32 19, label %57
    i32 20, label %78
    i32 21, label %99
    i32 25, label %120
    i32 32, label %156
    i32 2, label %158
    i32 73, label %160
    i32 74, label %166
    i32 75, label %168
    i32 54, label %170
    i32 55, label %172
    i32 56, label %174
    i32 57, label %176
    i32 58, label %178
    i32 63, label %193
    i32 64, label %195
    i32 60, label %197
    i32 61, label %199
    i32 62, label %201
    i32 59, label %216
    i32 65, label %218
    i32 34, label %220
    i32 37, label %230
    i32 40, label %239
    i32 43, label %248
    i32 79, label %259
    i32 80, label %268
    i32 81, label %277
    i32 76, label %288
    i32 77, label %355
    i32 78, label %433
    i32 67, label %511
    i32 66, label %544
    i32 69, label %553
    i32 71, label %569
    i32 72, label %579
    i32 70, label %591
    i32 35, label %603
    i32 51, label %603
    i32 26, label %659
  ]

57:                                               ; preds = %6
  %58 = getelementptr inbounds i8, ptr %56, i64 16
  %59 = load i32, ptr %58, align 8, !tbaa !9
  %60 = icmp eq i32 %59, 12
  br i1 %60, label %61, label %76

61:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  %62 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %62, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA17_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 1 dereferenceable(17) @.str.1133, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %63 unwind label %71

63:                                               ; preds = %61
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  %64 = load i32, ptr %4, align 4, !tbaa !5
  %65 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %64)
          to label %66 unwind label %73

66:                                               ; preds = %63
  %67 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %8, i1 noundef zeroext %65, i1 noundef zeroext false)
          to label %68 unwind label %73

68:                                               ; preds = %66
  %69 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %69)
          to label %70 unwind label %73

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

71:                                               ; preds = %61
  %72 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %75

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

75:                                               ; preds = %73, %71
  %.pn360 = phi { ptr, i32 } [ %74, %73 ], [ %72, %71 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  br label %665

76:                                               ; preds = %57
  %77 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %77, ptr noundef nonnull @.str.1134)
  br label %664

78:                                               ; preds = %6
  %79 = getelementptr inbounds i8, ptr %56, i64 16
  %80 = load i32, ptr %79, align 8, !tbaa !9
  %81 = icmp eq i32 %80, 12
  br i1 %81, label %82, label %97

82:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  %83 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %83, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA17_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 1 dereferenceable(17) @.str.1135, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %84 unwind label %92

84:                                               ; preds = %82
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  %85 = load i32, ptr %4, align 4, !tbaa !5
  %86 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %85)
          to label %87 unwind label %94

87:                                               ; preds = %84
  %88 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %10, i1 noundef zeroext %86, i1 noundef zeroext false)
          to label %89 unwind label %94

89:                                               ; preds = %87
  %90 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %90)
          to label %91 unwind label %94

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

92:                                               ; preds = %82
  %93 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %96

94:                                               ; preds = %89, %87, %84
  %95 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  br label %96

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

97:                                               ; preds = %78
  %98 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %98, ptr noundef nonnull @.str.1136)
  br label %664

99:                                               ; preds = %6
  %100 = getelementptr inbounds i8, ptr %56, i64 16
  %101 = load i32, ptr %100, align 8, !tbaa !9
  %102 = icmp eq i32 %101, 12
  br i1 %102, label %103, label %118

103:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  %104 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %104, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA17_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 1 dereferenceable(17) @.str.1137, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %105 unwind label %113

105:                                              ; preds = %103
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  %106 = load i32, ptr %4, align 4, !tbaa !5
  %107 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %106)
          to label %108 unwind label %115

108:                                              ; preds = %105
  %109 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %12, i1 noundef zeroext %107, i1 noundef zeroext false)
          to label %110 unwind label %115

110:                                              ; preds = %108
  %111 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %111)
          to label %112 unwind label %115

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

113:                                              ; preds = %103
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %117

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

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

118:                                              ; preds = %99
  %119 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %119, ptr noundef nonnull @.str.1138)
  br label %664

120:                                              ; preds = %6
  %121 = getelementptr inbounds i8, ptr %56, i64 16
  %122 = load i32, ptr %121, align 8, !tbaa !9
  %123 = icmp eq i32 %122, 12
  br i1 %123, label %124, label %152

124:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  %125 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %125, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #6
  %126 = getelementptr inbounds i8, ptr %4, i64 4
  %127 = load i32, ptr %126, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %127, i1 noundef zeroext true)
          to label %128 unwind label %144

128:                                              ; preds = %124
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 1 dereferenceable(18) @.str.1139, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %129 unwind label %146

129:                                              ; preds = %128
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  %130 = load i32, ptr %4, align 4, !tbaa !5
  %131 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %130)
          to label %132 unwind label %149

132:                                              ; preds = %129
  br i1 %131, label %133, label %136

133:                                              ; preds = %132
  %134 = load i32, ptr %126, align 4, !tbaa !5
  %135 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %134)
          to label %136 unwind label %149

136:                                              ; preds = %133, %132
  %137 = phi i1 [ false, %132 ], [ %135, %133 ]
  %138 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %14, i1 noundef zeroext %137, i1 noundef zeroext false)
          to label %139 unwind label %149

139:                                              ; preds = %136
  %140 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %140)
          to label %141 unwind label %149

141:                                              ; preds = %139
  %142 = load i32, ptr %126, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %142)
          to label %143 unwind label %149

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

144:                                              ; preds = %124
  %145 = landingpad { ptr, i32 }
          cleanup
  br label %148

146:                                              ; preds = %128
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  br label %148

148:                                              ; preds = %146, %144
  %.pn352 = phi { ptr, i32 } [ %147, %146 ], [ %145, %144 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %151

149:                                              ; preds = %141, %139, %136, %133, %129
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  br label %151

151:                                              ; preds = %149, %148
  %.pn354 = phi { ptr, i32 } [ %150, %149 ], [ %.pn352, %148 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  br label %665

152:                                              ; preds = %120
  %153 = load i32, ptr %4, align 4, !tbaa !5
  %154 = getelementptr inbounds i8, ptr %4, i64 4
  %155 = load i32, ptr %154, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %153, i32 noundef %155, ptr noundef nonnull @.str.1140)
  br label %664

156:                                              ; preds = %6
  %157 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %157, ptr noundef nonnull @.str.1141)
  br label %664

158:                                              ; preds = %6
  %159 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %159, ptr noundef nonnull @.str.1142)
  br label %664

160:                                              ; preds = %6
  %161 = load i32, ptr %4, align 4, !tbaa !5
  %162 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %161)
  %163 = getelementptr inbounds i8, ptr %162, i64 16
  %164 = load i32, ptr %163, align 8, !tbaa !9
  %165 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %165, ptr noundef nonnull @.str.1143, i32 noundef %164, i32 noundef %164)
  br label %664

166:                                              ; preds = %6
  %167 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %167, ptr noundef nonnull @.str.1144, i32 noundef %53, i32 noundef %53)
  br label %664

168:                                              ; preds = %6
  %169 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %169, ptr noundef nonnull @.str.1145, i32 noundef %54, i32 noundef %54)
  br label %664

170:                                              ; preds = %6
  %171 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %171, ptr noundef nonnull @.str.1146)
  br label %664

172:                                              ; preds = %6
  %173 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %173, ptr noundef nonnull @.str.1147)
  br label %664

174:                                              ; preds = %6
  %175 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %175, ptr noundef nonnull @.str.1148)
  br label %664

176:                                              ; preds = %6
  %177 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %177, ptr noundef nonnull @.str.1149)
  br label %664

178:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  %179 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %179, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 1 dereferenceable(21) @.str.1150, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %180 unwind label %188

180:                                              ; preds = %178
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  %181 = load i32, ptr %4, align 4, !tbaa !5
  %182 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %181)
          to label %183 unwind label %190

183:                                              ; preds = %180
  %184 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %17, i1 noundef zeroext %182, i1 noundef zeroext false)
          to label %185 unwind label %190

185:                                              ; preds = %183
  %186 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %186)
          to label %187 unwind label %190

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

188:                                              ; preds = %178
  %189 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %192

190:                                              ; preds = %185, %183, %180
  %191 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  br label %192

192:                                              ; preds = %190, %188
  %.pn350 = phi { ptr, i32 } [ %191, %190 ], [ %189, %188 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  br label %665

193:                                              ; preds = %6
  %194 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %194, ptr noundef nonnull @.str.1151)
  br label %664

195:                                              ; preds = %6
  %196 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %196, ptr noundef nonnull @.str.1152)
  br label %664

197:                                              ; preds = %6
  %198 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %198, ptr noundef nonnull @.str.1153)
  br label %664

199:                                              ; preds = %6
  %200 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %200, ptr noundef nonnull @.str.1154)
  br label %664

201:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #6
  %202 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %202, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA23_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 1 dereferenceable(23) @.str.1155, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %203 unwind label %211

203:                                              ; preds = %201
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  %204 = load i32, ptr %4, align 4, !tbaa !5
  %205 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %204)
          to label %206 unwind label %213

206:                                              ; preds = %203
  %207 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %19, i1 noundef zeroext %205, i1 noundef zeroext false)
          to label %208 unwind label %213

208:                                              ; preds = %206
  %209 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %209)
          to label %210 unwind label %213

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

211:                                              ; preds = %201
  %212 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  br label %215

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

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

216:                                              ; preds = %6
  %217 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %217, ptr noundef nonnull @.str.1156)
  br label %664

218:                                              ; preds = %6
  %219 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %219, ptr noundef nonnull @.str.1157)
  br label %664

220:                                              ; preds = %6
  %221 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %222 = getelementptr inbounds i8, ptr %221, i64 28
  %223 = load i32, ptr %222, align 4, !tbaa !38
  switch i32 %223, label %664 [
    i32 2, label %224
    i32 3, label %226
    i32 4, label %228
  ]

224:                                              ; preds = %220
  %225 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %225, ptr noundef nonnull @.str.1158)
  br label %664

226:                                              ; preds = %220
  %227 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %227, ptr noundef nonnull @.str.1159)
  br label %664

228:                                              ; preds = %220
  %229 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %229, ptr noundef nonnull @.str.1160)
  br label %664

230:                                              ; preds = %6
  %231 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %232 = getelementptr inbounds i8, ptr %231, i64 16
  %233 = load i32, ptr %232, align 8, !tbaa !9
  %.not347 = icmp eq i32 %233, 13
  %234 = load i32, ptr %4, align 4, !tbaa !5
  %235 = getelementptr inbounds i8, ptr %4, i64 4
  %236 = load i32, ptr %235, align 4, !tbaa !5
  br i1 %.not347, label %238, label %237

237:                                              ; preds = %230
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %234, i32 noundef %236, ptr noundef nonnull @.str.1161)
  br label %664

238:                                              ; preds = %230
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %234, i32 noundef %236, ptr noundef nonnull @.str.1162)
  br label %664

239:                                              ; preds = %6
  %240 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %241 = getelementptr inbounds i8, ptr %240, i64 16
  %242 = load i32, ptr %241, align 8, !tbaa !9
  %.not346 = icmp eq i32 %242, 13
  %243 = load i32, ptr %4, align 4, !tbaa !5
  %244 = getelementptr inbounds i8, ptr %4, i64 4
  %245 = load i32, ptr %244, align 4, !tbaa !5
  br i1 %.not346, label %247, label %246

246:                                              ; preds = %239
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %243, i32 noundef %245, ptr noundef nonnull @.str.1163)
  br label %664

247:                                              ; preds = %239
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %243, i32 noundef %245, ptr noundef nonnull @.str.1164)
  br label %664

248:                                              ; preds = %6
  %249 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %250 = getelementptr inbounds i8, ptr %249, i64 16
  %251 = load i32, ptr %250, align 8, !tbaa !9
  %.not345 = icmp eq i32 %251, 13
  %252 = load i32, ptr %4, align 4, !tbaa !5
  %253 = getelementptr inbounds i8, ptr %4, i64 4
  %254 = load i32, ptr %253, align 4, !tbaa !5
  %255 = getelementptr inbounds i8, ptr %4, i64 8
  %256 = load i32, ptr %255, align 4, !tbaa !5
  br i1 %.not345, label %258, label %257

257:                                              ; preds = %248
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %252, i32 noundef %254, i32 noundef %256, ptr noundef nonnull @.str.1165)
  br label %664

258:                                              ; preds = %248
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %252, i32 noundef %254, i32 noundef %256, ptr noundef nonnull @.str.1166)
  br label %664

259:                                              ; preds = %6
  %260 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %261 = getelementptr inbounds i8, ptr %260, i64 16
  %262 = load i32, ptr %261, align 8, !tbaa !9
  %.not344 = icmp eq i32 %262, 13
  %263 = load i32, ptr %4, align 4, !tbaa !5
  %264 = getelementptr inbounds i8, ptr %4, i64 4
  %265 = load i32, ptr %264, align 4, !tbaa !5
  br i1 %.not344, label %267, label %266

266:                                              ; preds = %259
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %263, i32 noundef %265, ptr noundef nonnull @.str.1161)
  br label %664

267:                                              ; preds = %259
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %263, i32 noundef %265, ptr noundef nonnull @.str.1167)
  br label %664

268:                                              ; preds = %6
  %269 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %270 = getelementptr inbounds i8, ptr %269, i64 16
  %271 = load i32, ptr %270, align 8, !tbaa !9
  %.not343 = icmp eq i32 %271, 13
  %272 = load i32, ptr %4, align 4, !tbaa !5
  %273 = getelementptr inbounds i8, ptr %4, i64 4
  %274 = load i32, ptr %273, align 4, !tbaa !5
  br i1 %.not343, label %276, label %275

275:                                              ; preds = %268
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %272, i32 noundef %274, ptr noundef nonnull @.str.1163)
  br label %664

276:                                              ; preds = %268
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %272, i32 noundef %274, ptr noundef nonnull @.str.1168)
  br label %664

277:                                              ; preds = %6
  %278 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %279 = getelementptr inbounds i8, ptr %278, i64 16
  %280 = load i32, ptr %279, align 8, !tbaa !9
  %.not342 = icmp eq i32 %280, 13
  %281 = load i32, ptr %4, align 4, !tbaa !5
  %282 = getelementptr inbounds i8, ptr %4, i64 4
  %283 = load i32, ptr %282, align 4, !tbaa !5
  %284 = getelementptr inbounds i8, ptr %4, i64 8
  %285 = load i32, ptr %284, align 4, !tbaa !5
  br i1 %.not342, label %287, label %286

286:                                              ; preds = %277
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %281, i32 noundef %283, i32 noundef %285, ptr noundef nonnull @.str.1165)
  br label %664

287:                                              ; preds = %277
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %281, i32 noundef %283, i32 noundef %285, ptr noundef nonnull @.str.1169)
  br label %664

288:                                              ; preds = %6
  %289 = load i32, ptr %4, align 4, !tbaa !5
  %290 = tail call noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %289, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  %291 = load i32, ptr %4, align 4, !tbaa !5
  %292 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %291, i32 noundef 15)
          to label %293 unwind label %308

293:                                              ; preds = %288
  br i1 %292, label %294, label %327

294:                                              ; preds = %293
  %295 = load i32, ptr %4, align 4, !tbaa !5
  %296 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %295, i32 noundef 15)
          to label %297 unwind label %310

297:                                              ; preds = %294
  %298 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %296)
          to label %299 unwind label %312

299:                                              ; preds = %297
  %.not332 = icmp eq ptr %298, null
  br i1 %.not332, label %304, label %300

300:                                              ; preds = %299
  %301 = getelementptr inbounds i8, ptr %298, i64 264
  %302 = load i8, ptr %301, align 8, !tbaa !39, !range !47, !noundef !48
  %303 = trunc nuw i8 %302 to i1
  br i1 %303, label %304, label %319

304:                                              ; preds = %300, %299
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %296, i1 noundef zeroext true)
          to label %305 unwind label %314

305:                                              ; preds = %304
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %306 unwind label %316

306:                                              ; preds = %305
  %307 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #6
  br label %327

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

310:                                              ; preds = %294
  %311 = landingpad { ptr, i32 }
          cleanup
  br label %354

312:                                              ; preds = %297
  %313 = landingpad { ptr, i32 }
          cleanup
  br label %354

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

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

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

319:                                              ; preds = %300
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #6
  %320 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %298, i32 noundef 0, i32 noundef 0)
  %321 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %320)
          to label %322 unwind label %325

322:                                              ; preds = %319
  store ptr %321, ptr %25, align 8, !tbaa !49
  invoke void @_ZN11spirv_cross4joinIJRA2_KcPS1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(8) %25)
          to label %323 unwind label %325

323:                                              ; preds = %322
  %324 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  br label %327

325:                                              ; preds = %322, %319
  %326 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  br label %354

327:                                              ; preds = %306, %323, %293
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #6
  %328 = getelementptr inbounds i8, ptr %0, i64 11132
  %329 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %328)
  %330 = load ptr, ptr %0, align 8, !tbaa !50
  %331 = getelementptr inbounds i8, ptr %330, i64 48
  %332 = load ptr, ptr %331, align 8
  invoke void %332(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %329, i1 noundef zeroext true)
          to label %333 unwind label %343

333:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #6
  %334 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %335 unwind label %345

335:                                              ; preds = %333
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %334, i32 noundef %290)
          to label %336 unwind label %345

336:                                              ; preds = %335
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA27_S7_RS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(27) @.str.124, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %337 unwind label %347

337:                                              ; preds = %336
  %338 = load i32, ptr %4, align 4, !tbaa !5
  %339 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %338)
          to label %340 unwind label %349

340:                                              ; preds = %337
  %341 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %26, i1 noundef zeroext %339, i1 noundef zeroext false)
          to label %342 unwind label %349

342:                                              ; preds = %340
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  br label %664

343:                                              ; preds = %327
  %344 = landingpad { ptr, i32 }
          cleanup
  br label %353

345:                                              ; preds = %335, %333
  %346 = landingpad { ptr, i32 }
          cleanup
  br label %352

347:                                              ; preds = %336
  %348 = landingpad { ptr, i32 }
          cleanup
  br label %351

349:                                              ; preds = %340, %337
  %350 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  br label %351

351:                                              ; preds = %349, %347
  %.pn337 = phi { ptr, i32 } [ %350, %349 ], [ %348, %347 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  br label %352

352:                                              ; preds = %351, %345
  %.pn337.pn = phi { ptr, i32 } [ %.pn337, %351 ], [ %346, %345 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  br label %353

353:                                              ; preds = %352, %343
  %.pn337.pn.pn = phi { ptr, i32 } [ %.pn337.pn, %352 ], [ %344, %343 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  br label %354

354:                                              ; preds = %310, %325, %318, %312, %353, %308
  %.pn337.pn.pn.pn = phi { ptr, i32 } [ %.pn337.pn.pn, %353 ], [ %309, %308 ], [ %311, %310 ], [ %.pn333, %318 ], [ %326, %325 ], [ %313, %312 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  br label %665

355:                                              ; preds = %6
  %356 = load i32, ptr %4, align 4, !tbaa !5
  %357 = tail call noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %356, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  %358 = load i32, ptr %4, align 4, !tbaa !5
  %359 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %358, i32 noundef 15)
          to label %360 unwind label %375

360:                                              ; preds = %355
  br i1 %359, label %361, label %394

361:                                              ; preds = %360
  %362 = load i32, ptr %4, align 4, !tbaa !5
  %363 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %362, i32 noundef 15)
          to label %364 unwind label %377

364:                                              ; preds = %361
  %365 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %363)
          to label %366 unwind label %379

366:                                              ; preds = %364
  %.not321 = icmp eq ptr %365, null
  br i1 %.not321, label %371, label %367

367:                                              ; preds = %366
  %368 = getelementptr inbounds i8, ptr %365, i64 264
  %369 = load i8, ptr %368, align 8, !tbaa !39, !range !47, !noundef !48
  %370 = trunc nuw i8 %369 to i1
  br i1 %370, label %371, label %386

371:                                              ; preds = %367, %366
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %363, i1 noundef zeroext true)
          to label %372 unwind label %381

372:                                              ; preds = %371
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %373 unwind label %383

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

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

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

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

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

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

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

386:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #6
  %387 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %365, i32 noundef 0, i32 noundef 0)
  %388 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %387)
          to label %389 unwind label %392

389:                                              ; preds = %386
  store ptr %388, ptr %33, align 8, !tbaa !49
  invoke void @_ZN11spirv_cross4joinIJRA2_KcPS1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %390 unwind label %392

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

392:                                              ; preds = %389, %386
  %393 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #6
  br label %432

394:                                              ; preds = %373, %390, %360
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #6
  %395 = getelementptr inbounds i8, ptr %0, i64 11132
  %396 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %395)
  %397 = load ptr, ptr %0, align 8, !tbaa !50
  %398 = getelementptr inbounds i8, ptr %397, i64 48
  %399 = load ptr, ptr %398, align 8
  invoke void %399(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %396, i1 noundef zeroext true)
          to label %400 unwind label %418

400:                                              ; preds = %394
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #6
  %401 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %402 unwind label %420

402:                                              ; preds = %400
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %401, i32 noundef %357)
          to label %403 unwind label %420

403:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #6
  %404 = getelementptr inbounds i8, ptr %4, i64 4
  %405 = load i32, ptr %404, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %405, i1 noundef zeroext true)
          to label %406 unwind label %422

406:                                              ; preds = %403
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA24_S7_S6_S9_RS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(24) @.str.125, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(2) @.str.53, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %407 unwind label %424

407:                                              ; preds = %406
  %408 = load i32, ptr %4, align 4, !tbaa !5
  %409 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %408)
          to label %410 unwind label %426

410:                                              ; preds = %407
  br i1 %409, label %411, label %414

411:                                              ; preds = %410
  %412 = load i32, ptr %404, align 4, !tbaa !5
  %413 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %412)
          to label %414 unwind label %426

414:                                              ; preds = %411, %410
  %415 = phi i1 [ false, %410 ], [ %413, %411 ]
  %416 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %34, i1 noundef zeroext %415, i1 noundef zeroext false)
          to label %417 unwind label %426

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

418:                                              ; preds = %394
  %419 = landingpad { ptr, i32 }
          cleanup
  br label %431

420:                                              ; preds = %402, %400
  %421 = landingpad { ptr, i32 }
          cleanup
  br label %430

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

424:                                              ; preds = %406
  %425 = landingpad { ptr, i32 }
          cleanup
  br label %428

426:                                              ; preds = %414, %411, %407
  %427 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #6
  br label %428

428:                                              ; preds = %426, %424
  %.pn326 = phi { ptr, i32 } [ %427, %426 ], [ %425, %424 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  br label %429

429:                                              ; preds = %428, %422
  %.pn326.pn = phi { ptr, i32 } [ %.pn326, %428 ], [ %423, %422 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  br label %430

430:                                              ; preds = %429, %420
  %.pn326.pn.pn = phi { ptr, i32 } [ %.pn326.pn, %429 ], [ %421, %420 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  br label %431

431:                                              ; preds = %430, %418
  %.pn326.pn.pn.pn = phi { ptr, i32 } [ %.pn326.pn.pn, %430 ], [ %419, %418 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #6
  br label %432

432:                                              ; preds = %377, %392, %385, %379, %431, %375
  %.pn326.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn326.pn.pn.pn, %431 ], [ %376, %375 ], [ %378, %377 ], [ %.pn322, %385 ], [ %393, %392 ], [ %380, %379 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  br label %665

433:                                              ; preds = %6
  %434 = load i32, ptr %4, align 4, !tbaa !5
  %435 = tail call noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %434, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  %436 = load i32, ptr %4, align 4, !tbaa !5
  %437 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %436, i32 noundef 15)
          to label %438 unwind label %453

438:                                              ; preds = %433
  br i1 %437, label %439, label %472

439:                                              ; preds = %438
  %440 = load i32, ptr %4, align 4, !tbaa !5
  %441 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %440, i32 noundef 15)
          to label %442 unwind label %455

442:                                              ; preds = %439
  %443 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %441)
          to label %444 unwind label %457

444:                                              ; preds = %442
  %.not310 = icmp eq ptr %443, null
  br i1 %.not310, label %449, label %445

445:                                              ; preds = %444
  %446 = getelementptr inbounds i8, ptr %443, i64 264
  %447 = load i8, ptr %446, align 8, !tbaa !39, !range !47, !noundef !48
  %448 = trunc nuw i8 %447 to i1
  br i1 %448, label %449, label %464

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

450:                                              ; preds = %449
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %451 unwind label %461

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

453:                                              ; preds = %433
  %454 = landingpad { ptr, i32 }
          cleanup
  br label %510

455:                                              ; preds = %439
  %456 = landingpad { ptr, i32 }
          cleanup
  br label %510

457:                                              ; preds = %442
  %458 = landingpad { ptr, i32 }
          cleanup
  br label %510

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

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

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

464:                                              ; preds = %445
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #6
  %465 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %443, i32 noundef 0, i32 noundef 0)
  %466 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %465)
          to label %467 unwind label %470

467:                                              ; preds = %464
  store ptr %466, ptr %42, align 8, !tbaa !49
  invoke void @_ZN11spirv_cross4joinIJRA2_KcPS1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %468 unwind label %470

468:                                              ; preds = %467
  %469 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #6
  br label %472

470:                                              ; preds = %467, %464
  %471 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #6
  br label %510

472:                                              ; preds = %451, %468, %438
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #6
  %473 = getelementptr inbounds i8, ptr %0, i64 11132
  %474 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %473)
  %475 = load ptr, ptr %0, align 8, !tbaa !50
  %476 = getelementptr inbounds i8, ptr %475, i64 48
  %477 = load ptr, ptr %476, align 8
  invoke void %477(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %474, i1 noundef zeroext true)
          to label %478 unwind label %496

478:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #6
  %479 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %480 unwind label %498

480:                                              ; preds = %478
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %479, i32 noundef %435)
          to label %481 unwind label %498

481:                                              ; preds = %480
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #6
  %482 = getelementptr inbounds i8, ptr %4, i64 4
  %483 = load i32, ptr %482, align 4, !tbaa !5
  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 %483, i1 noundef zeroext true)
          to label %484 unwind label %500

484:                                              ; preds = %481
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA24_S7_S6_RA11_S7_RS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 1 dereferenceable(24) @.str.1170, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 1 dereferenceable(11) @.str.1171, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %485 unwind label %502

485:                                              ; preds = %484
  %486 = load i32, ptr %4, align 4, !tbaa !5
  %487 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %486)
          to label %488 unwind label %504

488:                                              ; preds = %485
  br i1 %487, label %489, label %492

489:                                              ; preds = %488
  %490 = load i32, ptr %482, align 4, !tbaa !5
  %491 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %490)
          to label %492 unwind label %504

492:                                              ; preds = %489, %488
  %493 = phi i1 [ false, %488 ], [ %491, %489 ]
  %494 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %43, i1 noundef zeroext %493, i1 noundef zeroext false)
          to label %495 unwind label %504

495:                                              ; preds = %492
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  br label %664

496:                                              ; preds = %472
  %497 = landingpad { ptr, i32 }
          cleanup
  br label %509

498:                                              ; preds = %480, %478
  %499 = landingpad { ptr, i32 }
          cleanup
  br label %508

500:                                              ; preds = %481
  %501 = landingpad { ptr, i32 }
          cleanup
  br label %507

502:                                              ; preds = %484
  %503 = landingpad { ptr, i32 }
          cleanup
  br label %506

504:                                              ; preds = %492, %489, %485
  %505 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  br label %506

506:                                              ; preds = %504, %502
  %.pn315 = phi { ptr, i32 } [ %505, %504 ], [ %503, %502 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #6
  br label %507

507:                                              ; preds = %506, %500
  %.pn315.pn = phi { ptr, i32 } [ %.pn315, %506 ], [ %501, %500 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  br label %508

508:                                              ; preds = %507, %498
  %.pn315.pn.pn = phi { ptr, i32 } [ %.pn315.pn, %507 ], [ %499, %498 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  br label %509

509:                                              ; preds = %508, %496
  %.pn315.pn.pn.pn = phi { ptr, i32 } [ %.pn315.pn.pn, %508 ], [ %497, %496 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  br label %510

510:                                              ; preds = %455, %470, %463, %457, %509, %453
  %.pn315.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn315.pn.pn.pn, %509 ], [ %454, %453 ], [ %456, %455 ], [ %.pn311, %463 ], [ %471, %470 ], [ %458, %457 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  br label %665

511:                                              ; preds = %6
  %512 = load i32, ptr %4, align 4, !tbaa !5
  %513 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %512)
  %514 = getelementptr inbounds i8, ptr %513, i64 24
  %515 = load i32, ptr %514, align 8, !tbaa !52
  %516 = icmp eq i32 %515, 1
  br i1 %516, label %517, label %543

517:                                              ; preds = %511
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #6
  %518 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_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 %518, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #6
  %519 = getelementptr inbounds i8, ptr %4, i64 4
  %520 = load i32, ptr %519, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %520, i1 noundef zeroext true)
          to label %521 unwind label %535

521:                                              ; preds = %517
  invoke void @_ZN11spirv_cross4joinIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 1 dereferenceable(5) @.str.1172, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(4) @.str.1014, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %522 unwind label %537

522:                                              ; preds = %521
  %523 = load i32, ptr %4, align 4, !tbaa !5
  %524 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %523)
          to label %525 unwind label %539

525:                                              ; preds = %522
  br i1 %524, label %526, label %529

526:                                              ; preds = %525
  %527 = load i32, ptr %519, align 4, !tbaa !5
  %528 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %527)
          to label %529 unwind label %539

529:                                              ; preds = %526, %525
  %530 = phi i1 [ false, %525 ], [ %528, %526 ]
  %531 = 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 %2, ptr noundef nonnull align 8 dereferenceable(32) %47, i1 noundef zeroext %530, i1 noundef zeroext false)
          to label %532 unwind label %539

532:                                              ; preds = %529
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #6
  %533 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %533)
  %534 = load i32, ptr %519, align 4, !tbaa !5
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %534)
  br label %664

535:                                              ; preds = %517
  %536 = landingpad { ptr, i32 }
          cleanup
  br label %542

537:                                              ; preds = %521
  %538 = landingpad { ptr, i32 }
          cleanup
  br label %541

539:                                              ; preds = %529, %526, %522
  %540 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  br label %541

541:                                              ; preds = %539, %537
  %.pn307 = phi { ptr, i32 } [ %540, %539 ], [ %538, %537 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  br label %542

542:                                              ; preds = %541, %535
  %.pn307.pn = phi { ptr, i32 } [ %.pn307, %541 ], [ %536, %535 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #6
  br label %665

543:                                              ; preds = %511
  tail call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef nonnull %4, i32 noundef %5)
  br label %664

544:                                              ; preds = %6
  %545 = load i32, ptr %4, align 4, !tbaa !5
  %546 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %545)
  %547 = getelementptr inbounds i8, ptr %546, i64 24
  %548 = load i32, ptr %547, align 8, !tbaa !52
  %549 = icmp eq i32 %548, 1
  br i1 %549, label %550, label %552

550:                                              ; preds = %544
  %551 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %551, ptr noundef nonnull @.str.1173)
  br label %664

552:                                              ; preds = %544
  tail call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef nonnull %4, i32 noundef %5)
  br label %664

553:                                              ; preds = %6
  %554 = load i32, ptr %4, align 4, !tbaa !5
  %555 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %554)
  %556 = getelementptr inbounds i8, ptr %555, i64 24
  %557 = load i32, ptr %556, align 8, !tbaa !52
  %558 = icmp eq i32 %557, 1
  br i1 %558, label %559, label %561

559:                                              ; preds = %553
  %560 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %560, ptr noundef nonnull @.str.1174)
  br label %664

561:                                              ; preds = %553
  %562 = icmp ult i32 %557, 4
  %563 = getelementptr inbounds i8, ptr %555, i64 16
  %564 = load i32, ptr %563, align 8
  %565 = icmp eq i32 %564, 12
  %or.cond = select i1 %562, i1 %565, i1 false
  %566 = load i32, ptr %4, align 4, !tbaa !5
  br i1 %or.cond, label %567, label %568

567:                                              ; preds = %561
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %566, ptr noundef nonnull @.str.1175)
  br label %664

568:                                              ; preds = %561
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %566, ptr noundef nonnull @.str.1176)
  br label %664

569:                                              ; preds = %6
  %570 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %571 = getelementptr inbounds i8, ptr %570, i64 24
  %572 = load i32, ptr %571, align 8, !tbaa !52
  %573 = icmp eq i32 %572, 1
  br i1 %573, label %574, label %578

574:                                              ; preds = %569
  %575 = load i32, ptr %4, align 4, !tbaa !5
  %576 = getelementptr inbounds i8, ptr %4, i64 4
  %577 = load i32, ptr %576, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %575, i32 noundef %577, ptr noundef nonnull @.str.1177)
  br label %664

578:                                              ; preds = %569
  tail call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5)
  br label %664

579:                                              ; preds = %6
  %580 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %581 = getelementptr inbounds i8, ptr %580, i64 24
  %582 = load i32, ptr %581, align 8, !tbaa !52
  %583 = icmp eq i32 %582, 1
  br i1 %583, label %584, label %590

584:                                              ; preds = %579
  %585 = load i32, ptr %4, align 4, !tbaa !5
  %586 = getelementptr inbounds i8, ptr %4, i64 4
  %587 = load i32, ptr %586, align 4, !tbaa !5
  %588 = getelementptr inbounds i8, ptr %4, i64 8
  %589 = load i32, ptr %588, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %585, i32 noundef %587, i32 noundef %589, ptr noundef nonnull @.str.1178)
  br label %664

590:                                              ; preds = %579
  tail call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5)
  br label %664

591:                                              ; preds = %6
  %592 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %593 = getelementptr inbounds i8, ptr %592, i64 24
  %594 = load i32, ptr %593, align 8, !tbaa !52
  %595 = icmp eq i32 %594, 1
  br i1 %595, label %596, label %602

596:                                              ; preds = %591
  %597 = load i32, ptr %4, align 4, !tbaa !5
  %598 = getelementptr inbounds i8, ptr %4, i64 4
  %599 = load i32, ptr %598, align 4, !tbaa !5
  %600 = getelementptr inbounds i8, ptr %4, i64 8
  %601 = load i32, ptr %600, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %597, i32 noundef %599, i32 noundef %601, ptr noundef nonnull @.str.1179)
  br label %664

602:                                              ; preds = %591
  tail call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5)
  br label %664

603:                                              ; preds = %6, %6
  %604 = getelementptr inbounds i8, ptr %4, i64 4
  %605 = load i32, ptr %604, align 4, !tbaa !5
  %606 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %605)
  %607 = load i32, ptr %604, align 4, !tbaa !5
  %608 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %607)
  %609 = getelementptr inbounds i8, ptr %608, i64 128
  %610 = load i32, ptr %609, align 8, !tbaa !53
  %611 = tail call noundef zeroext i1 @_ZL29storage_class_array_is_threadN3spv12StorageClassE(i32 noundef %610)
  %612 = load i32, ptr %609, align 8, !tbaa !53
  %613 = icmp eq i32 %612, 3
  br i1 %613, label %614, label %618

614:                                              ; preds = %603
  %615 = getelementptr inbounds i8, ptr %0, i64 11188
  %616 = load i8, ptr %615, align 4, !tbaa !54, !range !47, !noundef !48
  %617 = trunc nuw i8 %616 to i1
  %not. = xor i1 %617, true
  %spec.select = and i1 %611, %not.
  br i1 %spec.select, label %619, label %628

618:                                              ; preds = %603
  br i1 %611, label %619, label %628

619:                                              ; preds = %614, %618
  %.not = icmp eq ptr %606, null
  br i1 %.not, label %658, label %620

620:                                              ; preds = %619
  %621 = getelementptr inbounds i8, ptr %606, i64 58
  %622 = load i8, ptr %621, align 2, !tbaa !200, !range !47, !noundef !48
  %623 = trunc nuw i8 %622 to i1
  br i1 %623, label %624, label %658

624:                                              ; preds = %620
  %625 = load i32, ptr %604, align 4, !tbaa !5
  %626 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %625)
  %627 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %626)
  br i1 %627, label %628, label %658

628:                                              ; preds = %614, %624, %618
  %629 = load i32, ptr %604, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %629)
  %630 = getelementptr inbounds i8, ptr %0, i64 2400
  %631 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %630, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %632 = getelementptr inbounds i8, ptr %0, i64 9272
  %633 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %632, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %634 = load i32, ptr %633, align 4, !tbaa !5
  %.not305 = icmp eq i32 %634, 0
  br i1 %.not305, label %635, label %638

635:                                              ; preds = %628
  %636 = getelementptr inbounds i8, ptr %0, i64 8
  %637 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %636, i32 noundef 1)
  store i32 %637, ptr %633, align 4, !tbaa !5
  br label %638

638:                                              ; preds = %635, %628
  %639 = load i32, ptr %604, align 4, !tbaa !5
  %640 = call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %639)
  %641 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_pointee_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %640)
  %642 = load i32, ptr %633, align 4, !tbaa !5
  %643 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %641, i32 noundef %642)
  %644 = load i32, ptr %7, align 4, !tbaa !5
  %645 = load i32, ptr %4, align 4, !tbaa !5
  %646 = load i32, ptr %633, align 4, !tbaa !5
  %647 = icmp eq i32 %3, 35
  %648 = select i1 %647, ptr @.str.1180, ptr @.str.1181
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %644, i32 noundef %645, i32 noundef %646, ptr noundef nonnull %648)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #6
  %649 = load i32, ptr %604, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %649, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #6
  %650 = load i32, ptr %633, 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 %650, i1 noundef zeroext true)
          to label %651 unwind label %653

651:                                              ; preds = %638
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %652 unwind label %655

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

653:                                              ; preds = %638
  %654 = landingpad { ptr, i32 }
          cleanup
  br label %657

655:                                              ; preds = %651
  %656 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  br label %657

657:                                              ; preds = %655, %653
  %.pn = phi { ptr, i32 } [ %656, %655 ], [ %654, %653 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #6
  br label %665

658:                                              ; preds = %624, %620, %619
  tail call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef nonnull %4, i32 noundef %5)
  br label %664

659:                                              ; preds = %6
  %660 = load i32, ptr %4, align 4, !tbaa !5
  %661 = getelementptr inbounds i8, ptr %4, i64 4
  %662 = load i32, ptr %661, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %660, i32 noundef %662, ptr noundef nonnull @.str.1182)
  br label %664

663:                                              ; preds = %6
  tail call void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5)
  br label %664

664:                                              ; preds = %652, %658, %559, %568, %567, %224, %226, %228, %220, %596, %602, %584, %590, %574, %578, %550, %552, %532, %543, %286, %287, %275, %276, %266, %267, %257, %258, %246, %247, %237, %238, %143, %152, %112, %118, %91, %97, %70, %76, %663, %659, %495, %417, %342, %218, %216, %210, %199, %197, %195, %193, %187, %176, %174, %172, %170, %168, %166, %160, %158, %156
  ret void

665:                                              ; preds = %657, %542, %510, %432, %354, %215, %192, %151, %117, %96, %75
  %.pn.pn = phi { ptr, i32 } [ %.pn, %657 ], [ %.pn307.pn, %542 ], [ %.pn315.pn.pn.pn.pn, %510 ], [ %.pn326.pn.pn.pn.pn, %432 ], [ %.pn337.pn.pn.pn, %354 ], [ %.pn348, %215 ], [ %.pn350, %192 ], [ %.pn354, %151 ], [ %.pn356, %117 ], [ %.pn358, %96 ], [ %.pn360, %75 ]
  resume { ptr, i32 } %.pn.pn
}

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL38get_integer_width_for_glsl_instructionE10GLSLstd450PKjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL20get_remapped_glsl_opE10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_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(5), 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 #3

declare void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) unnamed_addr #2

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

declare noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #2

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

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,SROAPass,SimplifyCFGPass,TailCallElimPass