; 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 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.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 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 x i8] }>
%"class.spirv_cross::CompilerMSL" = type <{ %"class.spirv_cross::CompilerGLSL", %"class.std::unordered_map.277", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, [2 x i8], %"struct.spirv_cross::CompilerMSL::Options", %"class.std::set", %"class.std::map", %"class.std::unordered_map.299", %"class.std::map", %"class.std::unordered_map.299", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.213", %"class.std::unordered_map.213", %"class.std::unordered_map.213", %"class.std::set.313", %"class.std::set.313", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.319", %"class.std::unordered_map.336", i32, i32, i32, [8 x i32], %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, [4 x i8], %"class.std::map.351", %"class.std::unordered_map.357", %"class.std::unordered_set", %"class.spirv_cross::SmallVector.374", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::SmallVector.377", %"class.std::map.380", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_set.386", [8 x i32], i32, i32, i8, i8, [6 x i8] }>
%"class.spirv_cross::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.159", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_map.185", %"class.std::unordered_map.145", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.199", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.27", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.227", i32, i32, i32, i8, i8, %"class.std::vector.230", %"class.std::vector.230", %"class.std::vector.235", %"class.std::vector.240", %"class.std::unordered_map.213", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.245", %"class.std::unordered_set", ptr, %"class.std::unordered_map.263" }
%"class.spirv_cross::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.spirv_cross::TypedID.350" = type { i32 }
%"class.std::map.351" = type { %"class.std::_Rb_tree.352" }
%"class.std::_Rb_tree.352" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.357" = type { %"class.std::_Hashtable.358" }
%"class.std::_Hashtable.358" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.374" = type { %"class.spirv_cross::VectorView.375", i64, %"class.spirv_cross::AlignedBuffer.376" }
%"class.spirv_cross::VectorView.375" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.376" = type { [64 x i8] }
%"class.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 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.927 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.928 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.929 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.930 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.931 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.932 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.933 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.934 = external hidden unnamed_addr constant [26 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj = external hidden unnamed_addr constant [87 x i8], align 1
@.str.935 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.936 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.937 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.938 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.939 = external hidden unnamed_addr constant [30 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; 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 void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) #4

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

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

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

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

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

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

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

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #4

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca i1, align 1
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.spirv_cross::TypedID.413", align 4
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca [2 x i32], align 4
  %29 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca [2 x i32], align 4
  %42 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca i8, align 1
  %45 = alloca i32, align 4
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca ptr, align 8
  %49 = alloca i32, align 4
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca i32, align 4
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca i32, align 4
  %58 = alloca [2 x i32], align 4
  %59 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca [2 x i32], align 4
  %70 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca %"class.std::__cxx11::basic_string", align 8
  %76 = alloca [2 x i32], align 4
  %77 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca i8, align 1
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  %88 = alloca ptr, align 8
  %89 = alloca i32, align 4
  %90 = alloca %"class.std::__cxx11::basic_string", align 8
  %91 = alloca %"class.std::__cxx11::basic_string", align 8
  %92 = alloca i32, align 4
  %93 = alloca [2 x i32], align 4
  %94 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca %"class.std::__cxx11::basic_string", align 8
  %97 = alloca %"class.std::__cxx11::basic_string", align 8
  %98 = alloca i32, align 4
  %99 = alloca %"class.std::__cxx11::basic_string", align 8
  %100 = alloca %"class.std::__cxx11::basic_string", align 8
  %101 = alloca %"class.std::__cxx11::basic_string", align 8
  %102 = alloca %"class.std::__cxx11::basic_string", align 8
  %103 = alloca %"class.std::__cxx11::basic_string", align 8
  %104 = alloca %"class.std::__cxx11::basic_string", align 8
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca [2 x i32], align 4
  %108 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %109 = alloca %"class.std::__cxx11::basic_string", align 8
  %110 = alloca %"class.std::__cxx11::basic_string", align 8
  %111 = alloca %"class.std::__cxx11::basic_string", align 8
  %112 = alloca i32, align 4
  %113 = alloca i32, align 4
  %114 = alloca %"class.std::__cxx11::basic_string", align 8
  %115 = alloca %"class.std::__cxx11::basic_string", align 8
  %116 = alloca %"class.std::__cxx11::basic_string", align 8
  %117 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store i32 %2, ptr %8, align 4, !tbaa !9
  store i32 %3, ptr %9, align 4, !tbaa !9
  %118 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %119 = load i32, ptr %9, align 4, !tbaa !9
  %120 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %119)
  store ptr %120, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %121 = load i32, ptr %7, align 4, !tbaa !9
  %122 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %121)
  store ptr %122, ptr %11, align 8, !tbaa !5
  %123 = load ptr, ptr %10, align 8, !tbaa !5
  %124 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %123, i32 0, i32 11
  %125 = load i32, ptr %124, align 8, !tbaa !11
  %126 = icmp ne i32 %125, 1
  br i1 %126, label %127, label %133

127:                                              ; preds = %4
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %128, i32 0, i32 11
  %130 = load i32, ptr %129, align 8, !tbaa !11
  %131 = icmp ne i32 %130, 3
  br i1 %131, label %132, label %133

132:                                              ; preds = %127
  store i1 false, ptr %5, align 1
  store i32 1, ptr %12, align 4
  br label %1661

133:                                              ; preds = %127, %4
  %134 = load ptr, ptr %10, align 8, !tbaa !5
  %135 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %134, i32 0, i32 11
  %136 = load i32, ptr %135, align 8, !tbaa !11
  %137 = icmp eq i32 %136, 3
  br i1 %137, label %138, label %141

138:                                              ; preds = %133
  %139 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %118)
  br i1 %139, label %140, label %141

140:                                              ; preds = %138
  store i1 false, ptr %5, align 1
  store i32 1, ptr %12, align 4
  br label %1661

141:                                              ; preds = %138, %133
  %142 = load i32, ptr %9, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %13, i32 noundef %142)
  %143 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %13, i32 0, i32 0
  %144 = load i32, ptr %143, align 4
  %145 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 %144, i32 noundef 15)
  br i1 %145, label %146, label %147

146:                                              ; preds = %141
  store i1 false, ptr %5, align 1
  store i32 1, ptr %12, align 4
  br label %1661

147:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #8
  %148 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %118, i32 0, i32 1
  %149 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %148, i32 0, i32 2
  %150 = load i32, ptr %9, align 4, !tbaa !9
  %151 = zext i32 %150 to i64
  %152 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %149, i64 noundef %151) #8
  %153 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %152)
  %154 = icmp eq i32 %153, 2
  %155 = zext i1 %154 to i8
  store i8 %155, ptr %14, align 1, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #8
  %156 = load ptr, ptr %10, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %156, i32 0, i32 11
  %158 = load i32, ptr %157, align 8, !tbaa !11
  %159 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %118, i32 noundef %158)
  %160 = zext i1 %159 to i8
  store i8 %160, ptr %15, align 1, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #8
  %161 = load i8, ptr %15, align 1, !tbaa !39, !range !40, !noundef !41
  %162 = trunc i8 %161 to i1
  br i1 %162, label %163, label %176

163:                                              ; preds = %147
  %164 = load ptr, ptr %11, align 8, !tbaa !5
  %165 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %164)
  br i1 %165, label %174, label %166

166:                                              ; preds = %163
  %167 = load ptr, ptr %11, align 8, !tbaa !5
  %168 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %167)
  br i1 %168, label %174, label %169

169:                                              ; preds = %166
  %170 = load ptr, ptr %11, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %170, i32 0, i32 2
  %172 = load i32, ptr %171, align 8, !tbaa !42
  %173 = icmp eq i32 %172, 15
  br label %174

174:                                              ; preds = %169, %166, %163
  %175 = phi i1 [ true, %166 ], [ true, %163 ], [ %173, %169 ]
  br label %176

176:                                              ; preds = %174, %147
  %177 = phi i1 [ false, %147 ], [ %175, %174 ]
  %178 = zext i1 %177 to i8
  store i8 %178, ptr %16, align 1, !tbaa !39
  %179 = load i8, ptr %14, align 1, !tbaa !39, !range !40, !noundef !41
  %180 = trunc i8 %179 to i1
  br i1 %180, label %181, label %185

181:                                              ; preds = %176
  %182 = load ptr, ptr %11, align 8, !tbaa !5
  %183 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %182)
  br i1 %183, label %184, label %185

184:                                              ; preds = %181
  store i8 1, ptr %16, align 1, !tbaa !39
  br label %185

185:                                              ; preds = %184, %181, %176
  %186 = load i8, ptr %16, align 1, !tbaa !39, !range !40, !noundef !41
  %187 = trunc i8 %186 to i1
  br i1 %187, label %189, label %188

188:                                              ; preds = %185
  store i1 false, ptr %5, align 1
  store i32 1, ptr %12, align 4
  br label %1660

189:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %190 = load i32, ptr %9, align 4, !tbaa !9
  %191 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %190, i32 noundef 4)
          to label %192 unwind label %213

192:                                              ; preds = %189
  store i32 %191, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %193 = load i32, ptr %9, align 4, !tbaa !9
  %194 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %193)
          to label %195 unwind label %217

195:                                              ; preds = %192
  store ptr %194, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %196 = load ptr, ptr %10, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %196, i32 0, i32 1
  %198 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %197)
          to label %199 unwind label %221

199:                                              ; preds = %195
  %200 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %198)
          to label %201 unwind label %221

201:                                              ; preds = %199
  store ptr %200, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %202 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 63
  %203 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %202)
          to label %204 unwind label %225

204:                                              ; preds = %201
  %205 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %203)
          to label %206 unwind label %225

206:                                              ; preds = %204
  store ptr %205, ptr %23, align 8, !tbaa !5
  %207 = load i8, ptr %15, align 1, !tbaa !39, !range !40, !noundef !41
  %208 = trunc i8 %207 to i1
  br i1 %208, label %309, label %209

209:                                              ; preds = %206
  %210 = load i32, ptr %18, align 4, !tbaa !9
  %211 = icmp eq i32 %210, -1
  br i1 %211, label %212, label %229

212:                                              ; preds = %209
  store i1 false, ptr %5, align 1
  store i32 1, ptr %12, align 4
  br label %1655

213:                                              ; preds = %189
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %19, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %20, align 4
  br label %1659

217:                                              ; preds = %192
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %19, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %20, align 4
  br label %1658

221:                                              ; preds = %199, %195
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %19, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %20, align 4
  br label %1657

225:                                              ; preds = %1651, %1647, %1530, %1510, %1414, %1394, %1092, %357, %351, %341, %331, %316, %204, %201
  %226 = landingpad { ptr, i32 }
          cleanup
  %227 = extractvalue { ptr, i32 } %226, 0
  store ptr %227, ptr %19, align 8
  %228 = extractvalue { ptr, i32 } %226, 1
  store i32 %228, ptr %20, align 4
  br label %1656

229:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #8
  %230 = load ptr, ptr %11, align 8, !tbaa !5
  %231 = load ptr, ptr %118, align 8, !tbaa !43
  %232 = getelementptr inbounds ptr, ptr %231, i64 19
  %233 = load ptr, ptr %232, align 8
  invoke void %233(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %230, i32 noundef 0)
          to label %234 unwind label %251

234:                                              ; preds = %229
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str.927)
          to label %235 unwind label %255

235:                                              ; preds = %234
  %236 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %237 unwind label %259

237:                                              ; preds = %235
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  %238 = load ptr, ptr %11, align 8, !tbaa !5
  %239 = load ptr, ptr %11, align 8, !tbaa !5
  %240 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %239, i32 0, i32 6
  %241 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %240) #8
  %242 = trunc i64 %241 to i32
  %243 = sub i32 %242, 1
  %244 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %238, i32 noundef %243)
          to label %245 unwind label %265

245:                                              ; preds = %237
  store i32 %244, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %246

246:                                              ; preds = %301, %245
  %247 = load i32, ptr %27, align 4, !tbaa !9
  %248 = load i32, ptr %26, align 4, !tbaa !9
  %249 = icmp ult i32 %247, %248
  br i1 %249, label %269, label %250

250:                                              ; preds = %246
  store i32 2, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %305

251:                                              ; preds = %229
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %19, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %20, align 4
  br label %264

255:                                              ; preds = %234
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %19, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %20, align 4
  br label %263

259:                                              ; preds = %235
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %19, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  br label %263

263:                                              ; preds = %259, %255
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  br label %264

264:                                              ; preds = %263, %251
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  br label %1656

265:                                              ; preds = %305, %237
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %19, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %20, align 4
  br label %308

269:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %270 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %270, ptr %28, align 4, !tbaa !9
  %271 = getelementptr inbounds i32, ptr %28, i64 1
  %272 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %272, ptr %271, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %29) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #8
  %273 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 63
  %274 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %273)
          to label %275 unwind label %287

275:                                              ; preds = %269
  %276 = getelementptr inbounds [2 x i32], ptr %28, i64 0, i64 0
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %274, ptr noundef %276, i32 noundef 2, i32 noundef 5, ptr noundef %29)
          to label %277 unwind label %287

277:                                              ; preds = %275
  %278 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %279 unwind label %291

279:                                              ; preds = %277
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  %280 = load i32, ptr %27, align 4, !tbaa !9
  %281 = add i32 %280, 1
  %282 = load i32, ptr %26, align 4, !tbaa !9
  %283 = icmp ult i32 %281, %282
  br i1 %283, label %284, label %300

284:                                              ; preds = %279
  %285 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %286 unwind label %296

286:                                              ; preds = %284
  br label %300

287:                                              ; preds = %275, %269
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %19, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %20, align 4
  br label %295

291:                                              ; preds = %277
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %19, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %295

295:                                              ; preds = %291, %287
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  br label %304

296:                                              ; preds = %284
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %19, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %20, align 4
  br label %304

300:                                              ; preds = %286, %279
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %301

301:                                              ; preds = %300
  %302 = load i32, ptr %27, align 4, !tbaa !9
  %303 = add i32 %302, 1
  store i32 %303, ptr %27, align 4, !tbaa !9
  br label %246, !llvm.loop !45

304:                                              ; preds = %296, %295
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %308

305:                                              ; preds = %250
  %306 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.928)
          to label %307 unwind label %265

307:                                              ; preds = %305
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  br label %1647

308:                                              ; preds = %304, %265
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  br label %1656

309:                                              ; preds = %206
  %310 = load ptr, ptr %11, align 8, !tbaa !5
  %311 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %310, i32 0, i32 6
  %312 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %311) #8
  %313 = icmp ugt i64 %312, 2
  br i1 %313, label %314, label %321

314:                                              ; preds = %309
  %315 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %315, ptr noundef @.str.929)
          to label %316 unwind label %317

316:                                              ; preds = %314
  invoke void @__cxa_throw(ptr %315, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %225

317:                                              ; preds = %314
  %318 = landingpad { ptr, i32 }
          cleanup
  %319 = extractvalue { ptr, i32 } %318, 0
  store ptr %319, ptr %19, align 8
  %320 = extractvalue { ptr, i32 } %318, 1
  store i32 %320, ptr %20, align 4
  call void @__cxa_free_exception(ptr %315) #8
  br label %1656

321:                                              ; preds = %309
  %322 = load ptr, ptr %11, align 8, !tbaa !5
  %323 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %322, i32 0, i32 6
  %324 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %323) #8
  %325 = icmp eq i64 %324, 2
  br i1 %325, label %326, label %528

326:                                              ; preds = %321
  %327 = load i8, ptr %14, align 1, !tbaa !39, !range !40, !noundef !41
  %328 = trunc i8 %327 to i1
  br i1 %328, label %336, label %329

329:                                              ; preds = %326
  %330 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %330, ptr noundef @.str.930)
          to label %331 unwind label %332

331:                                              ; preds = %329
  invoke void @__cxa_throw(ptr %330, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %225

332:                                              ; preds = %329
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %19, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %20, align 4
  call void @__cxa_free_exception(ptr %330) #8
  br label %1656

336:                                              ; preds = %326
  %337 = load i32, ptr %18, align 4, !tbaa !9
  %338 = icmp eq i32 %337, -1
  br i1 %338, label %339, label %346

339:                                              ; preds = %336
  %340 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %340, ptr noundef @.str.931)
          to label %341 unwind label %342

341:                                              ; preds = %339
  invoke void @__cxa_throw(ptr %340, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %225

342:                                              ; preds = %339
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %19, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %20, align 4
  call void @__cxa_free_exception(ptr %340) #8
  br label %1656

346:                                              ; preds = %336
  %347 = load ptr, ptr %11, align 8, !tbaa !5
  %348 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %347, i32 0, i32 2
  %349 = load i32, ptr %348, align 8, !tbaa !42
  %350 = icmp eq i32 %349, 15
  br i1 %350, label %355, label %351

351:                                              ; preds = %346
  %352 = load ptr, ptr %11, align 8, !tbaa !5
  %353 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %352)
          to label %354 unwind label %225

354:                                              ; preds = %351
  br i1 %353, label %355, label %362

355:                                              ; preds = %354, %346
  %356 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %356, ptr noundef @.str.932)
          to label %357 unwind label %358

357:                                              ; preds = %355
  invoke void @__cxa_throw(ptr %356, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %225

358:                                              ; preds = %355
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %19, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %20, align 4
  call void @__cxa_free_exception(ptr %356) #8
  br label %1656

362:                                              ; preds = %354
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #8
  %363 = load ptr, ptr %11, align 8, !tbaa !5
  %364 = load ptr, ptr %118, align 8, !tbaa !43
  %365 = getelementptr inbounds ptr, ptr %364, i64 19
  %366 = load ptr, ptr %365, align 8
  invoke void %366(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %363, i32 noundef 0)
          to label %367 unwind label %386

367:                                              ; preds = %362
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef @.str.927)
          to label %368 unwind label %390

368:                                              ; preds = %367
  %369 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %370 unwind label %394

370:                                              ; preds = %368
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %371 = load ptr, ptr %11, align 8, !tbaa !5
  %372 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %371, i32 noundef 1)
          to label %373 unwind label %400

373:                                              ; preds = %370
  store i32 %372, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  %374 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %374, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  %376 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %375, i32 0, i32 16
  %377 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %376)
          to label %378 unwind label %404

378:                                              ; preds = %373
  %379 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %377)
          to label %380 unwind label %404

380:                                              ; preds = %378
  store ptr %379, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  store i32 0, ptr %36, align 4, !tbaa !9
  br label %381

381:                                              ; preds = %518, %380
  %382 = load i32, ptr %36, align 4, !tbaa !9
  %383 = load i32, ptr %33, align 4, !tbaa !9
  %384 = icmp ult i32 %382, %383
  br i1 %384, label %408, label %385

385:                                              ; preds = %381
  store i32 5, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %523

386:                                              ; preds = %362
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %19, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %20, align 4
  br label %399

390:                                              ; preds = %367
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %19, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %20, align 4
  br label %398

394:                                              ; preds = %368
  %395 = landingpad { ptr, i32 }
          cleanup
  %396 = extractvalue { ptr, i32 } %395, 0
  store ptr %396, ptr %19, align 8
  %397 = extractvalue { ptr, i32 } %395, 1
  store i32 %397, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  br label %398

398:                                              ; preds = %394, %390
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %399

399:                                              ; preds = %398, %386
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  br label %1656

400:                                              ; preds = %370
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %19, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %20, align 4
  br label %527

404:                                              ; preds = %523, %378, %373
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %19, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %20, align 4
  br label %526

408:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #8
  %409 = load ptr, ptr %35, align 8, !tbaa !5
  %410 = load ptr, ptr %118, align 8, !tbaa !43
  %411 = getelementptr inbounds ptr, ptr %410, i64 19
  %412 = load ptr, ptr %411, align 8
  invoke void %412(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %409, i32 noundef 0)
          to label %413 unwind label %426

413:                                              ; preds = %408
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef @.str.927)
          to label %414 unwind label %430

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

416:                                              ; preds = %414
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  %417 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %417, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  %418 = load ptr, ptr %11, align 8, !tbaa !5
  %419 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %418, i32 noundef 0)
          to label %420 unwind label %440

420:                                              ; preds = %416
  store i32 %419, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %421

421:                                              ; preds = %501, %420
  %422 = load i32, ptr %40, align 4, !tbaa !9
  %423 = load i32, ptr %39, align 4, !tbaa !9
  %424 = icmp ult i32 %422, %423
  br i1 %424, label %444, label %425

425:                                              ; preds = %421
  store i32 8, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %507

426:                                              ; preds = %408
  %427 = landingpad { ptr, i32 }
          cleanup
  %428 = extractvalue { ptr, i32 } %427, 0
  store ptr %428, ptr %19, align 8
  %429 = extractvalue { ptr, i32 } %427, 1
  store i32 %429, ptr %20, align 4
  br label %439

430:                                              ; preds = %413
  %431 = landingpad { ptr, i32 }
          cleanup
  %432 = extractvalue { ptr, i32 } %431, 0
  store ptr %432, ptr %19, align 8
  %433 = extractvalue { ptr, i32 } %431, 1
  store i32 %433, ptr %20, align 4
  br label %438

434:                                              ; preds = %414
  %435 = landingpad { ptr, i32 }
          cleanup
  %436 = extractvalue { ptr, i32 } %435, 0
  store ptr %436, ptr %19, align 8
  %437 = extractvalue { ptr, i32 } %435, 1
  store i32 %437, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %438

438:                                              ; preds = %434, %430
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %439

439:                                              ; preds = %438, %426
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  br label %522

440:                                              ; preds = %514, %507, %416
  %441 = landingpad { ptr, i32 }
          cleanup
  %442 = extractvalue { ptr, i32 } %441, 0
  store ptr %442, ptr %19, align 8
  %443 = extractvalue { ptr, i32 } %441, 1
  store i32 %443, ptr %20, align 4
  br label %521

444:                                              ; preds = %421
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %445 = load i32, ptr %36, align 4, !tbaa !9
  store i32 %445, ptr %41, align 4, !tbaa !9
  %446 = getelementptr inbounds i32, ptr %41, i64 1
  %447 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %447, ptr %446, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %42) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #8
  %448 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 63
  %449 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %448)
          to label %450 unwind label %479

450:                                              ; preds = %444
  %451 = getelementptr inbounds [2 x i32], ptr %41, i64 0, i64 0
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %449, ptr noundef %451, i32 noundef 2, i32 noundef 5, ptr noundef %42)
          to label %452 unwind label %479

