[Bug target/83203] [8 Regression] Inefficient int to avx2 vector conversion

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Nov 30 16:24:00 GMT 2017


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...


More information about the Gcc-bugs mailing list