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

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

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

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.940 = external hidden unnamed_addr constant [22 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj = external hidden unnamed_addr constant [90 x i8], align 1
@.str.941 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.942 = external hidden unnamed_addr constant [12 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

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

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

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

; 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #6

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler25is_tessellating_trianglesEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #3 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 ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #5

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488), ptr noundef nonnull align 8 dereferenceable(488)) #7 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #8 align 2

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

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef, i32 noundef) #5

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef %1, i32 noundef %2) #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca %"class.spirv_cross::TypedID.413", align 4
  %17 = alloca %"class.spirv_cross::TypedID.413", align 4
  %18 = alloca %"class.spirv_cross::TypedID.413", align 4
  %19 = alloca i8, align 1
  %20 = alloca i8, align 1
  %21 = alloca i32, align 4
  %22 = alloca %"class.spirv_cross::TypedID.413", align 4
  %23 = alloca i8, align 1
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %28 = alloca %"class.spirv_cross::SmallVector.92", align 8
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca %"class.spirv_cross::TypedID.350", align 4
  %34 = alloca %"class.spirv_cross::TypedID.350", align 4
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i8, align 1
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca i32, align 4
  %43 = alloca %"class.spirv_cross::TypedID.520", align 4
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca ptr, align 8
  %48 = alloca i8, align 1
  %49 = alloca i32, align 4
  %50 = alloca i8, align 1
  %51 = alloca i32, align 4
  %52 = alloca i8, align 1
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca ptr, align 8
  %56 = alloca i8, align 1
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca ptr, align 8
  %62 = alloca i32, align 4
  %63 = alloca ptr, align 8
  %64 = alloca i8, align 1
  %65 = alloca %"class.spirv_cross::TypedID.413", align 4
  %66 = alloca %"struct.std::pair.444", align 8
  %67 = alloca %"struct.std::pair.444", align 8
  %68 = alloca i32, align 4
  %69 = alloca ptr, align 8
  %70 = alloca %"class.spirv_cross::TypedID.413", align 4
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca %"class.spirv_cross::TypedID.414", align 4
  %74 = alloca %"class.spirv_cross::TypedID.413", align 4
  %75 = alloca %"class.spirv_cross::TypedID.413", align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  %76 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = getelementptr inbounds i32, ptr %77, i64 2
  %79 = load i32, ptr %78, align 4, !tbaa !9
  %80 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %79)
  store ptr %80, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #9
  store i8 0, ptr %9, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #9
  store i8 0, ptr %10, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #9
  store i8 0, ptr %11, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #9
  store i8 0, ptr %12, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #9
  store i8 0, ptr %13, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #9
  store i8 0, ptr %14, align 1, !tbaa !11
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  %82 = icmp ne ptr %81, null
  br i1 %82, label %83, label %154

83:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %84 = load ptr, ptr %8, align 8, !tbaa !5
  %85 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(176) %84)
  store ptr %85, ptr %15, align 8, !tbaa !5
  %86 = load ptr, ptr %15, align 8, !tbaa !5
  %87 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %86, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 8 %87, i64 4, i1 false), !tbaa.struct !13
  %88 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %16, i32 0, i32 0
  %89 = load i32, ptr %88, align 4
  %90 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 %89, i32 noundef 2)
  %91 = zext i1 %90 to i8
  store i8 %91, ptr %13, align 1, !tbaa !11
  %92 = load ptr, ptr %15, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %92, i32 0, i32 6
  %94 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %93) #9
  %95 = xor i1 %94, true
  %96 = zext i1 %95 to i8
  store i8 %96, ptr %14, align 1, !tbaa !11
  %97 = load ptr, ptr %8, align 8, !tbaa !5
  %98 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %97, i32 0, i32 2
  %99 = load i32, ptr %98, align 8, !tbaa !14
  %100 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %76, i32 noundef %99)
  %101 = zext i1 %100 to i8
  store i8 %101, ptr %12, align 1, !tbaa !11
  %102 = load ptr, ptr %6, align 8, !tbaa !5
  %103 = getelementptr inbounds i32, ptr %102, i64 2
  %104 = load i32, ptr %103, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef %104)
  %105 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %17, i32 0, i32 0
  %106 = load i32, ptr %105, align 4
  %107 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 %106, i32 noundef 15)
  br i1 %107, label %111, label %108

108:                                              ; preds = %83
  %109 = load ptr, ptr %15, align 8, !tbaa !5
  %110 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL14is_patch_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %76, ptr noundef nonnull align 8 dereferenceable(336) %109)
  br label %111

111:                                              ; preds = %108, %83
  %112 = phi i1 [ true, %83 ], [ %110, %108 ]
  %113 = zext i1 %112 to i8
  store i8 %113, ptr %9, align 1, !tbaa !11
  %114 = load ptr, ptr %8, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %114, i32 0, i32 2
  %116 = load i32, ptr %115, align 8, !tbaa !14
  %117 = icmp eq i32 %116, 1
  br i1 %117, label %127, label %118

118:                                              ; preds = %111
  %119 = load ptr, ptr %8, align 8, !tbaa !5
  %120 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %119, i32 0, i32 2
  %121 = load i32, ptr %120, align 8, !tbaa !14
  %122 = icmp eq i32 %121, 3
  br i1 %122, label %123, label %125

123:                                              ; preds = %118
  %124 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %76)
  br label %125

125:                                              ; preds = %123, %118
  %126 = phi i1 [ false, %118 ], [ %124, %123 ]
  br label %127

127:                                              ; preds = %125, %111
  %128 = phi i1 [ true, %111 ], [ %126, %125 ]
  %129 = zext i1 %128 to i8
  store i8 %129, ptr %10, align 1, !tbaa !11
  %130 = load i8, ptr %9, align 1, !tbaa !11, !range !29, !noundef !30
  %131 = trunc i8 %130 to i1
  br i1 %131, label %132, label %144

132:                                              ; preds = %127
  %133 = load i8, ptr %13, align 1, !tbaa !11, !range !29, !noundef !30
  %134 = trunc i8 %133 to i1
  br i1 %134, label %135, label %143

135:                                              ; preds = %132
  %136 = load i8, ptr %14, align 1, !tbaa !11, !range !29, !noundef !30
  %137 = trunc i8 %136 to i1
  br i1 %137, label %143, label %138

138:                                              ; preds = %135
  %139 = load ptr, ptr %8, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %139, i32 0, i32 2
  %141 = load i32, ptr %140, align 8, !tbaa !14
  %142 = icmp eq i32 %141, 1
  br i1 %142, label %143, label %144

143:                                              ; preds = %138, %135, %132
  store i8 0, ptr %10, align 1, !tbaa !11
  br label %144

144:                                              ; preds = %143, %138, %127
  %145 = load ptr, ptr %8, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %145, i32 0, i32 1
  %147 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %146)
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  %148 = load ptr, ptr %6, align 8, !tbaa !5
  %149 = getelementptr inbounds i32, ptr %148, i64 2
  %150 = load i32, ptr %149, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %18, i32 noundef %150)
  %151 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %18)
  %152 = icmp ne i32 %147, %151
  %153 = zext i1 %152 to i8
  store i8 %153, ptr %11, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %154

154:                                              ; preds = %144, %3
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #9
  store i8 0, ptr %19, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #9
  store i8 0, ptr %20, align 1, !tbaa !11
  %155 = load ptr, ptr %8, align 8, !tbaa !5
  %156 = icmp ne ptr %155, null
  br i1 %156, label %157, label %196

157:                                              ; preds = %154
  %158 = load i8, ptr %10, align 1, !tbaa !11, !range !29, !noundef !30
  %159 = trunc i8 %158 to i1
  br i1 %159, label %160, label %196

160:                                              ; preds = %157
  %161 = load ptr, ptr %8, align 8, !tbaa !5
  %162 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(176) %161)
  %163 = zext i1 %162 to i8
  store i8 %163, ptr %19, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  store i32 2147483647, ptr %21, align 4, !tbaa !31
  %164 = load i8, ptr %19, align 1, !tbaa !11, !range !29, !noundef !30
  %165 = trunc i8 %164 to i1
  br i1 %165, label %166, label %175

166:                                              ; preds = %160
  %167 = load i8, ptr %13, align 1, !tbaa !11, !range !29, !noundef !30
  %168 = trunc i8 %167 to i1
  br i1 %168, label %175, label %169

169:                                              ; preds = %166
  %170 = load ptr, ptr %8, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %170, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %22, ptr align 8 %171, i64 4, i1 false), !tbaa.struct !13
  %172 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %22, i32 0, i32 0
  %173 = load i32, ptr %172, align 4
  %174 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 %173, i32 noundef 11)
  store i32 %174, ptr %21, align 4, !tbaa !31
  br label %175

175:                                              ; preds = %169, %166, %160
  %176 = load i8, ptr %19, align 1, !tbaa !11, !range !29, !noundef !30
  %177 = trunc i8 %176 to i1
  br i1 %177, label %178, label %193

178:                                              ; preds = %175
  %179 = load i8, ptr %13, align 1, !tbaa !11, !range !29, !noundef !30
  %180 = trunc i8 %179 to i1
  br i1 %180, label %193, label %181

181:                                              ; preds = %178
  %182 = load i32, ptr %21, align 4, !tbaa !31
  %183 = icmp eq i32 %182, 0
  br i1 %183, label %193, label %184

184:                                              ; preds = %181
  %185 = load i32, ptr %21, align 4, !tbaa !31
  %186 = icmp eq i32 %185, 1
  br i1 %186, label %193, label %187

187:                                              ; preds = %184
  %188 = load i32, ptr %21, align 4, !tbaa !31
  %189 = icmp eq i32 %188, 3
  br i1 %189, label %193, label %190

190:                                              ; preds = %187
  %191 = load i32, ptr %21, align 4, !tbaa !31
  %192 = icmp eq i32 %191, 4
  br label %193

193:                                              ; preds = %190, %187, %184, %181, %178, %175
  %194 = phi i1 [ true, %187 ], [ true, %184 ], [ true, %181 ], [ true, %178 ], [ true, %175 ], [ %192, %190 ]
  %195 = zext i1 %194 to i8
  store i8 %195, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  br label %196

196:                                              ; preds = %193, %157, %154
  %197 = load i8, ptr %20, align 1, !tbaa !11, !range !29, !noundef !30
  %198 = trunc i8 %197 to i1
  br i1 %198, label %199, label %1016

199:                                              ; preds = %196
  %200 = load ptr, ptr %8, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %200, i32 0, i32 2
  %202 = load i32, ptr %201, align 8, !tbaa !14
  %203 = icmp eq i32 %202, 3
  br i1 %203, label %204, label %247

204:                                              ; preds = %199
  %205 = load i8, ptr %11, align 1, !tbaa !11, !range !29, !noundef !30
  %206 = trunc i8 %205 to i1
  br i1 %206, label %247, label %207

207:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #9
  store i8 0, ptr %23, align 1, !tbaa !11
  %208 = load i8, ptr %13, align 1, !tbaa !11, !range !29, !noundef !30
  %209 = trunc i8 %208 to i1
  br i1 %209, label %210, label %231

210:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %211 = load i8, ptr %9, align 1, !tbaa !11, !range !29, !noundef !30
  %212 = trunc i8 %211 to i1
  %213 = zext i1 %212 to i64
  %214 = select i1 %212, i32 3, i32 4
  store i32 %214, ptr %24, align 4, !tbaa !9
  %215 = load i32, ptr %7, align 4, !tbaa !9
  %216 = load i32, ptr %24, align 4, !tbaa !9
  %217 = icmp ugt i32 %215, %216
  br i1 %217, label %218, label %230

218:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %219 = load ptr, ptr %6, align 8, !tbaa !5
  %220 = load i32, ptr %24, align 4, !tbaa !9
  %221 = zext i32 %220 to i64
  %222 = getelementptr inbounds i32, ptr %219, i64 %221
  %223 = load i32, ptr %222, align 4, !tbaa !9
  %224 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %223)
  %225 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %224, i32 noundef 0, i32 noundef 0)
  store i32 %225, ptr %25, align 4, !tbaa !9
  %226 = load ptr, ptr %8, align 8, !tbaa !5
  %227 = load i32, ptr %25, align 4, !tbaa !9
  %228 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %76, ptr noundef nonnull align 8 dereferenceable(176) %226, i32 noundef %227, i1 noundef zeroext true)
  %229 = zext i1 %228 to i8
  store i8 %229, ptr %23, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %230

230:                                              ; preds = %218, %210
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %239

231:                                              ; preds = %207
  %232 = load ptr, ptr %8, align 8, !tbaa !5
  %233 = icmp ne ptr %232, null
  br i1 %233, label %234, label %238

234:                                              ; preds = %231
  %235 = load ptr, ptr %8, align 8, !tbaa !5
  %236 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL31is_stage_output_variable_maskedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %76, ptr noundef nonnull align 8 dereferenceable(176) %235)
  %237 = zext i1 %236 to i8
  store i8 %237, ptr %23, align 1, !tbaa !11
  br label %238

238:                                              ; preds = %234, %231
  br label %239

239:                                              ; preds = %238, %230
  %240 = load i8, ptr %23, align 1, !tbaa !11, !range !29, !noundef !30
  %241 = trunc i8 %240 to i1
  br i1 %241, label %242, label %243

242:                                              ; preds = %239
  store i1 false, ptr %4, align 1
  store i32 1, ptr %26, align 4
  br label %244

243:                                              ; preds = %239
  store i32 0, ptr %26, align 4
  br label %244

244:                                              ; preds = %243, %242
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #9
  %245 = load i32, ptr %26, align 4
  switch i32 %245, label %1088 [
    i32 0, label %246
  ]

246:                                              ; preds = %244
  br label %247

247:                                              ; preds = %246, %204, %199
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #9
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %27) #9
  call void @llvm.lifetime.start.p0(i64 56, ptr %28) #9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %28) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %248 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %76, i32 0, i32 1
  %249 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %248, i32 noundef 1)
          to label %250 unwind label %277

250:                                              ; preds = %247
  store i32 %249, ptr %29, align 4, !tbaa !9
  %251 = load i32, ptr %7, align 4, !tbaa !9
  %252 = sub i32 %251, 3
  %253 = add i32 %252, 1
  %254 = zext i32 %253 to i64
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(56) %28, i64 noundef %254) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %255 = load i8, ptr %11, align 1, !tbaa !11, !range !29, !noundef !30
  %256 = trunc i8 %255 to i1
  %257 = zext i1 %256 to i64
  %258 = select i1 %256, i32 3, i32 4
  %259 = load i8, ptr %9, align 1, !tbaa !11, !range !29, !noundef !30
  %260 = trunc i8 %259 to i1
  %261 = zext i1 %260 to i64
  %262 = select i1 %260, i32 1, i32 0
  %263 = sub nsw i32 %258, %262
  store i32 %263, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %33) #9
  %264 = load i8, ptr %9, align 1, !tbaa !11, !range !29, !noundef !30
  %265 = trunc i8 %264 to i1
  br i1 %265, label %266, label %281

266:                                              ; preds = %250
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %267, i32 0, i32 2
  %269 = load i32, ptr %268, align 8, !tbaa !14
  %270 = icmp eq i32 %269, 1
  br i1 %270, label %271, label %273

271:                                              ; preds = %266
  %272 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %76, i32 0, i32 61
  br label %275