452:                                              ; preds = %450
  %453 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %454 unwind label %483

454:                                              ; preds = %452
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  %455 = load ptr, ptr %35, align 8, !tbaa !5
  %456 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %455)
          to label %457 unwind label %488

457:                                              ; preds = %454
  br i1 %456, label %492, label %458

458:                                              ; preds = %457
  %459 = load ptr, ptr %35, align 8, !tbaa !5
  %460 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %459, i32 0, i32 2
  %461 = load i32, ptr %460, align 8, !tbaa !42
  %462 = icmp ne i32 %461, 15
  br i1 %462, label %463, label %492

463:                                              ; preds = %458
  %464 = load ptr, ptr %22, align 8, !tbaa !5
  %465 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %464, i32 0, i32 4
  %466 = load i32, ptr %465, align 8, !tbaa !47
  %467 = load ptr, ptr %35, align 8, !tbaa !5
  %468 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %467, i32 0, i32 4
  %469 = load i32, ptr %468, align 8, !tbaa !47
  %470 = icmp ugt i32 %466, %469
  br i1 %470, label %471, label %492

471:                                              ; preds = %463
  %472 = load ptr, ptr %35, align 8, !tbaa !5
  %473 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %472, i32 0, i32 4
  %474 = load i32, ptr %473, align 8, !tbaa !47
  %475 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %474, i32 noundef 0)
          to label %476 unwind label %488

476:                                              ; preds = %471
  %477 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %475)
          to label %478 unwind label %488

478:                                              ; preds = %476
  br label %492

479:                                              ; preds = %450, %444
  %480 = landingpad { ptr, i32 }
          cleanup
  %481 = extractvalue { ptr, i32 } %480, 0
  store ptr %481, ptr %19, align 8
  %482 = extractvalue { ptr, i32 } %480, 1
  store i32 %482, ptr %20, align 4
  br label %487

483:                                              ; preds = %452
  %484 = landingpad { ptr, i32 }
          cleanup
  %485 = extractvalue { ptr, i32 } %484, 0
  store ptr %485, ptr %19, align 8
  %486 = extractvalue { ptr, i32 } %484, 1
  store i32 %486, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  br label %487

487:                                              ; preds = %483, %479
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  br label %506

488:                                              ; preds = %497, %476, %471, %454
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %19, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %20, align 4
  br label %506

492:                                              ; preds = %478, %463, %458, %457
  %493 = load i32, ptr %40, align 4, !tbaa !9
  %494 = add i32 %493, 1
  %495 = load i32, ptr %39, align 4, !tbaa !9
  %496 = icmp ult i32 %494, %495
  br i1 %496, label %497, label %500

497:                                              ; preds = %492
  %498 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %499 unwind label %488

499:                                              ; preds = %497
  br label %500

500:                                              ; preds = %499, %492
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %501

501:                                              ; preds = %500
  %502 = load i32, ptr %40, align 4, !tbaa !9
  %503 = add i32 %502, 1
  store i32 %503, ptr %40, align 4, !tbaa !9
  %504 = load i32, ptr %18, align 4, !tbaa !9
  %505 = add i32 %504, 1
  store i32 %505, ptr %18, align 4, !tbaa !9
  br label %421, !llvm.loop !48

506:                                              ; preds = %488, %487
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %521

507:                                              ; preds = %425
  %508 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.928)
          to label %509 unwind label %440

509:                                              ; preds = %507
  %510 = load i32, ptr %36, align 4, !tbaa !9
  %511 = add i32 %510, 1
  %512 = load i32, ptr %33, align 4, !tbaa !9
  %513 = icmp ult i32 %511, %512
  br i1 %513, label %514, label %517

514:                                              ; preds = %509
  %515 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %516 unwind label %440

516:                                              ; preds = %514
  br label %517

517:                                              ; preds = %516, %509
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %518

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

521:                                              ; preds = %506, %440
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %522

522:                                              ; preds = %521, %439
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %526

523:                                              ; preds = %385
  %524 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.928)
          to label %525 unwind label %404

525:                                              ; preds = %523
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %1645

526:                                              ; preds = %522, %404
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %527

527:                                              ; preds = %526, %400
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %1656

528:                                              ; preds = %321
  %529 = load ptr, ptr %11, align 8, !tbaa !5
  %530 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %529, i32 0, i32 2
  %531 = load i32, ptr %530, align 8, !tbaa !42
  %532 = icmp eq i32 %531, 15
  br i1 %532, label %533, label %1092

533:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #8
  %534 = load ptr, ptr %11, align 8, !tbaa !5
  %535 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %534)
          to label %536 unwind label %546

536:                                              ; preds = %533
  %537 = zext i1 %535 to i8
  store i8 %537, ptr %44, align 1, !tbaa !39
  %538 = load i8, ptr %44, align 1, !tbaa !39, !range !40, !noundef !41
  %539 = trunc i8 %538 to i1
  br i1 %539, label %540, label %554

540:                                              ; preds = %536
  %541 = load i8, ptr %14, align 1, !tbaa !39, !range !40, !noundef !41
  %542 = trunc i8 %541 to i1
  br i1 %542, label %554, label %543

543:                                              ; preds = %540
  %544 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %544, ptr noundef @.str.933)
          to label %545 unwind label %550

545:                                              ; preds = %543
  invoke void @__cxa_throw(ptr %544, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %546

546:                                              ; preds = %545, %533
  %547 = landingpad { ptr, i32 }
          cleanup
  %548 = extractvalue { ptr, i32 } %547, 0
  store ptr %548, ptr %19, align 8
  %549 = extractvalue { ptr, i32 } %547, 1
  store i32 %549, ptr %20, align 4
  br label %1091

550:                                              ; preds = %543
  %551 = landingpad { ptr, i32 }
          cleanup
  %552 = extractvalue { ptr, i32 } %551, 0
  store ptr %552, ptr %19, align 8
  %553 = extractvalue { ptr, i32 } %551, 1
  store i32 %553, ptr %20, align 4
  call void @__cxa_free_exception(ptr %544) #8
  br label %1091

554:                                              ; preds = %540, %536
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #8
  store i32 1, ptr %45, align 4, !tbaa !9
  %555 = load i8, ptr %44, align 1, !tbaa !39, !range !40, !noundef !41
  %556 = trunc i8 %555 to i1
  br i1 %556, label %557, label %587

557:                                              ; preds = %554
  %558 = load ptr, ptr %11, align 8, !tbaa !5
  %559 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %558, i32 noundef 0)
          to label %560 unwind label %569

560:                                              ; preds = %557
  store i32 %559, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  %561 = load ptr, ptr %11, align 8, !tbaa !5
  %562 = load ptr, ptr %118, align 8, !tbaa !43
  %563 = getelementptr inbounds ptr, ptr %562, i64 19
  %564 = load ptr, ptr %563, align 8
  invoke void %564(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %561, i32 noundef 0)
          to label %565 unwind label %573

565:                                              ; preds = %560
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef @.str.927)
          to label %566 unwind label %577

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

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

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

573:                                              ; preds = %560
  %574 = landingpad { ptr, i32 }
          cleanup
  %575 = extractvalue { ptr, i32 } %574, 0
  store ptr %575, ptr %19, align 8
  %576 = extractvalue { ptr, i32 } %574, 1
  store i32 %576, ptr %20, align 4
  br label %586

577:                                              ; preds = %565
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %19, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %20, align 4
  br label %585

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

585:                                              ; preds = %581, %577
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %586

586:                                              ; preds = %585, %573
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #8
  br label %1090

587:                                              ; preds = %568, %554
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  %588 = load i8, ptr %44, align 1, !tbaa !39, !range !40, !noundef !41
  %589 = trunc i8 %588 to i1
  br i1 %589, label %590, label %597

590:                                              ; preds = %587
  %591 = load ptr, ptr %11, align 8, !tbaa !5
  %592 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %591, i32 0, i32 16
  %593 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %592)
          to label %594 unwind label %606

594:                                              ; preds = %590
  %595 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %593)
          to label %596 unwind label %606

596:                                              ; preds = %594
  br label %599

597:                                              ; preds = %587
  %598 = load ptr, ptr %11, align 8, !tbaa !5
  br label %599

599:                                              ; preds = %597, %596
  %600 = phi ptr [ %595, %596 ], [ %598, %597 ]
  store ptr %600, ptr %48, align 8, !tbaa !5
  %601 = load ptr, ptr %48, align 8, !tbaa !5
  %602 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %601, i32 0, i32 6
  %603 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %602) #8
  br i1 %603, label %604, label %605

604:                                              ; preds = %599
  br label %611

605:                                              ; preds = %599
  call void @__assert_fail(ptr noundef @.str.934, ptr noundef @.str.25, i32 noundef 8255, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

606:                                              ; preds = %1085, %594, %590
  %607 = landingpad { ptr, i32 }
          cleanup
  %608 = extractvalue { ptr, i32 } %607, 0
  store ptr %608, ptr %19, align 8
  %609 = extractvalue { ptr, i32 } %607, 1
  store i32 %609, ptr %20, align 4
  br label %1089

610:                                              ; No predecessors!
  br label %611

611:                                              ; preds = %610, %604
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  store i32 0, ptr %49, align 4, !tbaa !9
  br label %612

612:                                              ; preds = %1078, %611
  %613 = load i32, ptr %49, align 4, !tbaa !9
  %614 = load i32, ptr %45, align 4, !tbaa !9
  %615 = icmp ult i32 %613, %614
  br i1 %615, label %617, label %616

616:                                              ; preds = %612
  store i32 11, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  br label %1082

617:                                              ; preds = %612
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #8
  %618 = load ptr, ptr %48, align 8, !tbaa !5
  %619 = load ptr, ptr %118, align 8, !tbaa !43
  %620 = getelementptr inbounds ptr, ptr %619, i64 19
  %621 = load ptr, ptr %620, align 8
  invoke void %621(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %618, i32 noundef 0)
          to label %622 unwind label %634

622:                                              ; preds = %617
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef @.str.935)
          to label %623 unwind label %638

623:                                              ; preds = %622
  %624 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %625 unwind label %642

625:                                              ; preds = %623
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  store i32 0, ptr %52, align 4, !tbaa !9
  br label %626

626:                                              ; preds = %1057, %625
  %627 = load i32, ptr %52, align 4, !tbaa !9
  %628 = load ptr, ptr %48, align 8, !tbaa !5
  %629 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %628, i32 0, i32 12
  %630 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %629) #8
  %631 = trunc i64 %630 to i32
  %632 = icmp ult i32 %627, %631
  br i1 %632, label %648, label %633

633:                                              ; preds = %626
  store i32 14, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %1063

634:                                              ; preds = %617
  %635 = landingpad { ptr, i32 }
          cleanup
  %636 = extractvalue { ptr, i32 } %635, 0
  store ptr %636, ptr %19, align 8
  %637 = extractvalue { ptr, i32 } %635, 1
  store i32 %637, ptr %20, align 4
  br label %647

638:                                              ; preds = %622
  %639 = landingpad { ptr, i32 }
          cleanup
  %640 = extractvalue { ptr, i32 } %639, 0
  store ptr %640, ptr %19, align 8
  %641 = extractvalue { ptr, i32 } %639, 1
  store i32 %641, ptr %20, align 4
  br label %646

642:                                              ; preds = %623
  %643 = landingpad { ptr, i32 }
          cleanup
  %644 = extractvalue { ptr, i32 } %643, 0
  store ptr %644, ptr %19, align 8
  %645 = extractvalue { ptr, i32 } %643, 1
  store i32 %645, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  br label %646

646:                                              ; preds = %642, %638
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  br label %647

647:                                              ; preds = %646, %634
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #8
  br label %1081

648:                                              ; preds = %626
  %649 = load ptr, ptr %21, align 8, !tbaa !5
  %650 = icmp ne ptr %649, null
  br i1 %650, label %651, label %663

651:                                              ; preds = %648
  %652 = load ptr, ptr %21, align 8, !tbaa !5
  %653 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %652, i32 0, i32 1
  %654 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %653)
          to label %655 unwind label %659

655:                                              ; preds = %651
  %656 = load i32, ptr %52, align 4, !tbaa !9
  %657 = invoke noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %654, i32 noundef %656, i32 noundef 4)
          to label %658 unwind label %659

658:                                              ; preds = %655
  store i32 %657, ptr %18, align 4, !tbaa !9
  br label %663

659:                                              ; preds = %668, %655, %651
  %660 = landingpad { ptr, i32 }
          cleanup
  %661 = extractvalue { ptr, i32 } %660, 0
  store ptr %661, ptr %19, align 8
  %662 = extractvalue { ptr, i32 } %660, 1
  store i32 %662, ptr %20, align 4
  br label %1062

663:                                              ; preds = %658, %648
  %664 = load i32, ptr %18, align 4, !tbaa !9
  %665 = icmp eq i32 %664, -1
  br i1 %665, label %666, label %673

666:                                              ; preds = %663
  %667 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %667, ptr noundef @.str.931)
          to label %668 unwind label %669

668:                                              ; preds = %666
  invoke void @__cxa_throw(ptr %667, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %659

669:                                              ; preds = %666
  %670 = landingpad { ptr, i32 }
          cleanup
  %671 = extractvalue { ptr, i32 } %670, 0
  store ptr %671, ptr %19, align 8
  %672 = extractvalue { ptr, i32 } %670, 1
  store i32 %672, ptr %20, align 4
  call void @__cxa_free_exception(ptr %667) #8
  br label %1062

673:                                              ; preds = %663
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %674 = load ptr, ptr %48, align 8, !tbaa !5
  %675 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %674, i32 0, i32 12
  %676 = load i32, ptr %52, align 4, !tbaa !9
  %677 = zext i32 %676 to i64
  %678 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %675, i64 noundef %677) #8
  %679 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %678)
          to label %680 unwind label %716

680:                                              ; preds = %673
  %681 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %679)
          to label %682 unwind label %716

682:                                              ; preds = %680
  store ptr %681, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  %683 = load ptr, ptr %22, align 8, !tbaa !5
  %684 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %683, i32 0, i32 12
  %685 = load i32, ptr %52, align 4, !tbaa !9
  %686 = zext i32 %685 to i64
  %687 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %684, i64 noundef %686) #8
  %688 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %687)
          to label %689 unwind label %720

689:                                              ; preds = %682
  %690 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %688)
          to label %691 unwind label %720

691:                                              ; preds = %689
  store ptr %690, ptr %54, align 8, !tbaa !5
  %692 = load ptr, ptr %53, align 8, !tbaa !5
  %693 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %692)
          to label %694 unwind label %720

694:                                              ; preds = %691
  br i1 %693, label %695, label %835

695:                                              ; preds = %694
  %696 = load ptr, ptr %10, align 8, !tbaa !5
  %697 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %696, i32 0, i32 11
  %698 = load i32, ptr %697, align 8, !tbaa !11
  %699 = icmp eq i32 %698, 1
  br i1 %699, label %700, label %835

700:                                              ; preds = %695
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #8
  %701 = load ptr, ptr %53, align 8, !tbaa !5
  %702 = load ptr, ptr %118, align 8, !tbaa !43
  %703 = getelementptr inbounds ptr, ptr %702, i64 19
  %704 = load ptr, ptr %703, align 8
  invoke void %704(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %701, i32 noundef 0)
          to label %705 unwind label %724

705:                                              ; preds = %700
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef @.str.58)
          to label %706 unwind label %728

706:                                              ; preds = %705
  %707 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %708 unwind label %732

708:                                              ; preds = %706
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #8
  store i32 0, ptr %57, align 4, !tbaa !9
  br label %709

709:                                              ; preds = %826, %708
  %710 = load i32, ptr %57, align 4, !tbaa !9
  %711 = load ptr, ptr %53, align 8, !tbaa !5
  %712 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %711, i32 0, i32 5
  %713 = load i32, ptr %712, align 4, !tbaa !50
  %714 = icmp ult i32 %710, %713
  br i1 %714, label %738, label %715

715:                                              ; preds = %709
  store i32 17, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  br label %832

716:                                              ; preds = %680, %673
  %717 = landingpad { ptr, i32 }
          cleanup
  %718 = extractvalue { ptr, i32 } %717, 0
  store ptr %718, ptr %19, align 8
  %719 = extractvalue { ptr, i32 } %717, 1
  store i32 %719, ptr %20, align 4
  br label %1061

720:                                              ; preds = %1053, %1040, %1035, %835, %832, %691, %689, %682
  %721 = landingpad { ptr, i32 }
          cleanup
  %722 = extractvalue { ptr, i32 } %721, 0
  store ptr %722, ptr %19, align 8
  %723 = extractvalue { ptr, i32 } %721, 1
  store i32 %723, ptr %20, align 4
  br label %1060

724:                                              ; preds = %700
  %725 = landingpad { ptr, i32 }
          cleanup
  %726 = extractvalue { ptr, i32 } %725, 0
  store ptr %726, ptr %19, align 8
  %727 = extractvalue { ptr, i32 } %725, 1
  store i32 %727, ptr %20, align 4
  br label %737

728:                                              ; preds = %705
  %729 = landingpad { ptr, i32 }
          cleanup
  %730 = extractvalue { ptr, i32 } %729, 0
  store ptr %730, ptr %19, align 8
  %731 = extractvalue { ptr, i32 } %729, 1
  store i32 %731, ptr %20, align 4
  br label %736

732:                                              ; preds = %706
  %733 = landingpad { ptr, i32 }
          cleanup
  %734 = extractvalue { ptr, i32 } %733, 0
  store ptr %734, ptr %19, align 8
  %735 = extractvalue { ptr, i32 } %733, 1
  store i32 %735, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  br label %736

736:                                              ; preds = %732, %728
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  br label %737

737:                                              ; preds = %736, %724
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  br label %1060

738:                                              ; preds = %709
  %739 = load i8, ptr %44, align 1, !tbaa !39, !range !40, !noundef !41
  %740 = trunc i8 %739 to i1
  br i1 %740, label %741, label %761

741:                                              ; preds = %738
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  %742 = load i32, ptr %49, align 4, !tbaa !9
  store i32 %742, ptr %58, align 4, !tbaa !9
  %743 = getelementptr inbounds i32, ptr %58, i64 1
  %744 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %744, ptr %743, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %59) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #8
  %745 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 63
  %746 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %745)
          to label %747 unwind label %752

747:                                              ; preds = %741
  %748 = getelementptr inbounds [2 x i32], ptr %58, i64 0, i64 0
  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) %118, i32 noundef %746, ptr noundef %748, i32 noundef 2, i32 noundef 5, ptr noundef %59)
          to label %749 unwind label %752

749:                                              ; preds = %747
  %750 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %751 unwind label %756

751:                                              ; preds = %749
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  br label %795

752:                                              ; preds = %747, %741
  %753 = landingpad { ptr, i32 }
          cleanup
  %754 = extractvalue { ptr, i32 } %753, 0
  store ptr %754, ptr %19, align 8
  %755 = extractvalue { ptr, i32 } %753, 1
  store i32 %755, ptr %20, align 4
  br label %760

756:                                              ; preds = %749
  %757 = landingpad { ptr, i32 }
          cleanup
  %758 = extractvalue { ptr, i32 } %757, 0
  store ptr %758, ptr %19, align 8
  %759 = extractvalue { ptr, i32 } %757, 1
  store i32 %759, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %760

760:                                              ; preds = %756, %752
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  br label %831

761:                                              ; preds = %738
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #8
  %762 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %762, i1 noundef zeroext true)
          to label %763 unwind label %771

763:                                              ; preds = %761
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef @.str.66)
          to label %764 unwind label %775

764:                                              ; preds = %763
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #8
  %765 = load ptr, ptr %23, align 8, !tbaa !5
  %766 = load i32, ptr %18, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %765, i32 noundef %766)
          to label %767 unwind label %779

767:                                              ; preds = %764
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %64)
          to label %768 unwind label %783

768:                                              ; preds = %767
  %769 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %770 unwind label %787

770:                                              ; preds = %768
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #8
  br label %795

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

775:                                              ; preds = %763
  %776 = landingpad { ptr, i32 }
          cleanup
  %777 = extractvalue { ptr, i32 } %776, 0
  store ptr %777, ptr %19, align 8
  %778 = extractvalue { ptr, i32 } %776, 1
  store i32 %778, ptr %20, align 4
  br label %793

779:                                              ; preds = %764
  %780 = landingpad { ptr, i32 }
          cleanup
  %781 = extractvalue { ptr, i32 } %780, 0
  store ptr %781, ptr %19, align 8
  %782 = extractvalue { ptr, i32 } %780, 1
  store i32 %782, ptr %20, align 4
  br label %792

783:                                              ; preds = %767
  %784 = landingpad { ptr, i32 }
          cleanup
  %785 = extractvalue { ptr, i32 } %784, 0
  store ptr %785, ptr %19, align 8
  %786 = extractvalue { ptr, i32 } %784, 1
  store i32 %786, ptr %20, align 4
  br label %791

787:                                              ; preds = %768
  %788 = landingpad { ptr, i32 }
          cleanup
  %789 = extractvalue { ptr, i32 } %788, 0
  store ptr %789, ptr %19, align 8
  %790 = extractvalue { ptr, i32 } %788, 1
  store i32 %790, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  br label %791

791:                                              ; preds = %787, %783
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  br label %792

792:                                              ; preds = %791, %779
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  br label %793

793:                                              ; preds = %792, %775
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  br label %794

794:                                              ; preds = %793, %771
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #8
  br label %831

795:                                              ; preds = %770, %751
  %796 = load ptr, ptr %54, align 8, !tbaa !5
  %797 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %796, i32 0, i32 4
  %798 = load i32, ptr %797, align 8, !tbaa !47
  %799 = load ptr, ptr %53, align 8, !tbaa !5
  %800 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %799, i32 0, i32 4
  %801 = load i32, ptr %800, align 8, !tbaa !47
  %802 = icmp ugt i32 %798, %801
  br i1 %802, label %803, label %815

803:                                              ; preds = %795
  %804 = load ptr, ptr %53, align 8, !tbaa !5
  %805 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %804, i32 0, i32 4
  %806 = load i32, ptr %805, align 8, !tbaa !47
  %807 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %806, i32 noundef 0)
          to label %808 unwind label %811

808:                                              ; preds = %803
  %809 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %807)
          to label %810 unwind label %811

810:                                              ; preds = %808
  br label %815

