aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2011-03-18 17:31:39 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2011-03-18 17:31:39 +0000
commit4627c7fb2264f8c023865d4cd7b1abae9598ae11 (patch)
tree0f9df3e813b4ce8f60c9cb1a816a5968540ea4ac
parent2d36b47ff5a2252001e3950fadd74797caee6ef4 (diff)
downloadgcc-4627c7fb2264f8c023865d4cd7b1abae9598ae11.zip
gcc-4627c7fb2264f8c023865d4cd7b1abae9598ae11.tar.gz
gcc-4627c7fb2264f8c023865d4cd7b1abae9598ae11.tar.bz2
s390.c (s390_chunkify_start): Prevent literal pool splitting between a call and its corresponding...
2011-03-18 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * config/s390/s390.c (s390_chunkify_start): Prevent literal pool splitting between a call and its corresponding CALL_ARG_LOCATION note. From-SVN: r171156
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/s390/s390.c11
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 74b3464..519ba5d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-03-18 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * config/s390/s390.c (s390_chunkify_start): Prevent literal pool
+ splitting between a call and its corresponding CALL_ARG_LOCATION
+ note.
+
2011-03-18 Maxim Kuvyrkov <maxim@codesourcery.com>
PR rtl-optimization/48170
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 4a056d5..dcbd4ac 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -6651,7 +6651,7 @@ s390_chunkify_start (void)
s390_add_execute (curr_pool, insn);
s390_add_pool_insn (curr_pool, insn);
}
- else if (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN)
+ else if (GET_CODE (insn) == INSN || CALL_P (insn))
{
rtx pool_ref = NULL_RTX;
find_constant_pool_ref (PATTERN (insn), &pool_ref);
@@ -6676,6 +6676,15 @@ s390_chunkify_start (void)
pending_ltrel = pool_ref;
}
}
+ /* Make sure we do not split between a call and its
+ corresponding CALL_ARG_LOCATION note. */
+ if (CALL_P (insn))
+ {
+ rtx next = NEXT_INSN (insn);
+ if (next && NOTE_P (next)
+ && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
+ continue;
+ }
}
if (GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CODE_LABEL)