273:                                              ; preds = %266
  %274 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %76, i32 0, i32 62
  br label %275

275:                                              ; preds = %273, %271
  %276 = phi ptr [ %272, %271 ], [ %274, %273 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %276, i64 4, i1 false), !tbaa.struct !13
  br label %292

277:                                              ; preds = %247
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %30, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %31, align 4
  br label %1015

281:                                              ; preds = %250
  %282 = load ptr, ptr %8, align 8, !tbaa !5
  %283 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %282, i32 0, i32 2
  %284 = load i32, ptr %283, align 8, !tbaa !14
  %285 = icmp eq i32 %284, 1
  br i1 %285, label %286, label %288

286:                                              ; preds = %281
  %287 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %76, i32 0, i32 63
  br label %290

288:                                              ; preds = %281
  %289 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %76, i32 0, i32 64
  br label %290

290:                                              ; preds = %288, %286
  %291 = phi ptr [ %287, %286 ], [ %289, %288 ]
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %291, i64 4, i1 false), !tbaa.struct !13
  br label %292

292:                                              ; preds = %290, %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  %293 = load i8, ptr %11, align 1, !tbaa !11, !range !29, !noundef !30
  %294 = trunc i8 %293 to i1
  br i1 %294, label %295, label %300

295:                                              ; preds = %292
  %296 = load ptr, ptr %6, align 8, !tbaa !5
  %297 = getelementptr inbounds i32, ptr %296, i64 2
  %298 = load i32, ptr %297, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %34, i32 noundef %298)
          to label %299 unwind label %313

299:                                              ; preds = %295
  br label %301

300:                                              ; preds = %292
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %33, i64 4, i1 false), !tbaa.struct !13
  br label %301

301:                                              ; preds = %300, %299
  %302 = load i8, ptr %11, align 1, !tbaa !11, !range !29, !noundef !30
  %303 = trunc i8 %302 to i1
  br i1 %303, label %317, label %304

304:                                              ; preds = %301
  %305 = load i8, ptr %9, align 1, !tbaa !11, !range !29, !noundef !30
  %306 = trunc i8 %305 to i1
  br i1 %306, label %317, label %307

307:                                              ; preds = %304
  %308 = load ptr, ptr %6, align 8, !tbaa !5
  %309 = load i32, ptr %32, align 4, !tbaa !9
  %310 = sub i32 %309, 1
  %311 = zext i32 %310 to i64
  %312 = getelementptr inbounds i32, ptr %308, i64 %311
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %28, ptr noundef nonnull align 4 dereferenceable(4) %312) #9
  br label %317

313:                                              ; preds = %295
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %30, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %31, align 4
  br label %1014

317:                                              ; preds = %307, %304, %301
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %318 = load ptr, ptr %6, align 8, !tbaa !5
  %319 = getelementptr inbounds i32, ptr %318, i64 0
  %320 = load i32, ptr %319, align 4, !tbaa !9
  %321 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %320)
          to label %322 unwind label %353

322:                                              ; preds = %317
  store ptr %321, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %323 = load i32, ptr %29, align 4, !tbaa !9
  %324 = add i32 %323, 1
  store i32 %324, ptr %29, align 4, !tbaa !9
  store i32 %323, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = getelementptr inbounds i32, ptr %325, i64 2
  %327 = load i32, ptr %326, align 4, !tbaa !9
  %328 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %327, i32 noundef 4)
          to label %329 unwind label %357

329:                                              ; preds = %322
  store i32 %328, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #9
  store i8 0, ptr %38, align 1, !tbaa !11
  %330 = load i8, ptr %11, align 1, !tbaa !11, !range !29, !noundef !30
  %331 = trunc i8 %330 to i1
  br i1 %331, label %332, label %366

332:                                              ; preds = %329
  %333 = load i8, ptr %12, align 1, !tbaa !11, !range !29, !noundef !30
  %334 = trunc i8 %333 to i1
  br i1 %334, label %335, label %366

335:                                              ; preds = %332
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %336 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %337 unwind label %361

337:                                              ; preds = %335
  %338 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %336)
          to label %339 unwind label %361

339:                                              ; preds = %337
  store ptr %338, ptr %39, align 8, !tbaa !5
  %340 = load ptr, ptr %39, align 8, !tbaa !5
  %341 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %340)
          to label %342 unwind label %361

342:                                              ; preds = %339
  br i1 %341, label %365, label %343

343:                                              ; preds = %342
  %344 = load ptr, ptr %39, align 8, !tbaa !5
  %345 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %344)
          to label %346 unwind label %361

346:                                              ; preds = %343
  br i1 %345, label %365, label %347

347:                                              ; preds = %346
  %348 = load ptr, ptr %39, align 8, !tbaa !5
  %349 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %348, i32 0, i32 2
  %350 = load i32, ptr %349, align 8, !tbaa !33
  %351 = icmp ne i32 %350, 15
  br i1 %351, label %352, label %365

352:                                              ; preds = %347
  store i8 1, ptr %38, align 1, !tbaa !11
  br label %365

353:                                              ; preds = %317
  %354 = landingpad { ptr, i32 }
          cleanup
  %355 = extractvalue { ptr, i32 } %354, 0
  store ptr %355, ptr %30, align 8
  %356 = extractvalue { ptr, i32 } %354, 1
  store i32 %356, ptr %31, align 4
  br label %1013

357:                                              ; preds = %322
  %358 = landingpad { ptr, i32 }
          cleanup
  %359 = extractvalue { ptr, i32 } %358, 0
  store ptr %359, ptr %30, align 8
  %360 = extractvalue { ptr, i32 } %358, 1
  store i32 %360, ptr %31, align 4
  br label %1012

361:                                              ; preds = %343, %339, %337, %335
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %30, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %1011

365:                                              ; preds = %352, %347, %346, %342
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %366

366:                                              ; preds = %365, %332, %329
  %367 = load i8, ptr %38, align 1, !tbaa !11, !range !29, !noundef !30
  %368 = trunc i8 %367 to i1
  br i1 %368, label %654, label %369

369:                                              ; preds = %366
  %370 = load i8, ptr %12, align 1, !tbaa !11, !range !29, !noundef !30
  %371 = trunc i8 %370 to i1
  br i1 %371, label %375, label %372

372:                                              ; preds = %369
  %373 = load i8, ptr %13, align 1, !tbaa !11, !range !29, !noundef !30
  %374 = trunc i8 %373 to i1
  br i1 %374, label %375, label %654

375:                                              ; preds = %372, %369
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  %376 = load i32, ptr %32, align 4, !tbaa !9
  store i32 %376, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %377 = load ptr, ptr %8, align 8, !tbaa !5
  %378 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler25get_variable_element_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(176) %377)
          to label %379 unwind label %411

379:                                              ; preds = %375
  store ptr %378, ptr %41, align 8, !tbaa !5
  %380 = load i32, ptr %37, align 4, !tbaa !9
  %381 = icmp eq i32 %380, -1
  br i1 %381, label %382, label %432

382:                                              ; preds = %379
  %383 = load i32, ptr %7, align 4, !tbaa !9
  %384 = load i32, ptr %32, align 4, !tbaa !9
  %385 = add i32 %384, 1
  %386 = icmp uge i32 %383, %385
  br i1 %386, label %387, label %432

387:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  %388 = load ptr, ptr %6, align 8, !tbaa !5
  %389 = load i32, ptr %32, align 4, !tbaa !9
  %390 = zext i32 %389 to i64
  %391 = getelementptr inbounds i32, ptr %388, i64 %390
  %392 = load i32, ptr %391, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %43, i32 noundef %392)
          to label %393 unwind label %415

393:                                              ; preds = %387
  %394 = getelementptr inbounds %"class.spirv_cross::TypedID.520", ptr %43, i32 0, i32 0
  %395 = load i32, ptr %394, align 4
  %396 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler12get_constantENS_7TypedIDILNS_5TypesE3EEE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 %395)
          to label %397 unwind label %415

397:                                              ; preds = %393
  %398 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %396, i32 noundef 0, i32 noundef 0)
          to label %399 unwind label %415

399:                                              ; preds = %397
  store i32 %398, ptr %42, align 4, !tbaa !9
  %400 = load ptr, ptr %8, align 8, !tbaa !5
  %401 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %400, i32 0, i32 1
  %402 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %401)
          to label %403 unwind label %415

403:                                              ; preds = %399
  %404 = load i32, ptr %42, align 4, !tbaa !9
  %405 = invoke noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %402, i32 noundef %404, i32 noundef 4)
          to label %406 unwind label %415

406:                                              ; preds = %403
  store i32 %405, ptr %37, align 4, !tbaa !9
  %407 = load i32, ptr %37, align 4, !tbaa !9
  %408 = icmp ne i32 %407, -1
  br i1 %408, label %409, label %410

409:                                              ; preds = %406
  br label %420

410:                                              ; preds = %406
  call void @__assert_fail(ptr noundef @.str.940, ptr noundef @.str.25, i32 noundef 8582, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj) #10
  unreachable

411:                                              ; preds = %446, %442, %375
  %412 = landingpad { ptr, i32 }
          cleanup
  %413 = extractvalue { ptr, i32 } %412, 0
  store ptr %413, ptr %30, align 8
  %414 = extractvalue { ptr, i32 } %412, 1
  store i32 %414, ptr %31, align 4
  br label %653

415:                                              ; preds = %429, %420, %403, %399, %397, %393, %387
  %416 = landingpad { ptr, i32 }
          cleanup
  %417 = extractvalue { ptr, i32 } %416, 0
  store ptr %417, ptr %30, align 8
  %418 = extractvalue { ptr, i32 } %416, 1
  store i32 %418, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %653

419:                                              ; No predecessors!
  br label %420

420:                                              ; preds = %419, %409
  %421 = load i32, ptr %40, align 4, !tbaa !9
  %422 = add i32 %421, 1
  store i32 %422, ptr %40, align 4, !tbaa !9
  %423 = load ptr, ptr %41, align 8, !tbaa !5
  %424 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %423, i32 0, i32 12
  %425 = load i32, ptr %42, align 4, !tbaa !9
  %426 = zext i32 %425 to i64
  %427 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %424, i64 noundef %426) #9
  %428 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %427)
          to label %429 unwind label %415

429:                                              ; preds = %420
  %430 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %428)
          to label %431 unwind label %415

431:                                              ; preds = %429
  store ptr %430, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %432

432:                                              ; preds = %431, %382, %379
  br label %433

433:                                              ; preds = %561, %432
  %434 = load i8, ptr %12, align 1, !tbaa !11, !range !29, !noundef !30
  %435 = trunc i8 %434 to i1
  br i1 %435, label %436, label %440

436:                                              ; preds = %433
  %437 = load i32, ptr %40, align 4, !tbaa !9
  %438 = load i32, ptr %7, align 4, !tbaa !9
  %439 = icmp ult i32 %437, %438
  br label %440

440:                                              ; preds = %436, %433
  %441 = phi i1 [ false, %433 ], [ %439, %436 ]
  br i1 %441, label %442, label %565

442:                                              ; preds = %440
  %443 = load ptr, ptr %41, align 8, !tbaa !5
  %444 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %443)
          to label %445 unwind label %411

445:                                              ; preds = %442
  br i1 %444, label %456, label %446

446:                                              ; preds = %445
  %447 = load ptr, ptr %41, align 8, !tbaa !5
  %448 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %447)
          to label %449 unwind label %411

449:                                              ; preds = %446
  br i1 %448, label %456, label %450

450:                                              ; preds = %449
  %451 = load ptr, ptr %41, align 8, !tbaa !5
  %452 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %451, i32 0, i32 2
  %453 = load i32, ptr %452, align 8, !tbaa !33
  %454 = icmp ne i32 %453, 15
  br i1 %454, label %455, label %456

455:                                              ; preds = %450
  br label %565

456:                                              ; preds = %450, %449, %445
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %457 = load ptr, ptr %6, align 8, !tbaa !5
  %458 = load i32, ptr %40, align 4, !tbaa !9
  %459 = zext i32 %458 to i64
  %460 = getelementptr inbounds i32, ptr %457, i64 %459
  %461 = load i32, ptr %460, align 4, !tbaa !9
  %462 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %461)
          to label %463 unwind label %474

463:                                              ; preds = %456
  store ptr %462, ptr %44, align 8, !tbaa !5
  %464 = load ptr, ptr %44, align 8, !tbaa !5
  %465 = icmp ne ptr %464, null
  br i1 %465, label %466, label %471

466:                                              ; preds = %463
  %467 = load ptr, ptr %44, align 8, !tbaa !5
  %468 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %467, i32 0, i32 3
  %469 = load i8, ptr %468, align 8, !tbaa !52, !range !29, !noundef !30
  %470 = trunc i8 %469 to i1
  br i1 %470, label %471, label %482

471:                                              ; preds = %466, %463
  %472 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %472, ptr noundef @.str.941)
          to label %473 unwind label %478

473:                                              ; preds = %471
  invoke void @__cxa_throw(ptr %472, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %1095 unwind label %474

474:                                              ; preds = %556, %552, %547, %539, %535, %529, %523, %473, %456
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %30, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %31, align 4
  br label %564

478:                                              ; preds = %471
  %479 = landingpad { ptr, i32 }
          cleanup
  %480 = extractvalue { ptr, i32 } %479, 0
  store ptr %480, ptr %30, align 8
  %481 = extractvalue { ptr, i32 } %479, 1
  store i32 %481, ptr %31, align 4
  call void @__cxa_free_exception(ptr %472) #9
  br label %564

482:                                              ; preds = %466
  %483 = load ptr, ptr %41, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %483, i32 0, i32 2
  %485 = load i32, ptr %484, align 8, !tbaa !33
  %486 = icmp eq i32 %485, 15
  br i1 %486, label %487, label %523

487:                                              ; preds = %482
  %488 = load ptr, ptr %8, align 8, !tbaa !5
  %489 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %488, i32 0, i32 2
  %490 = load i32, ptr %489, align 8, !tbaa !14
  %491 = icmp eq i32 %490, 3
  br i1 %491, label %492, label %523

492:                                              ; preds = %487
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  %493 = load ptr, ptr %44, align 8, !tbaa !5
  %494 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %493, i32 noundef 0, i32 noundef 0)
          to label %495 unwind label %501

495:                                              ; preds = %492
  store i32 %494, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  store i32 0, ptr %46, align 4, !tbaa !9
  br label %496

496:                                              ; preds = %518, %495
  %497 = load i32, ptr %46, align 4, !tbaa !9
  %498 = load i32, ptr %45, align 4, !tbaa !9
  %499 = icmp ult i32 %497, %498
  br i1 %499, label %505, label %500

500:                                              ; preds = %496
  store i32 5, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  br label %521

501:                                              ; preds = %492
  %502 = landingpad { ptr, i32 }
          cleanup
  %503 = extractvalue { ptr, i32 } %502, 0
  store ptr %503, ptr %30, align 8
  %504 = extractvalue { ptr, i32 } %502, 1
  store i32 %504, ptr %31, align 4
  br label %522

505:                                              ; preds = %496
  %506 = load ptr, ptr %8, align 8, !tbaa !5
  %507 = load i32, ptr %46, align 4, !tbaa !9
  %508 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %76, ptr noundef nonnull align 8 dereferenceable(176) %506, i32 noundef %507, i1 noundef zeroext true)
          to label %509 unwind label %513

