public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Hongtao Liu <crazylht@gmail.com>
To: Martin Sebor <msebor@gmail.com>
Cc: Segher Boessenkool <segher@kernel.crashing.org>,
	Hongtao Liu <hongtao.liu@intel.com>,
	 GCC Patches <gcc-patches@gcc.gnu.org>,
	Bill Schmidt <wschmidt@linux.ibm.com>,
	 David Edelsohn <dje.gcc@gmail.com>
Subject: Re: [PATCH] rs6000/test: Adjust some cases due to O2 vect [PR102658]
Date: Wed, 13 Oct 2021 11:34:11 +0800	[thread overview]
Message-ID: <CAMZc-bxcbSejfAEwZhU28vNixA_Ju1-LqN_HXrCwL22ZQDwqzA@mail.gmail.com> (raw)
In-Reply-To: <5966f37c-a51e-593c-4ee2-05c3d04c89fc@gmail.com>

On Tue, Oct 12, 2021 at 11:49 PM Martin Sebor <msebor@gmail.com> wrote:
>
> On 10/11/21 8:31 PM, Hongtao Liu wrote:
> > On Tue, Oct 12, 2021 at 4:08 AM Martin Sebor via Gcc-patches
> > <gcc-patches@gcc.gnu.org> wrote:
> >>
> >> On 10/11/21 11:43 AM, Segher Boessenkool wrote:
> >>> On Mon, Oct 11, 2021 at 10:23:03AM -0600, Martin Sebor wrote:
> >>>> On 10/11/21 9:30 AM, Segher Boessenkool wrote:
> >>>>> On Mon, Oct 11, 2021 at 10:47:00AM +0800, Kewen.Lin wrote:
> >>>>>> - For generic test cases, it follows the existing suggested
> >>>>>> practice with necessary target/xfail selector.
> >>>>>
> >>>>> Not such a great choice.  Many of those tests do not make sense with
> >>>>> vectorisation enabled.  This should have been thought about, in some
> >>>>> cases resulting in not running the test with vectorisation enabled, and
> >>>>> in some cases duplicating the test, once with and once without
> >>>>> vectorisation.
> >>>>
> >>>> The tests detect bugs that are present both with and without
> >>>> vetctorization, so they should pass both ways.
> >>>
> >>> Then it should be tested both ways!  This is my point.
> >>
> >> Agreed.  (Most warnings are tested with just one set of options,
> >> but it's becoming apparent that the middle end ones should be
> >> exercised more extensively.)
> >>
> >>>
> >>>> That they don't
> >>>> tells us that that the warnings need work (they were written with
> >>>> an assumption that doesn't hold anymore).
> >>>
> >>> They were written in world A.  In world B many things behave
> >>> differently.  Transplanting the testcases from A to B without any extra
> >>> analysis will not test what the testcases wanted to test, and possibly
> >>> nothing at all anymore.
> >>
> >> Absolutely.
> >>
> >>>
> >>>> We need to track that
> >>>> work somehow, but simply xfailing them without making a record
> >>>> of what underlying problem the xfails correspond to isn't the best
> >>>> way.  In my experience, what works well is opening a bug for each
> >>>> distinct limitation (if one doesn't already exist) and adding
> >>>> a reference to it as a comment to the xfail.
> >>>
> >>> Probably, yes.
> >>>
> >>>>> But you are just following established practice, so :-)
> >>>
> >>> I also am okay with this.  If it was decided x86 does not have to deal
> >>> with these (generic!) problems, then why should we do other people's
> >>> work?
> >>
> >> I don't know that anything was decided.  I think those changes
> >> were made in haste, and (as you noted in your review of these
> >> updates to them), were incomplete (missing comments referencing
> >> the underlying bugs or limitations).  Now that we've noticed it
> >> we should try to fix it.  I'm not expecting you (or Kwen) to do
> >> other people's work, but it would help to let them/us know that
> >> there is work for us to do.  I only noticed the problem by luck.
> >>
> >>>>>> -  struct A1 a = { 0, { 1 } };   // { dg-warning
> >>>>>> "\\\[-Wstringop-overflow" "" { target { i?86-*-* x86_64-*-* } } }
> >>>>>> +  struct A1 a = { 0, { 1 } };   // { dg-warning
> >>>>>> "\\\[-Wstringop-overflow" "" { target { i?86-*-* x86_64-*-* powerpc*-*-*
> >>>>>> } } }
> >>>>
> >>>> As I mentioned in the bug, when adding xfails for regressions
> >>>> please be sure to reference the bug that tracks the underlying
> >>>> root cause.]
> >>>
> >>> You are saying this to whoever added that x86 xfail I hope.
> >>
> >> In general it's an appeal to both authors and reviewers of such
> >> changes.  Here, it's mostly for Hongtao who apparently added all
> >> these undocumented xfails.
> >>
> >>>> There may be multiple problems, and we need to
> >>>> identify what it is in each instance.  As the author of
> >>>> the tests I can help with that but not if I'm not in the loop
> >>>> on these changes (it would seem prudent to get the author's
> >>>> thoughts on such sweeping changes to their work).
> >>>
> >>> Yup.
> >>>
> >>>> I discussed one of these failures with Hongtao in detail at
> >>>> the time autovectorization was being enabled and made the same
> >>>> request then but I didn't realize the problem was so pervasive.
> >>>>
> >>>> In addition, the target-specific conditionals in the xfails are
> >>>> going to be difficult to maintain.
> >>>
> >>> It is a cop-out.  Especially because it makes no comment why it is
> >>> xfailed (which should *always* be explained!)
> >>>
> >>>> It might be okay for one or
> >>>> two in a single test but for so many we need a better solution
> >>>> than that.  If autovectorization is only enabled for a subset
> >>>> of targets then a solution might be to add a new DejagGNU test
> >>>> for it and conditionalize the xfails on it.
> >>>
> >>> That, combined with duplicating these tests and still testing the
> >>> -fno-vectorization situation properly.  Those tests tested something.
> >>> With vectorisation enabled they might no longer test that same thing,
> >>> especially if the test fails now!
> >>
> >> Right.  The original autovectorization change was made either
> >> without a full analysis of its impact on the affected warnings,
> >> or its impact wasn't adequately captured (either in the xfails
> >> comments or by opening bugs for them).  Now that we know about
> >> this we should try to fix it.  The first step toward that is
> >> to review the xfailed test cases and for each add a comment with
> >> the bug that captures its root cause.
> >>
> >> Hongtao, please let me know if you are going to work on that.
> > I will make a copy of the tests to test the -fno-tree-vectorize
> > scenario(the original test).
> > For the xfails, they're analyzed and recorded in pr102462/pr102697,
> > sorry for not adding comments to them.
>
> Thanks for raising pr102697!  It captures the essence of the bug
> that's masked by the vectorization of the invalid store.  This is
> due to the hack I pointed to in the discussion below:
>
> https://gcc.gnu.org/pipermail/gcc-patches/2021-September/580172.html
>
> > The root causes for those xfails are divided into 2 categories:
> >
> > 1. All accesses are out of bound, and after vectorization, there are
> > some warnings missing.(Because there is only 1 access after
> > vectorization, 2 accesses w/o vectorization, and diagnostic is based
> > on access).
>
> If these involve -Wstringop-overflow for accesses that span
> multiple subobjects, as in writing past the end of one member
> and over the following member, then that would be due to
> pr102697 (the hack above).
>
> > 2. Part of accesses are inbound, part of accesses are out of bound,
> > and after vectorization, the warning goes from out of bound line to
> > inbound line.
>
> Right, this is the issue we talked about during the review of
> your patch, and I think is captured in the test case in comment
> #4 on pr102462.
>
> >
> > for pr102697, it looks like the testcase is not well written.
>
> The test case is correct.  I've added my comments to the PR
> and confirmed it as a GCC 12 regression.  (I may not have
> the time to fix it for GCC 12 but I will plan to get to it
> for GCC 13 unless someone beats me to it.)
>
> I think it might be helpful to open a bug just for case (2)
> and reference it in all the corresponding xfails.
>
> pr102462 talks about three distinct cases and mentions
> -Warray-bounds as well as -Wstringop-overflow.  It's not clear
> from it exactly which of the three cases it's meant to be about.
>
> There is also an undocumented xfail in
> g++.dg/warn/Wuninitialized-13.C.  It should get its own bug
> even if the essence of the problem is the same (the warning
> doesn't share an implementation with -Warray-bounds or
> -Wstringop-overflow so a fix will most likely need to be
> separate from one for the other bugs).
>
> Coming back to the xfail conditionals, do you think you'll
> be able to put together some target-supports magic so they
> don't have to enumerate all the affected targets?
>
Those failure testcases(exposed by x86 part)can be extracted and
categorized into 3 below testcases.
Question is can we check vectorization ability in
dg-require-effective-target for those testcase?
If we can, we  can dynamically check whether each target supports this xfail.

