Stack space creation instructions in prologue and epilogue don't get deleted.
foo: sub sp, sp, #8 --> Unnecessary mov r3, #0 add sp, sp, #8 --> Unnecessary str r3, [r0] struct Foo { int *p; int *q; }; void __attribute__((noinline)) foo(struct Foo f) { *f.p = 0; } This appears to be due to get_frame_size returning the size of the incoming parameters being 8 bytes in the backend . -- Summary: Additional instructions in prologue and epilogue. Product: gcc Version: 4.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ramana at icerasemi dot com GCC host triplet: i686-linux GCC target triplet: arm-none-eabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36409