public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <richard.guenther@gmail.com>
To: "Stubbs, Andrew" <ams@codesourcery.com>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>,
	Richard Sandiford <richard.sandiford@arm.com>
Subject: Re: [PATCH 13/25] Create TARGET_DISABLE_CURRENT_VECTOR_SIZE
Date: Mon, 01 Oct 2018 08:05:00 -0000	[thread overview]
Message-ID: <CAFiYyc3QN6TEpbW0OOxyVPp9e5YE5B37a=iBxkKG-GrQfTCnMQ@mail.gmail.com> (raw)
In-Reply-To: <f73dc5fd-e0f5-3e03-f4b0-b201ee394e92@codesourcery.com>

On Fri, Sep 28, 2018 at 2:47 PM Andrew Stubbs <ams@codesourcery.com> wrote:
>
> On 19/09/18 14:45, Richard Biener wrote:
> > So I guess the current_vector_size thing isn't too hard to get rid of, what
> > you'd end up with would be using that size when you decide for vector
> > types for loads (where there are no USEs with vector types, so for example
> > this would not apply to gathers).
>
> I've finally got back to looking at this ...
>
> My patch works because current_vector_size is only referenced in two
> places. One is passed to get_vectype_for_scalar_type_and_size, and that
> function simply calls targetm.vectorize.preferred_simd_mode when the
> requested size is zero. The other is passed to build_truth_vector_type,
> which only uses it to call targetm.vectorize.get_mask_mode, and the GCN
> backend ignores the size parameter because it only has one option.
> Presumably other backends would object to a zero size mask.
>
> So, as I said originally, the effect is that leaving current_vector_size
> zeroed means "always ask the backend".

Yes.

> Pretty much everything else chains off of those places using
> get_same_sized_vectype, so ignoring current_vector_size is safe on GCN,
> and might even be safe on other architectures?

Other architectures really only use it when there's a choice, like
choosing between V4SI, V8SI and V16SI on x86_64.  current_vector_size
was introduced to be able to "iterate" over supported ISAs and let the
vectorizer decide which one to use in the end (SSE vs. AVX vs. AVX512).

The value of zero is simply to give the target another chance to set
its prefered
value based on the first call.  I'd call that a bit awkward (*)

For architectures that only have a single "vector size" this variable
is really spurious and whether it is zero or non-zero doesn't make a difference.
Apart from your architecture of course where non-zero doesn't work ;)

(*) so one possibility would be to forgo with the special-value of zero
("auto-detect") and thus not change current_vector_size in
get_vectype_for_scalar_type at all.  For targets which report multiple
vector size support set current_vector_size to the prefered one in the
loop over vector sizes and for targets that do not simply keep it at zero.

> > So I'd say you want to refactor get_same_sized_vectype uses and
> > make the size argument to get_vectype_for_scalar_type_and_size
> > a hint only.
>
> I've looked through the uses of get_same_sized_vectype and I've come to
> the conclusion that many of them really mean it.
>
> For example, vectorizable_bswap tries to reinterpret a vector register
> as a byte vector so that it can permute it. This is an optimization that
> won't work on GCN (because the vector registers don't work like that),
> but seems like a valid use of the vector size characteristic of other
> architectures.

True.

> For another example, vectorizable_conversion is targeting the
> vec_pack_trunc patterns, and therefore really does want to specify the
> types. Again, this isn't something we want to do on GCN (a regular trunc
> pattern with a vector mode will work fine).
>
> However, vectorizable_operation seems to use it to try to match the
> input and output types to the same vector unit (i.e. vector size); at
> least that's my interpretation. It returns "not vectorizable" if the
> input and output vectors have different numbers of elements. For most
> operators the lhs and rhs types will be the same, so we're all good, but
> I imagine that this code will prevent TRUNC being vectorized on GCN
> because the "same size" vector doesn't exist, and it doesn't check if
> there's a vector with the same number of elements (I've not actually
> tried that, yet, and there may be extra magic elsewhere for that case,
> but YSWIM).

Yeah, we don't have a get_vector_type_for_scalar_type_and_nelems
which would probably be semantically better in many places.

