2012/9/30 Georg-Johann Lay <a...@gjlay.de>:
> Denis Chertykov schrieb:
>>
>> Georg-Johann Lay:
>>
>>> PR52543 required to represent a load from non-generic address spaces as
>>> UNSPEC
>>> instead of as MEM to avoid a gross code bloat.
>>>
>>> http://gcc.gnu.org/PR52543
>>>
>>> lower-subreg's cost model is still broken: It assumes that any loads from
>>> MEM
>>> are from the generic address space and does not care for address spaces
>>> in its
>>> cost model.
>>>
>>> This patch undoes the changes from SVN r185605
>>>
>>> http://gcc.gnu.org/viewcvs?view=revision&revision=185605
>>>
>>> and installs a different but less intrusive hack around PR52543:
>>>
>>> targetm.mode_dependent_address_p has an address space parameter so that
>>> the
>>> backend can pretend all non-generic addresses are mode-dependent.
>>>
>>> This keeps lower-subreg.c from splitting the loads, and it is possible to
>>> represent the loads as MEM and there is no more the need to represent
>>> them as
>>> UNSPECs.
>>>
>>> This patch is still not an optimal solution but the code is much closer
>>> to a
>>> clean solution now.
>>>
>>> Ok for trunk?
>>
>>
>> You can apply it.
>>
>> Denis.
>
>
> I also applied the following change:
>
> http://gcc.gnu.org/viewcvs?view=revision&revision=191825
>
>         * config/avr/avr.md (adjust_len): Add lpm.
>         (reload_in<mode>): Use avr_out_lpm for output.  Use "lpm" for
>         adjust_len.
>         * config/avr/avr-protos.h (avr_out_lpm): New prototype.
>         * config/avr/avr.c (avr_out_lpm): Make global.
>         (adjust_insn_length): Handle ADJUST_LEN_LPM.
>
> The reload_in<mode> insns used the wrong output functions.
>
> Notice that this change is just a cosmetic change because the secondary
> reload for the non-generic spaces are ignored.  That is:  despite
> avr_secondary_reload, REG <- MEM input reloads are not mapped to their
> secondary reload insn and the mov insn for that load is used.
>
> This leads to a situation where the insn output function is not supplied
> with the needed clobber register, thus the avr_find_unused_d_reg function is
> needed to work around that.

What would happen if  no unused_d_reg ?

> Denis, do you know why the secondary reloads requested by
> avr_secondary_reload are ignored?  I see calls to this hook and sri->icode
> is set to the right insn code but ignored afterwards.
>
> The only calls to that hook with the right operands are from ira cost
> computation.

I have tried to use secondary a few years ago (may be 5 or 7).
I have definitely remember only one thing: secondary reload should be
avoided as long as possible.
The better way to got a knowledge about it is a GDB ;-)

>
> From the internals I don't see why it is skipped and the responsiveness in
> the gcc-help@ list on such topics is zero :-(

IMHO  it's a question to gcc@ not to gcc-help@


Denis.

Reply via email to