509:                                              ; preds = %505
  br i1 %508, label %517, label %510

510:                                              ; preds = %509
  %511 = load i32, ptr %37, align 4, !tbaa !9
  %512 = add i32 %511, 1
  store i32 %512, ptr %37, align 4, !tbaa !9
  br label %517

513:                                              ; preds = %505
  %514 = landingpad { ptr, i32 }
          cleanup
  %515 = extractvalue { ptr, i32 } %514, 0
  store ptr %515, ptr %30, align 8
  %516 = extractvalue { ptr, i32 } %514, 1
  store i32 %516, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  br label %522

517:                                              ; preds = %510, %509
  br label %518

518:                                              ; preds = %517
  %519 = load i32, ptr %46, align 4, !tbaa !9
  %520 = add i32 %519, 1
  store i32 %520, ptr %46, align 4, !tbaa !9
  br label %496, !llvm.loop !60

521:                                              ; preds = %500
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  br label %529

522:                                              ; preds = %513, %501
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  br label %564

523:                                              ; preds = %487, %482
  %524 = load ptr, ptr %44, align 8, !tbaa !5
  %525 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %524, i32 noundef 0, i32 noundef 0)
          to label %526 unwind label %474

526:                                              ; preds = %523
  %527 = load i32, ptr %37, align 4, !tbaa !9
  %528 = add i32 %527, %525
  store i32 %528, ptr %37, align 4, !tbaa !9
  br label %529

529:                                              ; preds = %526, %521
  %530 = load ptr, ptr %41, align 8, !tbaa !5
  %531 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %530, i32 0, i32 16
  %532 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %531)
          to label %533 unwind label %474

533:                                              ; preds = %529
  %534 = icmp ne i32 %532, 0
  br i1 %534, label %535, label %542

535:                                              ; preds = %533
  %536 = load ptr, ptr %41, align 8, !tbaa !5
  %537 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %536, i32 0, i32 16
  %538 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %537)
          to label %539 unwind label %474

539:                                              ; preds = %535
  %540 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %538)
          to label %541 unwind label %474

541:                                              ; preds = %539
  store ptr %540, ptr %41, align 8, !tbaa !5
  br label %560

542:                                              ; preds = %533
  %543 = load ptr, ptr %41, align 8, !tbaa !5
  %544 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %543, i32 0, i32 2
  %545 = load i32, ptr %544, align 8, !tbaa !33
  %546 = icmp eq i32 %545, 15
  br i1 %546, label %547, label %559

547:                                              ; preds = %542
  %548 = load ptr, ptr %41, align 8, !tbaa !5
  %549 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %548, i32 0, i32 12
  %550 = load ptr, ptr %44, align 8, !tbaa !5
  %551 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %550, i32 noundef 0, i32 noundef 0)
          to label %552 unwind label %474

552:                                              ; preds = %547
  %553 = zext i32 %551 to i64
  %554 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %549, i64 noundef %553) #9
  %555 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %554)
          to label %556 unwind label %474

556:                                              ; preds = %552
  %557 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %555)
          to label %558 unwind label %474

558:                                              ; preds = %556
  store ptr %557, ptr %41, align 8, !tbaa !5
  br label %559

559:                                              ; preds = %558, %542
  br label %560

560:                                              ; preds = %559, %541
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %561

561:                                              ; preds = %560
  %562 = load i32, ptr %40, align 4, !tbaa !9
  %563 = add i32 %562, 1
  store i32 %563, ptr %40, align 4, !tbaa !9
  br label %433, !llvm.loop !62

564:                                              ; preds = %522, %478, %474
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %653

565:                                              ; preds = %455, %440
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %566 = load ptr, ptr %35, align 8, !tbaa !5
  %567 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %566)
          to label %568 unwind label %610

568:                                              ; preds = %565
  store ptr %567, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #9
  %569 = load i8, ptr %12, align 1, !tbaa !11, !range !29, !noundef !30
  %570 = trunc i8 %569 to i1
  br i1 %570, label %571, label %586

571:                                              ; preds = %568
  %572 = load ptr, ptr %47, align 8, !tbaa !5
  %573 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %572)
          to label %574 unwind label %614

574:                                              ; preds = %571
  br i1 %573, label %584, label %575

575:                                              ; preds = %574
  %576 = load ptr, ptr %47, align 8, !tbaa !5
  %577 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %576)
          to label %578 unwind label %614

578:                                              ; preds = %575
  br i1 %577, label %584, label %579

579:                                              ; preds = %578
  %580 = load ptr, ptr %47, align 8, !tbaa !5
  %581 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %580, i32 0, i32 2
  %582 = load i32, ptr %581, align 8, !tbaa !33
  %583 = icmp eq i32 %582, 15
  br label %584

584:                                              ; preds = %579, %578, %574
  %585 = phi i1 [ true, %578 ], [ true, %574 ], [ %583, %579 ]
  br label %586

586:                                              ; preds = %584, %568
  %587 = phi i1 [ false, %568 ], [ %585, %584 ]
  %588 = zext i1 %587 to i8
  store i8 %588, ptr %48, align 1, !tbaa !11
  %589 = load i8, ptr %48, align 1, !tbaa !11, !range !29, !noundef !30
  %590 = trunc i8 %589 to i1
  br i1 %590, label %628, label %591

591:                                              ; preds = %586
  %592 = load i32, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %593 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %76)
          to label %594 unwind label %618

594:                                              ; preds = %591
  store i32 %593, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #9
  store i8 0, ptr %50, align 1, !tbaa !11
  %595 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRConstantEJjRjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %592, ptr noundef nonnull align 4 dereferenceable(4) %49, ptr noundef nonnull align 4 dereferenceable(4) %37, ptr noundef nonnull align 1 dereferenceable(1) %50)
          to label %596 unwind label %622

596:                                              ; preds = %594
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %28, ptr noundef nonnull align 4 dereferenceable(4) %36) #9
  store i32 -1, ptr %37, align 4, !tbaa !9
  %597 = load i32, ptr %40, align 4, !tbaa !9
  %598 = load i32, ptr %7, align 4, !tbaa !9
  %599 = icmp ult i32 %597, %598
  br i1 %599, label %600, label %627

600:                                              ; preds = %596
  %601 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %28) #9
  %602 = load ptr, ptr %6, align 8, !tbaa !5
  %603 = load i32, ptr %40, align 4, !tbaa !9
  %604 = zext i32 %603 to i64
  %605 = getelementptr inbounds i32, ptr %602, i64 %604
  %606 = load ptr, ptr %6, align 8, !tbaa !5
  %607 = load i32, ptr %7, align 4, !tbaa !9
  %608 = zext i32 %607 to i64
  %609 = getelementptr inbounds i32, ptr %606, i64 %608
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE6insertEPjPKjS4_(ptr noundef nonnull align 8 dereferenceable(56) %28, ptr noundef %601, ptr noundef %605, ptr noundef %609) #9
  br label %627

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

614:                                              ; preds = %645, %639, %575, %571
  %615 = landingpad { ptr, i32 }
          cleanup
  %616 = extractvalue { ptr, i32 } %615, 0
  store ptr %616, ptr %30, align 8
  %617 = extractvalue { ptr, i32 } %615, 1
  store i32 %617, ptr %31, align 4
  br label %651

618:                                              ; preds = %591
  %619 = landingpad { ptr, i32 }
          cleanup
  %620 = extractvalue { ptr, i32 } %619, 0
  store ptr %620, ptr %30, align 8
  %621 = extractvalue { ptr, i32 } %619, 1
  store i32 %621, ptr %31, align 4
  br label %626

622:                                              ; preds = %594
  %623 = landingpad { ptr, i32 }
          cleanup
  %624 = extractvalue { ptr, i32 } %623, 0
  store ptr %624, ptr %30, align 8
  %625 = extractvalue { ptr, i32 } %623, 1
  store i32 %625, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #9
  br label %626

626:                                              ; preds = %622, %618
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %651

627:                                              ; preds = %600, %596
  br label %636

628:                                              ; preds = %586
  %629 = load i32, ptr %40, align 4, !tbaa !9
  %630 = load i32, ptr %7, align 4, !tbaa !9
  %631 = icmp eq i32 %629, %630
  br i1 %631, label %632, label %633

632:                                              ; preds = %628
  br label %635

633:                                              ; preds = %628
  call void @__assert_fail(ptr noundef @.str.942, ptr noundef @.str.25, i32 noundef 8642, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj) #10
  unreachable

634:                                              ; No predecessors!
  br label %635

635:                                              ; preds = %634, %632
  br label %636

636:                                              ; preds = %635, %627
  %637 = load i32, ptr %37, align 4, !tbaa !9
  %638 = icmp ne i32 %637, -1
  br i1 %638, label %639, label %645

639:                                              ; preds = %636
  %640 = load ptr, ptr %6, align 8, !tbaa !5
  %641 = getelementptr inbounds i32, ptr %640, i64 1
  %642 = load i32, ptr %641, align 4, !tbaa !9
  %643 = load i32, ptr %37, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %642, i32 noundef 4, i32 noundef %643)
          to label %644 unwind label %614

644:                                              ; preds = %639
  br label %650

645:                                              ; preds = %636
  %646 = load ptr, ptr %6, align 8, !tbaa !5
  %647 = getelementptr inbounds i32, ptr %646, i64 1
  %648 = load i32, ptr %647, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler25unset_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %648, i32 noundef 4)
          to label %649 unwind label %614

649:                                              ; preds = %645
  br label %650

650:                                              ; preds = %649, %644
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %690

651:                                              ; preds = %626, %614
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #9
  br label %652

652:                                              ; preds = %651, %610
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %653

653:                                              ; preds = %652, %564, %415, %411
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %1011

654:                                              ; preds = %372, %366
  %655 = load i32, ptr %37, align 4, !tbaa !9
  %656 = icmp ne i32 %655, -1
  br i1 %656, label %657, label %672

657:                                              ; preds = %654
  %658 = load i32, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  %659 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %76)
          to label %660 unwind label %663

660:                                              ; preds = %657
  store i32 %659, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #9
  store i8 0, ptr %52, align 1, !tbaa !11
  %661 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRConstantEJjRjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %658, ptr noundef nonnull align 4 dereferenceable(4) %51, ptr noundef nonnull align 4 dereferenceable(4) %37, ptr noundef nonnull align 1 dereferenceable(1) %52)
          to label %662 unwind label %667

662:                                              ; preds = %660
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %28, ptr noundef nonnull align 4 dereferenceable(4) %36) #9
  br label %672

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

667:                                              ; preds = %660
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %30, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #9
  br label %671

671:                                              ; preds = %667, %663
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  br label %1011

672:                                              ; preds = %662, %654
  store i32 -1, ptr %37, align 4, !tbaa !9
  %673 = load ptr, ptr %6, align 8, !tbaa !5
  %674 = getelementptr inbounds i32, ptr %673, i64 1
  %675 = load i32, ptr %674, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler25unset_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %675, i32 noundef 4)
          to label %676 unwind label %686

676:                                              ; preds = %672
  %677 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %28) #9
  %678 = load ptr, ptr %6, align 8, !tbaa !5
  %679 = load i32, ptr %32, align 4, !tbaa !9
  %680 = zext i32 %679 to i64
  %681 = getelementptr inbounds i32, ptr %678, i64 %680
  %682 = load ptr, ptr %6, align 8, !tbaa !5
  %683 = load i32, ptr %7, align 4, !tbaa !9
  %684 = zext i32 %683 to i64
  %685 = getelementptr inbounds i32, ptr %682, i64 %684
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE6insertEPjPKjS4_(ptr noundef nonnull align 8 dereferenceable(56) %28, ptr noundef %677, ptr noundef %681, ptr noundef %685) #9
  br label %690

686:                                              ; preds = %672
  %687 = landingpad { ptr, i32 }
          cleanup
  %688 = extractvalue { ptr, i32 } %687, 0
  store ptr %688, ptr %30, align 8
  %689 = extractvalue { ptr, i32 } %687, 1
  store i32 %689, ptr %31, align 4
  br label %1011

690:                                              ; preds = %676, %650
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  %691 = load i8, ptr %11, align 1, !tbaa !11, !range !29, !noundef !30
  %692 = trunc i8 %691 to i1
  br i1 %692, label %709, label %693

693:                                              ; preds = %690
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #9
  %694 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %695 unwind label %705

695:                                              ; preds = %693
  %696 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE4dataEv(ptr noundef nonnull align 8 dereferenceable(16) %28) #9
  %697 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %28) #9
  %698 = trunc i64 %697 to i32
  %699 = load ptr, ptr %35, align 8, !tbaa !5
  %700 = load i8, ptr %9, align 1, !tbaa !11, !range !29, !noundef !30
  %701 = trunc i8 %700 to i1
  %702 = xor i1 %701, true
  invoke void @_ZN11spirv_cross12CompilerGLSL12access_chainB5cxx11EjPKjjRKNS_8SPIRTypeEPNS_15AccessChainMetaEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %76, i32 noundef %694, ptr noundef %696, i32 noundef %698, ptr noundef nonnull align 8 dereferenceable(336) %699, ptr noundef %27, i1 noundef zeroext %702)
          to label %703 unwind label %705

703:                                              ; preds = %695
  %704 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #9
  br label %778

705:                                              ; preds = %695, %693
  %706 = landingpad { ptr, i32 }
          cleanup
  %707 = extractvalue { ptr, i32 } %706, 0
  store ptr %707, ptr %30, align 8
  %708 = extractvalue { ptr, i32 } %706, 1
  store i32 %708, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #9
  br label %1010

709:                                              ; preds = %690
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  %710 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %711 unwind label %745

711:                                              ; preds = %709
  %712 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %710)
          to label %713 unwind label %745

713:                                              ; preds = %711
  store ptr %712, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #9
  %714 = load i8, ptr %12, align 1, !tbaa !11, !range !29, !noundef !30
  %715 = trunc i8 %714 to i1
  br i1 %715, label %716, label %728

716:                                              ; preds = %713
  %717 = load ptr, ptr %55, align 8, !tbaa !5
  %718 = icmp ne ptr %717, null
  br i1 %718, label %719, label %728

719:                                              ; preds = %716
  %720 = load ptr, ptr %55, align 8, !tbaa !5
  %721 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %720, i32 0, i32 12
  %722 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %721) #9
  %723 = icmp eq i64 %722, 2
  br i1 %723, label %724, label %728

724:                                              ; preds = %719
  %725 = load i8, ptr %38, align 1, !tbaa !11, !range !29, !noundef !30
  %726 = trunc i8 %725 to i1
  %727 = xor i1 %726, true
  br label %728

728:                                              ; preds = %724, %719, %716, %713
  %729 = phi i1 [ false, %719 ], [ false, %716 ], [ false, %713 ], [ %727, %724 ]
  %730 = zext i1 %729 to i8
  store i8 %730, ptr %56, align 1, !tbaa !11
  %731 = load i8, ptr %56, align 1, !tbaa !11, !range !29, !noundef !30
  %732 = trunc i8 %731 to i1
  br i1 %732, label %733, label %763

733:                                              ; preds = %728
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #9
  %734 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %735 unwind label %749

735:                                              ; preds = %733
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(9848) %76, i32 noundef %734, i1 noundef zeroext true)
          to label %736 unwind label %749

736:                                              ; preds = %735
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #9
  %737 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %33)
          to label %738 unwind label %753