> I don't think changing this case to a new "get_same_length_vectype"
> would be appropriate for many architectures, so I'm not sure what to do
> here?
>
> We could fix this with new target hooks, perhaps?
>
> TARGET_VECTORIZE_REINTERPRET_VECTOR (vectype_in, scalartype_out)
>
>    Returns a new vectype (or mode) that uses the same vector register as
>    vectype_in, but has elements of scalartype_out.
>
>    The default implementation would be get_same_sized_vectype.
>
>    GCN would just return NULL, because you can't do that kind of
>    optimization.
>
> TARGET_VECTORIZE_COMPATIBLE_VECTOR (opcode, vectype_in, scalartype_out)
>
>    Returns a new vectype (or mode) that has the right number of elements
>    for the opcode (i.e. the same number, or 2x for packed opcodes), and
>    elements of scalartype_out.  The backend might choose a different
>    vector size, but promises that hardware can do the operation (i.e.
>    it's not mixing vector units).
>
>    The default implementation would be get_same_sized_vectype, for
>    backward compatibility.
>
>    GCN would simply return V64xx according to scalartype_out, and NULL
>    for unsupported opcodes.

I don't like putting the burden on the target here too much given the vectorizer
should know what kind of constraints it has given it implements the
vectorization
on GIMPLE which as IL constraints that are to be met - we just need to
ask for vector types with the appropriate constraints rather than using
same-size everywhere.

> Of course, none of this addresses the question of which vector size to
> choose in the first place.

See above for a suggestion.

> I've not figured out how it might ever start
> with a type other than the "preferred SIMD mode", yet.

In practically all cases vect_analyze_data_refs calling
get_vectype_for_scalar_type
on a load will be the one nailing down current_vector_size (if zero).
I also cannot
quickly think of a case where that would differ from "preferred SIMD
mode" unless
the target simply lies to us here ;)

So, would a current_vector_size re-org like outlined above help you?  I agree
leaving it at zero should work unless there's code in the vectorizer
that is simply
wrong.  Addressing some GCN issues with get_vectype_for_scalar_type_and_nunits
would also OK with me (if that works).

Thanks,
Richard.

> Thoughts?
>
> Andrew

  reply	other threads:[~2018-10-01  8:05 UTC|newest]

