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