738:                                              ; preds = %736
  %739 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE4dataEv(ptr noundef nonnull align 8 dereferenceable(16) %28) #9
  %740 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %28) #9
  %741 = trunc i64 %740 to i32
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %76, i32 noundef %737, ptr noundef %739, i32 noundef %741, i32 noundef 2, ptr noundef %27)
          to label %742 unwind label %753

742:                                              ; preds = %738
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %743 unwind label %757

743:                                              ; preds = %742
  %744 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 8 dereferenceable(32) %57) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #9
  br label %775

745:                                              ; preds = %711, %709
  %746 = landingpad { ptr, i32 }
          cleanup
  %747 = extractvalue { ptr, i32 } %746, 0
  store ptr %747, ptr %30, align 8
  %748 = extractvalue { ptr, i32 } %746, 1
  store i32 %748, ptr %31, align 4
  br label %777

749:                                              ; preds = %735, %733
  %750 = landingpad { ptr, i32 }
          cleanup
  %751 = extractvalue { ptr, i32 } %750, 0
  store ptr %751, ptr %30, align 8
  %752 = extractvalue { ptr, i32 } %750, 1
  store i32 %752, ptr %31, align 4
  br label %762

753:                                              ; preds = %738, %736
  %754 = landingpad { ptr, i32 }
          cleanup
  %755 = extractvalue { ptr, i32 } %754, 0
  store ptr %755, ptr %30, align 8
  %756 = extractvalue { ptr, i32 } %754, 1
  store i32 %756, ptr %31, align 4
  br label %761

757:                                              ; preds = %742
  %758 = landingpad { ptr, i32 }
          cleanup
  %759 = extractvalue { ptr, i32 } %758, 0
  store ptr %759, ptr %30, align 8
  %760 = extractvalue { ptr, i32 } %758, 1
  store i32 %760, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  br label %761

761:                                              ; preds = %757, %753
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  br label %762

762:                                              ; preds = %761, %749
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #9
  br label %776

763:                                              ; preds = %728
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #9
  %764 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %765 unwind label %771

765:                                              ; preds = %763
  %766 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE4dataEv(ptr noundef nonnull align 8 dereferenceable(16) %28) #9
  %767 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %28) #9
  %768 = trunc i64 %767 to i32
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %76, i32 noundef %764, ptr noundef %766, i32 noundef %768, i32 noundef 0, ptr noundef %27)
          to label %769 unwind label %771

769:                                              ; preds = %765
  %770 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #9
  br label %775

771:                                              ; preds = %765, %763
  %772 = landingpad { ptr, i32 }
          cleanup
  %773 = extractvalue { ptr, i32 } %772, 0
  store ptr %773, ptr %30, align 8
  %774 = extractvalue { ptr, i32 } %772, 1
  store i32 %774, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #9
  br label %776

775:                                              ; preds = %769, %743
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %778

776:                                              ; preds = %771, %762
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #9
  br label %777

777:                                              ; preds = %776, %745
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %1010

778:                                              ; preds = %775, %703
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %779 = load ptr, ptr %8, align 8, !tbaa !5
  %780 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(176) %779)
          to label %781 unwind label %795

781:                                              ; preds = %778
  store ptr %780, ptr %61, align 8, !tbaa !5
  %782 = load ptr, ptr %6, align 8, !tbaa !5
  %783 = getelementptr inbounds i32, ptr %782, i64 2
  %784 = load i32, ptr %783, align 4, !tbaa !9
  %785 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %784, i32 noundef 14)
          to label %786 unwind label %795

786:                                              ; preds = %781
  br i1 %785, label %787, label %799

787:                                              ; preds = %786
  %788 = load ptr, ptr %6, align 8, !tbaa !5
  %789 = getelementptr inbounds i32, ptr %788, i64 2
  %790 = load i32, ptr %789, align 4, !tbaa !9
  %791 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %790, i32 noundef 14)
          to label %792 unwind label %795

792:                                              ; preds = %787
  %793 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %791)
          to label %794 unwind label %795

794:                                              ; preds = %792
  store ptr %793, ptr %61, align 8, !tbaa !5
  br label %799

795:                                              ; preds = %873, %868, %851, %847, %792, %787, %781, %778
  %796 = landingpad { ptr, i32 }
          cleanup
  %797 = extractvalue { ptr, i32 } %796, 0
  store ptr %797, ptr %30, align 8
  %798 = extractvalue { ptr, i32 } %796, 1
  store i32 %798, ptr %31, align 4
  br label %1009

799:                                              ; preds = %794, %786
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #9
  store i32 3, ptr %62, align 4, !tbaa !9
  br label %800

800:                                              ; preds = %844, %799
  %801 = load i32, ptr %62, align 4, !tbaa !9
  %802 = load i32, ptr %7, align 4, !tbaa !9
  %803 = icmp ult i32 %801, %802
  br i1 %803, label %805, label %804

804:                                              ; preds = %800
  store i32 8, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #9
  br label %847

805:                                              ; preds = %800
  %806 = load ptr, ptr %61, align 8, !tbaa !5
  %807 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %806)
          to label %808 unwind label %832

808:                                              ; preds = %805
  br i1 %807, label %836, label %809

809:                                              ; preds = %808
  %810 = load ptr, ptr %61, align 8, !tbaa !5
  %811 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %810, i32 0, i32 2
  %812 = load i32, ptr %811, align 8, !tbaa !33
  %813 = icmp eq i32 %812, 15
  br i1 %813, label %814, label %836

814:                                              ; preds = %809
  %815 = load ptr, ptr %61, align 8, !tbaa !5
  %816 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %815, i32 0, i32 12
  %817 = load ptr, ptr %6, align 8, !tbaa !5
  %818 = load i32, ptr %62, align 4, !tbaa !9
  %819 = zext i32 %818 to i64
  %820 = getelementptr inbounds i32, ptr %817, i64 %819
  %821 = load i32, ptr %820, align 4, !tbaa !9
  %822 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %821)
          to label %823 unwind label %832

823:                                              ; preds = %814
  %824 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %822, i32 noundef 0, i32 noundef 0)
          to label %825 unwind label %832

825:                                              ; preds = %823
  %826 = zext i32 %824 to i64
  %827 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %816, i64 noundef %826) #9
  %828 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %827)
          to label %829 unwind label %832

829:                                              ; preds = %825
  %830 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %828)
          to label %831 unwind label %832

831:                                              ; preds = %829
  store ptr %830, ptr %61, align 8, !tbaa !5
  br label %843

832:                                              ; preds = %840, %836, %829, %825, %823, %814, %805
  %833 = landingpad { ptr, i32 }
          cleanup
  %834 = extractvalue { ptr, i32 } %833, 0
  store ptr %834, ptr %30, align 8
  %835 = extractvalue { ptr, i32 } %833, 1
  store i32 %835, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #9
  br label %1009

836:                                              ; preds = %809, %808
  %837 = load ptr, ptr %61, align 8, !tbaa !5
  %838 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %837, i32 0, i32 16
  %839 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %838)
          to label %840 unwind label %832

840:                                              ; preds = %836
  %841 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %839)
          to label %842 unwind label %832

842:                                              ; preds = %840
  store ptr %841, ptr %61, align 8, !tbaa !5
  br label %843

843:                                              ; preds = %842, %831
  br label %844

844:                                              ; preds = %843
  %845 = load i32, ptr %62, align 4, !tbaa !9
  %846 = add i32 %845, 1
  store i32 %846, ptr %62, align 4, !tbaa !9
  br label %800, !llvm.loop !63

847:                                              ; preds = %804
  %848 = load ptr, ptr %61, align 8, !tbaa !5
  %849 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %848)
          to label %850 unwind label %795

850:                                              ; preds = %847
  br i1 %849, label %876, label %851

851:                                              ; preds = %850
  %852 = load ptr, ptr %61, align 8, !tbaa !5
  %853 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(336) %852)
          to label %854 unwind label %795

854:                                              ; preds = %851
  br i1 %853, label %876, label %855

855:                                              ; preds = %854
  %856 = load ptr, ptr %61, align 8, !tbaa !5
  %857 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %856, i32 0, i32 2
  %858 = load i32, ptr %857, align 8, !tbaa !33
  %859 = icmp ne i32 %858, 15
  br i1 %859, label %860, label %876

860:                                              ; preds = %855
  %861 = load ptr, ptr %61, align 8, !tbaa !5
  %862 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %861, i32 0, i32 4
  %863 = load i32, ptr %862, align 8, !tbaa !64
  %864 = load ptr, ptr %35, align 8, !tbaa !5
  %865 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %864, i32 0, i32 4
  %866 = load i32, ptr %865, align 8, !tbaa !64
  %867 = icmp ugt i32 %863, %866
  br i1 %867, label %868, label %876

868:                                              ; preds = %860
  %869 = load ptr, ptr %35, align 8, !tbaa !5
  %870 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %869, i32 0, i32 4
  %871 = load i32, ptr %870, align 8, !tbaa !64
  %872 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %871, i32 noundef 0)
          to label %873 unwind label %795

873:                                              ; preds = %868
  %874 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef %872)
          to label %875 unwind label %795

875:                                              ; preds = %873
  br label %876

876:                                              ; preds = %875, %860, %855, %854, %850
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %877 = load ptr, ptr %6, align 8, !tbaa !5
  %878 = getelementptr inbounds i32, ptr %877, i64 1
  %879 = load i32, ptr %878, align 4, !tbaa !9
  %880 = load ptr, ptr %6, align 8, !tbaa !5
  %881 = getelementptr inbounds i32, ptr %880, i64 0
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #9
  %882 = load ptr, ptr %6, align 8, !tbaa !5
  %883 = getelementptr inbounds i32, ptr %882, i64 2
  %884 = load i32, ptr %883, align 4, !tbaa !9
  %885 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %76, i32 noundef %884)
          to label %886 unwind label %910

886:                                              ; preds = %876
  %887 = zext i1 %885 to i8
  store i8 %887, ptr %64, align 1, !tbaa !11
  %888 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %879, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 4 dereferenceable(4) %881, ptr noundef nonnull align 1 dereferenceable(1) %64)
          to label %889 unwind label %910

889:                                              ; preds = %886
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #9
  store ptr %888, ptr %63, align 8, !tbaa !5
  %890 = load ptr, ptr %8, align 8, !tbaa !5
  %891 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %890, i32 0, i32 1
  %892 = load ptr, ptr %63, align 8, !tbaa !5
  %893 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %892, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %893, ptr align 8 %891, i64 4, i1 false), !tbaa.struct !13
  %894 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %27, i32 0, i32 1
  %895 = load i8, ptr %894, align 4, !tbaa !65, !range !29, !noundef !30
  %896 = trunc i8 %895 to i1
  %897 = load ptr, ptr %63, align 8, !tbaa !5
  %898 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %897, i32 0, i32 6
  %899 = zext i1 %896 to i8
  store i8 %899, ptr %898, align 1, !tbaa !67
  %900 = load ptr, ptr %63, align 8, !tbaa !5
  %901 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %900, i32 0, i32 7
  store i8 1, ptr %901, align 2, !tbaa !69
  %902 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %27, i32 0, i32 2
  %903 = load i8, ptr %902, align 1, !tbaa !70, !range !29, !noundef !30
  %904 = trunc i8 %903 to i1
  br i1 %904, label %905, label %918

905:                                              ; preds = %889
  %906 = load ptr, ptr %6, align 8, !tbaa !5
  %907 = getelementptr inbounds i32, ptr %906, i64 1
  %908 = load i32, ptr %907, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %908, i32 noundef 2, i32 noundef 0)
          to label %909 unwind label %914

909:                                              ; preds = %905
  br label %918

910:                                              ; preds = %886, %876
  %911 = landingpad { ptr, i32 }
          cleanup
  %912 = extractvalue { ptr, i32 } %911, 0
  store ptr %912, ptr %30, align 8
  %913 = extractvalue { ptr, i32 } %911, 1
  store i32 %913, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #9
  br label %1008

914:                                              ; preds = %1001, %954, %949, %948, %941, %937, %933, %922, %905
  %915 = landingpad { ptr, i32 }
          cleanup
  %916 = extractvalue { ptr, i32 } %915, 0
  store ptr %916, ptr %30, align 8
  %917 = extractvalue { ptr, i32 } %915, 1
  store i32 %917, ptr %31, align 4
  br label %1008

918:                                              ; preds = %909, %889
  %919 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %27, i32 0, i32 0
  %920 = load i32, ptr %919, align 4, !tbaa !71
  %921 = icmp ne i32 %920, 0
  br i1 %921, label %922, label %929

922:                                              ; preds = %918
  %923 = load ptr, ptr %6, align 8, !tbaa !5
  %924 = getelementptr inbounds i32, ptr %923, i64 1
  %925 = load i32, ptr %924, align 4, !tbaa !9
  %926 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %27, i32 0, i32 0
  %927 = load i32, ptr %926, align 4, !tbaa !71
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %925, i32 noundef 1, i32 noundef %927)
          to label %928 unwind label %914

928:                                              ; preds = %922
  br label %929

929:                                              ; preds = %928, %918
  %930 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %27, i32 0, i32 3
  %931 = load i8, ptr %930, align 2, !tbaa !72, !range !29, !noundef !30
  %932 = trunc i8 %931 to i1
  br i1 %932, label %933, label %941

933:                                              ; preds = %929
  %934 = load ptr, ptr %6, align 8, !tbaa !5
  %935 = getelementptr inbounds i32, ptr %934, i64 1
  %936 = load i32, ptr %935, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %65, i32 noundef %936)
          to label %937 unwind label %914

937:                                              ; preds = %933
  %938 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %65, i32 0, i32 0
  %939 = load i32, ptr %938, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 %939, i32 noundef 18, i32 noundef 0)
          to label %940 unwind label %914

940:                                              ; preds = %937
  br label %941

941:                                              ; preds = %940, %929
  %942 = load ptr, ptr %6, align 8, !tbaa !5
  %943 = getelementptr inbounds i32, ptr %942, i64 1
  %944 = load i32, ptr %943, align 4, !tbaa !9
  %945 = load ptr, ptr %61, align 8, !tbaa !5
  %946 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %945, i32 0, i32 1
  %947 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %946)
          to label %948 unwind label %914

948:                                              ; preds = %941
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %944, i32 noundef 14, i32 noundef %947)
          to label %949 unwind label %914

949:                                              ; preds = %948
  %950 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %76, i32 0, i32 16
  %951 = load ptr, ptr %6, align 8, !tbaa !5
  %952 = getelementptr inbounds i32, ptr %951, i64 1
  %953 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %950, ptr noundef nonnull align 4 dereferenceable(4) %952)
          to label %954 unwind label %914

954:                                              ; preds = %949
  %955 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 0
  %956 = extractvalue { ptr, i8 } %953, 0
  store ptr %956, ptr %955, align 8
  %957 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 1
  %958 = extractvalue { ptr, i8 } %953, 1
  store i8 %958, ptr %957, align 8
  %959 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %76, i32 0, i32 17
  %960 = load ptr, ptr %6, align 8, !tbaa !5
  %961 = getelementptr inbounds i32, ptr %960, i64 1
  %962 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %959, ptr noundef nonnull align 4 dereferenceable(4) %961)
          to label %963 unwind label %914

