https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83203

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
A general comment from my side here is that RTL really has too many ways to
express vector "combinations" / "shuffles".  In particular vec_merge can
be expressed (up to the CONST_INT bitmask limit to 128 vector elements...)
as (vec_select (vec_concat (...)).  vec_merge has the advantage of not
requiring the intermediate larger vector mode vec_concat requires.

->  vec_perm to the rescue...

but that requires changing all targets & patterns.

The difficulty is that different targets perfer different variants
(vec_merge vs. select/concat), so generic simplifications are very
difficult to "tune".

Eventually combine needs to learn the equivalence between vec_merge
and select/concat and try "both"?

Or we need to declare vec_merge as canonical when the bitmask is large
enough (and fix all targets for that).  Though in my view the
select vector is easier to read in .md than the bitmask as integer...

Reply via email to