* config/frv/frvbegin.c: Fix location of unwind-dw2-fde.h header
authornickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Sep 2011 17:57:06 +0000 (17:57 +0000)
committernickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Sep 2011 17:57:06 +0000 (17:57 +0000)
file.
* config/frv/frvend.c: Likewise.
* config/frv/frv.c (frv_function_prologue): Move misplaced
CALL_ARG_LOCATION notes back to their proper locations.

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

gcc/ChangeLog
gcc/config/frv/frv.c
gcc/config/frv/frvbegin.c
gcc/config/frv/frvend.c

index a595e80..c831d39 100644 (file)
@@ -1,3 +1,12 @@
+2011-09-29  Nick Clifton  <nickc@redhat.com>
+           Bernd Schmidt  <bernds@codesourcery.com>
+
+       * config/frv/frvbegin.c: Fix location of unwind-dw2-fde.h header
+       file.
+       * config/frv/frvend.c: Likewise.
+       * config/frv/frv.c (frv_function_prologue): Move misplaced
+       CALL_ARG_LOCATION notes back to their proper locations.
+
 2011-09-29  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/50566
index 7d8b47b..e7a3c7a 100644 (file)
@@ -1424,6 +1424,8 @@ frv_function_contains_far_jump (void)
 static void
 frv_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
 {
+  rtx insn, next, last_call;
+
   /* If no frame was created, check whether the function uses a call
      instruction to implement a far jump.  If so, save the link in gr3 and
      replace all returns to LR with returns to GR3.  GR3 is used because it
@@ -1464,6 +1466,32 @@ frv_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
 
   /* Allow the garbage collector to free the nops created by frv_reorg.  */
   memset (frv_nops, 0, sizeof (frv_nops));
+
+  /* Locate CALL_ARG_LOCATION notes that have been misplaced
+     and move them back to where they should be located.  */
+  last_call = NULL_RTX;
+  for (insn = get_insns (); insn; insn = next)
+    {
+      next = NEXT_INSN (insn);
+      if (CALL_P (insn)
+         || (INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE
+             && CALL_P (XVECEXP (PATTERN (insn), 0, 0))))
+       last_call = insn;
+
+      if (!NOTE_P (insn) || NOTE_KIND (insn) != NOTE_INSN_CALL_ARG_LOCATION)
+       continue;
+
+      if (NEXT_INSN (last_call) == insn)
+       continue;
+
+      NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
+      PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
+      PREV_INSN (insn) = last_call;
+      NEXT_INSN (insn) = NEXT_INSN (last_call);
+      PREV_INSN (NEXT_INSN (insn)) = insn;
+      NEXT_INSN (PREV_INSN (insn)) = insn;
+      last_call = insn;
+    }
 }
 
 \f
index 963ebd0..23cbf1e 100644 (file)
@@ -28,7 +28,7 @@
 
 #include "defaults.h"
 #include <stddef.h>
-#include "unwind-dw2-fde.h"
+#include "../libgcc/unwind-dw2-fde.h"
 #include "gbl-ctors.h"
 
 /*  Declare a pointer to void function type.  */
index 04b880d..0bb07b5 100644 (file)
@@ -25,7 +25,7 @@
 
 #include "defaults.h"
 #include <stddef.h>
-#include "unwind-dw2-fde.h"
+#include "../libgcc/unwind-dw2-fde.h"
 
 #ifdef __FRV_UNDERSCORE__
 #define UNDERSCORE "_"