811:                                              ; preds = %822, %808, %803
  %812 = landingpad { ptr, i32 }
          cleanup
  %813 = extractvalue { ptr, i32 } %812, 0
  store ptr %813, ptr %19, align 8
  %814 = extractvalue { ptr, i32 } %812, 1
  store i32 %814, ptr %20, align 4
  br label %831

815:                                              ; preds = %810, %795
  %816 = load i32, ptr %57, align 4, !tbaa !9
  %817 = add i32 %816, 1
  %818 = load ptr, ptr %53, align 8, !tbaa !5
  %819 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %818, i32 0, i32 5
  %820 = load i32, ptr %819, align 4, !tbaa !50
  %821 = icmp ult i32 %817, %820
  br i1 %821, label %822, label %825

822:                                              ; preds = %815
  %823 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %824 unwind label %811

824:                                              ; preds = %822
  br label %825

825:                                              ; preds = %824, %815
  br label %826

826:                                              ; preds = %825
  %827 = load i32, ptr %57, align 4, !tbaa !9
  %828 = add i32 %827, 1
  store i32 %828, ptr %57, align 4, !tbaa !9
  %829 = load i32, ptr %18, align 4, !tbaa !9
  %830 = add i32 %829, 1
  store i32 %830, ptr %18, align 4, !tbaa !9
  br label %709, !llvm.loop !51

831:                                              ; preds = %811, %794, %760
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  br label %1060

832:                                              ; preds = %715
  %833 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.53)
          to label %834 unwind label %720

834:                                              ; preds = %832
  br label %1045

835:                                              ; preds = %695, %694
  %836 = load ptr, ptr %53, align 8, !tbaa !5
  %837 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %836)
          to label %838 unwind label %720

838:                                              ; preds = %835
  br i1 %837, label %839, label %970

839:                                              ; preds = %838
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #8
  %840 = load ptr, ptr %53, align 8, !tbaa !5
  %841 = load ptr, ptr %118, align 8, !tbaa !43
  %842 = getelementptr inbounds ptr, ptr %841, i64 19
  %843 = load ptr, ptr %842, align 8
  invoke void %843(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %840, i32 noundef 0)
          to label %844 unwind label %856

844:                                              ; preds = %839
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef @.str.927)
          to label %845 unwind label %860

845:                                              ; preds = %844
  %846 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %847 unwind label %864

847:                                              ; preds = %845
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %848 = load ptr, ptr %53, align 8, !tbaa !5
  %849 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %848, i32 noundef 0)
          to label %850 unwind label %870

850:                                              ; preds = %847
  store i32 %849, ptr %67, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  store i32 0, ptr %68, align 4, !tbaa !9
  br label %851

851:                                              ; preds = %960, %850
  %852 = load i32, ptr %68, align 4, !tbaa !9
  %853 = load i32, ptr %67, align 4, !tbaa !9
  %854 = icmp ult i32 %852, %853
  br i1 %854, label %874, label %855

855:                                              ; preds = %851
  store i32 20, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %966

856:                                              ; preds = %839
  %857 = landingpad { ptr, i32 }
          cleanup
  %858 = extractvalue { ptr, i32 } %857, 0
  store ptr %858, ptr %19, align 8
  %859 = extractvalue { ptr, i32 } %857, 1
  store i32 %859, ptr %20, align 4
  br label %869

860:                                              ; preds = %844
  %861 = landingpad { ptr, i32 }
          cleanup
  %862 = extractvalue { ptr, i32 } %861, 0
  store ptr %862, ptr %19, align 8
  %863 = extractvalue { ptr, i32 } %861, 1
  store i32 %863, ptr %20, align 4
  br label %868

864:                                              ; preds = %845
  %865 = landingpad { ptr, i32 }
          cleanup
  %866 = extractvalue { ptr, i32 } %865, 0
  store ptr %866, ptr %19, align 8
  %867 = extractvalue { ptr, i32 } %865, 1
  store i32 %867, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %868

868:                                              ; preds = %864, %860
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  br label %869

869:                                              ; preds = %868, %856
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  br label %1060

870:                                              ; preds = %966, %847
  %871 = landingpad { ptr, i32 }
          cleanup
  %872 = extractvalue { ptr, i32 } %871, 0
  store ptr %872, ptr %19, align 8
  %873 = extractvalue { ptr, i32 } %871, 1
  store i32 %873, ptr %20, align 4
  br label %969

874:                                              ; preds = %851
  %875 = load i8, ptr %44, align 1, !tbaa !39, !range !40, !noundef !41
  %876 = trunc i8 %875 to i1
  br i1 %876, label %877, label %897

877:                                              ; preds = %874
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #8
  %878 = load i32, ptr %49, align 4, !tbaa !9
  store i32 %878, ptr %69, align 4, !tbaa !9
  %879 = getelementptr inbounds i32, ptr %69, i64 1
  %880 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %880, ptr %879, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %70) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %70) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #8
  %881 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 63
  %882 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %881)
          to label %883 unwind label %888

883:                                              ; preds = %877
  %884 = getelementptr inbounds [2 x i32], ptr %69, i64 0, i64 0
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %882, ptr noundef %884, i32 noundef 2, i32 noundef 5, ptr noundef %70)
          to label %885 unwind label %888

885:                                              ; preds = %883
  %886 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %71)
          to label %887 unwind label %892

887:                                              ; preds = %885
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  br label %931

888:                                              ; preds = %883, %877
  %889 = landingpad { ptr, i32 }
          cleanup
  %890 = extractvalue { ptr, i32 } %889, 0
  store ptr %890, ptr %19, align 8
  %891 = extractvalue { ptr, i32 } %889, 1
  store i32 %891, ptr %20, align 4
  br label %896

892:                                              ; preds = %885
  %893 = landingpad { ptr, i32 }
          cleanup
  %894 = extractvalue { ptr, i32 } %893, 0
  store ptr %894, ptr %19, align 8
  %895 = extractvalue { ptr, i32 } %893, 1
  store i32 %895, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  br label %896

896:                                              ; preds = %892, %888
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  br label %965

897:                                              ; preds = %874
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #8
  %898 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %898, i1 noundef zeroext true)
          to label %899 unwind label %907

899:                                              ; preds = %897
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef @.str.66)
          to label %900 unwind label %911

900:                                              ; preds = %899
  call void @llvm.lifetime.start.p0(i64 32, ptr %75) #8
  %901 = load ptr, ptr %23, align 8, !tbaa !5
  %902 = load i32, ptr %18, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %901, i32 noundef %902)
          to label %903 unwind label %915

903:                                              ; preds = %900
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 8 dereferenceable(32) %75)
          to label %904 unwind label %919

904:                                              ; preds = %903
  %905 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %72)
          to label %906 unwind label %923

906:                                              ; preds = %904
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #8
  br label %931

907:                                              ; preds = %897
  %908 = landingpad { ptr, i32 }
          cleanup
  %909 = extractvalue { ptr, i32 } %908, 0
  store ptr %909, ptr %19, align 8
  %910 = extractvalue { ptr, i32 } %908, 1
  store i32 %910, ptr %20, align 4
  br label %930

911:                                              ; preds = %899
  %912 = landingpad { ptr, i32 }
          cleanup
  %913 = extractvalue { ptr, i32 } %912, 0
  store ptr %913, ptr %19, align 8
  %914 = extractvalue { ptr, i32 } %912, 1
  store i32 %914, ptr %20, align 4
  br label %929

915:                                              ; preds = %900
  %916 = landingpad { ptr, i32 }
          cleanup
  %917 = extractvalue { ptr, i32 } %916, 0
  store ptr %917, ptr %19, align 8
  %918 = extractvalue { ptr, i32 } %916, 1
  store i32 %918, ptr %20, align 4
  br label %928

919:                                              ; preds = %903
  %920 = landingpad { ptr, i32 }
          cleanup
  %921 = extractvalue { ptr, i32 } %920, 0
  store ptr %921, ptr %19, align 8
  %922 = extractvalue { ptr, i32 } %920, 1
  store i32 %922, ptr %20, align 4
  br label %927

923:                                              ; preds = %904
  %924 = landingpad { ptr, i32 }
          cleanup
  %925 = extractvalue { ptr, i32 } %924, 0
  store ptr %925, ptr %19, align 8
  %926 = extractvalue { ptr, i32 } %924, 1
  store i32 %926, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  br label %927

927:                                              ; preds = %923, %919
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  br label %928

928:                                              ; preds = %927, %915
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  br label %929

929:                                              ; preds = %928, %911
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  br label %930

930:                                              ; preds = %929, %907
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #8
  br label %965

931:                                              ; preds = %906, %887
  %932 = load ptr, ptr %54, align 8, !tbaa !5
  %933 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %932, i32 0, i32 4
  %934 = load i32, ptr %933, align 8, !tbaa !47
  %935 = load ptr, ptr %53, align 8, !tbaa !5
  %936 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %935, i32 0, i32 4
  %937 = load i32, ptr %936, align 8, !tbaa !47
  %938 = icmp ugt i32 %934, %937
  br i1 %938, label %939, label %951

939:                                              ; preds = %931
  %940 = load ptr, ptr %53, align 8, !tbaa !5
  %941 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %940, i32 0, i32 4
  %942 = load i32, ptr %941, align 8, !tbaa !47
  %943 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %942, i32 noundef 0)
          to label %944 unwind label %947

944:                                              ; preds = %939
  %945 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %943)
          to label %946 unwind label %947

946:                                              ; preds = %944
  br label %951

947:                                              ; preds = %956, %944, %939
  %948 = landingpad { ptr, i32 }
          cleanup
  %949 = extractvalue { ptr, i32 } %948, 0
  store ptr %949, ptr %19, align 8
  %950 = extractvalue { ptr, i32 } %948, 1
  store i32 %950, ptr %20, align 4
  br label %965

951:                                              ; preds = %946, %931
  %952 = load i32, ptr %68, align 4, !tbaa !9
  %953 = add i32 %952, 1
  %954 = load i32, ptr %67, align 4, !tbaa !9
  %955 = icmp ult i32 %953, %954
  br i1 %955, label %956, label %959

956:                                              ; preds = %951
  %957 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %958 unwind label %947

958:                                              ; preds = %956
  br label %959

959:                                              ; preds = %958, %951
  br label %960

960:                                              ; preds = %959
  %961 = load i32, ptr %68, align 4, !tbaa !9
  %962 = add i32 %961, 1
  store i32 %962, ptr %68, align 4, !tbaa !9
  %963 = load i32, ptr %18, align 4, !tbaa !9
  %964 = add i32 %963, 1
  store i32 %964, ptr %18, align 4, !tbaa !9
  br label %851, !llvm.loop !52

965:                                              ; preds = %947, %930, %896
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %969

966:                                              ; preds = %855
  %967 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.928)
          to label %968 unwind label %870

968:                                              ; preds = %966
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %1044

969:                                              ; preds = %965, %870
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %1060

970:                                              ; preds = %838
  %971 = load i8, ptr %44, align 1, !tbaa !39, !range !40, !noundef !41
  %972 = trunc i8 %971 to i1
  br i1 %972, label %973, label %993

973:                                              ; preds = %970
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #8
  %974 = load i32, ptr %49, align 4, !tbaa !9
  store i32 %974, ptr %76, align 4, !tbaa !9
  %975 = getelementptr inbounds i32, ptr %76, i64 1
  %976 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %976, ptr %975, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %77) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %77) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #8
  %977 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 63
  %978 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %977)
          to label %979 unwind label %984

979:                                              ; preds = %973
  %980 = getelementptr inbounds [2 x i32], ptr %76, i64 0, i64 0
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %978, ptr noundef %980, i32 noundef 2, i32 noundef 5, ptr noundef %77)
          to label %981 unwind label %984

981:                                              ; preds = %979
  %982 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %983 unwind label %988

983:                                              ; preds = %981
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  br label %1027

984:                                              ; preds = %979, %973
  %985 = landingpad { ptr, i32 }
          cleanup
  %986 = extractvalue { ptr, i32 } %985, 0
  store ptr %986, ptr %19, align 8
  %987 = extractvalue { ptr, i32 } %985, 1
  store i32 %987, ptr %20, align 4
  br label %992

988:                                              ; preds = %981
  %989 = landingpad { ptr, i32 }
          cleanup
  %990 = extractvalue { ptr, i32 } %989, 0
  store ptr %990, ptr %19, align 8
  %991 = extractvalue { ptr, i32 } %989, 1
  store i32 %991, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  br label %992

992:                                              ; preds = %988, %984
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  br label %1060

993:                                              ; preds = %970
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #8
  %994 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %994, i1 noundef zeroext true)
          to label %995 unwind label %1003

995:                                              ; preds = %993
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef @.str.66)
          to label %996 unwind label %1007

996:                                              ; preds = %995
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #8
  %997 = load ptr, ptr %23, align 8, !tbaa !5
  %998 = load i32, ptr %18, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %997, i32 noundef %998)
          to label %999 unwind label %1011

999:                                              ; preds = %996
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %1000 unwind label %1015

1000:                                             ; preds = %999
  %1001 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %79)
          to label %1002 unwind label %1019

1002:                                             ; preds = %1000
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  br label %1027

1003:                                             ; preds = %993
  %1004 = landingpad { ptr, i32 }
          cleanup
  %1005 = extractvalue { ptr, i32 } %1004, 0
  store ptr %1005, ptr %19, align 8
  %1006 = extractvalue { ptr, i32 } %1004, 1
  store i32 %1006, ptr %20, align 4
  br label %1026

1007:                                             ; preds = %995
  %1008 = landingpad { ptr, i32 }
          cleanup
  %1009 = extractvalue { ptr, i32 } %1008, 0
  store ptr %1009, ptr %19, align 8
  %1010 = extractvalue { ptr, i32 } %1008, 1
  store i32 %1010, ptr %20, align 4
  br label %1025

1011:                                             ; preds = %996
  %1012 = landingpad { ptr, i32 }
          cleanup
  %1013 = extractvalue { ptr, i32 } %1012, 0
  store ptr %1013, ptr %19, align 8
  %1014 = extractvalue { ptr, i32 } %1012, 1
  store i32 %1014, ptr %20, align 4
  br label %1024

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

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

1023:                                             ; preds = %1019, %1015
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  br label %1024

1024:                                             ; preds = %1023, %1011
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  br label %1025

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

1026:                                             ; preds = %1025, %1003
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  br label %1060

1027:                                             ; preds = %1002, %983
  %1028 = load ptr, ptr %54, align 8, !tbaa !5
  %1029 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1028, i32 0, i32 4
  %1030 = load i32, ptr %1029, align 8, !tbaa !47
  %1031 = load ptr, ptr %53, align 8, !tbaa !5
  %1032 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1031, i32 0, i32 4
  %1033 = load i32, ptr %1032, align 8, !tbaa !47
  %1034 = icmp ugt i32 %1030, %1033
  br i1 %1034, label %1035, label %1043

1035:                                             ; preds = %1027
  %1036 = load ptr, ptr %53, align 8, !tbaa !5
  %1037 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1036, i32 0, i32 4
  %1038 = load i32, ptr %1037, align 8, !tbaa !47
  %1039 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %1038, i32 noundef 0)
          to label %1040 unwind label %720

1040:                                             ; preds = %1035
  %1041 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %1039)
          to label %1042 unwind label %720

1042:                                             ; preds = %1040
  br label %1043

1043:                                             ; preds = %1042, %1027
  br label %1044

1044:                                             ; preds = %1043, %968
  br label %1045

1045:                                             ; preds = %1044, %834
  %1046 = load i32, ptr %52, align 4, !tbaa !9
  %1047 = add i32 %1046, 1
  %1048 = zext i32 %1047 to i64
  %1049 = load ptr, ptr %48, align 8, !tbaa !5
  %1050 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1049, i32 0, i32 12
  %1051 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1050) #8
  %1052 = icmp ult i64 %1048, %1051
  br i1 %1052, label %1053, label %1056

1053:                                             ; preds = %1045
  %1054 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %1055 unwind label %720

1055:                                             ; preds = %1053
  br label %1056

1056:                                             ; preds = %1055, %1045
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  br label %1057

1057:                                             ; preds = %1056
  %1058 = load i32, ptr %52, align 4, !tbaa !9
  %1059 = add i32 %1058, 1
  store i32 %1059, ptr %52, align 4, !tbaa !9
  br label %626, !llvm.loop !53

1060:                                             ; preds = %1026, %992, %969, %869, %831, %737, %720
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  br label %1061

1061:                                             ; preds = %1060, %716
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  br label %1062

1062:                                             ; preds = %1061, %669, %659
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %1081

1063:                                             ; preds = %633
  %1064 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.936)
          to label %1065 unwind label %1073

1065:                                             ; preds = %1063
  %1066 = load i32, ptr %49, align 4, !tbaa !9
  %1067 = add i32 %1066, 1
  %1068 = load i32, ptr %45, align 4, !tbaa !9
  %1069 = icmp ult i32 %1067, %1068
  br i1 %1069, label %1070, label %1077

1070:                                             ; preds = %1065
  %1071 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %1072 unwind label %1073

1072:                                             ; preds = %1070
  br label %1077

1073:                                             ; preds = %1070, %1063
  %1074 = landingpad { ptr, i32 }
          cleanup
  %1075 = extractvalue { ptr, i32 } %1074, 0
  store ptr %1075, ptr %19, align 8
  %1076 = extractvalue { ptr, i32 } %1074, 1
  store i32 %1076, ptr %20, align 4
  br label %1081

1077:                                             ; preds = %1072, %1065
  br label %1078

1078:                                             ; preds = %1077
  %1079 = load i32, ptr %49, align 4, !tbaa !9
  %1080 = add i32 %1079, 1
  store i32 %1080, ptr %49, align 4, !tbaa !9
  br label %612, !llvm.loop !54

1081:                                             ; preds = %1073, %1062, %647
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  br label %1089

1082:                                             ; preds = %616
  %1083 = load i8, ptr %44, align 1, !tbaa !39, !range !40, !noundef !41
  %1084 = trunc i8 %1083 to i1
  br i1 %1084, label %1085, label %1088

1085:                                             ; preds = %1082
  %1086 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.928)
          to label %1087 unwind label %606

1087:                                             ; preds = %1085
  br label %1088

1088:                                             ; preds = %1087, %1082
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #8
  br label %1644

1089:                                             ; preds = %1081, %606
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  br label %1090

1090:                                             ; preds = %1089, %586, %569
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  br label %1091

1091:                                             ; preds = %1090, %550, %546
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #8
  br label %1656

1092:                                             ; preds = %528
  %1093 = load ptr, ptr %11, align 8, !tbaa !5
  %1094 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %1093)
          to label %1095 unwind label %225

1095:                                             ; preds = %1092
  br i1 %1094, label %1096, label %1391

1096:                                             ; preds = %1095
  call void @llvm.lifetime.start.p0(i64 1, ptr %83) #8
  %1097 = load ptr, ptr %11, align 8, !tbaa !5
  %1098 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %1097)
          to label %1099 unwind label %1109

1099:                                             ; preds = %1096
  %1100 = zext i1 %1098 to i8
  store i8 %1100, ptr %83, align 1, !tbaa !39
  %1101 = load i8, ptr %83, align 1, !tbaa !39, !range !40, !noundef !41
  %1102 = trunc i8 %1101 to i1
  br i1 %1102, label %1103, label %1117

1103:                                             ; preds = %1099
  %1104 = load i8, ptr %14, align 1, !tbaa !39, !range !40, !noundef !41
  %1105 = trunc i8 %1104 to i1
  br i1 %1105, label %1117, label %1106

1106:                                             ; preds = %1103
  %1107 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1107, ptr noundef @.str.937)
          to label %1108 unwind label %1113

1108:                                             ; preds = %1106
  invoke void @__cxa_throw(ptr %1107, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %1109

1109:                                             ; preds = %1386, %1122, %1108, %1096
  %1110 = landingpad { ptr, i32 }
          cleanup
  %1111 = extractvalue { ptr, i32 } %1110, 0
  store ptr %1111, ptr %19, align 8
  %1112 = extractvalue { ptr, i32 } %1110, 1
  store i32 %1112, ptr %20, align 4
  br label %1390

1113:                                             ; preds = %1106
  %1114 = landingpad { ptr, i32 }
          cleanup
  %1115 = extractvalue { ptr, i32 } %1114, 0
  store ptr %1115, ptr %19, align 8
  %1116 = extractvalue { ptr, i32 } %1114, 1
  store i32 %1116, ptr %20, align 4
  call void @__cxa_free_exception(ptr %1107) #8
  br label %1390

1117:                                             ; preds = %1103, %1099
  %1118 = load i32, ptr %18, align 4, !tbaa !9
  %1119 = icmp eq i32 %1118, -1
  br i1 %1119, label %1120, label %1127

1120:                                             ; preds = %1117
  %1121 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1121, ptr noundef @.str.931)
          to label %1122 unwind label %1123

1122:                                             ; preds = %1120
  invoke void @__cxa_throw(ptr %1121, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %1109

1123:                                             ; preds = %1120
  %1124 = landingpad { ptr, i32 }
          cleanup
  %1125 = extractvalue { ptr, i32 } %1124, 0
  store ptr %1125, ptr %19, align 8
  %1126 = extractvalue { ptr, i32 } %1124, 1
  store i32 %1126, ptr %20, align 4
  call void @__cxa_free_exception(ptr %1121) #8
  br label %1390

1127:                                             ; preds = %1117
  %1128 = load i8, ptr %83, align 1, !tbaa !39, !range !40, !noundef !41
  %1129 = trunc i8 %1128 to i1
  br i1 %1129, label %1130, label %1286

1130:                                             ; preds = %1127
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #8
  %1131 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %1131, ptr %84, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #8
  %1132 = load ptr, ptr %11, align 8, !tbaa !5
  %1133 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %1132, i32 noundef 0)
          to label %1134 unwind label %1153

1134:                                             ; preds = %1130
  store i32 %1133, ptr %85, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #8
  %1135 = load ptr, ptr %11, align 8, !tbaa !5
  %1136 = load ptr, ptr %118, align 8, !tbaa !43
  %1137 = getelementptr inbounds ptr, ptr %1136, i64 19
  %1138 = load ptr, ptr %1137, align 8
  invoke void %1138(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %1135, i32 noundef 0)
          to label %1139 unwind label %1157

1139:                                             ; preds = %1134
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef @.str.927)
          to label %1140 unwind label %1161

1140:                                             ; preds = %1139
  %1141 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %86)
          to label %1142 unwind label %1165

