This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/21596] New: [4.0/4.1 Regression] extra temporaries when using global register variables
- From: "rth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 15 May 2005 23:44:53 -0000
- Subject: [Bug tree-optimization/21596] New: [4.0/4.1 Regression] extra temporaries when using global register variables
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
register int *reg __asm__("%edi");
int test () { return *--reg <= 0; }
With -O2 -fomit-frame-pointer, 4.0,
movl %edi, %eax
leal -4(%edi), %edi
movl -4(%eax), %eax
testl %eax, %eax
With 3.4,
subl $4, %edi
cmpl $0, (%edi)
The problem appears to begin at the tree level, with extra temporaries:
reg.0 = reg;
reg.2 = reg.0 - 4B;
reg = reg.2;
return *reg.2 <= 0;
We do consider hard register variables not is_gimple_reg, due to needing
to V_MAY_DEF them at call sites. It would be nice if we could eliminate
these temporaries during TER, or something.
--
Summary: [4.0/4.1 Regression] extra temporaries when using global
register variables
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rth at gcc dot gnu dot org
CC: amacleod at redhat dot com,gcc-bugs at gcc dot gnu dot
org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21596