On Fri, Aug 02, 2024 at 11:58:19AM +0000, Prathamesh Kulkarni wrote:
> diff --git a/gcc/data-streamer-in.cc b/gcc/data-streamer-in.cc
> index 7dce2928ef0..7b9d8cc0129 100644
> --- a/gcc/data-streamer-in.cc
> +++ b/gcc/data-streamer-in.cc
> @@ -182,10 +182,8 @@ streamer_read_hwi (class lto_input_block *ib)
>  poly_uint64
>  streamer_read_poly_uint64 (class lto_input_block *ib)
>  {
> -  poly_uint64 res;
> -  for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
> -    res.coeffs[i] = streamer_read_uhwi (ib);
> -  return res;
> +  return poly_int_read_common<poly_int_traits<poly_uint64>::coeff_type>
> +      (streamer_read_uhwi, ib);

Can't you use
  using coeff_type = poly_int_traits <poly_uint64>::coeff_type;
  return poly_int_read_common <coeff_type> (streamer_read_uhwi, ib);
?
The call arguments on different line from the actual function name are
ugly.

> --- a/gcc/data-streamer.cc
> +++ b/gcc/data-streamer.cc
> @@ -28,6 +28,12 @@ along with GCC; see the file COPYING3.  If not see
>  #include "cgraph.h"
>  #include "data-streamer.h"
>  
> +/* For offloading -- While streaming-out, host NUM_POLY_INT_COEFFS is
> +   stored at beginning of mode_table. While streaming-in, the value is read 
> in
> +   host_num_poly_int_coeffs.  */
> +
> +unsigned host_num_poly_int_coeffs = 0;

I think it would be better to guard this with
#ifdef ACCEL_COMPILER.

> +template<typename C, typename F, typename ...Args>
> +poly_int<NUM_POLY_INT_COEFFS, C>
> +poly_int_read_common (F read_coeff, Args ...args)
> +{
> +  poly_int<NUM_POLY_INT_COEFFS, C> x;
> +  unsigned i;
> +
> +#ifndef ACCEL_COMPILER
> +  host_num_poly_int_coeffs = NUM_POLY_INT_COEFFS;
> +#endif

And instead of modifying a global var again and again do
#ifdef ACCEL_COMPILER
  const unsigned num_poly_int_coeffs = host_num_poly_int_coeffs;
  gcc_assert (num_poly_int_coeffs > 0);
#else
  const unsigned num_poly_int_coeffs = NUM_POLY_INT_COEFFS;
#endif
and use num_poly_int_coeffs in the functions.

        Jakub

Reply via email to