963:                                              ; preds = %954
  %964 = getelementptr inbounds { ptr, i8 }, ptr %67, i32 0, i32 0
  %965 = extractvalue { ptr, i8 } %962, 0
  store ptr %965, ptr %964, align 8
  %966 = getelementptr inbounds { ptr, i8 }, ptr %67, i32 0, i32 1
  %967 = extractvalue { ptr, i8 } %962, 1
  store i8 %967, ptr %966, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #9
  store i32 2, ptr %68, align 4, !tbaa !9
  br label %968

968:                                              ; preds = %990, %963
  %969 = load i32, ptr %68, align 4, !tbaa !9
  %970 = load i32, ptr %7, align 4, !tbaa !9
  %971 = icmp ult i32 %969, %970
  br i1 %971, label %973, label %972

972:                                              ; preds = %968
  store i32 11, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  br label %997

973:                                              ; preds = %968
  %974 = load ptr, ptr %6, align 8, !tbaa !5
  %975 = getelementptr inbounds i32, ptr %974, i64 1
  %976 = load i32, ptr %975, align 4, !tbaa !9
  %977 = load ptr, ptr %6, align 8, !tbaa !5
  %978 = load i32, ptr %68, align 4, !tbaa !9
  %979 = zext i32 %978 to i64
  %980 = getelementptr inbounds i32, ptr %977, i64 %979
  %981 = load i32, ptr %980, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %976, i32 noundef %981)
          to label %982 unwind label %993

982:                                              ; preds = %973
  %983 = load ptr, ptr %63, align 8, !tbaa !5
  %984 = load ptr, ptr %6, align 8, !tbaa !5
  %985 = load i32, ptr %68, align 4, !tbaa !9
  %986 = zext i32 %985 to i64
  %987 = getelementptr inbounds i32, ptr %984, i64 %986
  %988 = load i32, ptr %987, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler27add_implied_read_expressionERNS_14SPIRExpressionEj(ptr noundef nonnull align 8 dereferenceable(3176) %76, ptr noundef nonnull align 8 dereferenceable(236) %983, i32 noundef %988)
          to label %989 unwind label %993

989:                                              ; preds = %982
  br label %990

990:                                              ; preds = %989
  %991 = load i32, ptr %68, align 4, !tbaa !9
  %992 = add i32 %991, 1
  store i32 %992, ptr %68, align 4, !tbaa !9
  br label %968, !llvm.loop !73

993:                                              ; preds = %982, %973
  %994 = landingpad { ptr, i32 }
          cleanup
  %995 = extractvalue { ptr, i32 } %994, 0
  store ptr %995, ptr %30, align 8
  %996 = extractvalue { ptr, i32 } %994, 1
  store i32 %996, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  br label %1008

997:                                              ; preds = %972
  %998 = load ptr, ptr %63, align 8, !tbaa !5
  %999 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %998, i32 0, i32 10
  %1000 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %999) #9
  br i1 %1000, label %1001, label %1007

1001:                                             ; preds = %997
  %1002 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %76, i32 0, i32 16
  %1003 = load ptr, ptr %6, align 8, !tbaa !5
  %1004 = getelementptr inbounds i32, ptr %1003, i64 1
  %1005 = invoke noundef i64 @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5eraseERKj(ptr noundef nonnull align 8 dereferenceable(56) %1002, ptr noundef nonnull align 4 dereferenceable(4) %1004)
          to label %1006 unwind label %914

1006:                                             ; preds = %1001
  br label %1007

1007:                                             ; preds = %1006, %997
  store i1 true, ptr %4, align 1
  store i32 1, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %28) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #9
  br label %1088

1008:                                             ; preds = %993, %914, %910
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  br label %1009

1009:                                             ; preds = %1008, %832, %795
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  br label %1010

1010:                                             ; preds = %1009, %777, %705
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #9
  br label %1011

1011:                                             ; preds = %1010, %686, %671, %653, %361
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  br label %1012

1012:                                             ; preds = %1011, %357
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %1013

1013:                                             ; preds = %1012, %353
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %1014

1014:                                             ; preds = %1013, %313
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %1015

1015:                                             ; preds = %1014, %277
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %28) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  br label %1090

1016:                                             ; preds = %196
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %1017 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %76, i32 0, i32 1
  %1018 = load ptr, ptr %8, align 8, !tbaa !5
  %1019 = icmp ne ptr %1018, null
  br i1 %1019, label %1020, label %1023

1020:                                             ; preds = %1016
  %1021 = load ptr, ptr %8, align 8, !tbaa !5
  %1022 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1021, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %70, ptr align 8 %1022, i64 4, i1 false), !tbaa.struct !13
  br label %1024

1023:                                             ; preds = %1016
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %70, i32 noundef 0)
  br label %1024

1024:                                             ; preds = %1023, %1020
  %1025 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %70, i32 0, i32 0
  %1026 = load i32, ptr %1025, align 4
  %1027 = call noundef ptr @_ZN11spirv_cross8ParsedIR9find_metaENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %1017, i32 %1026)
  store ptr %1027, ptr %69, align 8, !tbaa !5
  %1028 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %76)
  br i1 %1028, label %1029, label %1086

1029:                                             ; preds = %1024
  %1030 = load ptr, ptr %8, align 8, !tbaa !5
  %1031 = icmp ne ptr %1030, null
  br i1 %1031, label %1032, label %1086

1032:                                             ; preds = %1029
  %1033 = load ptr, ptr %69, align 8, !tbaa !5
  %1034 = icmp ne ptr %1033, null
  br i1 %1034, label %1035, label %1086

1035:                                             ; preds = %1032
  %1036 = load ptr, ptr %69, align 8, !tbaa !5
  %1037 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %1036, i32 0, i32 0
  %1038 = getelementptr inbounds %"struct.spirv_cross::Meta::Decoration", ptr %1037, i32 0, i32 5
  %1039 = load i32, ptr %1038, align 8, !tbaa !74
  %1040 = icmp eq i32 %1039, 12
  br i1 %1040, label %1041, label %1086

1041:                                             ; preds = %1035
  %1042 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler25is_tessellating_trianglesEv(ptr noundef nonnull align 8 dereferenceable(3176) %76)
  br i1 %1042, label %1043, label %1086

1043:                                             ; preds = %1041
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %1044 = load ptr, ptr %6, align 8, !tbaa !5
  %1045 = getelementptr inbounds i32, ptr %1044, i64 3
  %1046 = load i32, ptr %1045, align 4, !tbaa !9
  %1047 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %1046)
  store ptr %1047, ptr %71, align 8, !tbaa !5
  %1048 = load ptr, ptr %71, align 8, !tbaa !5
  %1049 = icmp ne ptr %1048, null
  br i1 %1049, label %1050, label %1055

1050:                                             ; preds = %1043
  %1051 = load ptr, ptr %71, align 8, !tbaa !5
  %1052 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1051, i32 noundef 0, i32 noundef 0)
  %1053 = icmp eq i32 %1052, 1
  br i1 %1053, label %1054, label %1055

1054:                                             ; preds = %1050
  store i1 false, ptr %4, align 1
  store i32 1, ptr %26, align 4
  br label %1085

1055:                                             ; preds = %1050, %1043
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %1056 = load ptr, ptr %6, align 8, !tbaa !5
  %1057 = getelementptr inbounds i32, ptr %1056, i64 1
  %1058 = load i32, ptr %1057, align 4, !tbaa !9
  %1059 = load ptr, ptr %8, align 8, !tbaa !5
  %1060 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %1058, ptr noundef nonnull align 8 dereferenceable(176) %1059)
  store ptr %1060, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #9
  %1061 = load ptr, ptr %6, align 8, !tbaa !5
  %1062 = getelementptr inbounds i32, ptr %1061, i64 0
  %1063 = load i32, ptr %1062, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %73, i32 noundef %1063)
  %1064 = load ptr, ptr %72, align 8, !tbaa !5
  %1065 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1064, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1065, ptr align 4 %73, i64 4, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  %1066 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %76, i32 0, i32 1
  %1067 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1066, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #9
  %1068 = load ptr, ptr %6, align 8, !tbaa !5
  %1069 = getelementptr inbounds i32, ptr %1068, i64 2
  %1070 = load i32, ptr %1069, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %74, i32 noundef %1070)
  %1071 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1067, ptr noundef nonnull align 4 dereferenceable(4) %74)
  %1072 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %76, i32 0, i32 1
  %1073 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1072, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  %1074 = load ptr, ptr %6, align 8, !tbaa !5
  %1075 = getelementptr inbounds i32, ptr %1074, i64 1
  %1076 = load i32, ptr %1075, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %75, i32 noundef %1076)
  %1077 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1073, ptr noundef nonnull align 4 dereferenceable(4) %75)
  %1078 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %1077, ptr noundef nonnull align 8 dereferenceable(488) %1071)
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #9
  %1079 = load ptr, ptr %6, align 8, !tbaa !5
  %1080 = getelementptr inbounds i32, ptr %1079, i64 1
  %1081 = load i32, ptr %1080, align 4, !tbaa !9
  %1082 = load ptr, ptr %6, align 8, !tbaa !5
  %1083 = getelementptr inbounds i32, ptr %1082, i64 2
  %1084 = load i32, ptr %1083, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %76, i32 noundef %1081, i32 noundef %1084)
  store i1 true, ptr %4, align 1
  store i32 1, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  br label %1085

1085:                                             ; preds = %1055, %1054
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  br label %1087

1086:                                             ; preds = %1041, %1035, %1032, %1029, %1024
  store i1 false, ptr %4, align 1
  store i32 1, ptr %26, align 4
  br label %1087

1087:                                             ; preds = %1086, %1085
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  br label %1088

1088:                                             ; preds = %1087, %1007, %244
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  %1089 = load i1, ptr %4, align 1
  ret i1 %1089

1090:                                             ; preds = %1015
  %1091 = load ptr, ptr %30, align 8
  %1092 = load i32, ptr %31, align 4
  %1093 = insertvalue { ptr, i32 } poison, ptr %1091, 0
  %1094 = insertvalue { ptr, i32 } %1093, i32 %1092, 1
  resume { ptr, i32 } %1094

1095:                                             ; preds = %473
  unreachable
}

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZN11spirv_cross8Compiler27add_implied_read_expressionERNS_14SPIRExpressionEj(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(236), i32 noundef) #5

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i64 0, i64 4, !9}
!14 = !{!15, !19, i64 16}
!15 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !16, i64 0, !18, i64 12, !19, i64 16, !10, i64 20, !17, i64 24, !20, i64 28, !21, i64 32, !12, i64 88, !12, i64 89, !17, i64 92, !25, i64 96, !12, i64 152, !12, i64 153, !12, i64 154, !12, i64 155, !10, i64 156, !28, i64 160, !12, i64 164, !12, i64 165, !12, i64 166, !6, i64 168}
!16 = !{!"_ZTSN11spirv_cross8IVariantE", !17, i64 8}
!17 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!18 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!19 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!20 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !10, i64 0}
!21 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !22, i64 0, !23, i64 16, !24, i64 24}
!22 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !23, i64 8}
!23 = !{!"long", !7, i64 0}
!24 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!25 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !26, i64 0, !23, i64 16, !27, i64 24}
!26 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !23, i64 8}
!27 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!28 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !10, i64 0}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!32, !32, i64 0}
!32 = !{!"_ZTSN3spv7BuiltInE", !7, i64 0}
!33 = !{!34, !36, i64 16}
!34 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !16, i64 0, !35, i64 12, !36, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !21, i64 32, !37, i64 88, !10, i64 120, !12, i64 124, !12, i64 125, !19, i64 128, !40, i64 136, !21, i64 192, !43, i64 248, !18, i64 272, !18, i64 276, !47, i64 280}
!35 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!36 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!37 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !38, i64 0, !23, i64 16, !39, i64 24}
!38 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !23, i64 8}
!39 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!40 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !41, i64 0, !23, i64 16, !42, i64 24}
!41 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !23, i64 8}
!42 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!43 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !18, i64 0, !44, i64 4, !12, i64 8, !12, i64 9, !12, i64 10, !10, i64 12, !45, i64 16, !46, i64 20}
!44 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!45 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!46 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!47 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !48, i64 0}
!48 = !{!"_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, !23, i64 8, !49, i64 16, !23, i64 24, !50, i64 32, !6, i64 48}
!49 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!50 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !51, i64 0, !23, i64 8}
!51 = !{!"float", !7, i64 0}
!52 = !{!53, !12, i64 264}
!53 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !16, i64 0, !18, i64 12, !54, i64 16, !12, i64 264, !12, i64 265, !12, i64 266, !55, i64 272, !58, i64 328}
!54 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !10, i64 240}
!55 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !56, i64 0, !23, i64 16, !57, i64 24}
!56 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !6, i64 0, !23, i64 8}
!57 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!58 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !59, i64 0, !23, i64 8, !7, i64 16}
!59 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!60 = distinct !{!60, !61}
!61 = !{!"llvm.loop.mustprogress"}
!62 = distinct !{!62, !61}
!63 = distinct !{!63, !61}
!64 = !{!34, !10, i64 24}
!65 = !{!66, !12, i64 4}
!66 = !{!"_ZTSN11spirv_cross15AccessChainMetaE", !10, i64 0, !12, i64 4, !12, i64 5, !12, i64 6, !12, i64 7, !12, i64 8, !12, i64 9, !12, i64 10, !32, i64 12}
!67 = !{!68, !12, i64 57}
!68 = !{!"_ZTSN11spirv_cross14SPIRExpressionE", !16, i64 0, !17, i64 12, !58, i64 16, !18, i64 48, !17, i64 52, !12, i64 56, !12, i64 57, !12, i64 58, !12, i64 59, !25, i64 64, !25, i64 120, !25, i64 176, !10, i64 232}
!69 = !{!68, !12, i64 58}
!70 = !{!66, !12, i64 5}
!71 = !{!66, !10, i64 0}
!72 = !{!66, !12, i64 6}
!73 = distinct !{!73, !61}
!74 = !{!75, !32, i64 192}
!75 = !{!"_ZTSN11spirv_cross4MetaE", !76, i64 0, !82, i64 392, !85, i64 424, !12, i64 480, !10, i64 484}
!76 = !{!"_ZTSN11spirv_cross4Meta10DecorationE", !58, i64 0, !58, i64 32, !58, i64 64, !58, i64 96, !77, i64 128, !32, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236, !10, i64 240, !10, i64 244, !80, i64 248, !12, i64 252, !12, i64 253, !81, i64 256}
!77 = !{!"_ZTSN11spirv_cross6BitsetE", !23, i64 0, !78, i64 8}
!78 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !79, i64 0}
!79 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !23, i64 8, !49, i64 16, !23, i64 24, !50, i64 32, !6, i64 48}
!80 = !{!"_ZTSN3spv14FPRoundingModeE", !7, i64 0}
!81 = !{!"_ZTSN11spirv_cross4Meta10Decoration8ExtendedE", !77, i64 0, !7, i64 64}
!82 = !{!"_ZTSN11spirv_cross11SmallVectorINS_4Meta10DecorationELm0EEE", !83, i64 0, !23, i64 16, !84, i64 24}
!83 = !{!"_ZTSN11spirv_cross10VectorViewINS_4Meta10DecorationEEE", !6, i64 0, !23, i64 8}
!84 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_4Meta10DecorationELm0EEE"}
!85 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !86, i64 0}
!86 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !23, i64 8, !49, i64 16, !23, i64 24, !50, i64 32, !6, i64 48}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"struct.spirv_cross::AccessChainMeta" = type { i32, i8, i8, i8, i8, i8, i8, i8, i32 }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.spirv_cross::TypedID.520" = type { i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.940 = external hidden unnamed_addr constant [22 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj = external hidden unnamed_addr constant [90 x i8], align 1
@.str.941 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.942 = external hidden unnamed_addr constant [12 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL31is_stage_output_variable_maskedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488), ptr noundef nonnull align 8 dereferenceable(488)) local_unnamed_addr #6 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #7 align 2

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

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.spirv_cross::TypedID.413", align 4
  %5 = alloca %"class.spirv_cross::TypedID.413", align 4
  %6 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %7 = alloca %"class.spirv_cross::SmallVector.92", align 8
  %8 = alloca %"class.spirv_cross::TypedID.350", align 4
  %9 = alloca %"class.spirv_cross::TypedID.350", align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"class.spirv_cross::TypedID.520", align 4
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %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 i8, align 1
  %24 = alloca %"class.spirv_cross::TypedID.413", align 4
  %25 = alloca %"class.spirv_cross::TypedID.413", align 4
  %26 = alloca %"class.spirv_cross::TypedID.414", align 4
  %27 = alloca %"class.spirv_cross::TypedID.413", align 4
  %28 = alloca %"class.spirv_cross::TypedID.413", align 4
  %29 = getelementptr inbounds i8, ptr %1, i64 8
  %30 = load i32, ptr %29, align 4, !tbaa !5
  %31 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %30)
  %32 = icmp ne ptr %31, null
  br i1 %32, label %33, label %449

