On Thu, Jan 8, 2026 at 7:50 AM Alice Carlotti <[email protected]> wrote:
>
> On Wed, Jan 07, 2026 at 08:34:14PM -0800, Andrew Pinski wrote:
> > The problem here is function_table was not in the GGC memory space and not
> > streamed out. So even though the builtins were reloaded, function_table was
> > a nullptr as it was not reloaded.
> >
> > Also noticed initial_indexes should be marked with GTY so it is reloaded 
> > correctly
> > from PCH.
> >
> > Built and tested for aarch64-linux-gnu.
>
> There's a typo in the commit title ("aarch643").
I noticed that after I sent it so I had fixed it locally and I didn't
feel like sending a message saying I fixed it locally.

> Otherwise OK in 24h if there are no further concerns raised.
>
> Do you plan to eventually backport this as well?

Yes I do plan on backporting this.

Thanks,
Andrew

>
> Alice
>
> >
> >       PR target/123457
> > gcc/ChangeLog:
> >
> >       * config/aarch64/aarch64-sve-builtins.cc (struct 
> > registered_function_hasher):
> >       Change base class to ggc_ptr_hash.
> >       (initial_indexes): Mark with GTY.
> >       (function_table): Likewise.
> >       (handle_arm_sve_h): Allocate function_table from ggc instead of heap.
> >
> > Signed-off-by: Andrew Pinski <[email protected]>
> > ---
> >  gcc/config/aarch64/aarch64-sve-builtins.cc | 8 ++++----
> >  1 file changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc 
> > b/gcc/config/aarch64/aarch64-sve-builtins.cc
> > index 7d90501073a..84402ce5feb 100644
> > --- a/gcc/config/aarch64/aarch64-sve-builtins.cc
> > +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc
> > @@ -94,7 +94,7 @@ public:
> >  };
> >
> >  /* Hash traits for registered_function.  */
> > -struct registered_function_hasher : nofree_ptr_hash <registered_function>
> > +struct registered_function_hasher : ggc_ptr_hash <registered_function>
> >  {
> >    typedef function_instance compare_type;
> >
> > @@ -1045,12 +1045,12 @@ tree acle_svprfop;
> >  static GTY(()) vec<registered_function *, va_gc> *registered_functions;
> >
> >  /* Stores the starting function index for each pragma handler.  */
> > -static unsigned int initial_indexes[NUM_PRAGMA_HANDLERS];
> > +static  GTY(()) unsigned int initial_indexes[NUM_PRAGMA_HANDLERS];
> >
> >  /* All registered function decls, hashed on the function_instance
> >     that they implement.  This is used for looking up implementations of
> >     overloaded functions.  */
> > -static hash_table<registered_function_hasher> *function_table;
> > +static GTY(()) hash_table<registered_function_hasher> *function_table;
> >
> >  /* Index 0 maps all overloaded function names that we've registered so far 
> > to
> >     their associated function_instances.  Index 1 does the same for 
> > functions
> > @@ -4903,7 +4903,7 @@ handle_arm_sve_h (bool function_nulls_p)
> >    register_svprfop ();
> >
> >    /* Define the functions.  */
> > -  function_table = new hash_table<registered_function_hasher> (1023);
> > +  function_table = hash_table<registered_function_hasher>::create_ggc 
> > (1023);
> >    function_builder builder (arm_sve_handle, function_nulls_p);
> >    for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i)
> >      builder.register_function_group (function_groups[i]);
> > --
> > 2.43.0
> >

Reply via email to