aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2014-11-08 09:17:23 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2014-11-08 09:17:23 +0000
commitd1b0433b1aba81a6c3e87e867aaf24c6356e4f35 (patch)
tree0a7f69c453ba7a515495f989366889d4620975cc /gcc
parent31cb2db0b28fe254d07194fb68bd95f8372a0457 (diff)
downloadgcc-d1b0433b1aba81a6c3e87e867aaf24c6356e4f35.zip
gcc-d1b0433b1aba81a6c3e87e867aaf24c6356e4f35.tar.gz
gcc-d1b0433b1aba81a6c3e87e867aaf24c6356e4f35.tar.bz2
arm.c (arm_set_return_address): Mark the store as frame related, if any.
* config/arm/arm.c (arm_set_return_address): Mark the store as frame related, if any. (thumb_set_return_address): Likewise. From-SVN: r217251
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/arm/arm.c12
2 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c2ec869..6bfc320 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-11-08 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/arm/arm.c (arm_set_return_address): Mark the store as frame
+ related, if any.
+ (thumb_set_return_address): Likewise.
+
2014-11-07 Jeff Law <law@redhat.com>
PR tree-optimization/61515
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index cc005d6..0552952 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -29012,7 +29012,11 @@ arm_set_return_address (rtx source, rtx scratch)
addr = plus_constant (Pmode, addr, delta);
}
- emit_move_insn (gen_frame_mem (Pmode, addr), source);
+ /* 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. */
+ rtx insn = emit_move_insn (gen_frame_mem (Pmode, addr), source);
+ RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (Pmode, LR_REGNUM));
}
}
@@ -29064,7 +29068,11 @@ thumb_set_return_address (rtx source, rtx scratch)
else
addr = plus_constant (Pmode, addr, delta);
- emit_move_insn (gen_frame_mem (Pmode, addr), source);
+ /* 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. */
+ rtx insn = emit_move_insn (gen_frame_mem (Pmode, addr), source);
+ RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (Pmode, LR_REGNUM));
}
else
emit_move_insn (gen_rtx_REG (Pmode, LR_REGNUM), source);