Help with reloading
Mohamed Shafi
shafitvm@gmail.com
Mon Dec 20 14:33:00 GMT 2010
On 20 December 2010 19:30, Jeff Law <law@redhat.com> wrote:
> On 12/20/10 01:47, Mohamed Shafi wrote:
>>
>>
>>> I think this is a case where you're going to need a secondary reload to
>>> force the immediate into a register if the destination is a non-symbolic
>>> MEM
>>> or a pseudo without a hard reg and its equivalent address is
>>> non-symbolic.
>>>
>> I am not sure how i should be implementing this.
>> Currently in define_expand for move i have code to force the
>> immediate value into a register if the destination is not a symbolic
>> address. If i understand correctly this is the only place where i can
>> decide what to do with the source depending on the destination. right?
>
> Just changing the movxx expander is not sufficient since for this case you
> do not know until reload time whether or not a particular insn needs an
> extra register to implement the move. That's the whole point of the
> secondary reload mechanism -- to allow you to allocate a scratch register
> during reloading to handle oddball cases like this.
>
>
> In your secondary reload code you'll need to check for the case where the
> destination is a MEM and the source is an unallocated pseudo with a constant
> equivalent and return a suitable register class for that case.
>
Jeff, thanks for the reply.
I didn't know that you could do that in TARGET_SECONDARY_RELOAD
hook. Can you point me to some target that does this - figuring out
what the destination is based on the source or vice versa. In my case
only the address operand comes into TARGET_SECONDARY_RELOAD hook
during the reload pass. I am not sure how to find out the source for
the pattern which has this particular address as the destination.
Sorry for the trouble.
Shafi
More information about the Gcc
mailing list