aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaz Kojima <kkojima@gcc.gnu.org>2011-03-19 23:22:18 +0000
committerKaz Kojima <kkojima@gcc.gnu.org>2011-03-19 23:22:18 +0000
commit5969b52d80555cf74c70931b625d340ab7c5971b (patch)
tree00a48573e2d619d751279488e6813a8c4f0a89ec
parent67bd9a32cfa19de87bb909f42ed604199940b230 (diff)
downloadgcc-5969b52d80555cf74c70931b625d340ab7c5971b.zip
gcc-5969b52d80555cf74c70931b625d340ab7c5971b.tar.gz
gcc-5969b52d80555cf74c70931b625d340ab7c5971b.tar.bz2
sh.c (find_barrier): Don't emit a constant pool between a call and its corresponding...
* config/sh/sh.c (find_barrier): Don't emit a constant pool between a call and its corresponding CALL_ARG_LOCATION note. From-SVN: r171185
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/sh/sh.c10
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bf32ebb..87fb033 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-03-19 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ PR debug/48178
+ * config/sh/sh.c (find_barrier): Don't emit a constant pool
+ between a call and its corresponding CALL_ARG_LOCATION note.
+
2011-03-19 Anatoly Sokolov <aesok@post.ru>
* cfgcleanup.c (mark_effect): Use bitmap_set_range/bitmap_clear_range
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 18bd964..fc739dd 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -4876,6 +4876,16 @@ find_barrier (int num_mova, rtx mova, rtx from)
|| LABEL_P (from))
from = PREV_INSN (from);
+ /* Make sure we do not split between a call and its corresponding
+ CALL_ARG_LOCATION note. */
+ if (CALL_P (from))
+ {
+ rtx next = NEXT_INSN (from);
+ if (next && NOTE_P (next)
+ && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
+ from = next;
+ }
+
from = emit_jump_insn_after (gen_jump (label), from);
JUMP_LABEL (from) = label;
LABEL_NUSES (label) = 1;