[Bug target/52415] New: memcpy to local variable generates unnecessary stack frame for armv7
jay.foad at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Feb 28 10:40:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52415
Bug #: 52415
Summary: memcpy to local variable generates unnecessary stack
frame for armv7
Classification: Unclassified
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: target
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: jay.foad@gmail.com
This test case uses memcpy to load the bytes of a float into an int:
$ cat m.c
int f(float *p) {
int i;
__builtin_memcpy(&i, p, sizeof i);
return i;
}
When compiled for armv7 I get:
$ cc1 -o - -O3 m.c -quiet -march=armv7 -mthumb
...
f:
@ args = 0, pretend = 0, frame = 4
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
ldr r0, [r0, #0] @ unaligned
sub sp, sp, #4
str r0, [sp, #0] @ unaligned
ldr r0, [sp, #0]
add sp, sp, #4
bx lr
...
The stack frame is unnecessary; it could compile to just:
ldr r0, [r0, #0]
bx lr
I'm using trunk rev 184597, configured with --target=arm-elf.
More information about the Gcc-bugs
mailing list