33:                                               ; preds = %3
  %34 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %31)
  %35 = getelementptr inbounds i8, ptr %34, i64 8
  %.sroa.0102.0.copyload = load i32, ptr %35, align 8, !tbaa !5
  %36 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0102.0.copyload, i32 noundef 2)
  %37 = getelementptr inbounds i8, ptr %34, i64 32
  %38 = tail call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %37) #8
  %39 = getelementptr inbounds i8, ptr %31, i64 16
  %40 = load i32, ptr %39, align 8, !tbaa !9
  %41 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %40)
  %42 = load i32, ptr %29, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %4, i32 noundef %42)
  %43 = load i32, ptr %4, align 4
  %44 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %43, i32 noundef 15)
  br i1 %44, label %47, label %45

45:                                               ; preds = %33
  %46 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL14is_patch_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %34)
  br label %47

47:                                               ; preds = %45, %33
  %48 = phi i1 [ true, %33 ], [ %46, %45 ]
  %49 = load i32, ptr %39, align 8, !tbaa !9
  switch i32 %49, label %.fold.split [
    i32 1, label %52
    i32 3, label %50
  ]

50:                                               ; preds = %47
  %51 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br label %52

.fold.split:                                      ; preds = %47
  br label %52

52:                                               ; preds = %47, %.fold.split, %50
  %53 = phi i1 [ true, %47 ], [ %51, %50 ], [ false, %.fold.split ]
  br i1 %48, label %54, label %59

54:                                               ; preds = %52
  %brmerge.demorgan = and i1 %36, %38
  br i1 %brmerge.demorgan, label %55, label %58

55:                                               ; preds = %54
  %56 = load i32, ptr %39, align 8, !tbaa !9
  %57 = icmp eq i32 %56, 1
  br i1 %57, label %58, label %59

58:                                               ; preds = %54, %55
  br label %59

59:                                               ; preds = %52, %55, %58
  %.0209.shrunk = phi i1 [ false, %58 ], [ %53, %55 ], [ %53, %52 ]
  %60 = getelementptr inbounds i8, ptr %31, i64 8
  %61 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %60)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #8
  %62 = load i32, ptr %29, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %5, i32 noundef %62)
  %63 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %64 = icmp ne i32 %61, %63
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #8
  br i1 %.0209.shrunk, label %65, label %447

65:                                               ; preds = %59
  %66 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %31)
  %.not307 = xor i1 %66, true
  %brmerge308 = or i1 %36, %.not307
  br i1 %brmerge308, label %switch.edge, label %switch.early.test

switch.early.test:                                ; preds = %65
  %.sroa.094.0.copyload = load i32, ptr %60, align 8, !tbaa !5
  %67 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.094.0.copyload, i32 noundef 11)
  switch i32 %67, label %447 [
    i32 3, label %switch.edge
    i32 1, label %switch.edge
    i32 0, label %switch.edge
    i32 4, label %switch.edge
  ]

switch.edge:                                      ; preds = %65, %switch.early.test, %switch.early.test, %switch.early.test, %switch.early.test
  %68 = load i32, ptr %39, align 8, !tbaa !9
  %69 = icmp ne i32 %68, 3
  %brmerge310 = or i1 %64, %69
  br i1 %brmerge310, label %.critedge324, label %70

70:                                               ; preds = %switch.edge
  br i1 %36, label %71, label %74

71:                                               ; preds = %70
  %72 = select i1 %48, i32 3, i32 4
  %73 = icmp ult i32 %72, %2
  br i1 %73, label %76, label %.critedge324

74:                                               ; preds = %70
  %75 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL31is_stage_output_variable_maskedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %31)
  br i1 %75, label %485, label %.critedge324

76:                                               ; preds = %71
  %77 = zext nneg i32 %72 to i64
  %78 = getelementptr inbounds i32, ptr %1, i64 %77
  %79 = load i32, ptr %78, align 4, !tbaa !5
  %80 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %79)
  %81 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %80, i32 noundef 0, i32 noundef 0)
  %82 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %31, i32 noundef %81, i1 noundef zeroext true)
  br i1 %82, label %485, label %.critedge324

.critedge324:                                     ; preds = %74, %71, %switch.edge, %76
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %6) #8
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %7) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %7) #8
  %83 = getelementptr inbounds i8, ptr %0, i64 8
  %84 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %83, i32 noundef 1)
          to label %85 unwind label %92

85:                                               ; preds = %.critedge324
  %86 = add i32 %2, -2
  %87 = zext i32 %86 to i64
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(56) %7, i64 noundef %87) #8
  %88 = select i1 %64, i32 3, i32 4
  %.neg = sext i1 %48 to i32
  %89 = add nsw i32 %88, %.neg
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %8) #8
  %90 = load i32, ptr %39, align 8, !tbaa !9
  %91 = icmp eq i32 %90, 1
  br i1 %48, label %94, label %.thread

92:                                               ; preds = %.critedge324
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %446

94:                                               ; preds = %85
  %.v269 = select i1 %91, i64 11140, i64 11144
  %storemerge.in = getelementptr inbounds i8, ptr %0, i64 %.v269
  %storemerge = load i32, ptr %storemerge.in, align 4, !tbaa !5
  store i32 %storemerge, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  br i1 %64, label %.thread340, label %96

.thread:                                          ; preds = %85
  %.v = select i1 %91, i64 11148, i64 11152
  %storemerge.in388 = getelementptr inbounds i8, ptr %0, i64 %.v
  %storemerge389 = load i32, ptr %storemerge.in388, align 4, !tbaa !5
  store i32 %storemerge389, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  br i1 %64, label %.thread340, label %97

.thread340:                                       ; preds = %.thread, %94
  %95 = load i32, ptr %29, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %9, i32 noundef %95)
  br label %101

96:                                               ; preds = %94
  store i32 %storemerge, ptr %9, align 4, !tbaa !5
  br label %101

97:                                               ; preds = %.thread
  store i32 %storemerge389, ptr %9, align 4, !tbaa !5
  %98 = zext nneg i32 %89 to i64
  %99 = getelementptr i32, ptr %1, i64 %98
  %100 = getelementptr i8, ptr %99, i64 -4
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %7, ptr noundef nonnull align 4 dereferenceable(4) %100) #8
  br label %101

101:                                              ; preds = %96, %.thread340, %97
  %102 = load i32, ptr %1, align 4, !tbaa !5
  %103 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %102)
          to label %104 unwind label %119

104:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #8
  store i32 %84, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  %105 = load i32, ptr %29, align 4, !tbaa !5
  %106 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %105, i32 noundef 4)
          to label %107 unwind label %121

107:                                              ; preds = %104
  store i32 %106, ptr %11, align 4, !tbaa !5
  %brmerge312.demorgan = and i1 %41, %64
  br i1 %brmerge312.demorgan, label %108, label %125

108:                                              ; preds = %107
  %109 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  %110 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %109)
          to label %111 unwind label %123

111:                                              ; preds = %108
  %112 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %110)
          to label %113 unwind label %123

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

114:                                              ; preds = %113
  %115 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %110)
          to label %116 unwind label %123

116:                                              ; preds = %114
  %117 = getelementptr inbounds i8, ptr %110, i64 16
  %118 = load i32, ptr %117, align 8
  %.not270 = icmp ne i32 %118, 15
  %not. = xor i1 %115, true
  %or.cond = select i1 %not., i1 %.not270, i1 false
  br label %125

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

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

123:                                              ; preds = %114, %111, %108
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %444

125:                                              ; preds = %116, %113, %107
  %.1252 = phi i1 [ false, %107 ], [ false, %113 ], [ %or.cond, %116 ]
  %.1252.not = xor i1 %.1252, true
  %brmerge314 = or i1 %36, %41
  %or.cond326 = and i1 %brmerge314, %.1252.not
  br i1 %or.cond326, label %126, label %257

126:                                              ; preds = %125
  %127 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler25get_variable_element_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %31)
          to label %128 unwind label %.loopexit.split-lp

128:                                              ; preds = %126
  %129 = load i32, ptr %11, align 4, !tbaa !5
  %130 = icmp eq i32 %129, -1
  br i1 %130, label %131, label %153

131:                                              ; preds = %128
  %132 = add nuw nsw i32 %89, 1
  %.not271.not = icmp ult i32 %89, %2
  br i1 %.not271.not, label %133, label %153

133:                                              ; preds = %131
  %134 = zext nneg i32 %89 to i64
  %135 = getelementptr inbounds i32, ptr %1, i64 %134
  %136 = load i32, ptr %135, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %12, i32 noundef %136)
  %137 = load i32, ptr %12, align 4
  %138 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler12get_constantENS_7TypedIDILNS_5TypesE3EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %137)
          to label %139 unwind label %145

139:                                              ; preds = %133
  %140 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %138, i32 noundef 0, i32 noundef 0)
  %141 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %60)
  %142 = invoke noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %141, i32 noundef %140, i32 noundef 4)
          to label %143 unwind label %145

143:                                              ; preds = %139
  store i32 %142, ptr %11, align 4, !tbaa !5
  %.not272 = icmp eq i32 %142, -1
  br i1 %.not272, label %144, label %147

144:                                              ; preds = %143
  call void @__assert_fail(ptr noundef nonnull @.str.940, ptr noundef nonnull @.str.25, i32 noundef 8582, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj) #9
  unreachable

.loopexit345:                                     ; preds = %.lr.ph363, %160
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %444

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

145:                                              ; preds = %147, %139, %133
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %444

147:                                              ; preds = %143
  %148 = getelementptr inbounds i8, ptr %127, i64 136
  %149 = zext i32 %140 to i64
  %150 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %148, i64 noundef %149) #8
  %151 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %150)
  %152 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %151)
          to label %153 unwind label %145

153:                                              ; preds = %147, %131, %128
  %.0249 = phi i32 [ %89, %131 ], [ %89, %128 ], [ %132, %147 ]
  %.0246 = phi ptr [ %127, %131 ], [ %127, %128 ], [ %152, %147 ]
  %154 = icmp ult i32 %.0249, %2
  %155 = select i1 %41, i1 %154, i1 false
  br i1 %155, label %.lr.ph363.preheader, label %._crit_edge

.lr.ph363.preheader:                              ; preds = %153
  %156 = zext nneg i32 %.0249 to i64
  %157 = zext i32 %2 to i64
  br label %.lr.ph363

.lr.ph363:                                        ; preds = %.lr.ph363.preheader, %214
  %indvars.iv = phi i64 [ %156, %.lr.ph363.preheader ], [ %indvars.iv.next, %214 ]
  %.1247362 = phi ptr [ %.0246, %.lr.ph363.preheader ], [ %.2248, %214 ]
  %.1250361 = phi i32 [ %.0249, %.lr.ph363.preheader ], [ %215, %214 ]
  %158 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %.1247362)
          to label %159 unwind label %.loopexit345

159:                                              ; preds = %.lr.ph363
  br i1 %158, label %166, label %160

160:                                              ; preds = %159
  %161 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %.1247362)
          to label %162 unwind label %.loopexit345

162:                                              ; preds = %160
  br i1 %161, label %166, label %163

163:                                              ; preds = %162
  %164 = getelementptr inbounds i8, ptr %.1247362, i64 16
  %165 = load i32, ptr %164, align 8, !tbaa !26
  %.not273 = icmp eq i32 %165, 15
  br i1 %.not273, label %166, label %._crit_edge.loopexit.split.loop.exit

166:                                              ; preds = %163, %162, %159
  %167 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv
  %168 = load i32, ptr %167, align 4, !tbaa !5
  %169 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %168)
          to label %170 unwind label %.loopexit346

170:                                              ; preds = %166
  %.not279 = icmp eq ptr %169, null
  br i1 %.not279, label %175, label %171

171:                                              ; preds = %170
  %172 = getelementptr inbounds i8, ptr %169, i64 264
  %173 = load i8, ptr %172, align 8, !tbaa !45, !range !53, !noundef !54
  %174 = trunc nuw i8 %173 to i1
  br i1 %174, label %175, label %180

175:                                              ; preds = %171, %170
  %176 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %176, ptr noundef nonnull @.str.941)
          to label %177 unwind label %178

177:                                              ; preds = %175
  invoke void @__cxa_throw(ptr nonnull %176, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %486 unwind label %.loopexit.split-lp347

.loopexit346:                                     ; preds = %.invoke, %166
  %lpad.loopexit348 = landingpad { ptr, i32 }
          cleanup
  br label %444

.loopexit.split-lp347:                            ; preds = %177
  %lpad.loopexit.split-lp349 = landingpad { ptr, i32 }
          cleanup
  br label %444

178:                                              ; preds = %175
  %179 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %176) #8
  br label %444

180:                                              ; preds = %171
  %181 = getelementptr inbounds i8, ptr %.1247362, i64 16
  %182 = load i32, ptr %181, align 8, !tbaa !26
  %183 = icmp eq i32 %182, 15
  br i1 %183, label %184, label %198

184:                                              ; preds = %180
  %185 = load i32, ptr %39, align 8, !tbaa !9
  %186 = icmp eq i32 %185, 3
  br i1 %186, label %187, label %198

187:                                              ; preds = %184
  %188 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %169, i32 noundef 0, i32 noundef 0)
  %.not377 = icmp eq i32 %188, 0
  br i1 %.not377, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %187, %196
  %.0224360 = phi i32 [ %197, %196 ], [ 0, %187 ]
  %189 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %31, i32 noundef %.0224360, i1 noundef zeroext true)
          to label %190 unwind label %194

190:                                              ; preds = %.lr.ph
  br i1 %189, label %196, label %191

191:                                              ; preds = %190
  %192 = load i32, ptr %11, align 4, !tbaa !5
  %193 = add i32 %192, 1
  store i32 %193, ptr %11, align 4, !tbaa !5
  br label %196

194:                                              ; preds = %.lr.ph
  %195 = landingpad { ptr, i32 }
          cleanup
  br label %444

