> On Jun 10, 2024, at 11:48 AM, Georg-Johann Lay <a...@gjlay.de> wrote:
> 
> 
> 
> Am 08.06.24 um 11:32 schrieb Mikael Pettersson via Gcc:
>> On Thu, Jun 6, 2024 at 8:59 PM Dimitar Dimitrov <dimi...@dinux.eu> wrote:
>>> Have you tried defining TARGET_LEGITIMIZE_ADDRESS for your target? From
>>> a quick search I see that the iq2000 and rx backends are rewriting some
>>> PLUS expression addresses with insn sequence to calculate the address.
>> I have partial success.
>> The key was to define both TARGET_LEGITIMATE_ADDRESS_P and an
>> addptr<Pmode>3 insn.
>> I had tried TARGET_LEGITIMATE_ADDRESS_P before, together with various
>> combinations of TARGET_LEGITIMIZE_ADDRESS and
>> LEGITIMIZE_RELOAD_ADDRESS, but they all threw gcc into reload loops.
>> My add<Pmode>3 insn clobbers the CC register. The docs say to define
>> addptr<Pmode>3 in this case, and that eliminated the reload loops.
>> The issue now is that the machine cannot perform an add without
>> clobbering the CC register, so I'll have to hide that somehow. When
>> emitting the asm code, can one check if the CC register is LIVE-OUT
>> from the insn? If it isn't I shouldn't have to generate code to
>> preserve it.
>> /Mikael
> 
> There is a different approach like liken by AVR (and maybe some
> more targets):
> 
> Don't introduce CC until after reload, i.e. keep cbranch insns
> and only split them to compare + branch after reload in the
> first post reload split pass.
> 
> It's some effort because the number of insns is effectively
> doubled: One pre-reload version of the insn without CC,
> and a postreload version with CC.  On AVR, most insns don't
> set CCmode is a usable way, so that works, though not as
> well like the killed cc0 representation.

Yes, PDP11 does this also.  And it uses define_subst to create two post-reload 
flavors, one that clobbers CC, one that sets it.  (The CC set from most 
instructions is pretty useable in the sense that it's generally what's needed 
for a compare against zero.)

> Then I am not sure whether TARGET_LEGITIMIZE_ADDRESS works in
> all situations, in particular when it comes to accessing frame
> locations. It might be required to fake-supply reg+offset
> addressing, and then split that post-reload.
> 
> An example is the Reduced Tiny cores (-mavrtiny) of the AVR
> port that only support POST_INC or byte addressing.  Splitting
> locations after reload improved code quality a lot.

Did you find a good way to handle POST_INC or similar modes in LRA?  PDP11 
would like to use that (and PRE_DEC) but it seems that LRA is even less willing 
than recent versions of old reload to generate such modes.

        paul

Reply via email to