This is the mail archive of the
gcc-cvs@gcc.gnu.org
mailing list for the GCC project.
r248781 - in /trunk/gcc: ChangeLog config/arc/a...
- From: claziss at gcc dot gnu dot org
- To: gcc-cvs at gcc dot gnu dot org
- Date: Thu, 01 Jun 2017 09:42:49 -0000
- Subject: r248781 - in /trunk/gcc: ChangeLog config/arc/a...
Author: claziss
Date: Thu Jun 1 09:42:49 2017
New Revision: 248781
URL: https://gcc.gnu.org/viewcvs?rev=248781&root=gcc&view=rev
Log:
[ARC] Prevent moving stores to the frame before the stack adjustment.
If the stack pointer is needed, emit a special barrier that will prevent
the scheduler from moving stores to the frame before the stack adjustment.
For example:
[snip]
mov_s fp,sp ; frame pointer is set here
[snip]
st r1,[fp,-24] ; frame pointer is used here
[snip]
sub_s sp,sp,0x20 ; stack pointer adjusted
So we can easily see that any interrupt between the `st` and `sub`
instruction will lead to faulty code as the interrupt routine will use
a faulty sp register, and, potentially, overwriting the value stored
by 'st' instruction. Thus, adding a scheduler barrier will force the
compiler to emit the `sub` instruction before the store one.
2017-06-01 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.c (arc_expand_prologue): Emit a special barrier
to prevent store reordering.
* config/arc/arc.md (UNSPEC_ARC_STKTIE): Define.
(type): Add block type.
(stack_tie): Define special instruction to be used in
expand_prologue.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/arc/arc.c
trunk/gcc/config/arc/arc.md