https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85533

            Bug ID: 85533
           Summary: Missing optimization for right-shift of unsigned int
                    (avr-g++)
           Product: gcc
           Version: 7.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: randy.brecker64 at gmail dot com
  Target Milestone: ---

If the following snippet is compiled as C++-Code

volatile unsigned char x;
volatile unsigned char y;

int main() {
    x >>= 1;
    y /= 2;
}

it gives the assembler code:

       lds r24,x        ;  x.0_1, x
        ldi r25,0        ;  x.0_1
        asr r25  ;  tmp50
        ror r24  ;  tmp50
        sts x,r24        ;  x, tmp50
        lds r24,y        ;  y.1_5, y
        lsr r24  ;  _6
        sts y,r24        ;  y, _6

If it is compiled as C-Code it gives a better optimizatoion for the right
shift:

       lds r24,x        ;  x.0_1, x
        lsr r24  ;  _2
        sts x,r24        ;  x, _2
        lds r24,y        ;  y.1_3, y
        lsr r24  ;  _4
        sts y,r24        ;  y, _4

Reply via email to