public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Sandiford <Richard.Sandiford@arm.com>
To: Richard Biener <richard.guenther@gmail.com>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [10/n] Make less use of get_same_sized_vectype
Date: Tue, 05 Nov 2019 15:34:00 -0000	[thread overview]
Message-ID: <mptbltqs5fj.fsf@arm.com> (raw)
In-Reply-To: <CAFiYyc1SaeCEVuuMrypcc44nFjQRfpd=1T8_4SQ57MYp4gjv5Q@mail.gmail.com>	(Richard Biener's message of "Tue, 5 Nov 2019 13:50:07 +0100")

Richard Biener <richard.guenther@gmail.com> writes:
> On Fri, Oct 25, 2019 at 2:41 PM Richard Sandiford
> <richard.sandiford@arm.com> wrote:
>>
>> Some callers of get_same_sized_vectype were dealing with operands that
>> are constant or defined externally, and so have no STMT_VINFO_VECTYPE
>> available.  Under the current model, using get_same_sized_vectype for
>> that case is equivalent to using get_vectype_for_scalar_type, since
>> get_vectype_for_scalar_type always returns vectors of the same size,
>> once a size is fixed.
>>
>> Using get_vectype_for_scalar_type is arguably more obvious though:
>> if we're using the same scalar type as we would for internal
>> definitions, we should use the same vector type too.  (Constant and
>> external definitions sometimes let us change the original scalar type
>> to a "nicer" scalar type, but that isn't what's happening here.)
>>
>> This is a prerequisite to supporting multiple vector sizes in the same
>> vec_info.
>
> This might change the actual type we get back, IIRC we mass-changed
> it in the opposite direction from your change in the past, because it's
> more obvious to relate the type used to another vector type on the
> stmt.  So isn't it better to use the new related_vector_type thing here?

I guess this is a downside of the patch order.  Hopefully this looks
like a more sensible decision after 16/n, where we also pass the
group size to get_vectype_for_scalar_type.  If not: :-)

At the moment, there can only ever be one vector type for a given scalar
type within a vector loop.  We don't e.g. allow one loop vector stmt to
use V2SI and another to V4SI, because all vectorised SIs have to be
compatible in the same way that the original scalar SIs were.  So once
we have a loop_vec_info and once we have a scalar type, there's only one
valid choice of vector type.  I think trying to circumvent that by using
get_related_vectype_for_scalar_type instead of get_vectype_for_scalar_type
would run the risk of introducing accidental mismatches.  I.e. if we do
it right, calling get_related_vectype_for_scalar_type would give the same
result as calling get_vectype_for_scalar_type (and so we might as well
just call get_vectype_for_scalar_type).  If we do it wrong we can end up
with a different type from the one that other statements were expecting.

BB vectorisation currently works the same way.  But after 16/n, there
is instead one vector type for each (bb_vinfo, scalar_type, group_size)
triple.  So that patch makes it possible for different SLP instances to
have different vector types for the same scalar type, but the choice is
still fixed within an SLP instance, in a similar way to loop
vectorisation.

So I think using anything other than get_vectype_for_scalar_type
would give a false sense of freedom.  Calling it directly is mostly
useful for temporaries, e.g. in epilogue reduction handling.

Thanks,
Richard

  reply	other threads:[~2019-11-05 15:34 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-25 12:32 [0/n] Support multiple vector sizes for vectorisation Richard Sandiford
2019-10-25 12:34 ` [6/n] Use build_vector_type_for_mode in get_vectype_for_scalar_type_and_size Richard Sandiford
2019-10-30 14:32   ` Richard Biener
2019-10-25 12:34 ` [7/n] Use consistent compatibility checks in vectorizable_shift Richard Sandiford
2019-10-30 14:33   ` Richard Biener
2019-10-25 12:39 ` [8/n] Replace autovectorize_vector_sizes with autovectorize_vector_modes Richard Sandiford
2019-10-30 14:48   ` Richard Biener
2019-10-30 16:33     ` Richard Sandiford
2019-11-11 10:30       ` Richard Sandiford
2019-11-11 14:33       ` Richard Biener
2019-11-12 17:55         ` Richard Sandiford
2019-11-13 14:32           ` Richard Biener
2019-11-13 16:16             ` Richard Sandiford
2019-10-25 12:41 ` [9/n] Replace vec_info::vector_size with vec_info::vector_mode Richard Sandiford
2019-11-05 12:47   ` Richard Biener
2019-10-25 12:43 ` [10/n] Make less use of get_same_sized_vectype Richard Sandiford
2019-11-05 12:50   ` Richard Biener
2019-11-05 15:34     ` Richard Sandiford [this message]
2019-11-05 16:09       ` Richard Biener
2019-10-25 12:44 ` [11/n] Support vectorisation with mixed vector sizes Richard Sandiford
2019-11-05 12:57   ` Richard Biener
2019-11-06 12:38     ` Richard Sandiford
2019-11-12  9:22       ` Richard Biener
2019-10-25 12:49 ` [12/n] [AArch64] Support vectorising with multiple " Richard Sandiford
2019-10-25 12:51 ` [13/n] Allow mixed vector sizes within a single vectorised stmt Richard Sandiford
2019-11-05 12:58   ` Richard Biener
2019-10-25 13:00 ` [14/n] Vectorise conversions between differently-sized integer vectors Richard Sandiford
2019-11-05 13:02   ` Richard Biener
2019-11-06 12:45     ` Richard Sandiford
2019-11-12  9:40       ` Richard Biener
2019-10-29 17:05 ` [15/n] Consider building nodes from scalars in vect_slp_analyze_node_operations Richard Sandiford
2019-11-05 13:07   ` Richard Biener
2019-10-29 17:14 ` [16/n] Apply maximum nunits for BB SLP Richard Sandiford
2019-11-05 13:22   ` Richard Biener
2019-11-05 14:09     ` Richard Sandiford
2019-11-14 12:22       ` Richard Biener
2019-11-05 20:10 ` [10a/n] Require equal type sizes for vectorised calls Richard Sandiford
2019-11-06  9:44   ` Richard Biener
2019-11-05 20:25 ` [11a/n] Avoid retrying with the same vector modes Richard Sandiford
2019-11-06  9:49   ` Richard Biener
2019-11-06 10:21     ` Richard Sandiford
2019-11-06 10:27       ` Richard Biener
2019-11-06 11:02         ` Richard Sandiford
2019-11-06 11:22           ` Richard Biener
2019-11-06 12:47             ` Richard Sandiford
2019-11-12  9:25               ` Richard Biener
2019-11-05 20:45 ` [17/17] Extend can_duplicate_and_interleave_p to mixed-size vectors Richard Sandiford
2019-11-14 12:23   ` Richard Biener

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=mptbltqs5fj.fsf@arm.com \
    --to=richard.sandiford@arm.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=richard.guenther@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).