CRIS: Handle POST_INC in cris_rtx_costs
POST_INC is a code that's only supposed to be valid in an address, so
it should only be calculated through the TARGET_ADDRESS_COST hook, not
by the TARGET_RTX_COSTS hook. But, because rtx_cost does not
special-case MEM costs by calling TARGET_ADDRESS_COST, we get here as
part of e.g. the auto-inc-dec and combine passes, so deal with it for
the time being. Without this, the cost is the value of size_factor *
COSTS_N_INSNS (1), i.e. 4 per word. There's no obvious observable
effect for generated code (coremark, libgcc and newlib-libc checked
for -march=v10), but it may make a difference in the future, so be
safe and correct the cost.
Tested at r16-6493-ge77ba7ef8c75 for cris-elf. That the cost actually
is changed is observable mostly simply by applying -dp when compiling
int incref(int n, char *p)
{
int sum = 0;
while (n--)
sum += *p++;
return sum;
}
and seeing that the cost for the single autoincrement is changed from e.g.
adds.b [$r11+],$r10 ;# 15 [c=12 l=2] *addsqisi_swap/1
to
adds.b [$r11+],$r10 ;# 15 [c=8 l=2] *addsqisi_swap/1
gcc:
* config/cris/cris.cc (cris_rtx_costs) <POST_INC>: Handle POST_INC
as ZERO_EXTEND and SIGN_EXTEND, i.e. as an operator without cost.
1 file changed