s390.c (s390_chunkify_start): Prevent literal pool splitting between a call and its...
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>
Fri, 18 Mar 2011 17:31:39 +0000 (17:31 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Fri, 18 Mar 2011 17:31:39 +0000 (17:31 +0000)
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

gcc/ChangeLog
gcc/config/s390/s390.c

index 74b346492d51800cc4805a3d0ea19979eb2ba7e0..519ba5d44c8ea77b638111dd96f646063f46ddd4 100644 (file)
@@ -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
index 4a056d5863ad31d66f17de02751077e638d71d47..dcbd4ac5391eccc492499302606deffd12a84db8 100644 (file)
@@ -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)