mirror of git://gcc.gnu.org/git/gcc.git
rs6000.c (rs6000_emit_allocate_stack): Use correct alias set on MEM when saving stack pointer.
2008-09-26 Pat Haugen <pthaugen@us.ibm.com> * config/rs6000/rs6000.c (rs6000_emit_allocate_stack): Use correct alias set on MEM when saving stack pointer. * config/rs6000/rs6000.md (allocate_stack): Likewise From-SVN: r140693
This commit is contained in:
parent
8f5730b997
commit
16044a800c
|
|
@ -1,3 +1,9 @@
|
||||||
|
2008-09-26 Pat Haugen <pthaugen@us.ibm.com>
|
||||||
|
|
||||||
|
* config/rs6000/rs6000.c (rs6000_emit_allocate_stack): Use correct
|
||||||
|
alias set on MEM when saving stack pointer.
|
||||||
|
* config/rs6000/rs6000.md (allocate_stack): Likewise
|
||||||
|
|
||||||
2008-09-26 Dorit Nuzman <dorit@il.ibm.com>
|
2008-09-26 Dorit Nuzman <dorit@il.ibm.com>
|
||||||
|
|
||||||
PR tree-optimization/37574
|
PR tree-optimization/37574
|
||||||
|
|
|
||||||
|
|
@ -15438,6 +15438,8 @@ rs6000_emit_allocate_stack (HOST_WIDE_INT size, int copy_r12, int copy_r11)
|
||||||
|
|
||||||
if (TARGET_UPDATE)
|
if (TARGET_UPDATE)
|
||||||
{
|
{
|
||||||
|
rtx par, set, mem;
|
||||||
|
|
||||||
if (size > 32767)
|
if (size > 32767)
|
||||||
{
|
{
|
||||||
/* Need a note here so that try_split doesn't get confused. */
|
/* Need a note here so that try_split doesn't get confused. */
|
||||||
|
|
@ -15453,13 +15455,25 @@ rs6000_emit_allocate_stack (HOST_WIDE_INT size, int copy_r12, int copy_r11)
|
||||||
todec, stack_reg)
|
todec, stack_reg)
|
||||||
: gen_movdi_di_update (stack_reg, stack_reg,
|
: gen_movdi_di_update (stack_reg, stack_reg,
|
||||||
todec, stack_reg));
|
todec, stack_reg));
|
||||||
|
/* Since we didn't use gen_frame_mem to generate the MEM, grab
|
||||||
|
it now and set the alias set/attributes. The above gen_*_update
|
||||||
|
calls will generate a PARALLEL with the MEM set being the first
|
||||||
|
operation. */
|
||||||
|
par = PATTERN (insn);
|
||||||
|
gcc_assert (GET_CODE (par) == PARALLEL);
|
||||||
|
set = XVECEXP (par, 0, 0);
|
||||||
|
gcc_assert (GET_CODE (set) == SET);
|
||||||
|
mem = SET_DEST (set);
|
||||||
|
gcc_assert (MEM_P (mem));
|
||||||
|
MEM_NOTRAP_P (mem) = 1;
|
||||||
|
set_mem_alias_set (mem, get_frame_alias_set ());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
insn = emit_insn (TARGET_32BIT
|
insn = emit_insn (TARGET_32BIT
|
||||||
? gen_addsi3 (stack_reg, stack_reg, todec)
|
? gen_addsi3 (stack_reg, stack_reg, todec)
|
||||||
: gen_adddi3 (stack_reg, stack_reg, todec));
|
: gen_adddi3 (stack_reg, stack_reg, todec));
|
||||||
emit_move_insn (gen_rtx_MEM (Pmode, stack_reg),
|
emit_move_insn (gen_frame_mem (Pmode, stack_reg),
|
||||||
copy_r11
|
copy_r11
|
||||||
? gen_rtx_REG (Pmode, 11)
|
? gen_rtx_REG (Pmode, 11)
|
||||||
: gen_rtx_REG (Pmode, 12));
|
: gen_rtx_REG (Pmode, 12));
|
||||||
|
|
|
||||||
|
|
@ -10340,14 +10340,32 @@
|
||||||
neg_op0 = GEN_INT (- INTVAL (operands[1]));
|
neg_op0 = GEN_INT (- INTVAL (operands[1]));
|
||||||
|
|
||||||
if (TARGET_UPDATE)
|
if (TARGET_UPDATE)
|
||||||
emit_insn ((* ((TARGET_32BIT) ? gen_movsi_update : gen_movdi_di_update))
|
{
|
||||||
(stack_pointer_rtx, stack_pointer_rtx, neg_op0, chain));
|
rtx insn, par, set, mem;
|
||||||
|
|
||||||
|
insn = emit_insn ((* ((TARGET_32BIT) ? gen_movsi_update
|
||||||
|
: gen_movdi_di_update))
|
||||||
|
(stack_pointer_rtx, stack_pointer_rtx, neg_op0,
|
||||||
|
chain));
|
||||||
|
/* Since we didn't use gen_frame_mem to generate the MEM, grab
|
||||||
|
it now and set the alias set/attributes. The above gen_*_update
|
||||||
|
calls will generate a PARALLEL with the MEM set being the first
|
||||||
|
operation. */
|
||||||
|
par = PATTERN (insn);
|
||||||
|
gcc_assert (GET_CODE (par) == PARALLEL);
|
||||||
|
set = XVECEXP (par, 0, 0);
|
||||||
|
gcc_assert (GET_CODE (set) == SET);
|
||||||
|
mem = SET_DEST (set);
|
||||||
|
gcc_assert (MEM_P (mem));
|
||||||
|
MEM_NOTRAP_P (mem) = 1;
|
||||||
|
set_mem_alias_set (mem, get_frame_alias_set ());
|
||||||
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
emit_insn ((* ((TARGET_32BIT) ? gen_addsi3 : gen_adddi3))
|
emit_insn ((* ((TARGET_32BIT) ? gen_addsi3 : gen_adddi3))
|
||||||
(stack_pointer_rtx, stack_pointer_rtx, neg_op0));
|
(stack_pointer_rtx, stack_pointer_rtx, neg_op0));
|
||||||
emit_move_insn (gen_rtx_MEM (Pmode, stack_pointer_rtx), chain);
|
emit_move_insn (gen_frame_mem (Pmode, stack_pointer_rtx), chain);
|
||||||
}
|
}
|
||||||
|
|
||||||
emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
|
emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue