[RL78] Questions about code-generation

Jeff Law law@redhat.com
Mon Mar 24 03:44:00 GMT 2014


On 03/22/14 05:29, Richard Hulme wrote:
> On 22/03/14 01:47, Jeff Law wrote:
>> On 03/21/14 18:35, DJ Delorie wrote:
>>>
>>> I've found that "removing uneeded moves through registers" is
>>> something gcc does poorly in the post-reload optimizers.  I've written
>>> my own on some occasions (for rl78 too).  Perhaps this is a good
>>> starting point to look at?
>>>
>>>> much needless copying, which strengthens my suspicion that it's
>>>> something in the RL78 backend that needs 'tweaking'.
>>>
>>> Of course it is, I've said that before I think.  The RL78 uses a
>>> virtual model until reload, then converts each virtual instructions
>>> into multiple real instructions, then optimizes the result.  This is
>>> going to be worse than if the real model had been used throughout
>>> (like arm or x86), but in this case, the real model *can't* be used
>>> throughout, because gcc can't understand it well enough to get through
>>> regalloc and reload.  The RL78 is just to "weird" to be modelled
>>> as-is.
>>>
>>> I keep hoping that gcc's own post-reload optimizers would do a better
>>> job, though.  Combine should be able to combine, for example, the "mov
>>> r8,ax; cmp r8,#4" types of insns together.
>> The virtual register file was the only way I could see to make RL78
>> work.  I can't recall the details, but when you described the situation
>> to me the virtual register file was the only way I could see to make the
>> RL78 work in the IRA+reload world.
>>
>> What would be quite interesting to try would be to continue to use the
>> virtualized register set, but instead use the IRA+LRA path.  Presumably
>> that wouldn't be terribly hard to try and there's a reasonable chance
>> that'll improve the code in a noticeable way.
>
> Looking at how that's done by other backends, as far as I can tell, I
> just need to add something like:
>
> #undef  TARGET_LRA_P
> #define TARGET_LRA_P rl78_enable_lra
>
> static bool
> rl78_enable_lra (void)
> {
>    return true;
> }
>
> to rl78.c?  At least in theory, even if other work is needed elsewhere
> to make things run smoothly.
>
> Unfortunately, that function never seems to be called.
>
> How does TARGET_LRA_P get used, anyway?  I can't find anything that
> tries to use it, only places where it gets set.  Is there some funky
> preprocessor stuff going on that's stopping me grepping for it?
That should be enough to switch to the LRA path.   It's a target hook. 
Grep for "targetm.lra_p"


Jeff



More information about the Gcc mailing list