http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60486
Georg-Johann Lay <gjl at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |gjl at gcc dot gnu.org --- Comment #1 from Georg-Johann Lay <gjl at gcc dot gnu.org> --- Created attachment 32326 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32326&action=edit C test case Here is a valid test case. Compiled with avr-gcc 4.8.2 $ avr-gcc pr60486.c -S -Os -mmcu=atmega8 -dp we get: pr60486: movw r18,r24 ; 5 *movhi/1 [length = 1] .L2: cp r22,r24 ; 21 *cmphi/3 [length = 2] cpc r23,r25 brsh .L7 ; 22 branch [length = 1] subi r18,1 ; 13 addhi3_clobber/2 [length = 2] sbc r19,__zero_reg__ cp r18,__zero_reg__ ; 14 *cmphi/2 [length = 2] cpc r19,__zero_reg__ breq .L5 ; 15 branch [length = 1] adiw r24,1 ; 17 addhi3_clobber/1 [length = 1] rjmp .L2 ; 55 jump [length = 1] .L7: ldi r24,0 ; 7 *movhi/2 [length = 2] ldi r25,0 ret ; 49 return [length = 1] .L5: ldi r24,lo8(1) ; 6 *movhi/5 [length = 2] ldi r25,0 ret ; 51 return [length = 1] The superfluous insn is #14 (*cmphi). This worked with 4.7 with the output as follows: pr60486: movw r18,r24 ; 7 *movhi/1 [length = 1] rjmp .L2 ; 48 jump [length = 1] .L4: subi r18,1 ; 15 addhi3_clobber/2 [length = 2] sbc r19,__zero_reg__ breq .L5 ; 17 branch [length = 1] adiw r24,1 ; 19 addhi3_clobber/1 [length = 1] .L2: cp r22,r24 ; 23 *cmphi/3 [length = 2] cpc r23,r25 brlo .L4 ; 24 branch [length = 1] ldi r18,0 ; 9 *movhi/2 [length = 2] ldi r19,0 rjmp .L3 ; 50 jump [length = 1] .L5: ldi r18,lo8(1) ; 8 *movhi/5 [length = 2] ldi r19,0 .L3: movw r24,r18 ; 56 *movhi/1 [length = 1] ret ; 55 return [length = 1]