1142:                                             ; preds = %1140
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #8
  %1143 = load i32, ptr %9, align 4, !tbaa !9
  %1144 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %1143)
          to label %1145 unwind label %1171

1145:                                             ; preds = %1142
  %1146 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler25get_variable_element_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(176) %1144)
          to label %1147 unwind label %1171

1147:                                             ; preds = %1145
  store ptr %1146, ptr %88, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #8
  store i32 0, ptr %89, align 4, !tbaa !9
  br label %1148

1148:                                             ; preds = %1277, %1147
  %1149 = load i32, ptr %89, align 4, !tbaa !9
  %1150 = load i32, ptr %85, align 4, !tbaa !9
  %1151 = icmp ult i32 %1149, %1150
  br i1 %1151, label %1175, label %1152

1152:                                             ; preds = %1148
  store i32 23, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #8
  br label %1281

1153:                                             ; preds = %1130
  %1154 = landingpad { ptr, i32 }
          cleanup
  %1155 = extractvalue { ptr, i32 } %1154, 0
  store ptr %1155, ptr %19, align 8
  %1156 = extractvalue { ptr, i32 } %1154, 1
  store i32 %1156, ptr %20, align 4
  br label %1285

1157:                                             ; preds = %1134
  %1158 = landingpad { ptr, i32 }
          cleanup
  %1159 = extractvalue { ptr, i32 } %1158, 0
  store ptr %1159, ptr %19, align 8
  %1160 = extractvalue { ptr, i32 } %1158, 1
  store i32 %1160, ptr %20, align 4
  br label %1170

1161:                                             ; preds = %1139
  %1162 = landingpad { ptr, i32 }
          cleanup
  %1163 = extractvalue { ptr, i32 } %1162, 0
  store ptr %1163, ptr %19, align 8
  %1164 = extractvalue { ptr, i32 } %1162, 1
  store i32 %1164, ptr %20, align 4
  br label %1169

1165:                                             ; preds = %1140
  %1166 = landingpad { ptr, i32 }
          cleanup
  %1167 = extractvalue { ptr, i32 } %1166, 0
  store ptr %1167, ptr %19, align 8
  %1168 = extractvalue { ptr, i32 } %1166, 1
  store i32 %1168, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  br label %1169

1169:                                             ; preds = %1165, %1161
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  br label %1170

1170:                                             ; preds = %1169, %1157
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #8
  br label %1285

1171:                                             ; preds = %1281, %1145, %1142
  %1172 = landingpad { ptr, i32 }
          cleanup
  %1173 = extractvalue { ptr, i32 } %1172, 0
  store ptr %1173, ptr %19, align 8
  %1174 = extractvalue { ptr, i32 } %1172, 1
  store i32 %1174, ptr %20, align 4
  br label %1284

1175:                                             ; preds = %1148
  %1176 = load i32, ptr %84, align 4, !tbaa !9
  store i32 %1176, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %90) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #8
  %1177 = load ptr, ptr %88, align 8, !tbaa !5
  %1178 = load ptr, ptr %118, align 8, !tbaa !43
  %1179 = getelementptr inbounds ptr, ptr %1178, i64 19
  %1180 = load ptr, ptr %1179, align 8
  invoke void %1180(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %1177, i32 noundef 0)
          to label %1181 unwind label %1192

1181:                                             ; preds = %1175
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %90, ptr noundef nonnull align 8 dereferenceable(32) %91, ptr noundef @.str.58)
          to label %1182 unwind label %1196

1182:                                             ; preds = %1181
  %1183 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %90)
          to label %1184 unwind label %1200

1184:                                             ; preds = %1182
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #8
  store i32 0, ptr %92, align 4, !tbaa !9
  br label %1185

1185:                                             ; preds = %1256, %1184
  %1186 = load i32, ptr %92, align 4, !tbaa !9
  %1187 = load ptr, ptr %11, align 8, !tbaa !5
  %1188 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1187, i32 0, i32 5
  %1189 = load i32, ptr %1188, align 4, !tbaa !50
  %1190 = icmp ult i32 %1186, %1189
  br i1 %1190, label %1206, label %1191

1191:                                             ; preds = %1185
  store i32 26, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  br label %1262

1192:                                             ; preds = %1175
  %1193 = landingpad { ptr, i32 }
          cleanup
  %1194 = extractvalue { ptr, i32 } %1193, 0
  store ptr %1194, ptr %19, align 8
  %1195 = extractvalue { ptr, i32 } %1193, 1
  store i32 %1195, ptr %20, align 4
  br label %1205

1196:                                             ; preds = %1181
  %1197 = landingpad { ptr, i32 }
          cleanup
  %1198 = extractvalue { ptr, i32 } %1197, 0
  store ptr %1198, ptr %19, align 8
  %1199 = extractvalue { ptr, i32 } %1197, 1
  store i32 %1199, ptr %20, align 4
  br label %1204

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

1204:                                             ; preds = %1200, %1196
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  br label %1205

1205:                                             ; preds = %1204, %1192
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #8
  br label %1280

1206:                                             ; preds = %1185
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #8
  %1207 = load i32, ptr %89, align 4, !tbaa !9
  store i32 %1207, ptr %93, align 4, !tbaa !9
  %1208 = getelementptr inbounds i32, ptr %93, i64 1
  %1209 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %1209, ptr %1208, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %94) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %94) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %95) #8
  %1210 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 63
  %1211 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1210)
          to label %1212 unwind label %1232

1212:                                             ; preds = %1206
  %1213 = getelementptr inbounds [2 x i32], ptr %93, i64 0, i64 0
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %95, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %1211, ptr noundef %1213, i32 noundef 2, i32 noundef 5, ptr noundef %94)
          to label %1214 unwind label %1232

1214:                                             ; preds = %1212
  %1215 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %95)
          to label %1216 unwind label %1236

1216:                                             ; preds = %1214
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #8
  %1217 = load ptr, ptr %22, align 8, !tbaa !5
  %1218 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1217, i32 0, i32 4
  %1219 = load i32, ptr %1218, align 8, !tbaa !47
  %1220 = load ptr, ptr %11, align 8, !tbaa !5
  %1221 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1220, i32 0, i32 4
  %1222 = load i32, ptr %1221, align 8, !tbaa !47
  %1223 = icmp ugt i32 %1219, %1222
  br i1 %1223, label %1224, label %1245

1224:                                             ; preds = %1216
  %1225 = load ptr, ptr %11, align 8, !tbaa !5
  %1226 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1225, i32 0, i32 4
  %1227 = load i32, ptr %1226, align 8, !tbaa !47
  %1228 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %1227, i32 noundef 0)
          to label %1229 unwind label %1241

1229:                                             ; preds = %1224
  %1230 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %1228)
          to label %1231 unwind label %1241

1231:                                             ; preds = %1229
  br label %1245

1232:                                             ; preds = %1212, %1206
  %1233 = landingpad { ptr, i32 }
          cleanup
  %1234 = extractvalue { ptr, i32 } %1233, 0
  store ptr %1234, ptr %19, align 8
  %1235 = extractvalue { ptr, i32 } %1233, 1
  store i32 %1235, ptr %20, align 4
  br label %1240

1236:                                             ; preds = %1214
  %1237 = landingpad { ptr, i32 }
          cleanup
  %1238 = extractvalue { ptr, i32 } %1237, 0
  store ptr %1238, ptr %19, align 8
  %1239 = extractvalue { ptr, i32 } %1237, 1
  store i32 %1239, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #8
  br label %1240

1240:                                             ; preds = %1236, %1232
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #8
  br label %1261

1241:                                             ; preds = %1252, %1229, %1224
  %1242 = landingpad { ptr, i32 }
          cleanup
  %1243 = extractvalue { ptr, i32 } %1242, 0
  store ptr %1243, ptr %19, align 8
  %1244 = extractvalue { ptr, i32 } %1242, 1
  store i32 %1244, ptr %20, align 4
  br label %1261

1245:                                             ; preds = %1231, %1216
  %1246 = load i32, ptr %92, align 4, !tbaa !9
  %1247 = add i32 %1246, 1
  %1248 = load ptr, ptr %11, align 8, !tbaa !5
  %1249 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1248, i32 0, i32 5
  %1250 = load i32, ptr %1249, align 4, !tbaa !50
  %1251 = icmp ult i32 %1247, %1250
  br i1 %1251, label %1252, label %1255

1252:                                             ; preds = %1245
  %1253 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %1254 unwind label %1241

1254:                                             ; preds = %1252
  br label %1255

1255:                                             ; preds = %1254, %1245
  call void @llvm.lifetime.end.p0(i64 16, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  br label %1256

1256:                                             ; preds = %1255
  %1257 = load i32, ptr %92, align 4, !tbaa !9
  %1258 = add i32 %1257, 1
  store i32 %1258, ptr %92, align 4, !tbaa !9
  %1259 = load i32, ptr %18, align 4, !tbaa !9
  %1260 = add i32 %1259, 1
  store i32 %1260, ptr %18, align 4, !tbaa !9
  br label %1185, !llvm.loop !55

1261:                                             ; preds = %1241, %1240
  call void @llvm.lifetime.end.p0(i64 16, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  br label %1280

1262:                                             ; preds = %1191
  %1263 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.53)
          to label %1264 unwind label %1272

1264:                                             ; preds = %1262
  %1265 = load i32, ptr %89, align 4, !tbaa !9
  %1266 = add i32 %1265, 1
  %1267 = load i32, ptr %85, align 4, !tbaa !9
  %1268 = icmp ult i32 %1266, %1267
  br i1 %1268, label %1269, label %1276

1269:                                             ; preds = %1264
  %1270 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %1271 unwind label %1272

1271:                                             ; preds = %1269
  br label %1276

1272:                                             ; preds = %1269, %1262
  %1273 = landingpad { ptr, i32 }
          cleanup
  %1274 = extractvalue { ptr, i32 } %1273, 0
  store ptr %1274, ptr %19, align 8
  %1275 = extractvalue { ptr, i32 } %1273, 1
  store i32 %1275, ptr %20, align 4
  br label %1280

1276:                                             ; preds = %1271, %1264
  br label %1277

1277:                                             ; preds = %1276
  %1278 = load i32, ptr %89, align 4, !tbaa !9
  %1279 = add i32 %1278, 1
  store i32 %1279, ptr %89, align 4, !tbaa !9
  br label %1148, !llvm.loop !56

1280:                                             ; preds = %1272, %1261, %1205
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #8
  br label %1284

1281:                                             ; preds = %1152
  %1282 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.928)
          to label %1283 unwind label %1171

1283:                                             ; preds = %1281
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  br label %1389

1284:                                             ; preds = %1280, %1171
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  br label %1285

1285:                                             ; preds = %1284, %1170, %1153
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  br label %1390

1286:                                             ; preds = %1127
  call void @llvm.lifetime.start.p0(i64 32, ptr %96) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %97) #8
  %1287 = load ptr, ptr %11, align 8, !tbaa !5
  %1288 = load ptr, ptr %118, align 8, !tbaa !43
  %1289 = getelementptr inbounds ptr, ptr %1288, i64 19
  %1290 = load ptr, ptr %1289, align 8
  invoke void %1290(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %97, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %1287, i32 noundef 0)
          to label %1291 unwind label %1302

1291:                                             ; preds = %1286
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %96, ptr noundef nonnull align 8 dereferenceable(32) %97, ptr noundef @.str.58)
          to label %1292 unwind label %1306

1292:                                             ; preds = %1291
  %1293 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %96)
          to label %1294 unwind label %1310

1294:                                             ; preds = %1292
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %97) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #8
  store i32 0, ptr %98, align 4, !tbaa !9
  br label %1295

1295:                                             ; preds = %1380, %1294
  %1296 = load i32, ptr %98, align 4, !tbaa !9
  %1297 = load ptr, ptr %11, align 8, !tbaa !5
  %1298 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1297, i32 0, i32 5
  %1299 = load i32, ptr %1298, align 4, !tbaa !50
  %1300 = icmp ult i32 %1296, %1299
  br i1 %1300, label %1316, label %1301

1301:                                             ; preds = %1295
  store i32 29, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #8
  br label %1386

1302:                                             ; preds = %1286
  %1303 = landingpad { ptr, i32 }
          cleanup
  %1304 = extractvalue { ptr, i32 } %1303, 0
  store ptr %1304, ptr %19, align 8
  %1305 = extractvalue { ptr, i32 } %1303, 1
  store i32 %1305, ptr %20, align 4
  br label %1315

1306:                                             ; preds = %1291
  %1307 = landingpad { ptr, i32 }
          cleanup
  %1308 = extractvalue { ptr, i32 } %1307, 0
  store ptr %1308, ptr %19, align 8
  %1309 = extractvalue { ptr, i32 } %1307, 1
  store i32 %1309, ptr %20, align 4
  br label %1314

1310:                                             ; preds = %1292
  %1311 = landingpad { ptr, i32 }
          cleanup
  %1312 = extractvalue { ptr, i32 } %1311, 0
  store ptr %1312, ptr %19, align 8
  %1313 = extractvalue { ptr, i32 } %1311, 1
  store i32 %1313, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #8
  br label %1314

1314:                                             ; preds = %1310, %1306
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #8
  br label %1315

1315:                                             ; preds = %1314, %1302
  call void @llvm.lifetime.end.p0(i64 32, ptr %97) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #8
  br label %1390

1316:                                             ; preds = %1295
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %100) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %101) #8
  %1317 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %101, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %1317, i1 noundef zeroext true)
          to label %1318 unwind label %1341

1318:                                             ; preds = %1316
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef nonnull align 8 dereferenceable(32) %101, ptr noundef @.str.66)
          to label %1319 unwind label %1345

1319:                                             ; preds = %1318
  call void @llvm.lifetime.start.p0(i64 32, ptr %102) #8
  %1320 = load ptr, ptr %23, align 8, !tbaa !5
  %1321 = load i32, ptr %18, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %1320, i32 noundef %1321)
          to label %1322 unwind label %1349

1322:                                             ; preds = %1319
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %99, ptr noundef nonnull align 8 dereferenceable(32) %100, ptr noundef nonnull align 8 dereferenceable(32) %102)
          to label %1323 unwind label %1353

1323:                                             ; preds = %1322
  %1324 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %99)
          to label %1325 unwind label %1357

1325:                                             ; preds = %1323
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #8
  %1326 = load ptr, ptr %22, align 8, !tbaa !5
  %1327 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1326, i32 0, i32 4
  %1328 = load i32, ptr %1327, align 8, !tbaa !47
  %1329 = load ptr, ptr %11, align 8, !tbaa !5
  %1330 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1329, i32 0, i32 4
  %1331 = load i32, ptr %1330, align 8, !tbaa !47
  %1332 = icmp ugt i32 %1328, %1331
  br i1 %1332, label %1333, label %1369

1333:                                             ; preds = %1325
  %1334 = load ptr, ptr %11, align 8, !tbaa !5
  %1335 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1334, i32 0, i32 4
  %1336 = load i32, ptr %1335, align 8, !tbaa !47
  %1337 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %1336, i32 noundef 0)
          to label %1338 unwind label %1365

1338:                                             ; preds = %1333
  %1339 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %1337)
          to label %1340 unwind label %1365

1340:                                             ; preds = %1338
  br label %1369

1341:                                             ; preds = %1316
  %1342 = landingpad { ptr, i32 }
          cleanup
  %1343 = extractvalue { ptr, i32 } %1342, 0
  store ptr %1343, ptr %19, align 8
  %1344 = extractvalue { ptr, i32 } %1342, 1
  store i32 %1344, ptr %20, align 4
  br label %1364

1345:                                             ; preds = %1318
  %1346 = landingpad { ptr, i32 }
          cleanup
  %1347 = extractvalue { ptr, i32 } %1346, 0
  store ptr %1347, ptr %19, align 8
  %1348 = extractvalue { ptr, i32 } %1346, 1
  store i32 %1348, ptr %20, align 4
  br label %1363

1349:                                             ; preds = %1319
  %1350 = landingpad { ptr, i32 }
          cleanup
  %1351 = extractvalue { ptr, i32 } %1350, 0
  store ptr %1351, ptr %19, align 8
  %1352 = extractvalue { ptr, i32 } %1350, 1
  store i32 %1352, ptr %20, align 4
  br label %1362

1353:                                             ; preds = %1322
  %1354 = landingpad { ptr, i32 }
          cleanup
  %1355 = extractvalue { ptr, i32 } %1354, 0
  store ptr %1355, ptr %19, align 8
  %1356 = extractvalue { ptr, i32 } %1354, 1
  store i32 %1356, ptr %20, align 4
  br label %1361

1357:                                             ; preds = %1323
  %1358 = landingpad { ptr, i32 }
          cleanup
  %1359 = extractvalue { ptr, i32 } %1358, 0
  store ptr %1359, ptr %19, align 8
  %1360 = extractvalue { ptr, i32 } %1358, 1
  store i32 %1360, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #8
  br label %1361

1361:                                             ; preds = %1357, %1353
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #8
  br label %1362

1362:                                             ; preds = %1361, %1349
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #8
  br label %1363

1363:                                             ; preds = %1362, %1345
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #8
  br label %1364

1364:                                             ; preds = %1363, %1341
  call void @llvm.lifetime.end.p0(i64 32, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #8
  br label %1385

1365:                                             ; preds = %1376, %1338, %1333
  %1366 = landingpad { ptr, i32 }
          cleanup
  %1367 = extractvalue { ptr, i32 } %1366, 0
  store ptr %1367, ptr %19, align 8
  %1368 = extractvalue { ptr, i32 } %1366, 1
  store i32 %1368, ptr %20, align 4
  br label %1385

1369:                                             ; preds = %1340, %1325
  %1370 = load i32, ptr %98, align 4, !tbaa !9
  %1371 = add i32 %1370, 1
  %1372 = load ptr, ptr %11, align 8, !tbaa !5
  %1373 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1372, i32 0, i32 5
  %1374 = load i32, ptr %1373, align 4, !tbaa !50
  %1375 = icmp ult i32 %1371, %1374
  br i1 %1375, label %1376, label %1379

1376:                                             ; preds = %1369
  %1377 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %1378 unwind label %1365

1378:                                             ; preds = %1376
  br label %1379

1379:                                             ; preds = %1378, %1369
  br label %1380

1380:                                             ; preds = %1379
  %1381 = load i32, ptr %98, align 4, !tbaa !9
  %1382 = add i32 %1381, 1
  store i32 %1382, ptr %98, align 4, !tbaa !9
  %1383 = load i32, ptr %18, align 4, !tbaa !9
  %1384 = add i32 %1383, 1
  store i32 %1384, ptr %18, align 4, !tbaa !9
  br label %1295, !llvm.loop !57

1385:                                             ; preds = %1365, %1364
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #8
  br label %1390

1386:                                             ; preds = %1301
  %1387 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.53)
          to label %1388 unwind label %1109

1388:                                             ; preds = %1386
  br label %1389

1389:                                             ; preds = %1388, %1283
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #8
  br label %1643

1390:                                             ; preds = %1385, %1315, %1285, %1123, %1113, %1109
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #8
  br label %1656

1391:                                             ; preds = %1095
  %1392 = load i8, ptr %14, align 1, !tbaa !39, !range !40, !noundef !41
  %1393 = trunc i8 %1392 to i1
  br i1 %1393, label %1394, label %1510

1394:                                             ; preds = %1391
  %1395 = load ptr, ptr %11, align 8, !tbaa !5
  %1396 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %1395)
          to label %1397 unwind label %225

1397:                                             ; preds = %1394
  br i1 %1396, label %1398, label %1399

1398:                                             ; preds = %1397
  br label %1401

1399:                                             ; preds = %1397
  call void @__assert_fail(ptr noundef @.str.938, ptr noundef @.str.25, i32 noundef 8403, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

1400:                                             ; No predecessors!
  br label %1401

1401:                                             ; preds = %1400, %1398
  %1402 = load ptr, ptr %11, align 8, !tbaa !5
  %1403 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1402, i32 0, i32 6
  %1404 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1403) #8
  %1405 = icmp eq i64 %1404, 1
  br i1 %1405, label %1406, label %1407

1406:                                             ; preds = %1401
  br label %1409

1407:                                             ; preds = %1401
  call void @__assert_fail(ptr noundef @.str.939, ptr noundef @.str.25, i32 noundef 8404, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

1408:                                             ; No predecessors!
  br label %1409

1409:                                             ; preds = %1408, %1406
  %1410 = load i32, ptr %18, align 4, !tbaa !9
  %1411 = icmp eq i32 %1410, -1
  br i1 %1411, label %1412, label %1419

1412:                                             ; preds = %1409
  %1413 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1413, ptr noundef @.str.931)
          to label %1414 unwind label %1415

1414:                                             ; preds = %1412
  invoke void @__cxa_throw(ptr %1413, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %225

1415:                                             ; preds = %1412
  %1416 = landingpad { ptr, i32 }
          cleanup
  %1417 = extractvalue { ptr, i32 } %1416, 0
  store ptr %1417, ptr %19, align 8
  %1418 = extractvalue { ptr, i32 } %1416, 1
  store i32 %1418, ptr %20, align 4
  call void @__cxa_free_exception(ptr %1413) #8
  br label %1656

1419:                                             ; preds = %1409
  call void @llvm.lifetime.start.p0(i64 32, ptr %103) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %104) #8
  %1420 = load ptr, ptr %11, align 8, !tbaa !5
  %1421 = load ptr, ptr %118, align 8, !tbaa !43
  %1422 = getelementptr inbounds ptr, ptr %1421, i64 19
  %1423 = load ptr, ptr %1422, align 8
  invoke void %1423(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %104, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %1420, i32 noundef 0)
          to label %1424 unwind label %1436

1424:                                             ; preds = %1419
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 8 dereferenceable(32) %104, ptr noundef @.str.927)
          to label %1425 unwind label %1440

1425:                                             ; preds = %1424
  %1426 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %103)
          to label %1427 unwind label %1444

1427:                                             ; preds = %1425
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #8
  %1428 = load ptr, ptr %11, align 8, !tbaa !5
  %1429 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %1428, i32 noundef 0)
          to label %1430 unwind label %1450

1430:                                             ; preds = %1427
  store i32 %1429, ptr %105, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #8
  store i32 0, ptr %106, align 4, !tbaa !9
  br label %1431

