summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2014-11-11 22:31:09 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2014-11-11 22:31:09 +0000
commit9fcfed2eb95fea03d967dfcadd1eec9cbab4a744 (patch)
treeee8b6b52468db04eed505d869c587476dfb57aef
parent2d60011ff237fb4ae23988cd432e381458369300 (diff)
downloadgcc-9fcfed2eb95fea03d967dfcadd1eec9cbab4a744.tar.gz
* reorg.c (fill_slots_from_thread): Do not copy frame-related insns.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@217381 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/reorg.c6
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8c5122916ca..350f21d0af2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2014-11-11 Eric Botcazou <ebotcazou@adacore.com>
+ * reorg.c (fill_slots_from_thread): Do not copy frame-related insns.
+
+2014-11-11 Eric Botcazou <ebotcazou@adacore.com>
+
PR target/61535
* config/sparc/sparc.c (function_arg_vector_value): Deal with vectors
smaller than 8 bytes.
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 6ade95cbe6d..e8d29a4ab1e 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -2501,9 +2501,11 @@ fill_slots_from_thread (rtx_insn *insn, rtx condition, rtx thread_or_return,
/* There are two ways we can win: If TRIAL doesn't set anything
needed at the opposite thread and can't trap, or if it can
- go into an annulled delay slot. */
+ go into an annulled delay slot. But we want neither to copy
+ nor to speculate frame-related insns. */
if (!must_annul
- && (condition == const_true_rtx
+ && ((condition == const_true_rtx
+ && (own_thread || !RTX_FRAME_RELATED_P (trial)))
|| (! insn_sets_resource_p (trial, &opposite_needed, true)
&& ! may_trap_or_fault_p (pat)
&& ! RTX_FRAME_RELATED_P (trial))))