This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/12306] New: GOT pointer (r12) reloaded unnecessarily
- From: "tm at kloo dot net" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 16 Sep 2003 22:19:19 -0000
- Subject: [Bug optimization/12306] New: GOT pointer (r12) reloaded unnecessarily
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12306
Summary: GOT pointer (r12) reloaded unnecessarily
Product: gcc
Version: 3.4
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tm at kloo dot net
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i386-linux
GCC host triplet: i386-linux
GCC target triplet: sh-elf
On the Renesas SH, the register r12 is fixed and reserved for the pointer to the
GOT. However, the code emitted saves r12 and reloads r12.
int a, b; int foo(void) { return a + b; }
compiled with -O2 -m4 -fPIC -S produces:
_foo:
mov.l r12,@-r15 <- r12 saved to stack
mova .L3,r0
mov.l .L3,r12
mov.l r14,@-r15
add r0,r12 <- r12 (GOT pointer) rebuilt
mov.l .L4,r0
sts.l pr,@-r15
mov.l @(r0,r12),r1
mov r12,r0
mov r15,r14
mov.l @r1,r2
mov.l .L5,r1
mov.l @(r0,r1),r1
mov.l @r1,r1
add r1,r2
mov r2,r0
mov r14,r15
lds.l @r15+,pr
mov.l @r15+,r14
rts
mov.l @r15+,r12 <- r12 restored