Attached code file is compiled.
Here is the critical passage:

inline void taskSignal(void) 
{
  unsigned char i;

  PORTB |= _BV(PB4);
  PORTB |= _BV(PB5);
  PORTB |= _BV(PB6);


  i=0;
  do 
    {
      i+=2;
    } 
  while( i<245 );

  i=0;
  do 
    {
      i+=3;
    } 
  while( i<245 );

  PORTB &= ~_BV(PB4);

  i=pos1;
  do 
    {
      i+=1;
    } 
  while( i<245 );


  PORTB &= ~_BV(PB5);
  PORTB &= ~_BV(PB6);
}  

When compiling without optimization I get:

  do 
    {
      i+=2;
 41e:   89 81           ldd     r24, Y+1        ; 0x01
 420:   8e 5f           subi    r24, 0xFE       ; 254
 422:   89 83           std     Y+1, r24        ; 0x01
    } 
 424:   89 81           ldd     r24, Y+1        ; 0x01
 426:   85 3f           cpi     r24, 0xF5       ; 245
 428:   08 f4           brcc    .+2             ; 0x42c <taskSignal+0x42>
 42a:   f9 cf           rjmp    .-14            ; 0x41e <taskSignal+0x34>
  while( i<245 );


But using -Os results in the following code:

 262:   80 e0           ldi     r24, 0x00       ; 0
  do 
    {
      i+=2;
 264:   8a 5f           subi    r24, 0xFA       ; 250
    } 
 266:   85 3f           cpi     r24, 0xF5       ; 245
 268:   e8 f3           brcs    .-6             ; 0x264 <taskSignal+0x8>
  while( i<245 );

Please note how the  substraction of -2 is optimized in something other.
The compiler said:
avr-gcc (GCC) 3.4.6 (Gentoo 3.4.6, ssp-3.4.5-1.0, pie-8.7.9)
Copyright (C) 2006 Free Software Foundation, Inc.

The line calling it was: 
avr-gcc -c -mmcu=attiny26 -I. -g -DF_CPU=8000000UL   -Os -Wall
-Wstrict-prototypes -Wa,-adhlns=tester.lst   -MD -MP -MF .dep/tester.o.d
tester.c -o tester.o


-- 
           Summary: Optimizaition on AVR target breaks code.
           Product: gcc
           Version: 3.4.6
            Status: UNCONFIRMED
          Severity: critical
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ralf-engels at gmx dot de
GCC target triplet: avr


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28894

Reply via email to