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.radhakrish...@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.

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;

Reply via email to