On Tue, Jul 22, 2025, 11:05 AM Remi Machet <rmac...@nvidia.com> wrote:

>
> On 7/22/25 13:32, Andrew Pinski wrote:
> > External email: Use caution opening links or attachments
> >
> >
> > Regrename can fail in some case and `insn_rr[INSN_UID (insn)].op_info`
> > will be null. The FMA steering code was not expecting the failure to
> happen.
> > This started to happen after early RA was added but it has been a latent
> bug
> > before that.
> >
> > Build and tested for aarch64-linux-gnu.
> >
> >          PR target/120119
> >
> > gcc/ChangeLog:
> >
> >          * config/aarch64/cortex-a57-fma-steering.cc
> (func_fma_steering::analyze):
> >          Skip if renaming fails.
> >
> > gcc/testsuite/ChangeLog:
> >
> >          * g++.dg/torture/pr120119-1.C: New test.
>
> Hi,
>
> Looks good to me (but I am not a reviewer nor an approver).
>
> Just for my own education, why append a -1 in the test name considering
> there is only one test?
>

It is a new habit i picked up in recent years. When writing the testcases,
I start with -1 and then i dont need to rename them if I have another one.
It is already -1.

In some cases i would use a more descriptive name for the testcase rather
than the prN name but I have no reason why do either way. (Well smaller
patches i use the prN out of laziness really).

Thanks,
Andrew



> Remi
>
> >
> > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> > ---
> >   gcc/config/aarch64/cortex-a57-fma-steering.cc |  5 +++++
> >   gcc/testsuite/g++.dg/torture/pr120119-1.C     | 15 +++++++++++++++
> >   2 files changed, 20 insertions(+)
> >   create mode 100644 gcc/testsuite/g++.dg/torture/pr120119-1.C
> >
> > diff --git a/gcc/config/aarch64/cortex-a57-fma-steering.cc
> b/gcc/config/aarch64/cortex-a57-fma-steering.cc
> > index fd6da66d855..f7675bed13d 100644
> > --- a/gcc/config/aarch64/cortex-a57-fma-steering.cc
> > +++ b/gcc/config/aarch64/cortex-a57-fma-steering.cc
> > @@ -948,6 +948,11 @@ func_fma_steering::analyze ()
> >
> >            /* Search the chain where this instruction is (one of) the
> root.  */
> >            dest_op_info = insn_rr[INSN_UID (insn)].op_info;
> > +
> > +         /* Register rename could fail. */
> > +         if (!dest_op_info)
> > +           continue;
> > +
> >            dest_regno = REGNO (SET_DEST (PATTERN (insn)));
> >            for (i = 0; i < dest_op_info->n_chains; i++)
> >              {
> > diff --git a/gcc/testsuite/g++.dg/torture/pr120119-1.C
> b/gcc/testsuite/g++.dg/torture/pr120119-1.C
> > new file mode 100644
> > index 00000000000..1206feb310b
> > --- /dev/null
> > +++ b/gcc/testsuite/g++.dg/torture/pr120119-1.C
> > @@ -0,0 +1,15 @@
> > +// { dg-do compile }
> > +// { dg-additional-options "-mcpu=cortex-a57" { target aarch64*-*-* } }
> > +
> > +// PR target/120119
> > +
> > +struct a {
> > +  float operator()(int b, int c) { return d[c * 4 + b]; }
> > +  float *d;
> > +};
> > +float e(float *);
> > +auto f(a b) {
> > +  float g[]{b(1, 1), b(2, 1), b(3, 1), b(1, 2), b(2, 2), b(3, 2), b(1,
> 3),
> > +            b(2, 3), b(3, 3), b(3, 2), b(1, 3), b(2, 3), b(3, 3)};
> > +  return b.d[0] * e(g);
> > +}
> > --
> > 2.43.0
> >
>

Reply via email to