optimization/10620: for(i=25000;i;i--) {} generates wrong assembly source in avr-gcc with -O2

gumo@lucifer.kgt.bme.hu gumo@lucifer.kgt.bme.hu
Sun May 4 14:44:00 GMT 2003


>Number:         10620
>Category:       optimization
>Synopsis:       for(i=25000;i;i--) {} generates wrong assembly source in avr-gcc with -O2
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Sun May 04 14:26:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Endre Nagy
>Release:        gcc version 3.3 20030421 (prerelease)
>Organization:
>Environment:
Win32 -> atmel avr crosscompiler
>Description:
C code: for(i=25000;i;i--) {}
faulty machine code (it would be OK for i-=25):
ldi r18,lo8(25000)
ldi r19,hi8(25000)
.L10:·
        subi r18,lo8(-(-25))
        sbci r19,hi8(-(-25))
        brne .L10·

C code: for(i=35000;i;i--) {}
correct machine code (only initial value of i has changed):
ldi r18,lo8(-30536)
ldi r19,hi8(-30536)
.L10:
	subi r18,lo8(-(-1))
	sbci r19,hi8(-(-1))
	brne .L10

commandline:
avr-gcc -g -Wall -O2 -mmcu=at90s8515 -S -o os8515.S os8515.c
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list