Thread overview: 187+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-05 11:49 [PATCH 00/25] AMD GCN Port ams
2018-09-05 11:49 ` [PATCH 05/25] Add sorry_at diagnostic function ams
2018-09-05 13:39   ` David Malcolm
2018-09-05 13:41     ` David Malcolm
2018-09-11 10:30       ` Andrew Stubbs
2018-09-05 11:49 ` [PATCH 01/25] Handle vectors that don't fit in an integer ams
2018-09-05 11:54   ` Jakub Jelinek
2018-09-14 16:03   ` Richard Sandiford
2018-11-15 17:20     ` Andrew Stubbs
2018-09-05 11:49 ` [PATCH 04/25] SPECIAL_REGNO_P ams
2018-09-05 12:21   ` Joseph Myers
2018-09-11 22:42   ` Jeff Law
2018-09-12 11:30     ` Andrew Stubbs
2018-09-13 10:03       ` Andrew Stubbs
2018-09-13 14:14         ` Andrew Stubbs
2018-09-13 14:39           ` Paul Koning
2018-09-13 14:49             ` Andrew Stubbs
2018-09-13 14:58               ` Paul Koning
2018-09-13 15:22                 ` Andrew Stubbs
2018-09-13 17:13                   ` Paul Koning
2018-09-17 22:59           ` Jeff Law
2018-10-04 19:13         ` Jeff Law
2018-09-12 15:31   ` Richard Henderson
2018-09-12 16:14     ` Andrew Stubbs
2018-09-05 11:49 ` [PATCH 02/25] Propagate address spaces to builtins ams
2018-09-20 13:09   ` Richard Biener
2018-09-22 19:22   ` Andreas Schwab
2018-09-24 16:53     ` Andrew Stubbs
2018-09-24 17:40       ` Andreas Schwab
2018-09-25 14:27     ` [patch] Fix AArch64 ILP ICE Andrew Stubbs
2018-09-26  8:55       ` Andreas Schwab
2018-09-26 13:39       ` Richard Biener
2018-09-26 16:17         ` Andrew Stubbs
2019-09-03 14:01   ` [PATCH 02/25] Propagate address spaces to builtins Kyrill Tkachov
2019-09-03 15:00     ` Jeff Law
2019-09-04 14:21       ` Kyrill Tkachov
2019-09-04 15:29         ` Kyrill Tkachov
2019-09-03 15:43     ` Andrew Stubbs
2018-09-05 11:50 ` [PATCH 12/25] Make default_static_chain return NULL in non-static functions ams
2018-09-17 18:55   ` Richard Sandiford
2018-09-28 14:23     ` Andrew Stubbs
2018-09-05 11:50 ` [PATCH 10/25] Convert BImode vectors ams
2018-09-05 11:56   ` Jakub Jelinek
2018-09-05 12:05   ` Richard Biener
2018-09-05 12:40     ` Andrew Stubbs
2018-09-05 12:44       ` Richard Biener
2018-09-11 14:36         ` Andrew Stubbs
2018-09-12 14:37           ` Richard Biener
2018-09-17  8:51   ` Richard Sandiford
2018-09-05 11:50 ` [PATCH 03/25] Improve TARGET_MANGLE_DECL_ASSEMBLER_NAME ams
2018-09-11 22:56   ` Jeff Law
2018-09-12 14:43     ` Richard Biener
2018-09-12 15:07       ` Jeff Law
2018-09-12 15:16         ` Richard Biener
2018-09-12 16:32           ` Andrew Stubbs
2018-09-12 17:39             ` Julian Brown
2018-09-15  6:01               ` Julian Brown
2018-09-19 15:23                 ` Julian Brown
2018-09-20 12:36                   ` Richard Biener
2018-09-05 11:50 ` [PATCH 06/25] Remove constant vec_select restriction ams
2018-09-11 22:44   ` Jeff Law
2018-09-05 11:50 ` [PATCH 09/25] Elide repeated RTL elements ams
2018-09-11 22:46   ` Jeff Law
2018-09-12  8:47     ` Andrew Stubbs
2018-09-12 15:14       ` Jeff Law
2018-09-19 17:25     ` Andrew Stubbs
2018-09-20 11:42       ` Andrew Stubbs
2018-09-26 16:23         ` Andrew Stubbs
2018-10-04 18:24         ` Jeff Law
2018-10-11 14:28           ` Andrew Stubbs
2018-09-05 11:50 ` [PATCH 08/25] Fix co-array allocation ams
     [not found]   ` <7f5064c3-afc6-b7b5-cade-f03af5b86331@moene.org>
2018-09-05 18:07     ` Janne Blomqvist
2018-09-19 16:38       ` Andrew Stubbs
2018-09-19 22:27         ` Damian Rouson
2018-09-19 22:55           ` Andrew Stubbs
2018-09-20  1:21             ` Damian Rouson
2018-09-20 20:49           ` Thomas Koenig
2018-09-20 20:59             ` Damian Rouson
2018-09-21  7:38             ` Toon Moene
2018-09-23 11:57               ` Janne Blomqvist
2018-09-21 16:37             ` OpenCoarrays integration with gfortran Jerry DeLisle
2018-09-21 19:37               ` Janne Blomqvist
2018-09-21 19:44               ` Richard Biener
2018-09-21 20:25               ` Damian Rouson
2018-09-22  3:47                 ` Jerry DeLisle
2018-09-23 10:41                   ` Toon Moene
2018-09-23 18:03                     ` Bernhard Reutner-Fischer
2018-09-24 11:14                     ` Alastair McKinstry
2018-09-27 12:51                       ` Richard Biener
2018-09-20 15:59         ` [PATCH 08/25] Fix co-array allocation Janne Blomqvist
2018-09-20 16:37           ` Andrew Stubbs
2018-09-05 11:50 ` [PATCH 07/25] [pr82089] Don't sign-extend SFV 1 in BImode ams
2018-09-17  8:46   ` Richard Sandiford
2018-09-26 15:52     ` Andrew Stubbs
2018-09-26 16:49       ` Richard Sandiford
2018-09-27 12:20         ` Andrew Stubbs
2018-09-05 11:51 ` [PATCH 16/25] Fix IRA ICE ams
2018-09-17  9:36   ` Richard Sandiford
2018-09-18 22:00     ` Andrew Stubbs
2018-09-20 12:47       ` Richard Sandiford
2018-09-20 13:36         ` Andrew Stubbs
2018-09-05 11:51 ` [PATCH 15/25] Don't double-count early-clobber matches ams
2018-09-17  9:22   ` Richard Sandiford
2018-09-27 22:54     ` Andrew Stubbs
2018-10-04 22:43       ` Richard Sandiford
2018-10-22 15:36         ` Andrew Stubbs
2018-09-05 11:51 ` [PATCH 11/25] Simplify vec_merge according to the mask ams
2018-09-17  9:08   ` Richard Sandiford
2018-09-20 15:44     ` Andrew Stubbs
2018-09-26 16:26       ` Andrew Stubbs
2018-09-26 16:50       ` Richard Sandiford
2018-09-26 17:06         ` Andrew Stubbs
2018-09-27  7:28           ` Richard Sandiford
2018-09-27 14:13             ` Andrew Stubbs
2018-09-27 16:28               ` Richard Sandiford
2018-09-27 21:14                 ` Andrew Stubbs
2018-09-28  8:42                   ` Richard Sandiford
2018-09-28 13:50                     ` Andrew Stubbs
2019-02-22  3:40                       ` H.J. Lu
2018-09-05 11:51 ` [PATCH 18/25] Fix interleaving of Fortran stop messages ams
     [not found]   ` <994a9ec6-2494-9a83-cc84-bd8a551142c5@moene.org>
2018-09-05 18:11     ` Janne Blomqvist
2018-09-12 13:55       ` Andrew Stubbs
2018-09-05 11:51 ` [PATCH 17/25] Fix Fortran STOP ams
     [not found]   ` <c0630914-1252-1391-9bf9-f03434d46f5a@moene.org>
2018-09-05 18:09     ` Janne Blomqvist
2018-09-12 13:56       ` Andrew Stubbs
2018-09-05 11:51 ` [PATCH 14/25] Disable inefficient vectorization of elementwise loads/stores ams
2018-09-17  9:16   ` Richard Sandiford
2018-09-17  9:54     ` Andrew Stubbs
2018-09-17 12:40       ` Richard Sandiford
2018-09-17 12:46         ` Andrew Stubbs
2018-09-20 13:01           ` Richard Biener
2018-09-20 13:51             ` Richard Sandiford
2018-09-20 14:14               ` Richard Biener
2018-09-20 14:22                 ` Richard Sandiford
2018-09-05 11:51 ` [PATCH 13/25] Create TARGET_DISABLE_CURRENT_VECTOR_SIZE ams
2018-09-17 19:31   ` Richard Sandiford
2018-09-18  9:02     ` Andrew Stubbs
2018-09-18 11:30       ` Richard Sandiford
2018-09-18 20:27         ` Andrew Stubbs
2018-09-19 13:46           ` Richard Biener
2018-09-28 12:48             ` Andrew Stubbs
2018-10-01  8:05               ` Richard Biener [this message]
2018-09-05 11:52 ` [PATCH 23/25] Testsuite: GCN is always PIE ams
2018-09-14 16:39   ` Jeff Law
2018-09-05 11:52 ` [PATCH 19/25] GCN libgfortran ams
     [not found]   ` <41281e27-ad85-e50c-8fed-6f4f6f18289c@moene.org>
