https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66119

--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to James Greenhalgh from comment #7)
> (In reply to Richard Biener from comment #5)
> > DEFPARAM (PARAM_SRA_MAX_SCALARIZATION_SIZE_SPEED,
> >           "sra-max-scalarization-size-Ospeed",
> >           "Maximum size, in storage units, 
> > 
> > storage units!  But the value seems to be in bits?  It gets used as
> > 
> >             if (tree_to_uhwi (TYPE_SIZE (TREE_TYPE (var)))
> >                 <= max_scalarization_size)
> > 
> 
> Well, that part should have been covered by:
> 
> +  unsigned max_scalarization_size
> +    = (optimize_function_for_size_p (cfun)
> +     ? PARAM_VALUE (PARAM_SRA_MAX_SCALARIZATION_SIZE_SIZE)
> +     : PARAM_VALUE (PARAM_SRA_MAX_SCALARIZATION_SIZE_SPEED))
> +      * BITS_PER_UNIT;
> 
> From the original patch, 
> 
> > Looks like get_move_ratio returns different things at SRA time (if I re-call
> > it)
> > and the time it gets invoked in toplev.c.
> 
> But, yes these parameters will cause a difference in code generation if
> previously MOVE_RATIO could return different values at different times, as
> it might well have if target_option_override set up a structure used by
> MOVE_RATIO.
> 
> The patch I applied carries the hidden assumption that MOVE_RATIO is
> constant. Clearly there are a number of situations we might not want that to
> be true (say, for switchable targets - which I don't think your patch will
> help).

So maybe instead compute that "default" in SRA itself?

Reply via email to