From: Marc Glisse <marc.glisse@inria.fr>
To: Richard Sandiford <richard.sandiford@arm.com>
Cc: gcc-patches@gcc.gnu.org
Subject: Re: VEC_COND_EXPR optimizations
Date: Fri, 31 Jul 2020 13:38:37 +0200 (CEST) [thread overview]
Message-ID: <alpine.DEB.2.23.453.2007311328550.5703@stedding.saclay.inria.fr> (raw)
In-Reply-To: <mptbljwaq6g.fsf@arm.com>
On Fri, 31 Jul 2020, Richard Sandiford wrote:
> Marc Glisse <marc.glisse@inria.fr> writes:
>> +/* (c ? a : b) op (c ? d : e) --> c ? (a op d) : (b op e) */
>> + (simplify
>> + (op (vec_cond:s @0 @1 @2) (vec_cond:s @0 @3 @4))
>> + (with
>> + {
>> + tree rhs1, rhs2 = NULL;
>> + rhs1 = fold_binary (op, type, @1, @3);
>> + if (rhs1 && is_gimple_val (rhs1))
>> + rhs2 = fold_binary (op, type, @2, @4);
>> + }
>> + (if (rhs2 && is_gimple_val (rhs2))
>> + (vec_cond @0 { rhs1; } { rhs2; })))))
>> +#endif
>
> This one looks dangerous for potentially-trapping ops.
I would expect the operation not to be folded if it can trap. Is that too
optimistic?
>> +/* (v ? w : 0) ? a : b is just (v & w) ? a : b */
>> +(simplify
>> + (vec_cond (vec_cond:s @0 @3 integer_zerop) @1 @2)
>> + (vec_cond (bit_and @0 @3) @1 @2))
>
> Does something check automatically that @0 and @3 have compatible types?
My memory of this dates from before the avx512-related changes, but at
least at the time, the type of the condition in vec_cond_expr had to have
the same size and number of elements as the result, and have signed
integral elements. Now the size constraint has changed, but it still looks
like for a given number of elements and size (this last one ignored for
avx512), there is essentially a single type that can appear as condition.
Is this wrong for x86? For SVE?
I could add some types_match conditions if that seems too unsafe...
--
Marc Glisse
next prev parent reply other threads:[~2020-07-31 11:38 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-30 7:49 Marc Glisse
2020-07-31 11:18 ` Richard Sandiford
2020-07-31 11:38 ` Marc Glisse [this message]
2020-07-31 11:43 ` Richard Biener
2020-07-31 11:57 ` Marc Glisse
2020-07-31 12:50 ` Richard Sandiford
2020-07-31 12:59 ` Richard Biener
2020-07-31 13:01 ` Marc Glisse
2020-07-31 13:13 ` Marc Glisse
2020-07-31 11:35 ` Richard Biener
2020-07-31 11:39 ` Richard Biener
2020-07-31 11:47 ` Richard Biener
2020-07-31 12:08 ` Richard Biener
2020-07-31 12:12 ` Marc Glisse
2020-08-05 13:32 ` VEC_COND_EXPR optimizations v2 Marc Glisse
2020-08-05 14:24 ` Richard Biener
2020-08-06 8:17 ` Christophe Lyon
2020-08-06 9:05 ` Marc Glisse
2020-08-06 11:25 ` Christophe Lyon
2020-08-06 11:42 ` Marc Glisse
2020-08-06 12:00 ` Christophe Lyon
2020-08-06 18:07 ` Marc Glisse
2020-08-07 6:38 ` Richard Biener
2020-08-07 8:33 ` Marc Glisse
2020-08-07 8:47 ` Richard Biener
2020-08-07 12:15 ` Marc Glisse
2020-08-07 13:04 ` Richard Biener
2020-08-06 10:29 ` Richard Biener
2020-08-06 11:11 ` Marc Glisse
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=alpine.DEB.2.23.453.2007311328550.5703@stedding.saclay.inria.fr \
--to=marc.glisse@inria.fr \
--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).