1431:                                             ; preds = %1502, %1430
  %1432 = load i32, ptr %106, align 4, !tbaa !9
  %1433 = load i32, ptr %105, align 4, !tbaa !9
  %1434 = icmp ult i32 %1432, %1433
  br i1 %1434, label %1454, label %1435

1435:                                             ; preds = %1431
  store i32 32, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #8
  br label %1506

1436:                                             ; preds = %1419
  %1437 = landingpad { ptr, i32 }
          cleanup
  %1438 = extractvalue { ptr, i32 } %1437, 0
  store ptr %1438, ptr %19, align 8
  %1439 = extractvalue { ptr, i32 } %1437, 1
  store i32 %1439, ptr %20, align 4
  br label %1449

1440:                                             ; preds = %1424
  %1441 = landingpad { ptr, i32 }
          cleanup
  %1442 = extractvalue { ptr, i32 } %1441, 0
  store ptr %1442, ptr %19, align 8
  %1443 = extractvalue { ptr, i32 } %1441, 1
  store i32 %1443, ptr %20, align 4
  br label %1448

1444:                                             ; preds = %1425
  %1445 = landingpad { ptr, i32 }
          cleanup
  %1446 = extractvalue { ptr, i32 } %1445, 0
  store ptr %1446, ptr %19, align 8
  %1447 = extractvalue { ptr, i32 } %1445, 1
  store i32 %1447, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  br label %1448

1448:                                             ; preds = %1444, %1440
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #8
  br label %1449

1449:                                             ; preds = %1448, %1436
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #8
  br label %1656

1450:                                             ; preds = %1506, %1427
  %1451 = landingpad { ptr, i32 }
          cleanup
  %1452 = extractvalue { ptr, i32 } %1451, 0
  store ptr %1452, ptr %19, align 8
  %1453 = extractvalue { ptr, i32 } %1451, 1
  store i32 %1453, ptr %20, align 4
  br label %1509

1454:                                             ; preds = %1431
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #8
  %1455 = load i32, ptr %106, align 4, !tbaa !9
  store i32 %1455, ptr %107, align 4, !tbaa !9
  %1456 = getelementptr inbounds i32, ptr %107, i64 1
  %1457 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %1457, ptr %1456, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %108) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %108) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #8
  %1458 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %118, i32 0, i32 63
  %1459 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1458)
          to label %1460 unwind label %1480

1460:                                             ; preds = %1454
  %1461 = getelementptr inbounds [2 x i32], ptr %107, i64 0, i64 0
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %1459, ptr noundef %1461, i32 noundef 2, i32 noundef 5, ptr noundef %108)
          to label %1462 unwind label %1480

1462:                                             ; preds = %1460
  %1463 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %109)
          to label %1464 unwind label %1484

1464:                                             ; preds = %1462
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  %1465 = load ptr, ptr %22, align 8, !tbaa !5
  %1466 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1465, i32 0, i32 4
  %1467 = load i32, ptr %1466, align 8, !tbaa !47
  %1468 = load ptr, ptr %11, align 8, !tbaa !5
  %1469 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1468, i32 0, i32 4
  %1470 = load i32, ptr %1469, align 8, !tbaa !47
  %1471 = icmp ugt i32 %1467, %1470
  br i1 %1471, label %1472, label %1493

1472:                                             ; preds = %1464
  %1473 = load ptr, ptr %11, align 8, !tbaa !5
  %1474 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1473, i32 0, i32 4
  %1475 = load i32, ptr %1474, align 8, !tbaa !47
  %1476 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %1475, i32 noundef 0)
          to label %1477 unwind label %1489

1477:                                             ; preds = %1472
  %1478 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %1476)
          to label %1479 unwind label %1489

1479:                                             ; preds = %1477
  br label %1493

1480:                                             ; preds = %1460, %1454
  %1481 = landingpad { ptr, i32 }
          cleanup
  %1482 = extractvalue { ptr, i32 } %1481, 0
  store ptr %1482, ptr %19, align 8
  %1483 = extractvalue { ptr, i32 } %1481, 1
  store i32 %1483, ptr %20, align 4
  br label %1488

1484:                                             ; preds = %1462
  %1485 = landingpad { ptr, i32 }
          cleanup
  %1486 = extractvalue { ptr, i32 } %1485, 0
  store ptr %1486, ptr %19, align 8
  %1487 = extractvalue { ptr, i32 } %1485, 1
  store i32 %1487, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  br label %1488

1488:                                             ; preds = %1484, %1480
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  br label %1505

1489:                                             ; preds = %1498, %1477, %1472
  %1490 = landingpad { ptr, i32 }
          cleanup
  %1491 = extractvalue { ptr, i32 } %1490, 0
  store ptr %1491, ptr %19, align 8
  %1492 = extractvalue { ptr, i32 } %1490, 1
  store i32 %1492, ptr %20, align 4
  br label %1505

1493:                                             ; preds = %1479, %1464
  %1494 = load i32, ptr %106, align 4, !tbaa !9
  %1495 = add i32 %1494, 1
  %1496 = load i32, ptr %105, align 4, !tbaa !9
  %1497 = icmp ult i32 %1495, %1496
  br i1 %1497, label %1498, label %1501

1498:                                             ; preds = %1493
  %1499 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %1500 unwind label %1489

1500:                                             ; preds = %1498
  br label %1501

1501:                                             ; preds = %1500, %1493
  call void @llvm.lifetime.end.p0(i64 16, ptr %108) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #8
  br label %1502

1502:                                             ; preds = %1501
  %1503 = load i32, ptr %106, align 4, !tbaa !9
  %1504 = add i32 %1503, 1
  store i32 %1504, ptr %106, align 4, !tbaa !9
  br label %1431, !llvm.loop !58

1505:                                             ; preds = %1489, %1488
  call void @llvm.lifetime.end.p0(i64 16, ptr %108) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #8
  br label %1509

1506:                                             ; preds = %1435
  %1507 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.928)
          to label %1508 unwind label %1450

1508:                                             ; preds = %1506
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #8
  br label %1642

1509:                                             ; preds = %1505, %1450
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #8
  br label %1656

1510:                                             ; preds = %1391
  %1511 = load ptr, ptr %11, align 8, !tbaa !5
  %1512 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %118, ptr noundef nonnull align 8 dereferenceable(336) %1511)
          to label %1513 unwind label %225

1513:                                             ; preds = %1510
  br i1 %1512, label %1514, label %1515

1514:                                             ; preds = %1513
  br label %1517

1515:                                             ; preds = %1513
  call void @__assert_fail(ptr noundef @.str.938, ptr noundef @.str.25, i32 noundef 8431, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

1516:                                             ; No predecessors!
  br label %1517

1517:                                             ; preds = %1516, %1514
  %1518 = load ptr, ptr %11, align 8, !tbaa !5
  %1519 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1518, i32 0, i32 6
  %1520 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1519) #8
  %1521 = icmp eq i64 %1520, 1
  br i1 %1521, label %1522, label %1523

1522:                                             ; preds = %1517
  br label %1525

1523:                                             ; preds = %1517
  call void @__assert_fail(ptr noundef @.str.939, ptr noundef @.str.25, i32 noundef 8432, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

1524:                                             ; No predecessors!
  br label %1525

1525:                                             ; preds = %1524, %1522
  %1526 = load i32, ptr %18, align 4, !tbaa !9
  %1527 = icmp eq i32 %1526, -1
  br i1 %1527, label %1528, label %1535

1528:                                             ; preds = %1525
  %1529 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1529, ptr noundef @.str.931)
          to label %1530 unwind label %1531

1530:                                             ; preds = %1528
  invoke void @__cxa_throw(ptr %1529, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1668 unwind label %225

1531:                                             ; preds = %1528
  %1532 = landingpad { ptr, i32 }
          cleanup
  %1533 = extractvalue { ptr, i32 } %1532, 0
  store ptr %1533, ptr %19, align 8
  %1534 = extractvalue { ptr, i32 } %1532, 1
  store i32 %1534, ptr %20, align 4
  call void @__cxa_free_exception(ptr %1529) #8
  br label %1656

1535:                                             ; preds = %1525
  call void @llvm.lifetime.start.p0(i64 32, ptr %110) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %111) #8
  %1536 = load ptr, ptr %11, align 8, !tbaa !5
  %1537 = load ptr, ptr %118, align 8, !tbaa !43
  %1538 = getelementptr inbounds ptr, ptr %1537, i64 19
  %1539 = load ptr, ptr %1538, align 8
  invoke void %1539(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %111, ptr noundef nonnull align 8 dereferenceable(12482) %118, ptr noundef nonnull align 8 dereferenceable(336) %1536, i32 noundef 0)
          to label %1540 unwind label %1552

1540:                                             ; preds = %1535
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %110, ptr noundef nonnull align 8 dereferenceable(32) %111, ptr noundef @.str.927)
          to label %1541 unwind label %1556

1541:                                             ; preds = %1540
  %1542 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %110)
          to label %1543 unwind label %1560

1543:                                             ; preds = %1541
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %111) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %112) #8
  %1544 = load ptr, ptr %11, align 8, !tbaa !5
  %1545 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %1544, i32 noundef 0)
          to label %1546 unwind label %1566

1546:                                             ; preds = %1543
  store i32 %1545, ptr %112, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #8
  store i32 0, ptr %113, align 4, !tbaa !9
  br label %1547

1547:                                             ; preds = %1632, %1546
  %1548 = load i32, ptr %113, align 4, !tbaa !9
  %1549 = load i32, ptr %112, align 4, !tbaa !9
  %1550 = icmp ult i32 %1548, %1549
  br i1 %1550, label %1570, label %1551

1551:                                             ; preds = %1547
  store i32 35, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #8
  br label %1638

1552:                                             ; preds = %1535
  %1553 = landingpad { ptr, i32 }
          cleanup
  %1554 = extractvalue { ptr, i32 } %1553, 0
  store ptr %1554, ptr %19, align 8
  %1555 = extractvalue { ptr, i32 } %1553, 1
  store i32 %1555, ptr %20, align 4
  br label %1565

1556:                                             ; preds = %1540
  %1557 = landingpad { ptr, i32 }
          cleanup
  %1558 = extractvalue { ptr, i32 } %1557, 0
  store ptr %1558, ptr %19, align 8
  %1559 = extractvalue { ptr, i32 } %1557, 1
  store i32 %1559, ptr %20, align 4
  br label %1564

1560:                                             ; preds = %1541
  %1561 = landingpad { ptr, i32 }
          cleanup
  %1562 = extractvalue { ptr, i32 } %1561, 0
  store ptr %1562, ptr %19, align 8
  %1563 = extractvalue { ptr, i32 } %1561, 1
  store i32 %1563, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  br label %1564

1564:                                             ; preds = %1560, %1556
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #8
  br label %1565

1565:                                             ; preds = %1564, %1552
  call void @llvm.lifetime.end.p0(i64 32, ptr %111) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  br label %1656

1566:                                             ; preds = %1638, %1543
  %1567 = landingpad { ptr, i32 }
          cleanup
  %1568 = extractvalue { ptr, i32 } %1567, 0
  store ptr %1568, ptr %19, align 8
  %1569 = extractvalue { ptr, i32 } %1567, 1
  store i32 %1569, ptr %20, align 4
  br label %1641

1570:                                             ; preds = %1547
  call void @llvm.lifetime.start.p0(i64 32, ptr %114) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %115) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %116) #8
  %1571 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %116, ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %1571, i1 noundef zeroext true)
          to label %1572 unwind label %1595

1572:                                             ; preds = %1570
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %115, ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef @.str.66)
          to label %1573 unwind label %1599

1573:                                             ; preds = %1572
  call void @llvm.lifetime.start.p0(i64 32, ptr %117) #8
  %1574 = load ptr, ptr %23, align 8, !tbaa !5
  %1575 = load i32, ptr %18, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %117, ptr noundef nonnull align 8 dereferenceable(9848) %118, ptr noundef nonnull align 8 dereferenceable(336) %1574, i32 noundef %1575)
          to label %1576 unwind label %1603

1576:                                             ; preds = %1573
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %114, ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 8 dereferenceable(32) %117)
          to label %1577 unwind label %1607

1577:                                             ; preds = %1576
  %1578 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %114)
          to label %1579 unwind label %1611

1579:                                             ; preds = %1577
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #8
  %1580 = load ptr, ptr %22, align 8, !tbaa !5
  %1581 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1580, i32 0, i32 4
  %1582 = load i32, ptr %1581, align 8, !tbaa !47
  %1583 = load ptr, ptr %11, align 8, !tbaa !5
  %1584 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1583, i32 0, i32 4
  %1585 = load i32, ptr %1584, align 8, !tbaa !47
  %1586 = icmp ugt i32 %1582, %1585
  br i1 %1586, label %1587, label %1623

1587:                                             ; preds = %1579
  %1588 = load ptr, ptr %11, align 8, !tbaa !5
  %1589 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1588, i32 0, i32 4
  %1590 = load i32, ptr %1589, align 8, !tbaa !47
  %1591 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %1590, i32 noundef 0)
          to label %1592 unwind label %1619

1592:                                             ; preds = %1587
  %1593 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %1591)
          to label %1594 unwind label %1619

1594:                                             ; preds = %1592
  br label %1623

1595:                                             ; preds = %1570
  %1596 = landingpad { ptr, i32 }
          cleanup
  %1597 = extractvalue { ptr, i32 } %1596, 0
  store ptr %1597, ptr %19, align 8
  %1598 = extractvalue { ptr, i32 } %1596, 1
  store i32 %1598, ptr %20, align 4
  br label %1618

1599:                                             ; preds = %1572
  %1600 = landingpad { ptr, i32 }
          cleanup
  %1601 = extractvalue { ptr, i32 } %1600, 0
  store ptr %1601, ptr %19, align 8
  %1602 = extractvalue { ptr, i32 } %1600, 1
  store i32 %1602, ptr %20, align 4
  br label %1617

1603:                                             ; preds = %1573
  %1604 = landingpad { ptr, i32 }
          cleanup
  %1605 = extractvalue { ptr, i32 } %1604, 0
  store ptr %1605, ptr %19, align 8
  %1606 = extractvalue { ptr, i32 } %1604, 1
  store i32 %1606, ptr %20, align 4
  br label %1616

1607:                                             ; preds = %1576
  %1608 = landingpad { ptr, i32 }
          cleanup
  %1609 = extractvalue { ptr, i32 } %1608, 0
  store ptr %1609, ptr %19, align 8
  %1610 = extractvalue { ptr, i32 } %1608, 1
  store i32 %1610, ptr %20, align 4
  br label %1615

1611:                                             ; preds = %1577
  %1612 = landingpad { ptr, i32 }
          cleanup
  %1613 = extractvalue { ptr, i32 } %1612, 0
  store ptr %1613, ptr %19, align 8
  %1614 = extractvalue { ptr, i32 } %1612, 1
  store i32 %1614, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  br label %1615

1615:                                             ; preds = %1611, %1607
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #8
  br label %1616

1616:                                             ; preds = %1615, %1603
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  br label %1617

1617:                                             ; preds = %1616, %1599
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  br label %1618

1618:                                             ; preds = %1617, %1595
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #8
  br label %1637

1619:                                             ; preds = %1628, %1592, %1587
  %1620 = landingpad { ptr, i32 }
          cleanup
  %1621 = extractvalue { ptr, i32 } %1620, 0
  store ptr %1621, ptr %19, align 8
  %1622 = extractvalue { ptr, i32 } %1620, 1
  store i32 %1622, ptr %20, align 4
  br label %1637

1623:                                             ; preds = %1594, %1579
  %1624 = load i32, ptr %113, align 4, !tbaa !9
  %1625 = add i32 %1624, 1
  %1626 = load i32, ptr %112, align 4, !tbaa !9
  %1627 = icmp ult i32 %1625, %1626
  br i1 %1627, label %1628, label %1631

1628:                                             ; preds = %1623
  %1629 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.55)
          to label %1630 unwind label %1619

1630:                                             ; preds = %1628
  br label %1631

1631:                                             ; preds = %1630, %1623
  br label %1632

1632:                                             ; preds = %1631
  %1633 = load i32, ptr %113, align 4, !tbaa !9
  %1634 = add i32 %1633, 1
  store i32 %1634, ptr %113, align 4, !tbaa !9
  %1635 = load i32, ptr %18, align 4, !tbaa !9
  %1636 = add i32 %1635, 1
  store i32 %1636, ptr %18, align 4, !tbaa !9
  br label %1547, !llvm.loop !59

1637:                                             ; preds = %1619, %1618
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #8
  br label %1641

1638:                                             ; preds = %1551
  %1639 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.928)
          to label %1640 unwind label %1566

1640:                                             ; preds = %1638
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #8
  br label %1642

1641:                                             ; preds = %1637, %1566
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #8
  br label %1656

1642:                                             ; preds = %1640, %1508
  br label %1643

1643:                                             ; preds = %1642, %1389
  br label %1644

1644:                                             ; preds = %1643, %1088
  br label %1645

1645:                                             ; preds = %1644, %525
  br label %1646

1646:                                             ; preds = %1645
  br label %1647

1647:                                             ; preds = %1646, %307
  %1648 = load i32, ptr %7, align 4, !tbaa !9
  %1649 = load i32, ptr %8, align 4, !tbaa !9
  %1650 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %118, i32 noundef %1648, i32 noundef %1649, ptr noundef nonnull align 8 dereferenceable(32) %17, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1651 unwind label %225

1651:                                             ; preds = %1647
  %1652 = load i32, ptr %8, align 4, !tbaa !9
  %1653 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler13register_readEjjb(ptr noundef nonnull align 8 dereferenceable(3176) %118, i32 noundef %1652, i32 noundef %1653, i1 noundef zeroext false)
          to label %1654 unwind label %225

1654:                                             ; preds = %1651
  store i1 true, ptr %5, align 1
  store i32 1, ptr %12, align 4
  br label %1655

1655:                                             ; preds = %1654, %212
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  br label %1660

1656:                                             ; preds = %1641, %1565, %1531, %1509, %1449, %1415, %1390, %1091, %527, %399, %358, %342, %332, %317, %308, %264, %225
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %1657

1657:                                             ; preds = %1656, %221
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %1658

1658:                                             ; preds = %1657, %217
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %1659

1659:                                             ; preds = %1658, %213
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  br label %1663

1660:                                             ; preds = %1655, %188
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #8
  br label %1661

1661:                                             ; preds = %1660, %146, %140, %132
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  %1662 = load i1, ptr %5, align 1
  ret i1 %1662

1663:                                             ; preds = %1659
  %1664 = load ptr, ptr %19, align 8
  %1665 = load i32, ptr %20, align 4
  %1666 = insertvalue { ptr, i32 } poison, ptr %1664, 0
  %1667 = insertvalue { ptr, i32 } %1666, i32 %1665, 1
  resume { ptr, i32 } %1667

1668:                                             ; preds = %1530, %1414, %1122, %1108, %668, %545, %357, %341, %331, %316
  unreachable
}

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #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) #4

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

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 }
attributes #10 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !25, i64 128}
!12 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !13, i64 0, !15, i64 12, !16, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !17, i64 32, !21, i64 88, !10, i64 120, !24, i64 124, !24, i64 125, !25, i64 128, !26, i64 136, !17, i64 192, !29, i64 248, !30, i64 272, !30, i64 276, !34, i64 280}
!13 = !{!"_ZTSN11spirv_cross8IVariantE", !14, i64 8}
!14 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!15 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!16 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!17 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !18, i64 0, !19, i64 16, !20, i64 24}
!18 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !19, i64 8}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!21 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !22, i64 0, !19, i64 16, !23, i64 24}
!22 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !19, i64 8}
!23 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!24 = !{!"bool", !7, i64 0}
!25 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!26 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !27, i64 0, !19, i64 16, !28, i64 24}
!27 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !19, i64 8}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !30, i64 0, !31, i64 4, !24, i64 8, !24, i64 9, !24, i64 10, !10, i64 12, !32, i64 16, !33, i64 20}
!30 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!31 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!32 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!33 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!34 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !35, i64 0}
!35 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!36 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!37 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !38, i64 0, !19, i64 8}
!38 = !{!"float", !7, i64 0}
!39 = !{!24, !24, i64 0}
!40 = !{i8 0, i8 2}
!41 = !{}
!42 = !{!12, !16, i64 16}
!43 = !{!44, !44, i64 0}
!44 = !{!"vtable pointer", !8, i64 0}
!45 = distinct !{!45, !46}
!46 = !{!"llvm.loop.mustprogress"}
!47 = !{!12, !10, i64 24}
!48 = distinct !{!48, !46}
!49 = distinct !{!49, !46}
!50 = !{!12, !10, i64 28}
!51 = distinct !{!51, !46}
!52 = distinct !{!52, !46}
!53 = distinct !{!53, !46}
!54 = distinct !{!54, !46}
!55 = distinct !{!55, !46}
!56 = distinct !{!56, !46}
!57 = distinct !{!57, !46}
!58 = distinct !{!58, !46}
!59 = distinct !{!59, !46}


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

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.927 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.928 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.929 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.930 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.931 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.932 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.933 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.934 = external hidden unnamed_addr constant [26 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj = external hidden unnamed_addr constant [87 x i8], align 1
@.str.935 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.936 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.937 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.938 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.939 = external hidden unnamed_addr constant [30 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

declare 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

; 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_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #2 align 2

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

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

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

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

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

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 dso_local noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 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 nounwind uwtable
declare dso_local noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; 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 void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) local_unnamed_addr #4

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

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

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

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

; 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

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

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

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 nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #0 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.spirv_cross::TypedID.413", align 4
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca [2 x i32], align 4
  %10 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca [2 x i32], align 4
  %17 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca [2 x i32], align 4
  %26 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca [2 x i32], align 4
  %35 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca [2 x i32], align 4
  %42 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca [2 x i32], align 4
  %53 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca [2 x i32], align 4
  %64 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3)
  %73 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %74 = getelementptr inbounds i8, ptr %72, i64 128
  %75 = load i32, ptr %74, align 8, !tbaa !5
  switch i32 %75, label %.thread617 [
    i32 3, label %76
    i32 1, label %78
  ]

76:                                               ; preds = %4
  %77 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %77, label %.thread617, label %78

78:                                               ; preds = %4, %76
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %5, i32 noundef %3)
  %79 = load i32, ptr %5, align 4
  %80 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %79, i32 noundef 15)
  br i1 %80, label %.thread617, label %81