foo is used for vector(2) char, foo1 vector(4) char, foo2 vector(2) short.

char p[4] __attribute__ ((aligned (4)));
void
foo ()
{
  p[0] = 1;
  p[1] = 2;
  p[2] = 3;
}

void
foo1 ()
{
  p[0] = 0;
  p[1] = 1;
  p[2] = 2;
  p[3] = 3;
}

void
foo2 (short* q)
{
  q[0] = 0;
  q[1] = 1;
}
> Martin




--
BR,
Hongtao

  parent reply	other threads:[~2021-10-13  3:27 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-11  2:47 Kewen.Lin
2021-10-11 15:30 ` Segher Boessenkool
2021-10-11 16:23   ` Martin Sebor
2021-10-11 17:43     ` Segher Boessenkool
2021-10-11 20:07       ` Martin Sebor
2021-10-12  2:31         ` Hongtao Liu
2021-10-12 15:49           ` Martin Sebor
2021-10-12 16:18             ` Segher Boessenkool
2021-10-12 17:15               ` Martin Sebor
2021-10-12 17:45                 ` Jeff Law
2021-10-12 18:01                 ` Segher Boessenkool
2021-10-13  3:34             ` Hongtao Liu [this message]
2021-10-13  6:29               ` Hongtao Liu
2021-10-13  7:43                 ` Kewen.Lin
2021-10-13 14:36                   ` Martin Sebor
2021-10-14  7:11                   ` [PATCH] Adjust testcase for O2 vectorization liuhongt
2021-10-14  7:52                     ` Bernhard Reutner-Fischer
2021-10-14 10:56                     ` Kewen.Lin
2021-10-15  7:11                       ` Kewen.Lin
2021-10-18  4:47                         ` Hongtao Liu
2021-10-15 15:37                     ` Martin Sebor
2021-10-18  4:38                       ` Hongtao Liu
2021-10-18 15:11                         ` Martin Sebor
2021-10-19  9:03                           ` liuhongt
2021-10-20 11:34                             ` Christophe Lyon
2021-10-21  1:20                               ` Hongtao Liu
2021-10-21  2:06                                 ` Hongtao Liu
2021-10-21  2:07                                   ` Hongtao Liu
2021-10-12 18:11         ` [PATCH] rs6000/test: Adjust some cases due to O2 vect [PR102658] Segher Boessenkool

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=CAMZc-bxcbSejfAEwZhU28vNixA_Ju1-LqN_HXrCwL22ZQDwqzA@mail.gmail.com \
    --to=crazylht@gmail.com \
    --cc=dje.gcc@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=hongtao.liu@intel.com \
    --cc=msebor@gmail.com \
    --cc=segher@kernel.crashing.org \
    --cc=wschmidt@linux.ibm.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).