This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: How to tell reload to properly store a register?
- From: Georg-Johann Lay <avr at gjlay dot de>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: GCC Development <gcc at gcc dot gnu dot org>
- Date: Mon, 02 May 2011 10:28:29 +0200
- Subject: Re: How to tell reload to properly store a register?
- References: <BANLkTi=2NPNerdXAD+Do7i6az+NZ2+N4kw@mail.gmail.com> <4DBC0C1B.9020506@gjlay.de> <BANLkTim+byi8E31ODyJ0nKs9ASro9Ef6aQ@mail.gmail.com>
H.J. Lu schrieb:
> On Sat, Apr 30, 2011 at 6:18 AM, Georg-Johann Lay <avr@gjlay.de> wrote:
>> H.J. Lu schrieb:
>>> My target needs a scratch register to store a register in one register
>>> class
>>> and it needs to use memory to copy from one register class to another.
>>> I have store and reload_out patterns for those registers. When reload
>>> tries to copy data from one register class to another, it just stores the
>>> register without using the proper reload_out pattern which has a scratch
>>> register.
>>>
>>> How can I tell reload to always use a scratch register when storing a
>>> register?
>> Did you define the TARGET_SECONDARY_RELOAD hook?
>>
>
> I did. I have
>
> if (!in_p && MEM_P (x))
> {
> sri->icode = direct_optab_handler (reload_out_optab, mode);
> return NO_REGS;
> }
>
>
> Somehow, it isn't used when reloading
>
> set (regclass1:SF) (regclass2:SF)
But in that case MEM_P is false, these are two REG_Ps.
> Reload just calls emit_move_insn directly to store regclass2.
Johann