81:                                               ; preds = %78
  %82 = getelementptr inbounds i8, ptr %0, i64 40
  %83 = zext i32 %3 to i64
  %84 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %82, i64 noundef %83) #8
  %85 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %84)
  %86 = icmp eq i32 %85, 2
  %87 = load i32, ptr %74, align 8, !tbaa !5
  %88 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %87)
  br i1 %88, label %89, label %.thread

89:                                               ; preds = %81
  %90 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %73)
  br i1 %90, label %97, label %91

91:                                               ; preds = %89
  %92 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %73)
  br i1 %92, label %97, label %93

93:                                               ; preds = %91
  %94 = getelementptr inbounds i8, ptr %73, i64 16
  %95 = load i32, ptr %94, align 8, !tbaa !37
  %96 = icmp eq i32 %95, 15
  br label %97

97:                                               ; preds = %89, %91, %93
  %98 = phi i1 [ true, %91 ], [ true, %89 ], [ %96, %93 ]
  br i1 %86, label %99, label %102

.thread:                                          ; preds = %81
  br i1 %86, label %99, label %.thread617

99:                                               ; preds = %.thread, %97
  %100 = phi i1 [ false, %.thread ], [ %98, %97 ]
  %101 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %73)
  %spec.select = select i1 %101, i1 true, i1 %100
  br i1 %spec.select, label %103, label %.thread617

102:                                              ; preds = %97
  br i1 %98, label %103, label %.thread617

103:                                              ; preds = %99, %102
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  %104 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3, i32 noundef 4)
          to label %105 unwind label %118

105:                                              ; preds = %103
  %106 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3)
          to label %107 unwind label %120

107:                                              ; preds = %105
  %108 = getelementptr inbounds i8, ptr %72, i64 8
  %109 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %108)
  %110 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %109)
          to label %111 unwind label %122

111:                                              ; preds = %107
  %112 = getelementptr inbounds i8, ptr %0, i64 11148
  %113 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %112)
  %114 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %113)
          to label %115 unwind label %124

115:                                              ; preds = %111
  br i1 %88, label %169, label %116

116:                                              ; preds = %115
  %117 = icmp eq i32 %104, -1
  br i1 %117, label %910, label %126

118:                                              ; preds = %103
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %911

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

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

124:                                              ; preds = %.invoke, %909, %907, %833, %770, %603, %195, %111
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %911

126:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #8
  %127 = load ptr, ptr %0, align 8, !tbaa !38
  %128 = getelementptr inbounds i8, ptr %127, i64 152
  %129 = load ptr, ptr %128, align 8
  invoke void %129(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %130 unwind label %141

130:                                              ; preds = %126
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str.927)
          to label %131 unwind label %143

131:                                              ; preds = %130
  %132 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %133 unwind label %145

133:                                              ; preds = %131
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  %134 = getelementptr inbounds i8, ptr %73, i64 32
  %135 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %134) #8
  %136 = trunc i64 %135 to i32
  %137 = add i32 %136, -1
  %138 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef %137)
          to label %.preheader482 unwind label %149

.preheader482:                                    ; preds = %133
  %.not588 = icmp eq i32 %138, 0
  br i1 %.not588, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader482
  %139 = getelementptr inbounds i8, ptr %9, i64 4
  br label %151

._crit_edge:                                      ; preds = %167, %.preheader482
  %140 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.928)
          to label %907 unwind label %149

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

143:                                              ; preds = %130
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %147

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

147:                                              ; preds = %145, %143
  %.pn = phi { ptr, i32 } [ %146, %145 ], [ %144, %143 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  br label %148

148:                                              ; preds = %147, %141
  %.pn.pn = phi { ptr, i32 } [ %.pn, %147 ], [ %142, %141 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  br label %911

149:                                              ; preds = %._crit_edge, %133
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %911

151:                                              ; preds = %.lr.ph, %167
  %.0320533 = phi i32 [ 0, %.lr.ph ], [ %156, %167 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  store i32 %.0320533, ptr %9, align 4, !tbaa !40
  store i32 %104, ptr %139, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %10) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #8
  %152 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %112)
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %152, ptr noundef nonnull %9, i32 noundef 2, i32 noundef 5, ptr noundef nonnull %10)
          to label %153 unwind label %160

153:                                              ; preds = %151
  %154 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %155 unwind label %162

155:                                              ; preds = %153
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  %156 = add nuw i32 %.0320533, 1
  %157 = icmp ult i32 %156, %138
  br i1 %157, label %158, label %167

158:                                              ; preds = %155
  %159 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %167 unwind label %165

160:                                              ; preds = %151
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %164

162:                                              ; preds = %153
  %163 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  br label %164

164:                                              ; preds = %162, %160
  %.pn352 = phi { ptr, i32 } [ %163, %162 ], [ %161, %160 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  br label %168

165:                                              ; preds = %158
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %168

167:                                              ; preds = %158, %155
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  %exitcond.not = icmp eq i32 %156, %138
  br i1 %exitcond.not, label %._crit_edge, label %151, !llvm.loop !41

168:                                              ; preds = %165, %164
  %.pn354 = phi { ptr, i32 } [ %166, %165 ], [ %.pn352, %164 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br label %911

169:                                              ; preds = %115
  %170 = getelementptr inbounds i8, ptr %73, i64 32
  %171 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %170) #8
  %172 = icmp ugt i64 %171, 2
  br i1 %172, label %173, label %177

173:                                              ; preds = %169
  %174 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %174, ptr noundef nonnull @.str.929)
          to label %.invoke unwind label %175

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

177:                                              ; preds = %169
  %178 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %170) #8
  %179 = icmp eq i64 %178, 2
  br i1 %179, label %180, label %288

180:                                              ; preds = %177
  br i1 %86, label %185, label %181

181:                                              ; preds = %180
  %182 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %182, ptr noundef nonnull @.str.930)
          to label %.invoke unwind label %183

183:                                              ; preds = %181
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %182) #8
  br label %911

185:                                              ; preds = %180
  %186 = icmp eq i32 %104, -1
  br i1 %186, label %187, label %191

187:                                              ; preds = %185
  %188 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %188, ptr noundef nonnull @.str.931)
          to label %.invoke unwind label %189

189:                                              ; preds = %187
  %190 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %188) #8
  br label %911

191:                                              ; preds = %185
  %192 = getelementptr inbounds i8, ptr %73, i64 16
  %193 = load i32, ptr %192, align 8, !tbaa !37
  %194 = icmp eq i32 %193, 15
  br i1 %194, label %198, label %195

195:                                              ; preds = %191
  %196 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %197 unwind label %124

197:                                              ; preds = %195
  br i1 %196, label %198, label %202

198:                                              ; preds = %197, %191
  %199 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %199, ptr noundef nonnull @.str.932)
          to label %.invoke unwind label %200

200:                                              ; preds = %198
  %201 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %199) #8
  br label %911

202:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #8
  %203 = load ptr, ptr %0, align 8, !tbaa !38
  %204 = getelementptr inbounds i8, ptr %203, i64 152
  %205 = load ptr, ptr %204, align 8
  invoke void %205(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %206 unwind label %220

206:                                              ; preds = %202
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.927)
          to label %207 unwind label %222

207:                                              ; preds = %206
  %208 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %209 unwind label %224

209:                                              ; preds = %207
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  %210 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 1)
          to label %211 unwind label %228

211:                                              ; preds = %209
  %212 = getelementptr inbounds i8, ptr %73, i64 276
  %213 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %212)
  %214 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %213)
          to label %.preheader476 unwind label %230

.preheader476:                                    ; preds = %211
  %.not598 = icmp eq i32 %210, 0
  br i1 %.not598, label %._crit_edge587, label %.lr.ph586

.lr.ph586:                                        ; preds = %.preheader476
  %215 = getelementptr inbounds i8, ptr %16, i64 4
  %216 = getelementptr inbounds i8, ptr %214, i64 16
  %217 = getelementptr inbounds i8, ptr %110, i64 24
  %218 = getelementptr inbounds i8, ptr %214, i64 24
  br label %232

._crit_edge587:                                   ; preds = %287, %.preheader476
  %219 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.928)
          to label %907 unwind label %230

220:                                              ; preds = %202
  %221 = landingpad { ptr, i32 }
          cleanup
  br label %227

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

224:                                              ; preds = %207
  %225 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  br label %226

226:                                              ; preds = %224, %222
  %.pn448 = phi { ptr, i32 } [ %225, %224 ], [ %223, %222 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  br label %227

227:                                              ; preds = %226, %220
  %.pn448.pn = phi { ptr, i32 } [ %.pn448, %226 ], [ %221, %220 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  br label %911

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

230:                                              ; preds = %._crit_edge587, %211
  %231 = landingpad { ptr, i32 }
          cleanup
  br label %911

232:                                              ; preds = %.lr.ph586, %287
  %.0322585 = phi i32 [ 0, %.lr.ph586 ], [ %283, %287 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #8
  %233 = load ptr, ptr %0, align 8, !tbaa !38
  %234 = getelementptr inbounds i8, ptr %233, i64 152
  %235 = load ptr, ptr %234, align 8
  invoke void %235(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %214, i32 noundef 0)
          to label %236 unwind label %242

236:                                              ; preds = %232
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull @.str.927)
          to label %237 unwind label %244

237:                                              ; preds = %236
  %238 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %239 unwind label %246

239:                                              ; preds = %237
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  %240 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %.preheader unwind label %250

.preheader:                                       ; preds = %239
  %.not599 = icmp eq i32 %240, 0
  br i1 %.not599, label %._crit_edge584, label %.lr.ph583

._crit_edge584:                                   ; preds = %279, %.preheader
  %241 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.928)
          to label %282 unwind label %250

242:                                              ; preds = %232
  %243 = landingpad { ptr, i32 }
          cleanup
  br label %249

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

246:                                              ; preds = %237
  %247 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  br label %248

248:                                              ; preds = %246, %244
  %.pn451 = phi { ptr, i32 } [ %247, %246 ], [ %245, %244 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  br label %249

249:                                              ; preds = %248, %242
  %.pn451.pn = phi { ptr, i32 } [ %.pn451, %248 ], [ %243, %242 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  br label %911

250:                                              ; preds = %285, %._crit_edge584, %239
  %251 = landingpad { ptr, i32 }
          cleanup
  br label %911

.lr.ph583:                                        ; preds = %.preheader, %279
  %.0224582 = phi i32 [ %280, %279 ], [ %104, %.preheader ]
  %.0323581 = phi i32 [ %275, %279 ], [ 0, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  store i32 %.0322585, ptr %16, align 4, !tbaa !40
  store i32 %.0224582, ptr %215, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %17) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #8
  %252 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %112)
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(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 %252, ptr noundef nonnull %16, i32 noundef 2, i32 noundef 5, ptr noundef nonnull %17)
          to label %253 unwind label %267

253:                                              ; preds = %.lr.ph583
  %254 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %255 unwind label %269

255:                                              ; preds = %253
  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
  %256 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %214)
          to label %257 unwind label %272

257:                                              ; preds = %255
  %258 = load i32, ptr %216, align 8
  %.not456 = icmp eq i32 %258, 15
  %or.cond = select i1 %256, i1 true, i1 %.not456
  br i1 %or.cond, label %274, label %259

259:                                              ; preds = %257
  %260 = load i32, ptr %217, align 8, !tbaa !43
  %261 = load i32, ptr %218, align 8, !tbaa !43
  %262 = icmp ugt i32 %260, %261
  br i1 %262, label %263, label %274

263:                                              ; preds = %259
  %264 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %261, i32 noundef 0)
          to label %265 unwind label %272

265:                                              ; preds = %263
  %266 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %264)
          to label %274 unwind label %272

267:                                              ; preds = %.lr.ph583
  %268 = landingpad { ptr, i32 }
          cleanup
  br label %271

269:                                              ; preds = %253
  %270 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  br label %271

271:                                              ; preds = %269, %267
  %.pn454 = phi { ptr, i32 } [ %270, %269 ], [ %268, %267 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  br label %281

272:                                              ; preds = %277, %265, %263, %255
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %281

274:                                              ; preds = %265, %259, %257
  %275 = add nuw i32 %.0323581, 1
  %276 = icmp ult i32 %275, %240
  br i1 %276, label %277, label %279

277:                                              ; preds = %274
  %278 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %279 unwind label %272

279:                                              ; preds = %277, %274
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  %280 = add i32 %.0224582, 1
  %exitcond610.not = icmp eq i32 %275, %240
  br i1 %exitcond610.not, label %._crit_edge584, label %.lr.ph583, !llvm.loop !44

281:                                              ; preds = %272, %271
  %.pn457 = phi { ptr, i32 } [ %273, %272 ], [ %.pn454, %271 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  br label %911

282:                                              ; preds = %._crit_edge584
  %283 = add nuw i32 %.0322585, 1
  %284 = icmp ult i32 %283, %210
  br i1 %284, label %285, label %287

285:                                              ; preds = %282
  %286 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %287 unwind label %250

287:                                              ; preds = %285, %282
  %exitcond611.not = icmp eq i32 %283, %210
  br i1 %exitcond611.not, label %._crit_edge587, label %232, !llvm.loop !45

288:                                              ; preds = %177
  %289 = getelementptr inbounds i8, ptr %73, i64 16
  %290 = load i32, ptr %289, align 8, !tbaa !37
  %291 = icmp eq i32 %290, 15
  br i1 %291, label %292, label %603

292:                                              ; preds = %288
  %293 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %294 unwind label %298

294:                                              ; preds = %292
  %.not = xor i1 %293, true
  %brmerge = or i1 %86, %.not
  br i1 %brmerge, label %302, label %295

295:                                              ; preds = %294
  %296 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %296, ptr noundef nonnull @.str.933)
          to label %297 unwind label %300

297:                                              ; preds = %295
  invoke void @__cxa_throw(ptr nonnull %296, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %912 unwind label %298

298:                                              ; preds = %297, %292
  %299 = landingpad { ptr, i32 }
          cleanup
  br label %911

300:                                              ; preds = %295
  %301 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %296) #8
  br label %911

302:                                              ; preds = %294
  br i1 %293, label %303, label %.thread618

303:                                              ; preds = %302
  %304 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %305 unwind label %312

305:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #8
  %306 = load ptr, ptr %0, align 8, !tbaa !38
  %307 = getelementptr inbounds i8, ptr %306, i64 152
  %308 = load ptr, ptr %307, align 8
  invoke void %308(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %309 unwind label %314

309:                                              ; preds = %305
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(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 @.str.927)
          to label %310 unwind label %316

310:                                              ; preds = %309
  %311 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %322 unwind label %318

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

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

316:                                              ; preds = %309
  %317 = landingpad { ptr, i32 }
          cleanup
  br label %320

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

320:                                              ; preds = %318, %316
  %.pn401 = phi { ptr, i32 } [ %319, %318 ], [ %317, %316 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  br label %321

321:                                              ; preds = %320, %314
  %.pn401.pn = phi { ptr, i32 } [ %.pn401, %320 ], [ %315, %314 ]
  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 %911

322:                                              ; preds = %310
  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) %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
  %323 = getelementptr inbounds i8, ptr %73, i64 276
  %324 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %323)
  %325 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %324)
          to label %326 unwind label %339

326:                                              ; preds = %322
  %327 = getelementptr inbounds i8, ptr %325, i64 32
  %328 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %327) #8
  br i1 %328, label %.preheader478, label %338

.thread618:                                       ; preds = %302
  %329 = getelementptr inbounds i8, ptr %73, i64 32
  %330 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %329) #8
  br i1 %330, label %.lr.ph579, label %338

.preheader478:                                    ; preds = %326
  %.not594 = icmp eq i32 %304, 0
  br i1 %.not594, label %._crit_edge580.thread, label %.lr.ph579

.lr.ph579:                                        ; preds = %.thread618, %.preheader478
  %.0326474620623 = phi i32 [ %304, %.preheader478 ], [ 1, %.thread618 ]
  %331 = phi ptr [ %325, %.preheader478 ], [ %73, %.thread618 ]
  %332 = getelementptr inbounds i8, ptr %331, i64 136
  %.not407 = icmp eq ptr %106, null
  %333 = getelementptr inbounds i8, ptr %106, i64 8
  %334 = getelementptr inbounds i8, ptr %110, i64 136
  %335 = getelementptr inbounds i8, ptr %41, i64 4
  %336 = getelementptr inbounds i8, ptr %34, i64 4
  %337 = getelementptr inbounds i8, ptr %25, i64 4
  br label %341

338:                                              ; preds = %.thread618, %326
  call void @__assert_fail(ptr noundef nonnull @.str.934, ptr noundef nonnull @.str.25, i32 noundef 8255, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

339:                                              ; preds = %._crit_edge580.thread, %322
  %340 = landingpad { ptr, i32 }
          cleanup
  br label %911

._crit_edge580:                                   ; preds = %601
  br i1 %293, label %._crit_edge580.thread, label %907

341:                                              ; preds = %.lr.ph579, %601
  %.1225578 = phi i32 [ %104, %.lr.ph579 ], [ %.2226.lcssa, %601 ]
  %.0325577 = phi i32 [ 0, %.lr.ph579 ], [ %595, %601 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #8
  %342 = load ptr, ptr %0, align 8, !tbaa !38
  %343 = getelementptr inbounds i8, ptr %342, i64 152
  %344 = load ptr, ptr %343, align 8
  invoke void %344(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %331, i32 noundef 0)
          to label %345 unwind label %352

345:                                              ; preds = %341
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull @.str.935)
          to label %346 unwind label %354

346:                                              ; preds = %345
  %347 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %348 unwind label %356

348:                                              ; preds = %346
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #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
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  %349 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %332) #8
  %350 = and i64 %349, 4294967295
  %.not595 = icmp eq i64 %350, 0
  br i1 %.not595, label %._crit_edge575, label %.lr.ph574

._crit_edge575:                                   ; preds = %590, %348
  %.2226.lcssa = phi i32 [ %.1225578, %348 ], [ %.6, %590 ]
  %351 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.936)
          to label %594 unwind label %599

352:                                              ; preds = %341
  %353 = landingpad { ptr, i32 }
          cleanup
  br label %359

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

356:                                              ; preds = %346
  %357 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  br label %358

358:                                              ; preds = %356, %354
  %.pn404 = phi { ptr, i32 } [ %357, %356 ], [ %355, %354 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %359

359:                                              ; preds = %358, %352
  %.pn404.pn = phi { ptr, i32 } [ %.pn404, %358 ], [ %353, %352 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  br label %911

.lr.ph574:                                        ; preds = %348, %590
  %indvars.iv = phi i64 [ %indvars.iv.next, %590 ], [ 0, %348 ]
  %.2226572 = phi i32 [ %.6, %590 ], [ %.1225578, %348 ]
  br i1 %.not407, label %364, label %360

360:                                              ; preds = %.lr.ph574
  %361 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %333)
  %362 = trunc nuw i64 %indvars.iv to i32
  %363 = invoke noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %361, i32 noundef %362, i32 noundef 4)
          to label %364 unwind label %.loopexit

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

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

364:                                              ; preds = %360, %.lr.ph574
  %.3 = phi i32 [ %.2226572, %.lr.ph574 ], [ %363, %360 ]
  %365 = icmp eq i32 %.3, -1
  br i1 %365, label %366, label %371

366:                                              ; preds = %364
  %367 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %367, ptr noundef nonnull @.str.931)
          to label %368 unwind label %369

368:                                              ; preds = %366
  invoke void @__cxa_throw(ptr nonnull %367, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %912 unwind label %.loopexit.split-lp

369:                                              ; preds = %366
  %370 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %367) #8
  br label %911

371:                                              ; preds = %364
  %372 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %332, i64 noundef %indvars.iv) #8
  %373 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %372)
  %374 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %373)
          to label %375 unwind label %397

375:                                              ; preds = %371
  %376 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %334, i64 noundef %indvars.iv) #8
  %377 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %376)
  %378 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %377)
          to label %379 unwind label %399

379:                                              ; preds = %375
  %380 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %374)
          to label %381 unwind label %399

381:                                              ; preds = %379
  %382 = load i32, ptr %74, align 8
  %383 = icmp eq i32 %382, 1
  %or.cond470 = select i1 %380, i1 %383, i1 false
  br i1 %or.cond470, label %384, label %461

384:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #8
  %385 = load ptr, ptr %0, align 8, !tbaa !38
  %386 = getelementptr inbounds i8, ptr %385, i64 152
  %387 = load ptr, ptr %386, align 8
  invoke void %387(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %374, i32 noundef 0)
          to label %388 unwind label %401

388:                                              ; preds = %384
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull @.str.58)
          to label %389 unwind label %403

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

391:                                              ; preds = %389
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  %392 = getelementptr inbounds i8, ptr %374, i64 28
  %393 = load i32, ptr %392, align 4, !tbaa !46
  %.not597 = icmp eq i32 %393, 0
  br i1 %.not597, label %._crit_edge569, label %.lr.ph568

.lr.ph568:                                        ; preds = %391
  %394 = getelementptr inbounds i8, ptr %378, i64 24
  %395 = getelementptr inbounds i8, ptr %374, i64 24
  br label %409

._crit_edge569:                                   ; preds = %457, %391
  %.4.lcssa = phi i32 [ %.3, %391 ], [ %459, %457 ]
  %396 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.53)
          to label %585 unwind label %399

397:                                              ; preds = %371
  %398 = landingpad { ptr, i32 }
          cleanup
  br label %911

399:                                              ; preds = %588, %583, %581, %461, %._crit_edge569, %379, %375
  %400 = landingpad { ptr, i32 }
          cleanup
  br label %911

401:                                              ; preds = %384
  %402 = landingpad { ptr, i32 }
          cleanup
  br label %408

403:                                              ; preds = %388
  %404 = landingpad { ptr, i32 }
          cleanup
  br label %407

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

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

408:                                              ; preds = %407, %401
  %.pn428.pn = phi { ptr, i32 } [ %.pn428, %407 ], [ %402, %401 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  br label %911

409:                                              ; preds = %.lr.ph568, %457
  %.4566 = phi i32 [ %.3, %.lr.ph568 ], [ %459, %457 ]
  %.0321565 = phi i32 [ 0, %.lr.ph568 ], [ %452, %457 ]
  br i1 %293, label %410, label %420

410:                                              ; preds = %409
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #8
  store i32 %.0325577, ptr %25, align 4, !tbaa !40
  store i32 %.4566, ptr %337, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %26) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #8
  %411 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %112)
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %411, ptr noundef nonnull %25, i32 noundef 2, i32 noundef 5, ptr noundef nonnull %26)
          to label %412 unwind label %415