196:                                              ; preds = %190, %191
  %197 = add nuw i32 %.0224360, 1
  %exitcond.not = icmp eq i32 %197, %188
  br i1 %exitcond.not, label %.loopexit, label %.lr.ph, !llvm.loop !55

198:                                              ; preds = %184, %180
  %199 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %169, i32 noundef 0, i32 noundef 0)
  %200 = load i32, ptr %11, align 4, !tbaa !5
  %201 = add i32 %200, %199
  store i32 %201, ptr %11, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %196, %187, %198
  %202 = getelementptr inbounds i8, ptr %.1247362, i64 276
  %203 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %202)
  %.not280 = icmp eq i32 %203, 0
  br i1 %.not280, label %206, label %.invoke

.invoke:                                          ; preds = %.loopexit, %209
  %.sink = phi ptr [ %213, %209 ], [ %202, %.loopexit ]
  %204 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.sink)
  %205 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %204)
          to label %214 unwind label %.loopexit346

206:                                              ; preds = %.loopexit
  %207 = load i32, ptr %181, align 8, !tbaa !26
  %208 = icmp eq i32 %207, 15
  br i1 %208, label %209, label %214

209:                                              ; preds = %206
  %210 = getelementptr inbounds i8, ptr %.1247362, i64 136
  %211 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %169, i32 noundef 0, i32 noundef 0)
  %212 = zext i32 %211 to i64
  %213 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %210, i64 noundef %212) #8
  br label %.invoke

214:                                              ; preds = %.invoke, %206
  %.2248 = phi ptr [ %.1247362, %206 ], [ %205, %.invoke ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %215 = add nuw i32 %.1250361, 1
  %216 = icmp ult i64 %indvars.iv.next, %157
  br i1 %216, label %.lr.ph363, label %._crit_edge, !llvm.loop !57

._crit_edge.loopexit.split.loop.exit:             ; preds = %163
  %217 = trunc nuw i64 %indvars.iv to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %214, %._crit_edge.loopexit.split.loop.exit, %153
  %.1250.lcssa = phi i32 [ %.0249, %153 ], [ %217, %._crit_edge.loopexit.split.loop.exit ], [ %215, %214 ]
  %.lcssa = phi i1 [ %154, %153 ], [ true, %._crit_edge.loopexit.split.loop.exit ], [ false, %214 ]
  %218 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %103)
          to label %219 unwind label %240

219:                                              ; preds = %._crit_edge
  br i1 %41, label %220, label %.critedge316

220:                                              ; preds = %219
  %221 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %218)
          to label %222 unwind label %242

222:                                              ; preds = %220
  br i1 %221, label %.critedge318, label %223

223:                                              ; preds = %222
  %224 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %218)
          to label %225 unwind label %242

225:                                              ; preds = %223
  %226 = getelementptr inbounds i8, ptr %218, i64 16
  %227 = load i32, ptr %226, align 8
  %228 = icmp eq i32 %227, 15
  %or.cond329 = select i1 %224, i1 true, i1 %228
  br i1 %or.cond329, label %.critedge318, label %.critedge316

.critedge316:                                     ; preds = %219, %225
  %229 = load i32, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #8
  %230 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %231 unwind label %244

231:                                              ; preds = %.critedge316
  store i32 %230, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #8
  store i8 0, ptr %14, align 1, !tbaa !58
  %232 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRConstantEJjRjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %229, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %233 unwind label %246

233:                                              ; preds = %231
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %7, ptr noundef nonnull align 4 dereferenceable(4) %10) #8
  store i32 -1, ptr %11, align 4, !tbaa !5
  br i1 %.lcssa, label %234, label %.thread342

234:                                              ; preds = %233
  %235 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  %236 = zext i32 %.1250.lcssa to i64
  %237 = getelementptr inbounds i32, ptr %1, i64 %236
  %238 = zext i32 %2 to i64
  %239 = getelementptr inbounds i32, ptr %1, i64 %238
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE6insertEPjPKjS4_(ptr noundef nonnull align 8 dereferenceable(56) %7, ptr noundef %235, ptr noundef nonnull %237, ptr noundef nonnull %239) #8
  br label %251

240:                                              ; preds = %._crit_edge
  %241 = landingpad { ptr, i32 }
          cleanup
  br label %444

242:                                              ; preds = %.thread342, %252, %223, %220
  %243 = landingpad { ptr, i32 }
          cleanup
  br label %444

244:                                              ; preds = %.critedge316
  %245 = landingpad { ptr, i32 }
          cleanup
  br label %248

246:                                              ; preds = %231
  %247 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  br label %248

248:                                              ; preds = %246, %244
  %.pn = phi { ptr, i32 } [ %247, %246 ], [ %245, %244 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #8
  br label %444

.critedge318:                                     ; preds = %225, %222
  %249 = icmp eq i32 %.1250.lcssa, %2
  br i1 %249, label %251, label %250

250:                                              ; preds = %.critedge318
  call void @__assert_fail(ptr noundef nonnull @.str.942, ptr noundef nonnull @.str.25, i32 noundef 8642, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj) #9
  unreachable

251:                                              ; preds = %.critedge318, %234
  %.pr = load i32, ptr %11, align 4, !tbaa !5
  %.not275 = icmp eq i32 %.pr, -1
  br i1 %.not275, label %.thread342, label %252

252:                                              ; preds = %251
  %253 = getelementptr inbounds i8, ptr %1, i64 4
  %254 = load i32, ptr %253, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %254, i32 noundef 4, i32 noundef %.pr)
          to label %281 unwind label %242

.thread342:                                       ; preds = %233, %251
  %255 = getelementptr inbounds i8, ptr %1, i64 4
  %256 = load i32, ptr %255, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler25unset_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %256, i32 noundef 4)
          to label %281 unwind label %242

257:                                              ; preds = %125
  %258 = load i32, ptr %11, align 4, !tbaa !5
  %.not284 = icmp eq i32 %258, -1
  br i1 %.not284, label %270, label %259

259:                                              ; preds = %257
  %260 = load i32, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #8
  %261 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %262 unwind label %265

262:                                              ; preds = %259
  store i32 %261, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #8
  store i8 0, ptr %16, align 1, !tbaa !58
  %263 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRConstantEJjRjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %260, ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %264 unwind label %267

264:                                              ; preds = %262
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %7, ptr noundef nonnull align 4 dereferenceable(4) %10) #8
  br label %270

265:                                              ; preds = %259
  %266 = landingpad { ptr, i32 }
          cleanup
  br label %269

267:                                              ; preds = %262
  %268 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #8
  br label %269

269:                                              ; preds = %267, %265
  %.pn285 = phi { ptr, i32 } [ %268, %267 ], [ %266, %265 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  br label %444

270:                                              ; preds = %264, %257
  store i32 -1, ptr %11, align 4, !tbaa !5
  %271 = getelementptr inbounds i8, ptr %1, i64 4
  %272 = load i32, ptr %271, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler25unset_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %272, i32 noundef 4)
          to label %273 unwind label %279

273:                                              ; preds = %270
  %274 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  %275 = zext nneg i32 %89 to i64
  %276 = getelementptr inbounds i32, ptr %1, i64 %275
  %277 = zext i32 %2 to i64
  %278 = getelementptr inbounds i32, ptr %1, i64 %277
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE6insertEPjPKjS4_(ptr noundef nonnull align 8 dereferenceable(56) %7, ptr noundef %274, ptr noundef nonnull %276, ptr noundef nonnull %278) #8
  br label %281

279:                                              ; preds = %270
  %280 = landingpad { ptr, i32 }
          cleanup
  br label %444

281:                                              ; preds = %252, %.thread342, %273
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  br i1 %64, label %292, label %282

282:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #8
  %283 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  %284 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE4dataEv(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  %285 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  %286 = trunc i64 %285 to i32
  %287 = xor i1 %48, true
  invoke void @_ZN11spirv_cross12CompilerGLSL12access_chainB5cxx11EjPKjjRKNS_8SPIRTypeEPNS_15AccessChainMetaEb(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 %283, ptr noundef %284, i32 noundef %286, ptr noundef nonnull align 8 dereferenceable(336) %103, ptr noundef nonnull %6, i1 noundef zeroext %287)
          to label %288 unwind label %290

288:                                              ; preds = %282
  %289 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  br label %329

290:                                              ; preds = %282
  %291 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  br label %443

292:                                              ; preds = %281
  %293 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  %294 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %293)
          to label %295 unwind label %311

295:                                              ; preds = %292
  %296 = icmp ne ptr %294, null
  %or.cond7 = and i1 %41, %296
  br i1 %or.cond7, label %297, label %.critedge320

297:                                              ; preds = %295
  %298 = getelementptr inbounds i8, ptr %294, i64 176
  %299 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %298) #8
  %300 = icmp ne i64 %299, 2
  %spec.select.not = or i1 %.1252, %300
  br i1 %spec.select.not, label %.critedge320, label %301

301:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #8
  %302 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  invoke 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 %302, i1 noundef zeroext true)
          to label %303 unwind label %313

303:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #8
  %304 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %8)
  %305 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE4dataEv(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  %306 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  %307 = trunc i64 %306 to i32
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %304, ptr noundef %305, i32 noundef %307, i32 noundef 2, ptr noundef nonnull %6)
          to label %308 unwind label %315

308:                                              ; preds = %303
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %309 unwind label %317

309:                                              ; preds = %308
  %310 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  br label %329

311:                                              ; preds = %292
  %312 = landingpad { ptr, i32 }
          cleanup
  br label %443

313:                                              ; preds = %301
  %314 = landingpad { ptr, i32 }
          cleanup
  br label %320

315:                                              ; preds = %303
  %316 = landingpad { ptr, i32 }
          cleanup
  br label %319

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

319:                                              ; preds = %317, %315
  %.pn287 = phi { ptr, i32 } [ %318, %317 ], [ %316, %315 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  br label %320

320:                                              ; preds = %319, %313
  %.pn287.pn = phi { ptr, i32 } [ %.pn287, %319 ], [ %314, %313 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  br label %443

.critedge320:                                     ; preds = %295, %297
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #8
  %321 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  %322 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE4dataEv(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  %323 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  %324 = trunc i64 %323 to i32
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %321, ptr noundef %322, i32 noundef %324, i32 noundef 0, ptr noundef nonnull %6)
          to label %325 unwind label %327

325:                                              ; preds = %.critedge320
  %326 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  br label %329

327:                                              ; preds = %.critedge320
  %328 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  br label %443

329:                                              ; preds = %309, %325, %288
  %330 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %31)
          to label %331 unwind label %340

331:                                              ; preds = %329
  %332 = load i32, ptr %29, align 4, !tbaa !5
  %333 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %332, i32 noundef 14)
          to label %334 unwind label %340

334:                                              ; preds = %331
  br i1 %333, label %335, label %342

335:                                              ; preds = %334
  %336 = load i32, ptr %29, align 4, !tbaa !5
  %337 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %336, i32 noundef 14)
          to label %338 unwind label %340

338:                                              ; preds = %335
  %339 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %337)
          to label %342 unwind label %340

340:                                              ; preds = %382, %380, %368, %._crit_edge372, %338, %335, %331, %329
  %341 = landingpad { ptr, i32 }
          cleanup
  br label %443

342:                                              ; preds = %338, %334
  %.0216 = phi ptr [ %330, %334 ], [ %339, %338 ]
  %343 = icmp ugt i32 %2, 3
  br i1 %343, label %.lr.ph371.preheader, label %._crit_edge372

.lr.ph371.preheader:                              ; preds = %342
  %wide.trip.count = zext i32 %2 to i64
  br label %.lr.ph371

._crit_edge372:                                   ; preds = %366, %342
  %.1217.lcssa = phi ptr [ %.0216, %342 ], [ %365, %366 ]
  %344 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %.1217.lcssa)
          to label %367 unwind label %340

.lr.ph371:                                        ; preds = %.lr.ph371.preheader, %366
  %indvars.iv378 = phi i64 [ 3, %.lr.ph371.preheader ], [ %indvars.iv.next379, %366 ]
  %.1217368 = phi ptr [ %.0216, %.lr.ph371.preheader ], [ %365, %366 ]
  %345 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %.1217368)
          to label %346 unwind label %360

346:                                              ; preds = %.lr.ph371
  br i1 %345, label %362, label %347

347:                                              ; preds = %346
  %348 = getelementptr inbounds i8, ptr %.1217368, i64 16
  %349 = load i32, ptr %348, align 8, !tbaa !26
  %350 = icmp eq i32 %349, 15
  br i1 %350, label %351, label %362

351:                                              ; preds = %347
  %352 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv378
  %353 = load i32, ptr %352, align 4, !tbaa !5
  %354 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %353)
          to label %355 unwind label %360

355:                                              ; preds = %351
  %356 = getelementptr inbounds i8, ptr %.1217368, i64 136
  %357 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %354, i32 noundef 0, i32 noundef 0)
  %358 = zext i32 %357 to i64
  %359 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %356, i64 noundef %358) #8
  br label %.invoke396

360:                                              ; preds = %.invoke396, %351, %.lr.ph371
  %361 = landingpad { ptr, i32 }
          cleanup
  br label %443

362:                                              ; preds = %347, %346
  %363 = getelementptr inbounds i8, ptr %.1217368, i64 276
  br label %.invoke396

.invoke396:                                       ; preds = %355, %362
  %.sink397 = phi ptr [ %359, %355 ], [ %363, %362 ]
  %364 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.sink397)
  %365 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %364)
          to label %366 unwind label %360

366:                                              ; preds = %.invoke396
  %indvars.iv.next379 = add nuw nsw i64 %indvars.iv378, 1
  %exitcond381.not = icmp eq i64 %indvars.iv.next379, %wide.trip.count
  br i1 %exitcond381.not, label %._crit_edge372, label %.lr.ph371, !llvm.loop !59

367:                                              ; preds = %._crit_edge372
  br i1 %344, label %384, label %368

368:                                              ; preds = %367
  %369 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %.1217.lcssa)
          to label %370 unwind label %340

370:                                              ; preds = %368
  br i1 %369, label %384, label %371

371:                                              ; preds = %370
  %372 = getelementptr inbounds i8, ptr %.1217.lcssa, i64 16
  %373 = load i32, ptr %372, align 8, !tbaa !26
  %.not292 = icmp eq i32 %373, 15
  br i1 %.not292, label %384, label %374

374:                                              ; preds = %371
  %375 = getelementptr inbounds i8, ptr %.1217.lcssa, i64 24
  %376 = load i32, ptr %375, align 8, !tbaa !60
  %377 = getelementptr inbounds i8, ptr %103, i64 24
  %378 = load i32, ptr %377, align 8, !tbaa !60
  %379 = icmp ugt i32 %376, %378
  br i1 %379, label %380, label %384

380:                                              ; preds = %374
  %381 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %378, i32 noundef 0)
          to label %382 unwind label %340

382:                                              ; preds = %380
  %383 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %381)
          to label %384 unwind label %340

384:                                              ; preds = %382, %374, %371, %370, %367
  %385 = getelementptr inbounds i8, ptr %1, i64 4
  %386 = load i32, ptr %385, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #8
  %387 = load i32, ptr %29, align 4, !tbaa !5
  %388 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %387)
          to label %389 unwind label %404

