[Bug rtl-optimization/78664] New: LRA must honor REG_ALLOC_ORDER to pick reload registers
ebotcazou at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Dec 3 17:54:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78664
Bug ID: 78664
Summary: LRA must honor REG_ALLOC_ORDER to pick reload
registers
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: ebotcazou at gcc dot gnu.org
Target Milestone: ---
The SPARC port uses REG_ALLOC_ORDER to force the use of leaf registers in leaf
functions, which in turn enables the leaf function optimization. For example:
long long *a, *b;
long long add (void)
{
return *a + *b;
}
The generated code at -O2 (reload) is:
sethi %hi(a), %g1
ld [%g1+%lo(a)], %g2
ldd [%g2], %o0
sethi %hi(b), %g1
ld [%g1+%lo(b)], %g1
ldd [%g1], %g2
addcc %o1, %g3, %o5
addx %o0, %g2, %o4
mov %o5, %o1
jmp %o7+8
mov %o4, %o0
while at -O2 -mlra (LRA) it is:
save %sp, -96, %sp
sethi %hi(a), %g1
ld [%g1+%lo(a)], %g2
ldd [%g2], %i0
sethi %hi(b), %g1
ld [%g1+%lo(b)], %g1
ldd [%g1], %g2
addcc %i1, %g3, %o5
addx %i0, %g2, %o4
mov %o5, %i1
jmp %i7+8
restore %g0, %o4, %o0
The additional save/restore pair means that LRA didn't pick leaf registers for
reload registers, as prescribed by the REG_ALLOC_ORDER for leaf functions.
More information about the Gcc-bugs
mailing list