412:                                              ; preds = %410
  %413 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %414 unwind label %417

414:                                              ; preds = %412
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #8
  br label %441

415:                                              ; preds = %410
  %416 = landingpad { ptr, i32 }
          cleanup
  br label %419

417:                                              ; preds = %412
  %418 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  br label %419

419:                                              ; preds = %417, %415
  %.pn436 = phi { ptr, i32 } [ %418, %417 ], [ %416, %415 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #8
  br label %911

420:                                              ; preds = %409
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3, i1 noundef zeroext true)
          to label %421 unwind label %427

421:                                              ; preds = %420
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull @.str.66)
          to label %422 unwind label %429

422:                                              ; preds = %421
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %114, i32 noundef %.4566)
          to label %423 unwind label %431

423:                                              ; preds = %422
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %424 unwind label %433

424:                                              ; preds = %423
  %425 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %426 unwind label %435

426:                                              ; preds = %424
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  br label %441

427:                                              ; preds = %420
  %428 = landingpad { ptr, i32 }
          cleanup
  br label %440

429:                                              ; preds = %421
  %430 = landingpad { ptr, i32 }
          cleanup
  br label %439

431:                                              ; preds = %422
  %432 = landingpad { ptr, i32 }
          cleanup
  br label %438

433:                                              ; preds = %423
  %434 = landingpad { ptr, i32 }
          cleanup
  br label %437

435:                                              ; preds = %424
  %436 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  br label %437

437:                                              ; preds = %435, %433
  %.pn431 = phi { ptr, i32 } [ %436, %435 ], [ %434, %433 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  br label %438

438:                                              ; preds = %437, %431
  %.pn431.pn = phi { ptr, i32 } [ %.pn431, %437 ], [ %432, %431 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %439

439:                                              ; preds = %438, %429
  %.pn431.pn.pn = phi { ptr, i32 } [ %.pn431.pn, %438 ], [ %430, %429 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %440

440:                                              ; preds = %439, %427
  %.pn431.pn.pn.pn = phi { ptr, i32 } [ %.pn431.pn.pn, %439 ], [ %428, %427 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  br label %911

441:                                              ; preds = %426, %414
  %442 = load i32, ptr %394, align 8, !tbaa !43
  %443 = load i32, ptr %395, align 8, !tbaa !43
  %444 = icmp ugt i32 %442, %443
  br i1 %444, label %445, label %451

445:                                              ; preds = %441
  %446 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %443, i32 noundef 0)
          to label %447 unwind label %449

447:                                              ; preds = %445
  %448 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %446)
          to label %451 unwind label %449

449:                                              ; preds = %455, %447, %445
  %450 = landingpad { ptr, i32 }
          cleanup
  br label %911

451:                                              ; preds = %447, %441
  %452 = add nuw i32 %.0321565, 1
  %453 = load i32, ptr %392, align 4, !tbaa !46
  %454 = icmp ult i32 %452, %453
  br i1 %454, label %455, label %457

455:                                              ; preds = %451
  %456 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %._crit_edge615 unwind label %449

._crit_edge615:                                   ; preds = %455
  %.pre616 = load i32, ptr %392, align 4, !tbaa !46
  br label %457

457:                                              ; preds = %._crit_edge615, %451
  %458 = phi i32 [ %.pre616, %._crit_edge615 ], [ %453, %451 ]
  %459 = add i32 %.4566, 1
  %460 = icmp ult i32 %452, %458
  br i1 %460, label %409, label %._crit_edge569, !llvm.loop !47

461:                                              ; preds = %381
  %462 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %374)
          to label %463 unwind label %399

463:                                              ; preds = %461
  br i1 %462, label %464, label %543

464:                                              ; preds = %463
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #8
  %465 = load ptr, ptr %0, align 8, !tbaa !38
  %466 = getelementptr inbounds i8, ptr %465, i64 152
  %467 = load ptr, ptr %466, align 8
  invoke void %467(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %374, i32 noundef 0)
          to label %468 unwind label %497

468:                                              ; preds = %464
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull @.str.927)
          to label %469 unwind label %499

469:                                              ; preds = %468
  %470 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %471 unwind label %501

471:                                              ; preds = %469
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #8
  %472 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %374, i32 noundef 0)
          to label %.preheader477 unwind label %505

.preheader477:                                    ; preds = %471
  %.not596 = icmp eq i32 %472, 0
  br i1 %.not596, label %._crit_edge557, label %.lr.ph556

.lr.ph556:                                        ; preds = %.preheader477
  %473 = getelementptr inbounds i8, ptr %378, i64 24
  %474 = getelementptr inbounds i8, ptr %374, i64 24
  br i1 %293, label %.lr.ph556.split.us, label %.lr.ph556.split

.lr.ph556.split.us:                               ; preds = %.lr.ph556, %491
  %.5555.us = phi i32 [ %492, %491 ], [ %.3, %.lr.ph556 ]
  %.0319554.us = phi i32 [ %487, %491 ], [ 0, %.lr.ph556 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #8
  store i32 %.0325577, ptr %34, align 4, !tbaa !40
  store i32 %.5555.us, ptr %336, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %35) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #8
  %475 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %112)
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %475, ptr noundef nonnull %34, i32 noundef 2, i32 noundef 5, ptr noundef nonnull %35)
          to label %476 unwind label %.split.us

476:                                              ; preds = %.lr.ph556.split.us
  %477 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %478 unwind label %.split559.us

478:                                              ; preds = %476
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #8
  %479 = load i32, ptr %473, align 8, !tbaa !43
  %480 = load i32, ptr %474, align 8, !tbaa !43
  %481 = icmp ugt i32 %479, %480
  br i1 %481, label %482, label %486

482:                                              ; preds = %478
  %483 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %480, i32 noundef 0)
          to label %484 unwind label %.split562.us

484:                                              ; preds = %482
  %485 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %483)
          to label %486 unwind label %.split562.us

486:                                              ; preds = %484, %478
  %487 = add nuw i32 %.0319554.us, 1
  %488 = icmp ult i32 %487, %472
  br i1 %488, label %489, label %491

489:                                              ; preds = %486
  %490 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %491 unwind label %.split562.us

491:                                              ; preds = %489, %486
  %492 = add i32 %.5555.us, 1
  %exitcond607.not = icmp eq i32 %487, %472
  br i1 %exitcond607.not, label %._crit_edge557, label %.lr.ph556.split.us, !llvm.loop !48

.split.us:                                        ; preds = %.lr.ph556.split.us
  %493 = landingpad { ptr, i32 }
          cleanup
  br label %507

.split559.us:                                     ; preds = %476
  %494 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  br label %507

.split562.us:                                     ; preds = %489, %484, %482
  %495 = landingpad { ptr, i32 }
          cleanup
  br label %911

._crit_edge557:                                   ; preds = %541, %491, %.preheader477
  %.5.lcssa = phi i32 [ %.3, %.preheader477 ], [ %492, %491 ], [ %542, %541 ]
  %496 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.928)
          to label %585 unwind label %505

497:                                              ; preds = %464
  %498 = landingpad { ptr, i32 }
          cleanup
  br label %504

499:                                              ; preds = %468
  %500 = landingpad { ptr, i32 }
          cleanup
  br label %503

501:                                              ; preds = %469
  %502 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %503

503:                                              ; preds = %501, %499
  %.pn415 = phi { ptr, i32 } [ %502, %501 ], [ %500, %499 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  br label %504

504:                                              ; preds = %503, %497
  %.pn415.pn = phi { ptr, i32 } [ %.pn415, %503 ], [ %498, %497 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #8
  br label %911

505:                                              ; preds = %._crit_edge557, %471
  %506 = landingpad { ptr, i32 }
          cleanup
  br label %911

.lr.ph556.split:                                  ; preds = %.lr.ph556, %541
  %.5555 = phi i32 [ %542, %541 ], [ %.3, %.lr.ph556 ]
  %.0319554 = phi i32 [ %537, %541 ], [ 0, %.lr.ph556 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3, i1 noundef zeroext true)
          to label %508 unwind label %517

507:                                              ; preds = %.split559.us, %.split.us
  %.pn423 = phi { ptr, i32 } [ %494, %.split559.us ], [ %493, %.split.us ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #8
  br label %911

508:                                              ; preds = %.lr.ph556.split
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull @.str.66)
          to label %509 unwind label %519

509:                                              ; preds = %508
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %114, i32 noundef %.5555)
          to label %510 unwind label %521

510:                                              ; preds = %509
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(32) %40)
          to label %511 unwind label %523

511:                                              ; preds = %510
  %512 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %513 unwind label %525

513:                                              ; preds = %511
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  %514 = load i32, ptr %473, align 8, !tbaa !43
  %515 = load i32, ptr %474, align 8, !tbaa !43
  %516 = icmp ugt i32 %514, %515
  br i1 %516, label %531, label %536

517:                                              ; preds = %.lr.ph556.split
  %518 = landingpad { ptr, i32 }
          cleanup
  br label %530

519:                                              ; preds = %508
  %520 = landingpad { ptr, i32 }
          cleanup
  br label %529

521:                                              ; preds = %509
  %522 = landingpad { ptr, i32 }
          cleanup
  br label %528

523:                                              ; preds = %510
  %524 = landingpad { ptr, i32 }
          cleanup
  br label %527

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

527:                                              ; preds = %525, %523
  %.pn418 = phi { ptr, i32 } [ %526, %525 ], [ %524, %523 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  br label %528

528:                                              ; preds = %527, %521
  %.pn418.pn = phi { ptr, i32 } [ %.pn418, %527 ], [ %522, %521 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %529

529:                                              ; preds = %528, %519
  %.pn418.pn.pn = phi { ptr, i32 } [ %.pn418.pn, %528 ], [ %520, %519 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br label %530

530:                                              ; preds = %529, %517
  %.pn418.pn.pn.pn = phi { ptr, i32 } [ %.pn418.pn.pn, %529 ], [ %518, %517 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  br label %911

531:                                              ; preds = %513
  %532 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %515, i32 noundef 0)
          to label %533 unwind label %.split562

533:                                              ; preds = %531
  %534 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %532)
          to label %536 unwind label %.split562

.split562:                                        ; preds = %539, %533, %531
  %535 = landingpad { ptr, i32 }
          cleanup
  br label %911

536:                                              ; preds = %533, %513
  %537 = add nuw i32 %.0319554, 1
  %538 = icmp ult i32 %537, %472
  br i1 %538, label %539, label %541

539:                                              ; preds = %536
  %540 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %541 unwind label %.split562

541:                                              ; preds = %536, %539
  %542 = add i32 %.5555, 1
  %exitcond606.not = icmp eq i32 %537, %472
  br i1 %exitcond606.not, label %._crit_edge557, label %.lr.ph556.split, !llvm.loop !48

543:                                              ; preds = %463
  br i1 %293, label %544, label %554

544:                                              ; preds = %543
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #8
  store i32 %.0325577, ptr %41, align 4, !tbaa !40
  store i32 %.3, ptr %335, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %42) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %42) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #8
  %545 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %112)
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %545, ptr noundef nonnull %41, i32 noundef 2, i32 noundef 5, ptr noundef nonnull %42)
          to label %546 unwind label %549

546:                                              ; preds = %544
  %547 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %548 unwind label %551

548:                                              ; preds = %546
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  br label %575

549:                                              ; preds = %544
  %550 = landingpad { ptr, i32 }
          cleanup
  br label %553

551:                                              ; preds = %546
  %552 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  br label %553

553:                                              ; preds = %551, %549
  %.pn413 = phi { ptr, i32 } [ %552, %551 ], [ %550, %549 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  br label %911

554:                                              ; preds = %543
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3, i1 noundef zeroext true)
          to label %555 unwind label %561

555:                                              ; preds = %554
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull @.str.66)
          to label %556 unwind label %563

556:                                              ; preds = %555
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %114, i32 noundef %.3)
          to label %557 unwind label %565

557:                                              ; preds = %556
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %558 unwind label %567

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

560:                                              ; preds = %558
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #8
  br label %575

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

563:                                              ; preds = %555
  %564 = landingpad { ptr, i32 }
          cleanup
  br label %573

565:                                              ; preds = %556
  %566 = landingpad { ptr, i32 }
          cleanup
  br label %572

567:                                              ; preds = %557
  %568 = landingpad { ptr, i32 }
          cleanup
  br label %571

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

571:                                              ; preds = %569, %567
  %.pn408 = phi { ptr, i32 } [ %570, %569 ], [ %568, %567 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %572

572:                                              ; preds = %571, %565
  %.pn408.pn = phi { ptr, i32 } [ %.pn408, %571 ], [ %566, %565 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  br label %573

573:                                              ; preds = %572, %563
  %.pn408.pn.pn = phi { ptr, i32 } [ %.pn408.pn, %572 ], [ %564, %563 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  br label %574

574:                                              ; preds = %573, %561
  %.pn408.pn.pn.pn = phi { ptr, i32 } [ %.pn408.pn.pn, %573 ], [ %562, %561 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #8
  br label %911

575:                                              ; preds = %560, %548
  %576 = getelementptr inbounds i8, ptr %378, i64 24
  %577 = load i32, ptr %576, align 8, !tbaa !43
  %578 = getelementptr inbounds i8, ptr %374, i64 24
  %579 = load i32, ptr %578, align 8, !tbaa !43
  %580 = icmp ugt i32 %577, %579
  br i1 %580, label %581, label %585

581:                                              ; preds = %575
  %582 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %579, i32 noundef 0)
          to label %583 unwind label %399

583:                                              ; preds = %581
  %584 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %582)
          to label %585 unwind label %399

585:                                              ; preds = %._crit_edge557, %583, %575, %._crit_edge569
  %.6 = phi i32 [ %.4.lcssa, %._crit_edge569 ], [ %.3, %583 ], [ %.3, %575 ], [ %.5.lcssa, %._crit_edge557 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %586 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %332) #8
  %587 = icmp ugt i64 %586, %indvars.iv.next
  br i1 %587, label %588, label %590

588:                                              ; preds = %585
  %589 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %590 unwind label %399

590:                                              ; preds = %588, %585
  %591 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %332) #8
  %592 = and i64 %591, 4294967295
  %593 = icmp ult i64 %indvars.iv.next, %592
  br i1 %593, label %.lr.ph574, label %._crit_edge575, !llvm.loop !49

594:                                              ; preds = %._crit_edge575
  %595 = add nuw i32 %.0325577, 1
  %596 = icmp ult i32 %595, %.0326474620623
  br i1 %596, label %597, label %601

597:                                              ; preds = %594
  %598 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %601 unwind label %599

599:                                              ; preds = %597, %._crit_edge575
  %600 = landingpad { ptr, i32 }
          cleanup
  br label %911

601:                                              ; preds = %594, %597
  %exitcond609.not = icmp eq i32 %595, %.0326474620623
  br i1 %exitcond609.not, label %._crit_edge580, label %341, !llvm.loop !50

._crit_edge580.thread:                            ; preds = %.preheader478, %._crit_edge580
  %602 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.928)
          to label %907 unwind label %339

603:                                              ; preds = %288
  %604 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %605 unwind label %124

605:                                              ; preds = %603
  br i1 %604, label %606, label %769

606:                                              ; preds = %605
  %607 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %608 unwind label %611

608:                                              ; preds = %606
  %.not471 = xor i1 %607, true
  %brmerge472 = or i1 %86, %.not471
  br i1 %brmerge472, label %615, label %609

609:                                              ; preds = %608
  %610 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %610, ptr noundef nonnull @.str.937)
          to label %.invoke627 unwind label %613

611:                                              ; preds = %.invoke627, %._crit_edge545, %606
  %612 = landingpad { ptr, i32 }
          cleanup
  br label %911

613:                                              ; preds = %609
  %614 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %610) #8
  br label %911

615:                                              ; preds = %608
  %616 = icmp eq i32 %104, -1
  br i1 %616, label %617, label %622

617:                                              ; preds = %615
  %618 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %618, ptr noundef nonnull @.str.931)
          to label %.invoke627 unwind label %620

.invoke627:                                       ; preds = %609, %617
  %619 = phi ptr [ %618, %617 ], [ %610, %609 ]
  invoke void @__cxa_throw(ptr nonnull %619, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %.cont628 unwind label %611

.cont628:                                         ; preds = %.invoke627
  unreachable

620:                                              ; preds = %617
  %621 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %618) #8
  br label %911

622:                                              ; preds = %615
  br i1 %607, label %623, label %708

623:                                              ; preds = %622
  %624 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %625 unwind label %641

625:                                              ; preds = %623
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #8
  %626 = load ptr, ptr %0, align 8, !tbaa !38
  %627 = getelementptr inbounds i8, ptr %626, i64 152
  %628 = load ptr, ptr %627, align 8
  invoke void %628(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %629 unwind label %643

629:                                              ; preds = %625
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull @.str.927)
          to label %630 unwind label %645

630:                                              ; preds = %629
  %631 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %632 unwind label %647

632:                                              ; preds = %630
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  %633 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3)
          to label %634 unwind label %651

634:                                              ; preds = %632
  %635 = 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) %633)
          to label %.preheader479 unwind label %651

.preheader479:                                    ; preds = %634
  %.not592 = icmp eq i32 %624, 0
  br i1 %.not592, label %._crit_edge553, label %.lr.ph552

.lr.ph552:                                        ; preds = %.preheader479
  %636 = getelementptr inbounds i8, ptr %73, i64 28
  %637 = getelementptr inbounds i8, ptr %52, i64 4
  %638 = getelementptr inbounds i8, ptr %110, i64 24
  %639 = getelementptr inbounds i8, ptr %73, i64 24
  br label %653

._crit_edge553:                                   ; preds = %707, %.preheader479
  %640 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.928)
          to label %907 unwind label %651

641:                                              ; preds = %623
  %642 = landingpad { ptr, i32 }
          cleanup
  br label %911

643:                                              ; preds = %625
  %644 = landingpad { ptr, i32 }
          cleanup
  br label %650

645:                                              ; preds = %629
  %646 = landingpad { ptr, i32 }
          cleanup
  br label %649

647:                                              ; preds = %630
  %648 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %649

649:                                              ; preds = %647, %645
  %.pn386 = phi { ptr, i32 } [ %648, %647 ], [ %646, %645 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  br label %650

650:                                              ; preds = %649, %643
  %.pn386.pn = phi { ptr, i32 } [ %.pn386, %649 ], [ %644, %643 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  br label %911

651:                                              ; preds = %._crit_edge553, %634, %632
  %652 = landingpad { ptr, i32 }
          cleanup
  br label %911

653:                                              ; preds = %.lr.ph552, %707
  %.0222551 = phi i32 [ 0, %.lr.ph552 ], [ %701, %707 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #8
  %654 = load ptr, ptr %0, align 8, !tbaa !38
  %655 = getelementptr inbounds i8, ptr %654, i64 152
  %656 = load ptr, ptr %655, align 8
  invoke void %656(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %635, i32 noundef 0)
          to label %657 unwind label %663

657:                                              ; preds = %653
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull @.str.58)
          to label %658 unwind label %665

658:                                              ; preds = %657
  %659 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %660 unwind label %667

660:                                              ; preds = %658
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #8
  %661 = load i32, ptr %636, align 4, !tbaa !46
  %.not593 = icmp eq i32 %661, 0
  br i1 %.not593, label %._crit_edge550, label %.lr.ph549

._crit_edge550:                                   ; preds = %695, %660
  %662 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.53)
          to label %700 unwind label %705

663:                                              ; preds = %653
  %664 = landingpad { ptr, i32 }
          cleanup
  br label %670

665:                                              ; preds = %657
  %666 = landingpad { ptr, i32 }
          cleanup
  br label %669

667:                                              ; preds = %658
  %668 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  br label %669

669:                                              ; preds = %667, %665
  %.pn389 = phi { ptr, i32 } [ %668, %667 ], [ %666, %665 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  br label %670

670:                                              ; preds = %669, %663
  %.pn389.pn = phi { ptr, i32 } [ %.pn389, %669 ], [ %664, %663 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #8
  br label %911

.lr.ph549:                                        ; preds = %660, %695
  %.0221547 = phi i32 [ %690, %695 ], [ 0, %660 ]
  %.7546 = phi i32 [ %697, %695 ], [ %104, %660 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #8
  store i32 %.0222551, ptr %52, align 4, !tbaa !40
  store i32 %.7546, ptr %637, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %53) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %53) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #8
  %671 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %112)
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %671, ptr noundef nonnull %52, i32 noundef 2, i32 noundef 5, ptr noundef nonnull %53)
          to label %672 unwind label %682

672:                                              ; preds = %.lr.ph549
  %673 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %674 unwind label %684

674:                                              ; preds = %672
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #8
  %675 = load i32, ptr %638, align 8, !tbaa !43
  %676 = load i32, ptr %639, align 8, !tbaa !43
  %677 = icmp ugt i32 %675, %676
  br i1 %677, label %678, label %689

678:                                              ; preds = %674
  %679 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %676, i32 noundef 0)
          to label %680 unwind label %687

680:                                              ; preds = %678
  %681 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %679)
          to label %689 unwind label %687

682:                                              ; preds = %.lr.ph549
  %683 = landingpad { ptr, i32 }
          cleanup
  br label %686

684:                                              ; preds = %672
  %685 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  br label %686