389:                                              ; preds = %384
  %390 = zext i1 %388 to i8
  store i8 %390, ptr %23, align 1, !tbaa !58
  %391 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %386, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 4 dereferenceable(4) %1, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %392 unwind label %404

392:                                              ; preds = %389
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #8
  %393 = getelementptr inbounds i8, ptr %391, i64 52
  %394 = load i32, ptr %60, align 8, !tbaa !5
  store i32 %394, ptr %393, align 4, !tbaa !5
  %395 = getelementptr inbounds i8, ptr %6, i64 4
  %396 = load i8, ptr %395, align 4, !tbaa !61, !range !53, !noundef !54
  %397 = getelementptr inbounds i8, ptr %391, i64 57
  store i8 %396, ptr %397, align 1, !tbaa !64
  %398 = getelementptr inbounds i8, ptr %391, i64 58
  store i8 1, ptr %398, align 2, !tbaa !66
  %399 = getelementptr inbounds i8, ptr %6, i64 5
  %400 = load i8, ptr %399, align 1, !tbaa !67, !range !53, !noundef !54
  %401 = trunc nuw i8 %400 to i1
  br i1 %401, label %402, label %408

402:                                              ; preds = %392
  %403 = load i32, ptr %385, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %403, i32 noundef 2, i32 noundef 0)
          to label %408 unwind label %406

404:                                              ; preds = %389, %384
  %405 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #8
  br label %443

406:                                              ; preds = %440, %426, %423, %419, %416, %410, %402
  %407 = landingpad { ptr, i32 }
          cleanup
  br label %443

408:                                              ; preds = %402, %392
  %409 = load i32, ptr %6, align 4, !tbaa !68
  %.not293 = icmp eq i32 %409, 0
  br i1 %.not293, label %412, label %410

410:                                              ; preds = %408
  %411 = load i32, ptr %385, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %411, i32 noundef 1, i32 noundef %409)
          to label %412 unwind label %406

412:                                              ; preds = %410, %408
  %413 = getelementptr inbounds i8, ptr %6, i64 6
  %414 = load i8, ptr %413, align 2, !tbaa !69, !range !53, !noundef !54
  %415 = trunc nuw i8 %414 to i1
  br i1 %415, label %416, label %419

416:                                              ; preds = %412
  %417 = load i32, ptr %385, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %24, i32 noundef %417)
  %418 = load i32, ptr %24, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %418, i32 noundef 18, i32 noundef 0)
          to label %419 unwind label %406

419:                                              ; preds = %416, %412
  %420 = load i32, ptr %385, align 4, !tbaa !5
  %421 = getelementptr inbounds i8, ptr %.1217.lcssa, i64 8
  %422 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %421)
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %420, i32 noundef 14, i32 noundef %422)
          to label %423 unwind label %406

423:                                              ; preds = %419
  %424 = getelementptr inbounds i8, ptr %0, i64 2456
  %425 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %424, ptr noundef nonnull align 4 dereferenceable(4) %385)
          to label %426 unwind label %406

426:                                              ; preds = %423
  %427 = getelementptr inbounds i8, ptr %0, i64 2512
  %428 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %427, ptr noundef nonnull align 4 dereferenceable(4) %385)
          to label %.preheader unwind label %406

.preheader:                                       ; preds = %426
  %429 = icmp ugt i32 %2, 2
  br i1 %429, label %.lr.ph375.preheader, label %._crit_edge376

.lr.ph375.preheader:                              ; preds = %.preheader
  %wide.trip.count385 = zext i32 %2 to i64
  br label %.lr.ph375

._crit_edge376:                                   ; preds = %437, %.preheader
  %430 = getelementptr inbounds i8, ptr %391, i64 64
  %431 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %430) #8
  br i1 %431, label %440, label %442

.lr.ph375:                                        ; preds = %.lr.ph375.preheader, %437
  %indvars.iv382 = phi i64 [ 2, %.lr.ph375.preheader ], [ %indvars.iv.next383, %437 ]
  %432 = load i32, ptr %385, align 4, !tbaa !5
  %433 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv382
  %434 = load i32, ptr %433, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %432, i32 noundef %434)
          to label %435 unwind label %438

435:                                              ; preds = %.lr.ph375
  %436 = load i32, ptr %433, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler27add_implied_read_expressionERNS_14SPIRExpressionEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(236) %391, i32 noundef %436)
          to label %437 unwind label %438

437:                                              ; preds = %435
  %indvars.iv.next383 = add nuw nsw i64 %indvars.iv382, 1
  %exitcond386.not = icmp eq i64 %indvars.iv.next383, %wide.trip.count385
  br i1 %exitcond386.not, label %._crit_edge376, label %.lr.ph375, !llvm.loop !70

438:                                              ; preds = %435, %.lr.ph375
  %439 = landingpad { ptr, i32 }
          cleanup
  br label %443

440:                                              ; preds = %._crit_edge376
  %441 = invoke noundef i64 @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5eraseERKj(ptr noundef nonnull align 8 dereferenceable(56) %424, ptr noundef nonnull align 4 dereferenceable(4) %385)
          to label %442 unwind label %406

442:                                              ; preds = %440, %._crit_edge376
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %7) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #8
  br label %485

443:                                              ; preds = %340, %360, %438, %406, %404, %311, %327, %320, %290
  %.pn296.pn = phi { ptr, i32 } [ %291, %290 ], [ %312, %311 ], [ %.pn287.pn, %320 ], [ %328, %327 ], [ %361, %360 ], [ %341, %340 ], [ %439, %438 ], [ %407, %406 ], [ %405, %404 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #8
  br label %444

444:                                              ; preds = %.loopexit346, %.loopexit.split-lp347, %.loopexit345, %.loopexit.split-lp, %123, %269, %279, %443, %240, %248, %242, %178, %194, %145, %121
  %.pn296.pn.pn.pn = phi { ptr, i32 } [ %122, %121 ], [ %.pn296.pn, %443 ], [ %280, %279 ], [ %.pn285, %269 ], [ %124, %123 ], [ %146, %145 ], [ %179, %178 ], [ %195, %194 ], [ %241, %240 ], [ %243, %242 ], [ %.pn, %248 ], [ %lpad.loopexit, %.loopexit345 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %lpad.loopexit348, %.loopexit346 ], [ %lpad.loopexit.split-lp349, %.loopexit.split-lp347 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  br label %445

445:                                              ; preds = %444, %119
  %.pn296.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn296.pn.pn.pn, %444 ], [ %120, %119 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  br label %446

446:                                              ; preds = %445, %92
  %.pn296.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn296.pn.pn.pn.pn, %445 ], [ %93, %92 ]
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %7) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #8
  resume { ptr, i32 } %.pn296.pn.pn.pn.pn.pn

447:                                              ; preds = %switch.early.test, %59
  %448 = load i32, ptr %60, align 8, !tbaa !5
  store i32 %448, ptr %25, align 4, !tbaa !5
  br label %450

449:                                              ; preds = %3
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %25, i32 noundef 0)
  %.pre = load i32, ptr %25, align 4
  br label %450

450:                                              ; preds = %449, %447
  %451 = phi i32 [ %.pre, %449 ], [ %448, %447 ]
  %452 = getelementptr inbounds i8, ptr %0, i64 8
  %453 = call noundef ptr @_ZN11spirv_cross8ParsedIR9find_metaENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %452, i32 %451)
  %454 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  %455 = icmp ne ptr %453, null
  %456 = and i1 %454, %455
  %or.cond11 = and i1 %32, %456
  br i1 %or.cond11, label %457, label %485

457:                                              ; preds = %450
  %458 = getelementptr inbounds i8, ptr %453, i64 192
  %459 = load i32, ptr %458, align 8, !tbaa !71
  %460 = icmp eq i32 %459, 12
  br i1 %460, label %461, label %485

461:                                              ; preds = %457
  %462 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler25is_tessellating_trianglesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br i1 %462, label %463, label %485

463:                                              ; preds = %461
  %464 = getelementptr inbounds i8, ptr %1, i64 12
  %465 = load i32, ptr %464, align 4, !tbaa !5
  %466 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %465)
  %.not = icmp eq ptr %466, null
  br i1 %.not, label %470, label %467

467:                                              ; preds = %463
  %468 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %466, i32 noundef 0, i32 noundef 0)
  %469 = icmp eq i32 %468, 1
  br i1 %469, label %485, label %470

470:                                              ; preds = %467, %463
  %471 = getelementptr inbounds i8, ptr %1, i64 4
  %472 = load i32, ptr %471, align 4, !tbaa !5
  %473 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %472, ptr noundef nonnull align 8 dereferenceable(176) %31)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #8
  %474 = load i32, ptr %1, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef %474)
  %475 = getelementptr inbounds i8, ptr %473, i64 12
  %476 = load i32, ptr %26, align 4, !tbaa !5
  store i32 %476, ptr %475, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #8
  %477 = getelementptr inbounds i8, ptr %0, i64 256
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #8
  %478 = load i32, ptr %29, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %27, i32 noundef %478)
  %479 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %477, ptr noundef nonnull align 4 dereferenceable(4) %27)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #8
  %480 = load i32, ptr %471, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef %480)
  %481 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %477, ptr noundef nonnull align 4 dereferenceable(4) %28)
  %482 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %481, ptr noundef nonnull align 8 dereferenceable(488) %479)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #8
  %483 = load i32, ptr %471, align 4, !tbaa !5
  %484 = load i32, ptr %29, align 4, !tbaa !5
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %483, i32 noundef %484)
  br label %485

485:                                              ; preds = %74, %467, %470, %461, %457, %450, %76, %442
  %.3 = phi i1 [ true, %442 ], [ false, %76 ], [ true, %470 ], [ false, %467 ], [ false, %461 ], [ false, %457 ], [ false, %450 ], [ false, %74 ]
  ret i1 %.3

486:                                              ; preds = %177
  unreachable
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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_cross12SPIRVariableE", !11, i64 0, !13, i64 12, !14, i64 16, !6, i64 20, !12, i64 24, !15, i64 28, !16, i64 32, !21, i64 88, !21, i64 89, !12, i64 92, !22, i64 96, !21, i64 152, !21, i64 153, !21, i64 154, !21, i64 155, !6, i64 156, !25, i64 160, !21, i64 164, !21, i64 165, !21, i64 166, !18, i64 168}
!11 = !{!"_ZTSN11spirv_cross8IVariantE", !12, i64 8}
!12 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !6, i64 0}
!13 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !6, i64 0}
!14 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!15 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !6, i64 0}
!16 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !17, i64 0, !19, i64 16, !20, i64 24}
!17 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !18, i64 0, !19, i64 8}
!18 = !{!"any pointer", !7, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!21 = !{!"bool", !7, i64 0}
!22 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !23, i64 0, !19, i64 16, !24, i64 24}
!23 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !18, i64 0, !19, i64 8}
!24 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!25 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !6, i64 0}
!26 = !{!27, !29, i64 16}
!27 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !11, i64 0, !28, i64 12, !29, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !16, i64 32, !30, i64 88, !6, i64 120, !21, i64 124, !21, i64 125, !14, i64 128, !33, i64 136, !16, i64 192, !36, i64 248, !13, i64 272, !13, i64 276, !40, i64 280}
!28 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!30 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !31, i64 0, !19, i64 16, !32, i64 24}
!31 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !18, i64 0, !19, i64 8}
!32 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !34, i64 0, !19, i64 16, !35, i64 24}
!34 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !18, i64 0, !19, i64 8}
!35 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!36 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !13, i64 0, !37, i64 4, !21, i64 8, !21, i64 9, !21, i64 10, !6, i64 12, !38, i64 16, !39, i64 20}
!37 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!38 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!39 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!40 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !41, i64 0}
!41 = !{!"_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", !18, i64 0, !19, i64 8, !42, i64 16, !19, i64 24, !43, i64 32, !18, i64 48}
!42 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !18, i64 0}
!43 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !44, i64 0, !19, i64 8}
!44 = !{!"float", !7, i64 0}
!45 = !{!46, !21, i64 264}
!46 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !11, i64 0, !13, i64 12, !47, i64 16, !21, i64 264, !21, i64 265, !21, i64 266, !48, i64 272, !51, i64 328}
!47 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !6, i64 240}
!48 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !49, i64 0, !19, i64 16, !50, i64 24}
!49 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !18, i64 0, !19, i64 8}
!50 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!51 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !52, i64 0, !19, i64 8, !7, i64 16}
!52 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !18, i64 0}
!53 = !{i8 0, i8 2}
!54 = !{}
!55 = distinct !{!55, !56}
!56 = !{!"llvm.loop.mustprogress"}
!57 = distinct !{!57, !56}
!58 = !{!21, !21, i64 0}
!59 = distinct !{!59, !56}
!60 = !{!27, !6, i64 24}
!61 = !{!62, !21, i64 4}
!62 = !{!"_ZTSN11spirv_cross15AccessChainMetaE", !6, i64 0, !21, i64 4, !21, i64 5, !21, i64 6, !21, i64 7, !21, i64 8, !21, i64 9, !21, i64 10, !63, i64 12}
!63 = !{!"_ZTSN3spv7BuiltInE", !7, i64 0}
!64 = !{!65, !21, i64 57}
!65 = !{!"_ZTSN11spirv_cross14SPIRExpressionE", !11, i64 0, !12, i64 12, !51, i64 16, !13, i64 48, !12, i64 52, !21, i64 56, !21, i64 57, !21, i64 58, !21, i64 59, !22, i64 64, !22, i64 120, !22, i64 176, !6, i64 232}
!66 = !{!65, !21, i64 58}
!67 = !{!62, !21, i64 5}
!68 = !{!62, !6, i64 0}
!69 = !{!62, !21, i64 6}
!70 = distinct !{!70, !56}
!71 = !{!72, !63, i64 192}
!72 = !{!"_ZTSN11spirv_cross4MetaE", !73, i64 0, !79, i64 392, !82, i64 424, !21, i64 480, !6, i64 484}
!73 = !{!"_ZTSN11spirv_cross4Meta10DecorationE", !51, i64 0, !51, i64 32, !51, i64 64, !51, i64 96, !74, i64 128, !63, i64 192, !6, i64 196, !6, i64 200, !6, i64 204, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220, !6, i64 224, !6, i64 228, !6, i64 232, !6, i64 236, !6, i64 240, !6, i64 244, !77, i64 248, !21, i64 252, !21, i64 253, !78, i64 256}
!74 = !{!"_ZTSN11spirv_cross6BitsetE", !19, i64 0, !75, i64 8}
!75 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !76, i64 0}
!76 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !18, i64 0, !19, i64 8, !42, i64 16, !19, i64 24, !43, i64 32, !18, i64 48}
!77 = !{!"_ZTSN3spv14FPRoundingModeE", !7, i64 0}
!78 = !{!"_ZTSN11spirv_cross4Meta10Decoration8ExtendedE", !74, i64 0, !7, i64 64}
!79 = !{!"_ZTSN11spirv_cross11SmallVectorINS_4Meta10DecorationELm0EEE", !80, i64 0, !19, i64 16, !81, i64 24}
!80 = !{!"_ZTSN11spirv_cross10VectorViewINS_4Meta10DecorationEEE", !18, i64 0, !19, i64 8}
!81 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_4Meta10DecorationELm0EEE"}
!82 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !83, i64 0}
!83 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !18, i64 0, !19, i64 8, !42, i64 16, !19, i64 24, !43, i64 32, !18, i64 48}


; Effective O3 passes: ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass