On Tue, 18 May 2021, Richard Earnshaw wrote:
> On 17/05/2021 21:52, Hans-Peter Nilsson wrote:
> > On Thu, 13 May 2021, Richard Earnshaw via Gcc-patches wrote:
> > >
> > > Normally we expect the gimple optimizers to fold away comparisons that
> > > are always true, but at some lower optimization levels this is not
> > > always the case, so the back-end has to be able to generate correct
> > > code in these cases.
> > >
> > > In this example, we have a comparison of the form
> > >
> > >    (unsigned long long) op <= ~0ULL
> > >
> > > which, of course is always true.
> > >
> > > Normally, in the arm back-end we handle these expansions where the
> > > immediate cannot be handled directly by adding 1 to the constant and
> > > then adjusting the comparison operator:
> > >
> > >    (unsigned long long) op < CONST + 1
> > >
> > > but we cannot do that when the constant is already the largest value.
> >
> > Sounds like a target-independent bug in the making, lurking and
> > waiting for a target to do the above adjustment but missing the
> > bounds-check.
>
> The normal canonicalize_comparison operation tries to simplify expressions by
> reducing the value towards zero and making the appropriate adjustment to the
> comparison.  Arm is a bit different due to the way constants are encoded and
> also because of the limitations on how we expand DImode in the backend.  So I
> don't think this is quite as general as you suggest.

It just seemed I had done something similar somewhere in another
port, though I can't find it.  I could also have only read it...

> > >   gcc/testsuite/gcc.dg/pr100563.c |  9 +++++++++
> > >   2 files changed, 34 insertions(+), 4 deletions(-)
> > >   create mode 100644 gcc/testsuite/gcc.dg/pr100563.c
> >
> > I'll therefore humbly suggest the test-case adjusted to be a
> > run-time check (and if not done by others, projecting to do that
> > myself...some time late next summer9.
>
> That being said, I won't object if you want to /add/ an additional test to try
> to catch this; but this test had to be quite carefully crafted to hit the
> specific bug in the arm expanders, so I'd prefer that it wasn't modified
> directly.

Right.  I expressed myself poorly as I share your concerns on
this point: after the public commit of a test that had no error,
it must never be modified.  To wit, such an "adjustment" must be
made in the form of an additional, separate test.

brgds, H-P

Reply via email to