686:                                              ; preds = %684, %682
  %.pn392 = phi { ptr, i32 } [ %685, %684 ], [ %683, %682 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #8
  br label %699

687:                                              ; preds = %693, %680, %678
  %688 = landingpad { ptr, i32 }
          cleanup
  br label %699

689:                                              ; preds = %680, %674
  %690 = add nuw i32 %.0221547, 1
  %691 = load i32, ptr %636, align 4, !tbaa !46
  %692 = icmp ult i32 %690, %691
  br i1 %692, label %693, label %695

693:                                              ; preds = %689
  %694 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %._crit_edge613 unwind label %687

._crit_edge613:                                   ; preds = %693
  %.pre614 = load i32, ptr %636, align 4, !tbaa !46
  br label %695

695:                                              ; preds = %._crit_edge613, %689
  %696 = phi i32 [ %.pre614, %._crit_edge613 ], [ %691, %689 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #8
  %697 = add i32 %.7546, 1
  %698 = icmp ult i32 %690, %696
  br i1 %698, label %.lr.ph549, label %._crit_edge550, !llvm.loop !51

699:                                              ; preds = %687, %686
  %.pn394 = phi { ptr, i32 } [ %688, %687 ], [ %.pn392, %686 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #8
  br label %911

700:                                              ; preds = %._crit_edge550
  %701 = add nuw i32 %.0222551, 1
  %702 = icmp ult i32 %701, %624
  br i1 %702, label %703, label %707

703:                                              ; preds = %700
  %704 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %707 unwind label %705

705:                                              ; preds = %703, %._crit_edge550
  %706 = landingpad { ptr, i32 }
          cleanup
  br label %911

707:                                              ; preds = %700, %703
  %exitcond605.not = icmp eq i32 %701, %624
  br i1 %exitcond605.not, label %._crit_edge553, label %653, !llvm.loop !52

708:                                              ; preds = %622
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #8
  %709 = load ptr, ptr %0, align 8, !tbaa !38
  %710 = getelementptr inbounds i8, ptr %709, i64 152
  %711 = load ptr, ptr %710, align 8
  invoke void %711(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %712 unwind label %721

712:                                              ; preds = %708
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull @.str.58)
          to label %713 unwind label %723

713:                                              ; preds = %712
  %714 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %715 unwind label %725

715:                                              ; preds = %713
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #8
  %716 = getelementptr inbounds i8, ptr %73, i64 28
  %717 = load i32, ptr %716, align 4, !tbaa !46
  %.not591 = icmp eq i32 %717, 0
  br i1 %.not591, label %._crit_edge545, label %.lr.ph544

.lr.ph544:                                        ; preds = %715
  %718 = getelementptr inbounds i8, ptr %110, i64 24
  %719 = getelementptr inbounds i8, ptr %73, i64 24
  br label %729

._crit_edge545:                                   ; preds = %765, %715
  %720 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.53)
          to label %907 unwind label %611

721:                                              ; preds = %708
  %722 = landingpad { ptr, i32 }
          cleanup
  br label %728

723:                                              ; preds = %712
  %724 = landingpad { ptr, i32 }
          cleanup
  br label %727

725:                                              ; preds = %713
  %726 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  br label %727

727:                                              ; preds = %725, %723
  %.pn376 = phi { ptr, i32 } [ %726, %725 ], [ %724, %723 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  br label %728

728:                                              ; preds = %727, %721
  %.pn376.pn = phi { ptr, i32 } [ %.pn376, %727 ], [ %722, %721 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #8
  br label %911

729:                                              ; preds = %.lr.ph544, %765
  %.0220542 = phi i32 [ 0, %.lr.ph544 ], [ %760, %765 ]
  %.8541 = phi i32 [ %104, %.lr.ph544 ], [ %767, %765 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3, i1 noundef zeroext true)
          to label %730 unwind label %743

730:                                              ; preds = %729
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull @.str.66)
          to label %731 unwind label %745

731:                                              ; preds = %730
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %114, i32 noundef %.8541)
          to label %732 unwind label %747

732:                                              ; preds = %731
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %733 unwind label %749

733:                                              ; preds = %732
  %734 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %735 unwind label %751

735:                                              ; preds = %733
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  %736 = load i32, ptr %718, align 8, !tbaa !43
  %737 = load i32, ptr %719, align 8, !tbaa !43
  %738 = icmp ugt i32 %736, %737
  br i1 %738, label %739, label %759

739:                                              ; preds = %735
  %740 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %737, i32 noundef 0)
          to label %741 unwind label %757

741:                                              ; preds = %739
  %742 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %740)
          to label %759 unwind label %757

743:                                              ; preds = %729
  %744 = landingpad { ptr, i32 }
          cleanup
  br label %756

745:                                              ; preds = %730
  %746 = landingpad { ptr, i32 }
          cleanup
  br label %755

747:                                              ; preds = %731
  %748 = landingpad { ptr, i32 }
          cleanup
  br label %754

749:                                              ; preds = %732
  %750 = landingpad { ptr, i32 }
          cleanup
  br label %753

751:                                              ; preds = %733
  %752 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  br label %753

753:                                              ; preds = %751, %749
  %.pn379 = phi { ptr, i32 } [ %752, %751 ], [ %750, %749 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %754

754:                                              ; preds = %753, %747
  %.pn379.pn = phi { ptr, i32 } [ %.pn379, %753 ], [ %748, %747 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  br label %755

755:                                              ; preds = %754, %745
  %.pn379.pn.pn = phi { ptr, i32 } [ %.pn379.pn, %754 ], [ %746, %745 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %756

756:                                              ; preds = %755, %743
  %.pn379.pn.pn.pn = phi { ptr, i32 } [ %.pn379.pn.pn, %755 ], [ %744, %743 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  br label %911

757:                                              ; preds = %763, %741, %739
  %758 = landingpad { ptr, i32 }
          cleanup
  br label %911

759:                                              ; preds = %741, %735
  %760 = add nuw i32 %.0220542, 1
  %761 = load i32, ptr %716, align 4, !tbaa !46
  %762 = icmp ult i32 %760, %761
  br i1 %762, label %763, label %765

763:                                              ; preds = %759
  %764 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %._crit_edge612 unwind label %757

._crit_edge612:                                   ; preds = %763
  %.pre = load i32, ptr %716, align 4, !tbaa !46
  br label %765

765:                                              ; preds = %._crit_edge612, %759
  %766 = phi i32 [ %.pre, %._crit_edge612 ], [ %761, %759 ]
  %767 = add i32 %.8541, 1
  %768 = icmp ult i32 %760, %766
  br i1 %768, label %729, label %._crit_edge545, !llvm.loop !53

769:                                              ; preds = %605
  br i1 %86, label %770, label %833

770:                                              ; preds = %769
  %771 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %772 unwind label %124

772:                                              ; preds = %770
  br i1 %771, label %774, label %773

773:                                              ; preds = %772
  call void @__assert_fail(ptr noundef nonnull @.str.938, ptr noundef nonnull @.str.25, i32 noundef 8403, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

774:                                              ; preds = %772
  %775 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %170) #8
  %776 = icmp eq i64 %775, 1
  br i1 %776, label %778, label %777

777:                                              ; preds = %774
  call void @__assert_fail(ptr noundef nonnull @.str.939, ptr noundef nonnull @.str.25, i32 noundef 8404, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

778:                                              ; preds = %774
  %779 = icmp eq i32 %104, -1
  br i1 %779, label %780, label %784

780:                                              ; preds = %778
  %781 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %781, ptr noundef nonnull @.str.931)
          to label %.invoke unwind label %782

782:                                              ; preds = %780
  %783 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %781) #8
  br label %911

784:                                              ; preds = %778
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #8
  %785 = load ptr, ptr %0, align 8, !tbaa !38
  %786 = getelementptr inbounds i8, ptr %785, i64 152
  %787 = load ptr, ptr %786, align 8
  invoke void %787(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %788 unwind label %797

788:                                              ; preds = %784
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull @.str.927)
          to label %789 unwind label %799

789:                                              ; preds = %788
  %790 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %791 unwind label %801

791:                                              ; preds = %789
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #8
  %792 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %.preheader480 unwind label %805

.preheader480:                                    ; preds = %791
  %.not590 = icmp eq i32 %792, 0
  br i1 %.not590, label %._crit_edge540, label %.lr.ph539

.lr.ph539:                                        ; preds = %.preheader480
  %793 = getelementptr inbounds i8, ptr %63, i64 4
  %794 = getelementptr inbounds i8, ptr %110, i64 24
  %795 = getelementptr inbounds i8, ptr %73, i64 24
  br label %807

._crit_edge540:                                   ; preds = %831, %.preheader480
  %796 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.928)
          to label %907 unwind label %805

797:                                              ; preds = %784
  %798 = landingpad { ptr, i32 }
          cleanup
  br label %804

799:                                              ; preds = %788
  %800 = landingpad { ptr, i32 }
          cleanup
  br label %803

801:                                              ; preds = %789
  %802 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  br label %803

803:                                              ; preds = %801, %799
  %.pn368 = phi { ptr, i32 } [ %802, %801 ], [ %800, %799 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  br label %804

804:                                              ; preds = %803, %797
  %.pn368.pn = phi { ptr, i32 } [ %.pn368, %803 ], [ %798, %797 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #8
  br label %911

805:                                              ; preds = %._crit_edge540, %791
  %806 = landingpad { ptr, i32 }
          cleanup
  br label %911

807:                                              ; preds = %.lr.ph539, %831
  %.0219538 = phi i32 [ 0, %.lr.ph539 ], [ %827, %831 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #8
  store i32 %.0219538, ptr %63, align 4, !tbaa !40
  store i32 %104, ptr %793, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %64) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %64) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #8
  %808 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %112)
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %808, ptr noundef nonnull %63, i32 noundef 2, i32 noundef 5, ptr noundef nonnull %64)
          to label %809 unwind label %819

809:                                              ; preds = %807
  %810 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %811 unwind label %821

811:                                              ; preds = %809
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  %812 = load i32, ptr %794, align 8, !tbaa !43
  %813 = load i32, ptr %795, align 8, !tbaa !43
  %814 = icmp ugt i32 %812, %813
  br i1 %814, label %815, label %826

815:                                              ; preds = %811
  %816 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %813, i32 noundef 0)
          to label %817 unwind label %824

817:                                              ; preds = %815
  %818 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %816)
          to label %826 unwind label %824

819:                                              ; preds = %807
  %820 = landingpad { ptr, i32 }
          cleanup
  br label %823

821:                                              ; preds = %809
  %822 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %823

823:                                              ; preds = %821, %819
  %.pn371 = phi { ptr, i32 } [ %822, %821 ], [ %820, %819 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  br label %832

824:                                              ; preds = %829, %817, %815
  %825 = landingpad { ptr, i32 }
          cleanup
  br label %832

826:                                              ; preds = %817, %811
  %827 = add nuw i32 %.0219538, 1
  %828 = icmp ult i32 %827, %792
  br i1 %828, label %829, label %831

829:                                              ; preds = %826
  %830 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %831 unwind label %824

831:                                              ; preds = %829, %826
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %64) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #8
  %exitcond604.not = icmp eq i32 %827, %792
  br i1 %exitcond604.not, label %._crit_edge540, label %807, !llvm.loop !54

832:                                              ; preds = %824, %823
  %.pn373 = phi { ptr, i32 } [ %825, %824 ], [ %.pn371, %823 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %64) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #8
  br label %911

833:                                              ; preds = %769
  %834 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %73)
          to label %835 unwind label %124

835:                                              ; preds = %833
  br i1 %834, label %837, label %836

836:                                              ; preds = %835
  call void @__assert_fail(ptr noundef nonnull @.str.938, ptr noundef nonnull @.str.25, i32 noundef 8431, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

837:                                              ; preds = %835
  %838 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %170) #8
  %839 = icmp eq i64 %838, 1
  br i1 %839, label %841, label %840

840:                                              ; preds = %837
  call void @__assert_fail(ptr noundef nonnull @.str.939, ptr noundef nonnull @.str.25, i32 noundef 8432, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj) #10
  unreachable

841:                                              ; preds = %837
  %842 = icmp eq i32 %104, -1
  br i1 %842, label %843, label %848

843:                                              ; preds = %841
  %844 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %844, ptr noundef nonnull @.str.931)
          to label %.invoke unwind label %846

.invoke:                                          ; preds = %843, %780, %198, %187, %181, %173
  %845 = phi ptr [ %174, %173 ], [ %182, %181 ], [ %188, %187 ], [ %199, %198 ], [ %781, %780 ], [ %844, %843 ]
  invoke void @__cxa_throw(ptr nonnull %845, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %.cont unwind label %124

.cont:                                            ; preds = %.invoke
  unreachable

846:                                              ; preds = %843
  %847 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %844) #8
  br label %911

848:                                              ; preds = %841
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #8
  %849 = load ptr, ptr %0, align 8, !tbaa !38
  %850 = getelementptr inbounds i8, ptr %849, i64 152
  %851 = load ptr, ptr %850, align 8
  invoke void %851(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %852 unwind label %860

852:                                              ; preds = %848
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef nonnull @.str.927)
          to label %853 unwind label %862

853:                                              ; preds = %852
  %854 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %855 unwind label %864

855:                                              ; preds = %853
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  %856 = invoke noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %73, i32 noundef 0)
          to label %.preheader481 unwind label %868

.preheader481:                                    ; preds = %855
  %.not589 = icmp eq i32 %856, 0
  br i1 %.not589, label %._crit_edge537, label %.lr.ph536

.lr.ph536:                                        ; preds = %.preheader481
  %857 = getelementptr inbounds i8, ptr %110, i64 24
  %858 = getelementptr inbounds i8, ptr %73, i64 24
  br label %870

._crit_edge537:                                   ; preds = %905, %.preheader481
  %859 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.928)
          to label %907 unwind label %868

860:                                              ; preds = %848
  %861 = landingpad { ptr, i32 }
          cleanup
  br label %867

862:                                              ; preds = %852
  %863 = landingpad { ptr, i32 }
          cleanup
  br label %866

864:                                              ; preds = %853
  %865 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  br label %866

866:                                              ; preds = %864, %862
  %.pn357 = phi { ptr, i32 } [ %865, %864 ], [ %863, %862 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  br label %867

867:                                              ; preds = %866, %860
  %.pn357.pn = phi { ptr, i32 } [ %.pn357, %866 ], [ %861, %860 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  br label %911

868:                                              ; preds = %._crit_edge537, %855
  %869 = landingpad { ptr, i32 }
          cleanup
  br label %911

870:                                              ; preds = %.lr.ph536, %905
  %.0535 = phi i32 [ 0, %.lr.ph536 ], [ %901, %905 ]
  %.9534 = phi i32 [ %104, %.lr.ph536 ], [ %906, %905 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3, i1 noundef zeroext true)
          to label %871 unwind label %884

871:                                              ; preds = %870
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef nonnull @.str.66)
          to label %872 unwind label %886

872:                                              ; preds = %871
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %71) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %114, i32 noundef %.9534)
          to label %873 unwind label %888

873:                                              ; preds = %872
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 8 dereferenceable(32) %71)
          to label %874 unwind label %890

874:                                              ; preds = %873
  %875 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %876 unwind label %892

876:                                              ; preds = %874
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  %877 = load i32, ptr %857, align 8, !tbaa !43
  %878 = load i32, ptr %858, align 8, !tbaa !43
  %879 = icmp ugt i32 %877, %878
  br i1 %879, label %880, label %900

880:                                              ; preds = %876
  %881 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %878, i32 noundef 0)
          to label %882 unwind label %898

882:                                              ; preds = %880
  %883 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef %881)
          to label %900 unwind label %898

884:                                              ; preds = %870
  %885 = landingpad { ptr, i32 }
          cleanup
  br label %897

886:                                              ; preds = %871
  %887 = landingpad { ptr, i32 }
          cleanup
  br label %896

888:                                              ; preds = %872
  %889 = landingpad { ptr, i32 }
          cleanup
  br label %895

890:                                              ; preds = %873
  %891 = landingpad { ptr, i32 }
          cleanup
  br label %894

892:                                              ; preds = %874
  %893 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  br label %894

894:                                              ; preds = %892, %890
  %.pn360 = phi { ptr, i32 } [ %893, %892 ], [ %891, %890 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  br label %895

895:                                              ; preds = %894, %888
  %.pn360.pn = phi { ptr, i32 } [ %.pn360, %894 ], [ %889, %888 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  br label %896

896:                                              ; preds = %895, %886
  %.pn360.pn.pn = phi { ptr, i32 } [ %.pn360.pn, %895 ], [ %887, %886 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  br label %897

897:                                              ; preds = %896, %884
  %.pn360.pn.pn.pn = phi { ptr, i32 } [ %.pn360.pn.pn, %896 ], [ %885, %884 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  br label %911

898:                                              ; preds = %903, %882, %880
  %899 = landingpad { ptr, i32 }
          cleanup
  br label %911

900:                                              ; preds = %882, %876
  %901 = add nuw i32 %.0535, 1
  %902 = icmp ult i32 %901, %856
  br i1 %902, label %903, label %905

903:                                              ; preds = %900
  %904 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.55)
          to label %905 unwind label %898

905:                                              ; preds = %900, %903
  %906 = add i32 %.9534, 1
  %exitcond603.not = icmp eq i32 %901, %856
  br i1 %exitcond603.not, label %._crit_edge537, label %870, !llvm.loop !55

907:                                              ; preds = %._crit_edge537, %._crit_edge540, %._crit_edge545, %._crit_edge553, %._crit_edge580, %._crit_edge580.thread, %._crit_edge587, %._crit_edge
  %908 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(32) %6, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %909 unwind label %124

909:                                              ; preds = %907
  invoke void @_ZN11spirv_cross8Compiler13register_readEjjb(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2, i32 noundef %3, i1 noundef zeroext false)
          to label %910 unwind label %124

910:                                              ; preds = %909, %116
  %.0218 = phi i1 [ false, %116 ], [ true, %909 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  br label %.thread617

911:                                              ; preds = %.split562, %.split562.us, %.loopexit, %.loopexit.split-lp, %120, %124, %148, %175, %183, %189, %200, %227, %782, %804, %846, %867, %168, %149, %230, %250, %281, %249, %228, %312, %321, %359, %599, %397, %505, %530, %507, %419, %440, %449, %574, %553, %504, %408, %399, %369, %339, %300, %298, %756, %757, %641, %650, %670, %699, %705, %651, %728, %620, %613, %611, %832, %805, %897, %898, %868, %122, %118
  %.pn463.pn.pn.pn = phi { ptr, i32 } [ %119, %118 ], [ %121, %120 ], [ %123, %122 ], [ %125, %124 ], [ %176, %175 ], [ %190, %189 ], [ %201, %200 ], [ %.pn448.pn, %227 ], [ %184, %183 ], [ %783, %782 ], [ %.pn368.pn, %804 ], [ %847, %846 ], [ %.pn357.pn, %867 ], [ %.pn.pn, %148 ], [ %.pn354, %168 ], [ %150, %149 ], [ %229, %228 ], [ %231, %230 ], [ %.pn451.pn, %249 ], [ %.pn457, %281 ], [ %251, %250 ], [ %299, %298 ], [ %301, %300 ], [ %.pn401.pn, %321 ], [ %313, %312 ], [ %340, %339 ], [ %600, %599 ], [ %.pn404.pn, %359 ], [ %370, %369 ], [ %398, %397 ], [ %400, %399 ], [ %.pn428.pn, %408 ], [ %.pn415.pn, %504 ], [ %.pn413, %553 ], [ %.pn408.pn.pn.pn, %574 ], [ %450, %449 ], [ %.pn436, %419 ], [ %.pn431.pn.pn.pn, %440 ], [ %506, %505 ], [ %.pn423, %507 ], [ %.pn418.pn.pn.pn, %530 ], [ %612, %611 ], [ %621, %620 ], [ %.pn376.pn, %728 ], [ %614, %613 ], [ %.pn386.pn, %650 ], [ %642, %641 ], [ %652, %651 ], [ %.pn394, %699 ], [ %706, %705 ], [ %.pn389.pn, %670 ], [ %758, %757 ], [ %.pn379.pn.pn.pn, %756 ], [ %.pn373, %832 ], [ %806, %805 ], [ %869, %868 ], [ %899, %898 ], [ %.pn360.pn.pn.pn, %897 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %535, %.split562 ], [ %495, %.split562.us ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  resume { ptr, i32 } %.pn463.pn.pn.pn

.thread617:                                       ; preds = %.thread, %4, %99, %910, %102, %78, %76
  %.2 = phi i1 [ false, %4 ], [ false, %76 ], [ false, %78 ], [ %.0218, %910 ], [ false, %102 ], [ false, %99 ], [ false, %.thread ]
  ret i1 %.2

912:                                              ; preds = %368, %297
  unreachable
}

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeEj(ptr noundef nonnull align 8 dereferenceable(3176), 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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !23, i64 128}
!6 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !7, i64 0, !12, i64 12, !13, i64 16, !9, i64 20, !9, i64 24, !9, i64 28, !14, i64 32, !19, i64 88, !9, i64 120, !22, i64 124, !22, i64 125, !23, i64 128, !24, i64 136, !14, i64 192, !27, i64 248, !28, i64 272, !28, i64 276, !32, i64 280}
!7 = !{!"_ZTSN11spirv_cross8IVariantE", !8, i64 8}
!8 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTSN3spv2OpE", !10, i64 0}
!13 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !10, i64 0}
!14 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !15, i64 0, !17, i64 16, !18, i64 24}
!15 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !16, i64 0, !17, i64 8}
!16 = !{!"any pointer", !10, i64 0}
!17 = !{!"long", !10, i64 0}
!18 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !10, i64 0}
!19 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !20, i64 0, !17, i64 16, !21, i64 24}
!20 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !16, i64 0, !17, i64 8}
!21 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !10, i64 0}
!22 = !{!"bool", !10, i64 0}
!23 = !{!"_ZTSN3spv12StorageClassE", !10, i64 0}
!24 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !25, i64 0, !17, i64 16, !26, i64 24}
!25 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !16, i64 0, !17, i64 8}
!26 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !10, i64 0}
!27 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !28, i64 0, !29, i64 4, !22, i64 8, !22, i64 9, !22, i64 10, !9, i64 12, !30, i64 16, !31, i64 20}
!28 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !9, i64 0}
!29 = !{!"_ZTSN3spv3DimE", !10, i64 0}
!30 = !{!"_ZTSN3spv11ImageFormatE", !10, i64 0}
!31 = !{!"_ZTSN3spv15AccessQualifierE", !10, i64 0}
!32 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !33, i64 0}
!33 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!34 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !16, i64 0}
!35 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !36, i64 0, !17, i64 8}
!36 = !{!"float", !10, i64 0}
!37 = !{!6, !13, i64 16}
!38 = !{!39, !39, i64 0}
!39 = !{!"vtable pointer", !11, i64 0}
!40 = !{!9, !9, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = !{!6, !9, i64 24}
!44 = distinct !{!44, !42}
!45 = distinct !{!45, !42}
!46 = !{!6, !9, i64 28}
!47 = distinct !{!47, !42}
!48 = distinct !{!48, !42}
!49 = distinct !{!49, !42}
!50 = distinct !{!50, !42}
!51 = distinct !{!51, !42}
!52 = distinct !{!52, !42}
!53 = distinct !{!53, !42}
!54 = distinct !{!54, !42}
!55 = distinct !{!55, !42}


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