aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop.c
diff options
context:
space:
mode:
authorClaudiu Zissulescu <claziss@synopsys.com>2017-06-01 11:42:49 +0200
committerClaudiu Zissulescu <claziss@gcc.gnu.org>2017-06-01 11:42:49 +0200
commit2daad50b025d4db0492cf14390ba76272f2df015 (patch)
tree88daa1be2a4a806cb29bc537e8228e901f7240ba /gcc/tree-vect-loop.c
parent6f70ebc3d13809a2846a0831e190e5633aa9b688 (diff)
downloadgcc-2daad50b025d4db0492cf14390ba76272f2df015.zip
gcc-2daad50b025d4db0492cf14390ba76272f2df015.tar.gz
gcc-2daad50b025d4db0492cf14390ba76272f2df015.tar.bz2
[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. From-SVN: r248781
Diffstat (limited to 'gcc/tree-vect-loop.c')
0 files changed, 0 insertions, 0 deletions