Question on multiplied address cost computation in ivopt
Richard Biener
richard.guenther@gmail.com
Mon Feb 25 12:51:00 GMT 2013
On Mon, Feb 25, 2013 at 11:13 AM, Bin.Cheng <amker.cheng@gmail.com> wrote:
> On Mon, Feb 25, 2013 at 5:39 PM, Richard Biener
> <richard.guenther@gmail.com> wrote:
>> On Fri, Feb 22, 2013 at 9:42 AM, Bin.Cheng <amker.cheng@gmail.com> wrote:
>>> Hi,
>>> Function get_address_cost in ivopt computes multiplied address cost
>>> with below code:
>>>
>>> First:
>>> rat = 1;
>>> for (i = 2; i <= MAX_RATIO; i++)
>>> if (multiplier_allowed_in_address_p (i, mem_mode, as))
>>> {
>>> rat = i;
>>> break;
>>> }
>>>
>>> Then:
>>> if (rat_p)
>>> addr = gen_rtx_fmt_ee (MULT, address_mode, addr,
>>> gen_int_mode (rat, address_mode));
>>>
>>> What's the purpose of first iteration? It just finds the first allowed
>>> ratio in address, causing the generated ADDR always has the minimal
>>> allowed ratio. Is it right?
>>
>> Looks like so.
>>
>>> For target doesn't support multiplied address, the generated ADDR is:
>>> (MULT reg, 1). The cost generally is equal to address with pure
>>> register. What's the meaning of this cost?
>>
>> Look at its uses.
>
> Thanks, now I understand that it calculates representative cost for
> multiplied address, then uses it later. Doesn't matter which ratio is
> used generally.
>
> Another question about multiplied address is in function
> multiplier_allowed_in_address_p, it constructs rtx like "(MULT reg1,
> ratio)" and let backend determine whether multiplied address is
> allowed. I suspect the code is implemented/tested on x86, since
> machine like ARM only supports multiplied address with non-null base
> register, like "base + reg * index". The code causes multiplied
> address disabled totally for ARM machine.
> Any comments?
Well - enhance it. Best without the need to construct an RTX in the
first place ;)
Richard.
> Thanks
>
>
> --
> Best Regards.
More information about the Gcc
mailing list