diff mbox

[ARM] PR48203 Don't split call from it's CALL_ARG_LOCATION note.

Message ID 4D85B456.6060705@linaro.org
State Accepted
Headers show

Commit Message

Ramana Radhakrishnan March 20, 2011, 8:01 a.m. UTC
Hi,

The attached patch fixes PR48203 for ARM by not splitting the call from 
it's call_arg_location note while emitting literal pools. This is 
similar to the patch for s390 and I notice one for sh that fixes a 
similar issue.

The other patch in the audit trail by Jakub is needed to fix up the 
issue with ICE in mem_loc_descriptor which also shows up in the 
testsuite runs if the attached patch is tested alone.

Committed after testruns on qemu using cross-builds on armv7-a and 
verifying that bootstrap is restored.

cheers
Ramana


2011-03-20  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>

         PR debug/48023
         * config/arm/arm.c (create_fix_barrier): Do not emit a minipool
         between a call and its CALL_ARG_LOCATION note.
diff mbox

Patch

Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c	(revision 171192)
+++ gcc/config/arm/arm.c	(working copy)
@@ -12022,6 +12022,16 @@ 
   /* Make sure that we found a place to insert the jump.  */
   gcc_assert (selected);
 
+  /* Make sure we do not split a call and its corresponding
+     CALL_ARG_LOCATION note.  */
+  if (CALL_P (selected))
+    {
+      rtx next = NEXT_INSN (selected);
+      if (next && NOTE_P (next)
+	  && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
+	  selected = next;
+    }
+
   /* Create a new JUMP_INSN that branches around a barrier.  */
   from = emit_jump_insn_after (gen_jump (label), selected);
   JUMP_LABEL (from) = label;