Wouter van Gulik schrieb:
Hi list,

This code:

char* f(char* p)
{
  p++;
  return p;
}

Results in:

        mov r18,r24
        mov r19,r25
        subi r18,lo8(-(1))
        sbci r19,hi8(-(1))
        mov r24,r18
        mov r25,r19
        ret

When compiling with avr-gcc -O[23s] -mmcu=avr5 -S main.c
Which is bad since it could have been:

        adiw r24, 1
        ret

I tested against WinAVR's 4.3.3 and avr-gcc-4.7-185693-mingw32
Both generate the same code.

Should I create a bug report?

Wouter

Looks very much like PR52278, which is still open.

According to Vladimir, the register allocator (RA) should work smooth
with SUBREGs, but obviously, it does not.

Maybe it's also related to PR49491, yet another RA optimization flaw
showing up for avr.

You can try -fno-split-wide-types, but that might have other disadvantages.

Johann

_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to