diff options
author | Andreas Krebbel <Andreas.Krebbel@de.ibm.com> | 2011-03-18 17:31:39 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2011-03-18 17:31:39 +0000 |
commit | 4627c7fb2264f8c023865d4cd7b1abae9598ae11 (patch) | |
tree | 0f9df3e813b4ce8f60c9cb1a816a5968540ea4ac /gcc | |
parent | 2d36b47ff5a2252001e3950fadd74797caee6ef4 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 11 |
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) |