re PR target/47192 (m68k target - gcc uses stack frame after it has been unlinked when compiling with -Os)
PR target/47192 * config/m68k/m68k.c (m68k_expand_epilogue): Emit a scheduling barrier prior to deallocating the stack. PR target/47192 * gcc.target/m68k/pr47192.c: New test. From-SVN: r242575
This commit is contained in:
parent
e080b2818b
commit
f2b6aad987
4 changed files with 49 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2016-11-17 Jeff Law <law@redhat.com>
|
||||
|
||||
PR target/47192
|
||||
* config/m68k/m68k.c (m68k_expand_epilogue): Emit a scheduling
|
||||
barrier prior to deallocating the stack.
|
||||
|
||||
2016-11-17 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* config/arc/arc.md (cmem bit/sign-extend peephole2): New peephole
|
||||
|
|
|
@ -1205,6 +1205,7 @@ m68k_expand_epilogue (bool sibcall_p)
|
|||
stack-based restore. */
|
||||
emit_move_insn (gen_rtx_REG (Pmode, A1_REG),
|
||||
GEN_INT (-(current_frame.offset + fsize)));
|
||||
emit_insn (gen_blockage ());
|
||||
emit_insn (gen_addsi3 (stack_pointer_rtx,
|
||||
gen_rtx_REG (Pmode, A1_REG),
|
||||
frame_pointer_rtx));
|
||||
|
@ -1306,6 +1307,7 @@ m68k_expand_epilogue (bool sibcall_p)
|
|||
current_frame.fpu_mask, false, false);
|
||||
}
|
||||
|
||||
emit_insn (gen_blockage ());
|
||||
if (frame_pointer_needed)
|
||||
emit_insn (gen_unlink (frame_pointer_rtx));
|
||||
else if (fsize_with_regs)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-11-17 Jeff Law <law@redhat.com>
|
||||
|
||||
PR target/47192
|
||||
* gcc.target/m68k/pr47192.c: New test.
|
||||
|
||||
2016-11-17 Toma Tabacu <toma.tabacu@imgtec.com>
|
||||
|
||||
* gcc.target/mips/branch-cost-1.c (dg-options): Use (HAS_MOVN)
|
||||
|
|
36
gcc/testsuite/gcc.target/m68k/pr47192.c
Normal file
36
gcc/testsuite/gcc.target/m68k/pr47192.c
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mcpu=51qe -fdisable-ipa-pure-const -fdump-rtl-pro_and_epilogue" } */
|
||||
/* { dg-final { scan-rtl-dump-times "unspec_volatile" 1 "pro_and_epilogue"} } */
|
||||
|
||||
|
||||
char F(short *ty);
|
||||
|
||||
short V(char cmd)
|
||||
{
|
||||
static short st256;
|
||||
static short stc;
|
||||
short sc;
|
||||
short scd;
|
||||
short d;
|
||||
|
||||
F(&sc);
|
||||
|
||||
if (cmd == 4)
|
||||
{
|
||||
st256 = 0;
|
||||
d = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
scd = sc - stc;
|
||||
if (scd < -128)
|
||||
{
|
||||
scd += 256;
|
||||
}
|
||||
d = st256 >> 8;
|
||||
st256 -= d << 8;
|
||||
}
|
||||
stc = sc;
|
||||
return d;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue