This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Switch vec_init and vec_extract optabs to 2 mode optab to allow extraction of vector from vector or initialization of vector from smaller vectors (PR target/80846)
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Segher Boessenkool <segher at kernel dot crashing dot org>
- Cc: Richard Biener <rguenther at suse dot de>, Uros Bizjak <ubizjak at gmail dot com>, David Edelsohn <dje dot gcc at gmail dot com>, Marcus Shawcroft <marcus dot shawcroft at arm dot com>, Richard Earnshaw <richard dot earnshaw at arm dot com>, Andreas Krebbel <Andreas dot Krebbel at de dot ibm dot com>, Matthew Fortune <matthew dot fortune at imgtec dot com>, Eric Botcazou <ebotcazou at libertysurf dot fr>, Andrew Jenner <andrew at codesourcery dot com>, gcc-patches at gcc dot gnu dot org
- Date: Wed, 26 Jul 2017 09:09:04 +0200
- Subject: Re: [PATCH] Switch vec_init and vec_extract optabs to 2 mode optab to allow extraction of vector from vector or initialization of vector from smaller vectors (PR target/80846)
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=jakub at redhat dot com
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 9A93B883B9
- References: <20170725091432.GQ2123@tucnak> <20170725205256.GI13471@gate.crashing.org>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Tue, Jul 25, 2017 at 03:52:56PM -0500, Segher Boessenkool wrote:
> On Tue, Jul 25, 2017 at 11:14:32AM +0200, Jakub Jelinek wrote:
> > This patch only adds new vector from vector extract and init patterns to
> > the i386 backend, but I had to change many other targets too, because
> > it needs to have the element mode in the vec_extract/vec_init expander
> > names. Seems most of the backends didn't really have a mode attribute
> > usable for this or had it only in uppercase, while for the names we need
> > lowercase. Some backends had a convention on how to name lower case
> > vs. upper case modes, others didn't have any. So I'm CCing maintainers
> > of affected backends to seek advice on what mode attributes they want to
> > use.
>
> Would it be possible (and useful) to _also_ keep the old names? Or do
> you expect all targets will want to support all combinations?
Richi's preference was to use only a single conversion optab instead of
old + new when we've discussed it on IRC. Of course it would be far less
work for me to support say:
OPTAB_CD(vec_extract2_optab, "vec_extract$a$b")
OPTAB_CD(vec_init2_optab, "vec_init$a$b")
OPTAB_D (vec_extract_optab, "vec_extract$a")
OPTAB_D (vec_init_optab, "vec_init$a")
where the single mode vec_extract/vec_init would be
extraction/initialization from element mode and the two mode one would be
used for 2 vector modes. If there is agreement on that, most of the
config/*/* changes could go away.
> > --- gcc/config/rs6000/vector.md.jj 2017-06-08 20:50:49.000000000 +0200
> > +++ gcc/config/rs6000/vector.md 2017-07-24 17:44:44.699580927 +0200
> > @@ -74,6 +74,16 @@ (define_mode_attr VEC_base [(V16QI "QI")
> > (V1TI "TI")
> > (TI "TI")])
> >
> > +;; As above, but in lower case
> > +(define_mode_attr VEC_base_l [(V16QI "qi")
> > + (V8HI "hi")
> > + (V4SI "si")
> > + (V2DI "di")
> > + (V4SF "sf")
> > + (V2DF "df")
> > + (V1TI "ti")
> > + (TI "ti")])
> > +
> > ;; Same size integer type for floating point data
> > (define_mode_attr VEC_int [(V4SF "v4si")
> > (V2DF "v2di")])
>
> > @@ -520,6 +520,17 @@ (define_mode_attr VEL [(V8QI "QI") (V16Q
> > (SI "SI") (HI "HI")
> > (QI "QI")])
> >
> > +;; Define element mode for each vector mode (lower case).
> > +(define_mode_attr Vel [(V8QI "qi") (V16QI "qi")
> > + (V4HI "hi") (V8HI "hi")
> > + (V2SI "si") (V4SI "si")
> > + (DI "di") (V2DI "di")
> > + (V4HF "hf") (V8HF "hf")
> > + (V2SF "sf") (V4SF "sf")
> > + (V2DF "df") (DF "df")
> > + (SI "si") (HI "hi")
> > + (QI "qi")])
>
> (Inconsistent spacing, please fix).
It is the same spacing as in VEL right above it, I've tried to follow
whatever weirdo formatting each backend had.
> ("vel" instead of "Vel" for this name?)
That is to follow aarch64 iterator naming convention, where they have
already preexisting e.g. VDBL for
;; Double modes of vector modes.
and Vdbl for:
;; Double modes of vector modes (lower case).
or similarly VHALF vs Vhalf.
> How is this different from VEC_base_l? They can just be merged it seems.
They can't be merged, each backend has its own iterators and iterator naming
conventions, we don't really have any gcc/iterators.md that would be used
for all backends. VEC_base_l is just rs6000 (and powerpcspe), using
rs6000 iterator naming conventions, Vel is aarch64 using aarch64 naming
conventions, V_elem_l is arm using arm iterator naming conventions etc.
> (And for that matter, VEC_base and VEL as well). We'll handle that I
> suppose, don't let it hold up this patch :-)
Jakub