[PATCH, WIP] NEON quadword vectors in big-endian mode (#10061, #7306)
ira.rosen at linaro.org
Mon Nov 15 08:12:26 UTC 2010
On 12 November 2010 17:49, Julian Brown <julian at codesourcery.com> wrote:
> For the first of these, I think we can get away with changing the
> vectorizer to use explicit "array" loads and stores (i.e. vldN/vstN), so
> that vector registers will hold elements in memory order -- so, all the
> contortions in the attached patch will be unnecessary. ABI issues are
> irrelevant, since vectors are "invisible" at the source code layer
> generally, including at ABI boundaries.
> The important observation is that vectors from case 1 and from cases 2/3
> never interact: it's quite safe for them to use different element
> orderings, without extensive changes to GCC infrastructure (i.e.,
> multiple internal representations). I don't think I quite realised this
Do you think now that the changes in GIMPLE and RTL (a function attached to
each vector) are unnecessary?
>From the vectorizer point of view, target hooks look like the easiest
solution (yet ugly). I am trying to think about something else, but nothing
really makes sense.
> So, anyway, back to the patch in question. The choices are, I think:
> 1. Apply as-is (after I've ironed out the wrinkles), and then remove
> the "ugly" bits at a later point when vectorizer "array load/store"
> support is implemented.
> 2. Apply a version which simply disables all the troublesome
> patterns until the same support appears.
I slightly prefer the first one, it's kind of an incremental solution.
> Apologies if I'm retreading old ground ;-).
> (The CANNOT_CHANGE_MODE_CLASS fragment is necessary to generate good
> code for the quad-word vec_pack_trunc_<mode> pattern. It would
> eventually be applied as a separate patch.)
> * config/arm/arm.h (CANNOT_CHANGE_MODE_CLASS): Allow changing mode
> of vector registers.
> * config/arm/neon.md (vec_shr_<mode>, vec_shl_<mode>): Disable in
> big-endian mode.
> (reduc_splus_<mode>, reduc_smin_<mode>, reduc_smax_<mode>)
> (reduc_umin_<mode>, reduc_umax_<mode>)
> (neon_vec_unpack<US>_lo_<mode>, neon_vec_unpack<US>_hi_<mode>)
> (neon_vec_<US>mult_lo_<mode>, neon_vec_<US>mult_hi_<mode>)
> (vec_pack_trunc_<mode>, neon_vec_pack_trunc_<mode>): Handle
> big-endian mode for quad-word vectors.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the linaro-toolchain