OSDN Git Service

2011-03-18 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Mar 2011 17:31:39 +0000 (17:31 +0000)
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Mar 2011 17:31:39 +0000 (17:31 +0000)
* config/s390/s390.c (s390_chunkify_start): Prevent literal pool
splitting between a call and its corresponding CALL_ARG_LOCATION
note.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@171156 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 74b3464..519ba5d 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 4a056d5..dcbd4ac 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)