rsandifo-arm wrote:

> However we choose to emit this particular builtin, should we provide a way to 
> write a function like this? Like, the caller has to either support sve, or 
> have streaming enabled. Maybe call it __arm_streaming_compatible_requires_sve.

I'd like to make two (probably obvious) points before answering this:

* The existing three-way choice between normal, `__arm_streaming`, and 
`__arm_streaming_compatible` is simply a choice between possible incoming and 
outgoing PSTATE.SM states at runtime (0, 1, and 0 or 1, respectively).  It's 
intended to be independent of the architecture level, except for the fact that 
using `__arm_streaming` is an error when SME is not enabled.

* If `__arm_streaming_compatible` is being used to write a vector routine, the 
question isn't likely to be just “do I have SVE?” but “do I have this 
particular set of SVE features”?  For example, I imagine many integer-based 
algorithms would want at least SVE2.  At some point SVE2p1 would become a 
baseline for some users.

So if someone wants to say both “this function should be streaming-compatible” 
and “this function assumes it has access to these streaming SVE features” then 
I think those things should be specified as two separate annotations, rather 
than a single combined one.  The second one (about assuming/requiring available 
features) is useful more generally, for non-streaming and `__arm_streaming` as 
well as `__arm_streaming_compatible`.


https://github.com/llvm/llvm-project/pull/92427
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to