Commit a9f3126a by Olivier Hainque Committed by Olivier Hainque

arm.c (arm_set_return_address): Use MEM_VOLATILE_P on the target mem instead of…

arm.c (arm_set_return_address): Use MEM_VOLATILE_P on the target mem instead of RTX_FRAME_RELATED_P on the insn...

2017-10-08  Olivier Hainque  <hainque@adacore.com>

        * config/arm/arm.c (arm_set_return_address): Use MEM_VOLATILE_P
        on the target mem instead of RTX_FRAME_RELATED_P on the insn to
        prevent DSE.
        (thumb_set_return_address): Likewise.

From-SVN: r253522
parent 221ebb39
2017-10-08 Olivier Hainque <hainque@adacore.com> 2017-10-08 Olivier Hainque <hainque@adacore.com>
* config/arm/arm.c (arm_set_return_address): Use MEM_VOLATILE_P
on the target mem instead of RTX_FRAME_RELATED_P on the insn to
prevent DSE.
(thumb_set_return_address): Likewise.
2017-10-08 Olivier Hainque <hainque@adacore.com>
* common/config/arm/arm-common.c (arm_except_unwind_info): * common/config/arm/arm-common.c (arm_except_unwind_info):
Handle DWARF2_UNWIND_INFO. Handle DWARF2_UNWIND_INFO.
...@@ -26859,7 +26859,7 @@ arm_set_return_address (rtx source, rtx scratch) ...@@ -26859,7 +26859,7 @@ arm_set_return_address (rtx source, rtx scratch)
{ {
arm_stack_offsets *offsets; arm_stack_offsets *offsets;
HOST_WIDE_INT delta; HOST_WIDE_INT delta;
rtx addr; rtx addr, mem;
unsigned long saved_regs; unsigned long saved_regs;
offsets = arm_get_frame_offsets (); offsets = arm_get_frame_offsets ();
...@@ -26889,11 +26889,12 @@ arm_set_return_address (rtx source, rtx scratch) ...@@ -26889,11 +26889,12 @@ arm_set_return_address (rtx source, rtx scratch)
addr = plus_constant (Pmode, addr, delta); addr = plus_constant (Pmode, addr, delta);
} }
/* The store needs to be marked as frame related in order to prevent
DSE from deleting it as dead if it is based on fp. */ /* The store needs to be marked to prevent DSE from deleting
rtx insn = emit_move_insn (gen_frame_mem (Pmode, addr), source); it as dead if it is based on fp. */
RTX_FRAME_RELATED_P (insn) = 1; mem = gen_frame_mem (Pmode, addr);
add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (Pmode, LR_REGNUM)); MEM_VOLATILE_P (mem) = true;
emit_move_insn (mem, source);
} }
} }
...@@ -26905,7 +26906,7 @@ thumb_set_return_address (rtx source, rtx scratch) ...@@ -26905,7 +26906,7 @@ thumb_set_return_address (rtx source, rtx scratch)
HOST_WIDE_INT delta; HOST_WIDE_INT delta;
HOST_WIDE_INT limit; HOST_WIDE_INT limit;
int reg; int reg;
rtx addr; rtx addr, mem;
unsigned long mask; unsigned long mask;
emit_use (source); emit_use (source);
...@@ -26945,11 +26946,11 @@ thumb_set_return_address (rtx source, rtx scratch) ...@@ -26945,11 +26946,11 @@ thumb_set_return_address (rtx source, rtx scratch)
else else
addr = plus_constant (Pmode, addr, delta); addr = plus_constant (Pmode, addr, delta);
/* The store needs to be marked as frame related in order to prevent /* The store needs to be marked to prevent DSE from deleting
DSE from deleting it as dead if it is based on fp. */ it as dead if it is based on fp. */
rtx insn = emit_move_insn (gen_frame_mem (Pmode, addr), source); mem = gen_frame_mem (Pmode, addr);
RTX_FRAME_RELATED_P (insn) = 1; MEM_VOLATILE_P (mem) = true;
add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (Pmode, LR_REGNUM)); emit_move_insn (mem, source);
} }
else else
emit_move_insn (gen_rtx_REG (Pmode, LR_REGNUM), source); emit_move_insn (gen_rtx_REG (Pmode, LR_REGNUM), source);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment