[Bug c/38209] New: [avr] branch optimisation generates worse code
k dot kosciuszkiewicz+gcc at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Nov 21 06:06:00 GMT 2008
Test code:
register unsigned char val asm("r4");
void negate(void)
{
if (val)
val = ~val;
else
val = ~val;
}
Code generated with -Os
.global negate
.type negate, @function
negate:
/* prologue: function */
/* frame size = 0 */
tst r4
breq .L2
com r4
ret
.L2:
clr r4
dec r4
ret
.size negate, .-negate
In the "else" branch gcc knows that r4 is zero, and that it should change to
0xff - taking this approach generates longer code than in the first branch.
The same applies when operations like !, ++, -- are used.
--
Summary: [avr] branch optimisation generates worse code
Product: gcc
Version: 4.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: k dot kosciuszkiewicz+gcc at gmail dot com
GCC build triplet: i386-linux-gnu
GCC host triplet: i386-linux-gnu
GCC target triplet: avr-*-*
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38209
More information about the Gcc-bugs
mailing list