public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <richard.guenther@gmail.com>
To: Andrew Stubbs <ams@codesourcery.com>,
	Richard Sandiford <richard.sandiford@arm.com>,
	 Jeff Law <jeffreyalaw@gmail.com>
Cc: GCC Development <gcc@gcc.gnu.org>
Subject: Re: Libgcc divide vectorization question
Date: Thu, 23 Mar 2023 08:24:17 +0100	[thread overview]
Message-ID: <CAFiYyc3jmZe+LXGP2ejqj8H7nQ36-zb3DC04MXYXdHkqtXX8+w@mail.gmail.com> (raw)
In-Reply-To: <7133bc52-6d18-0276-0b01-0f7dd239c2ed@codesourcery.com>

On Wed, Mar 22, 2023 at 4:57 PM Andrew Stubbs <ams@codesourcery.com> wrote:
>
> On 22/03/2023 13:56, Richard Biener wrote:
> >> Basically, the -ffast-math instructions will always be the fastest way,
> >> but the goal is that the default optimization shouldn't just disable
> >> vectorization entirely for any loop that has a divide in it.
> >
> > We try to express division as multiplication, but yes, I think there's
> > currently no way to tell the vectorizer that vectorized division is
> > available as libcall (nor for any other arithmetic operator that is not
> > a call in the first place).
>
> I have considered creating a new builtin code, similar to the libm
> functions, that would be enabled by a backend hook, or maybe just if
> TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION doesn't return NULL. The
> vectorizer would then use that, somehow. To treat it just like any other
> builtin it would have to be set before the vectorizer pass encounters
> it, which is probably not ideal for all the other passes that want to
> handle divide operators. Alternatively, the vectorizable_operation
> function could detect and introduce the builtin where appropriate.
>
> Would this be acceptable, or am I wasting my time planning something
> that would get rejected?

So why not make it possible for the target to specify there's a libcall
for a specific optab so the vectorizer would simply use vectorized
{TRUNC_DIV,RDIV}_EXPR but the RTL expander would emit a
libcall (in libgcc ways, thus divv2df3 or so)?  It feels wrong to add
some secondary machinery here (like for example having
.RDIV internal function calls instead of a / operator)

I think that for standard unops and binops that would be the default
behavior already, the only piece missing is the vectorizer looking
for a CODE_FOR_* optab handler and there's currently no way
to say "yes I have a libcall fallback" or "no, no libcall fallback available"
or for a target to specify those (maybe add a (define_libcall ...) alongside
(define_expand ...)?)

A short-circuit would be to use a new target hook to specify that
libcall availability iff the libcall emission works.  There's the remaining
question of whether the libcall emission code works good enough for
vector types, in cases the ABI for libcalls doesn't match the ABI
for regular calls.

Richard.

>
> Thanks
>
> Andrew

      reply	other threads:[~2023-03-23  7:24 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-21 16:59 Andrew Stubbs
2023-03-22 10:09 ` Richard Biener
2023-03-22 11:02   ` Andrew Stubbs
2023-03-22 13:56     ` Richard Biener
2023-03-22 15:57       ` Andrew Stubbs
2023-03-23  7:24         ` Richard Biener [this message]

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=CAFiYyc3jmZe+LXGP2ejqj8H7nQ36-zb3DC04MXYXdHkqtXX8+w@mail.gmail.com \
    --to=richard.guenther@gmail.com \
    --cc=ams@codesourcery.com \
    --cc=gcc@gcc.gnu.org \
    --cc=jeffreyalaw@gmail.com \
    --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).