Applied to trunk, thanks!
--Philipp.

On Mon, 4 Aug 2025 at 12:57, Richard Biener <rguent...@suse.de> wrote:
>
> On Mon, 4 Aug 2025, Konstantinos Eleftheriou wrote:
>
> > We were calling `is_store_forwarding` with a NULL value for `off_val`,
> > which was causing a null pointer dereference in `is_constant`, leading
> > to an ICE.
> >
> > This patch updates the call to `is_constant` in `is_store_forwarding`
> > and adds a check for `off_val`, in order to update it with the right
> > value.
>
> OK.
>
> Richard.
>
> > Bootstrapped/regtested on AArch64 and x86_64.
> >
> >       PR rtl-optimization/121303
> >
> > gcc/ChangeLog:
> >
> >       * avoid-store-forwarding.cc (is_store_forwarding): Add check
> >       for `off_val` in `is_store_forwarding`.
> >
> > gcc/testsuite/ChangeLog:
> >
> >       * gcc.target/i386/pr121303.c: New test.
> > ---
> >  gcc/avoid-store-forwarding.cc            |  9 +++++++-
> >  gcc/testsuite/gcc.target/i386/pr121303.c | 26 ++++++++++++++++++++++++
> >  2 files changed, 34 insertions(+), 1 deletion(-)
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr121303.c
> >
> > diff --git a/gcc/avoid-store-forwarding.cc b/gcc/avoid-store-forwarding.cc
> > index 1de6fd61d875..78ed736e0a3e 100644
> > --- a/gcc/avoid-store-forwarding.cc
> > +++ b/gcc/avoid-store-forwarding.cc
> > @@ -145,11 +145,18 @@ is_store_forwarding (rtx store_mem, rtx load_mem, 
> > HOST_WIDE_INT *off_val)
> >    poly_int64 load_offset, store_offset;
> >    rtx load_base = strip_offset (XEXP (load_mem, 0), &load_offset);
> >    rtx store_base = strip_offset (XEXP (store_mem, 0), &store_offset);
> > +  poly_int64 off_diff = store_offset - load_offset;
> > +
> > +  HOST_WIDE_INT off_val_tmp = 0;
> > +  bool is_off_diff_constant = off_diff.is_constant (&off_val_tmp);
> > +  if (off_val)
> > +    *off_val = off_val_tmp;
> > +
> >    return (MEM_SIZE (load_mem).is_constant ()
> >         && rtx_equal_p (load_base, store_base)
> >         && known_subrange_p (store_offset, MEM_SIZE (store_mem),
> >                              load_offset, MEM_SIZE (load_mem))
> > -       && (store_offset - load_offset).is_constant (off_val));
> > +       && is_off_diff_constant);
> >  }
> >
> >  /* Given a list of small stores that are forwarded to LOAD_INSN, try to
> > diff --git a/gcc/testsuite/gcc.target/i386/pr121303.c 
> > b/gcc/testsuite/gcc.target/i386/pr121303.c
> > new file mode 100644
> > index 000000000000..7900bce7e402
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/i386/pr121303.c
> > @@ -0,0 +1,26 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-O1 -favoid-store-forwarding" } */
> > +
> > +typedef struct {
> > +  bool is_ssa;
> > +} nir_src;
> > +
> > +nir_src nir_src_init;
> > +
> > +typedef struct {
> > +  nir_src src;
> > +  char swizzle[6];
> > +} nir_alu_src;
> > +
> > +void nir_src_bit_size(nir_src);
> > +
> > +void nir_lower_fb_read_instr() {
> > +  {
> > +    nir_alu_src alu_src = {nir_src_init}, src = alu_src;
> > +    nir_src_bit_size(src.src);
> > +  }
> > +  {
> > +    nir_alu_src alu_src = {nir_src_init}, src = alu_src;
> > +    nir_src_bit_size(src.src);
> > +  }
> > +}
> >
>
> --
> Richard Biener <rguent...@suse.de>
> SUSE Software Solutions Germany GmbH,
> Frankenstrasse 146, 90461 Nuernberg, Germany;
> GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to