This patch adds all the language-level function attributes defined in:
The attributes are used to control PSTATE.ZA and PSTATE.SM, which are
respectively used for enabling the use of the ZA matrix array and
Streaming mode. This information needs to be available on call sites,
since the use of ZA or streaming mode may have to be enabled or disabled
around the call-site (depending on the attributes set on the caller and the
callee). For calls to functions from a function pointer, there is no IR
declaration available, so the attributes must be added explicitly to the
With the exception of 'arm_locally_streaming', the information is part of
the function's interface, not just the function definition, and thus needs
to be propagated through the FunctionProtoType::ExtProtoInfo.
This patch adds the defintions of these attributes, as well as semantic
analysis to ensure conversions between function pointers are valid and
that no conflicting attributes are set. For example, 'arm_streaming' and
'arm_streaming_compatible' are mutually exclusive.
LLVM support for these attributes will follow later, so at the moment
these attributes are non-functional.