2018-09-05 18:14     ` Janne Blomqvist
2018-09-06 12:37       ` Andrew Stubbs
2018-09-11 22:47   ` Jeff Law
2018-09-05 11:52 ` [PATCH 20/25] GCN libgcc ams
2018-09-05 12:32   ` Joseph Myers
2018-11-09 18:49   ` Jeff Law
2018-11-12 12:01     ` Andrew Stubbs
2018-09-05 11:52 ` [PATCH 24/25] Ignore LLVM's blank lines ams
2018-09-14 16:19   ` Jeff Law
2020-03-23 15:29     ` Thomas Schwinge
2020-03-24 21:05       ` Thomas Schwinge
2018-09-05 11:52 ` [PATCH 22/25] Add dg-require-effective-target exceptions ams
2018-09-17  9:40   ` Richard Sandiford
2018-09-17 17:53   ` Mike Stump
2018-09-20 16:10     ` Andrew Stubbs
2018-09-05 11:53 ` [PATCH 25/25] Port testsuite to GCN ams
2018-09-05 13:40 ` [PATCH 21/25] GCN Back-end (part 1/2) Andrew Stubbs
2018-11-09 19:11   ` Jeff Law
2018-11-12 12:13     ` Andrew Stubbs
2018-09-05 13:43 ` [PATCH 21/25] GCN Back-end (part 2/2) Andrew Stubbs
2018-09-05 14:22   ` Joseph Myers
2018-09-05 14:35     ` Andrew Stubbs
2018-09-05 14:44       ` Joseph Myers
2018-09-11 16:25         ` Andrew Stubbs
2018-09-11 16:41           ` Joseph Myers
2018-09-12 13:42     ` Andrew Stubbs
2018-09-12 15:32       ` Joseph Myers
2018-09-12 16:46         ` Andrew Stubbs
2018-09-12 16:50           ` Joseph Myers
2018-11-09 19:40   ` Jeff Law
2018-11-12 12:53     ` Andrew Stubbs
2018-11-12 17:20       ` Segher Boessenkool
2018-11-12 17:52         ` Andrew Stubbs
2018-11-12 18:33           ` Segher Boessenkool
2018-11-12 18:55           ` Jeff Law
2018-11-13 10:23             ` Andrew Stubbs
2018-11-13 10:33               ` Segher Boessenkool
2018-11-16 16:10             ` Segher Boessenkool
2018-11-17 14:07               ` Segher Boessenkool
2018-11-14 22:31       ` Jeff Law
2018-11-15  9:55         ` Andrew Stubbs
2018-11-16 13:33           ` Andrew Stubbs

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='CAFiYyc3QN6TEpbW0OOxyVPp9e5YE5B37a=iBxkKG-GrQfTCnMQ@mail.gmail.com' \
    --to=richard.guenther@gmail.com \
    --cc=ams@codesourcery.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=richard.sandiford@arm.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).