public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "rguenth at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug tree-optimization/113576] [14 regression] 502.gcc_r hangs  r14-8223-g1c1853a70f9422169190e65e568dcccbce02d95c
Date: Thu, 01 Feb 2024 10:04:45 +0000	[thread overview]
Message-ID: <bug-113576-4-8Swye5c0Lw@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-113576-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113576

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ams at gcc dot gnu.org

--- Comment #35 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Sandiford from comment #34)
> (In reply to Richard Biener from comment #32)
> > Btw, AVX512 knotb will invert all 8 bits and there's no knot just affecting
> > the lowest 4 or 2 bits.
> > 
> > It all feels like desaster waiting to happen ;)
> Yes :)
> 
> > For example BIT_NOT_EXPR is RTL expanded like
> > 
> >     case BIT_NOT_EXPR:
> >       op0 = expand_expr (treeop0, subtarget,
> >                          VOIDmode, EXPAND_NORMAL);
> >       if (modifier == EXPAND_STACK_PARM)
> >         target = 0;
> >       /* In case we have to reduce the result to bitfield precision
> >          for unsigned bitfield expand this as XOR with a proper constant
> >          instead.  */
> >       if (reduce_bit_field && TYPE_UNSIGNED (type))
> >         {
> >           int_mode = SCALAR_INT_TYPE_MODE (type);
> >           wide_int mask = wi::mask (TYPE_PRECISION (type),
> >                                     false, GET_MODE_PRECISION (int_mode));
> >   
> >           temp = expand_binop (int_mode, xor_optab, op0,
> >                                immed_wide_int_const (mask, int_mode),
> >                                target, 1, OPTAB_LIB_WIDEN);
> > 
> > so we could, for VECTOR_BOOLEAN_TYPE_P with integer mode and
> > effective bit-precision set reduce_bit_field and fixup the fallout
> > (not sure why the above is only for TYPE_UNSIGNED).
> >
> > At least it feels similar and doing things the opposite for vectors
> > (fixing up at uses) would be odd?
> Do you know why we take this approach for integers?  Is it for
> correctness?  Or is it supposed to be more optimal?

It's done for correctness.  The main thing was bitfields > int which
end up as bit-precision types in GIMPLE.

> I can imagine that, for arithmetic types, there are going to many
> more instances where upper bits matter (division, right shifts,
> MIN/MAX, etc.).  So perhaps reducing every result is a good
> trade-off there.

I think it was the easiest place to fix up and to make sure later
RTL opts and backends do not interfere.

> But there's an argument that it should be rare for the padding
> bits in a vector to matter, since very few things would look at the
> padding bits anyway.  So perhaps the cost should be borne by the
> operations that need canonical integers.

But what happens when an operation not needing canonical intergers
is transformed, say by combine or simplify-rtx to one that needs?
I think the reduce_bitfield code was trying to be safe here.

Actual define_insns not needing canonical padding could do like
we now require scalar shifts - they could match a variant with
the mask canonicalization op and hope for combine eliminating that.
Of course that will explode in case it's the majority of cases ...

> Not a strong opinion though, more just devil's advocate.

Yeah.  The important thing seems to be that the info this is a
bit-precision QImode isn't lost ... which points to that using
plain integer modes was a very bad choice ...

> There again, if e.g. the x86 API guarantees memcmp equality between
> two masks whose significant bits are equal, then we probably have
> no choice.

That's a good question, possibly most relevant for the OpenMP SIMD ABI.

The AVX512 APIs use integer types everywhere, there's no intrinsic
for ktest itself, but _mm512_kortestz and kortestc and also _mm512_knot
(oddly only for HImode).  So it at least seems to - from a quick look -
be "broken" in the intrinsic API as well.  At least we have
_mm_cmp_sd_mask producing a QImode mask, _mm512_knot inverting too
many bits.  So the user must be aware of the "padding".

One could argue it's the vectorizers job to fixup then, but of course
it doesn't get to see the correct vector types here.

Given we have the fixup in CTOR expansion the issue at hand could be
fixed by mirroring that in VECTOR_CST expansion for now.

Andrew - I suppose GCN also has cbranch, can you try to check what happens
for < 8 lane vector modes there?

  parent reply	other threads:[~2024-02-01 10:04 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-24 10:05 [Bug tree-optimization/113576] New: " liuhongt at gcc dot gnu.org
2024-01-24 10:07 ` [Bug tree-optimization/113576] " liuhongt at gcc dot gnu.org
2024-01-24 12:27 ` rguenth at gcc dot gnu.org
2024-01-24 13:37 ` rguenth at gcc dot gnu.org
2024-01-24 13:47 ` rguenth at gcc dot gnu.org
2024-01-24 13:50 ` rguenth at gcc dot gnu.org
2024-01-25  1:03 ` liuhongt at gcc dot gnu.org
2024-01-25  6:28 ` liuhongt at gcc dot gnu.org
2024-01-25  7:02 ` liuhongt at gcc dot gnu.org
2024-01-25  7:39 ` cvs-commit at gcc dot gnu.org
2024-01-25  8:34 ` liuhongt at gcc dot gnu.org
2024-01-25  8:52 ` rguenth at gcc dot gnu.org
2024-01-25  9:15 ` rguenther at suse dot de
2024-01-25  9:26 ` rsandifo at gcc dot gnu.org
2024-01-25 10:09 ` liuhongt at gcc dot gnu.org
2024-01-25 10:13 ` rguenth at gcc dot gnu.org
2024-01-25 12:24 ` rsandifo at gcc dot gnu.org
2024-01-25 13:03 ` tnfchris at gcc dot gnu.org
2024-01-25 13:28 ` rsandifo at gcc dot gnu.org
2024-01-25 14:12 ` rguenther at suse dot de
2024-01-26  2:24 ` liuhongt at gcc dot gnu.org
2024-01-26  3:12 ` liuhongt at gcc dot gnu.org
2024-01-26  5:43 ` liuhongt at gcc dot gnu.org
2024-01-29 17:28 ` tnfchris at gcc dot gnu.org
2024-01-29 18:31 ` tnfchris at gcc dot gnu.org
2024-01-30  3:29 ` liuhongt at gcc dot gnu.org
2024-01-30  7:46 ` tnfchris at gcc dot gnu.org
2024-01-30  8:26 ` rguenth at gcc dot gnu.org
2024-01-30  8:34 ` liuhongt at gcc dot gnu.org
2024-01-30  8:56 ` rguenth at gcc dot gnu.org
2024-01-30 10:12 ` rsandifo at gcc dot gnu.org
2024-01-30 10:39 ` rguenther at suse dot de
2024-02-01  8:59 ` rguenth at gcc dot gnu.org
2024-02-01  9:06 ` jakub at gcc dot gnu.org
2024-02-01  9:18 ` rsandifo at gcc dot gnu.org
2024-02-01 10:04 ` rguenth at gcc dot gnu.org [this message]
2024-02-07 15:08 ` rguenth at gcc dot gnu.org
2024-02-08  1:18 ` liuhongt at gcc dot gnu.org
2024-02-08  1:58 ` liuhongt at gcc dot gnu.org
2024-02-08  4:22 ` liuhongt at gcc dot gnu.org
2024-02-08  7:36 ` jakub at gcc dot gnu.org
2024-02-08 10:35 ` rguenth at gcc dot gnu.org
2024-02-08 10:48 ` rguenth at gcc dot gnu.org
2024-02-08 14:58 ` liuhongt at gcc dot gnu.org
2024-02-08 15:07 ` liuhongt at gcc dot gnu.org
2024-02-08 15:19 ` liuhongt at gcc dot gnu.org
2024-02-14 12:07 ` cvs-commit at gcc dot gnu.org
2024-02-14 12:38 ` rguenth at gcc dot gnu.org
2024-02-14 13:48 ` ubizjak at gmail dot com
2024-02-14 13:54 ` rguenth at gcc dot gnu.org
2024-02-14 13:59 ` jakub at gcc dot gnu.org
2024-02-14 14:01 ` jakub at gcc dot gnu.org
2024-02-14 14:31 ` ubizjak at gmail dot com
2024-02-14 14:36 ` jakub at gcc dot gnu.org
2024-02-14 15:07 ` rguenth at gcc dot gnu.org
2024-02-14 15:26 ` ubizjak at gmail dot com
2024-02-14 20:18 ` ubizjak at gmail dot com
2024-02-18  2:10 ` liuhongt at gcc dot gnu.org

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=bug-113576-4-8Swye5c0Lw@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /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).