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

--- Comment #9 from Peter Bergner <bergner at gcc dot gnu.org> ---
(In reply to Surya Kumari Jangala from comment #8)
> However, while computing the save/restore cost, we are considering only the
> memory move cost but not the BB frequency. I think it is important to
> consider the frequency too. 

Yes, you'll need to factor in the BB frequency.  Since the save/restore code
will go into (at this point modulo shrink-wrapping later) the prologue and
epilogue, you'll want something like: <prologue/epilogue freq> * 2 *
"ira_memory_move_cost".
I think the issue here, is that the "frequency" of the entry block isn't '1',
but some larger value.  I'm not 100% sure, but maybe you can use:
  REG_FREQ_FROM_BB (ENTRY_BLOCK_PTR_FOR_FN (cfun))
for the BB frequency of the prologue/epilogue?


> We factor in the frequency when we compute the
> savings on removed copies in allocno_copy_cost_saving(). In this routine, we
> multiply the frequency with ira_register_move_cost. So why not factor in the
> frequency for memory move cost?

allocno_copy_cost_saving() is dealing with an actual copy instruction(s), so a
real instruction in a specific BB, so it knows the frequency of the copy(ies). 
The ira_memory_move_cost is more of a HW cost of a generic load/store and it
isn't tied to a specific instruction, so there is no frequency to scale by, so
you'll need to do that manually here.

Reply via email to