From: Segher Boessenkool <segher@kernel.crashing.org>
To: Jakub Jelinek <jakub@redhat.com>
Cc: Richard Biener <rguenther@suse.de>,
Uros Bizjak <ubizjak@gmail.com>,
David Edelsohn <dje.gcc@gmail.com>,
Marcus Shawcroft <marcus.shawcroft@arm.com>,
Richard Earnshaw <richard.earnshaw@arm.com>,
Andreas Krebbel <Andreas.Krebbel@de.ibm.com>,
Matthew Fortune <matthew.fortune@imgtec.com>,
Eric Botcazou <ebotcazou@libertysurf.fr>,
Andrew Jenner <andrew@codesourcery.com>,
gcc-patches@gcc.gnu.org
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)
Date: Tue, 25 Jul 2017 21:12:00 -0000 [thread overview]
Message-ID: <20170725205256.GI13471@gate.crashing.org> (raw)
In-Reply-To: <20170725091432.GQ2123@tucnak>
Hi Jakub,
On Tue, Jul 25, 2017 at 11:14:32AM +0200, Jakub Jelinek wrote:
> The following patch adjusts the vec_init and vec_extract optabs, so that
> they don't have in the expander names just the vector mode, but also another
> mode, for vec_extract the mode of the result and for vec_init the mode of
> the elts of the vector passed as second operand.
>
> Without this patch, the second mode has been implicit, GET_MODE_INNER of
> the vector mode, so one could just extract a single element from a vector
> or construct vector from elements. While that is most common, we allow
> in GIMPLE e.g. construction of V8DImode from 4 V2DImode elements etc.
> and the vectorizer uses them. By having the second mode in the name
> it allows the generic code (vectorizer, expansion) to query whether the
> backend supports such vector from vector expansions or inits from vector
> elts and use them if available.
>
> For vec_extract, if we say want to extract high V2SImode from V4SImode
> the fallback is try to expand it as DImode extraction from V2DImode.
> This works well in many cases, but doesn't really work for very large
> vectors, say if we want to extract high V8SImode from V16SImode on x86,
> we'd need OImode extraction from V2OImode, which is something the backend
> doesn't have any support for.
> For vec_init, the fallback is usually to go through memory, which is slow in
> many cases.
>
> 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?
> --- 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).
("vel" instead of "Vel" for this name?)
How is this different from VEC_base_l? They can just be merged it seems.
(And for that matter, VEC_base and VEL as well). We'll handle that I
suppose, don't let it hold up this patch :-)
Segher
next prev parent reply other threads:[~2017-07-25 21:12 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-25 9:14 Jakub Jelinek
2017-07-25 21:12 ` Segher Boessenkool [this message]
2017-07-26 7:09 ` Jakub Jelinek
2017-07-26 7:29 ` Richard Biener
2017-07-26 11:41 ` Segher Boessenkool
2017-08-01 16:21 ` Jakub Jelinek
2017-08-01 23:57 ` Segher Boessenkool
2017-07-25 21:45 ` Matthew Fortune
2017-07-26 7:25 ` Richard Biener
2017-07-26 7:34 ` Eric Botcazou
2017-07-26 10:35 ` Richard Biener
2017-07-26 10:42 ` Uros Bizjak
2017-07-27 11:43 ` Segher Boessenkool
2017-07-27 11:56 ` Andreas Krebbel
2017-08-01 8:09 ` Richard Earnshaw (lists)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170725205256.GI13471@gate.crashing.org \
--to=segher@kernel.crashing.org \
--cc=Andreas.Krebbel@de.ibm.com \
--cc=andrew@codesourcery.com \
--cc=dje.gcc@gmail.com \
--cc=ebotcazou@libertysurf.fr \
--cc=gcc-patches@gcc.gnu.org \
--cc=jakub@redhat.com \
--cc=marcus.shawcroft@arm.com \
--cc=matthew.fortune@imgtec.com \
--cc=rguenther@suse.de \
--cc=richard.earnshaw@arm.com \
--cc=ubizjak@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).