sparc.c (sparc_nonflat_function_epilogue): Only emit nop if the last real insn is...
authorDavid S. Miller <davem@redhat.com>
Wed, 16 Jul 2003 08:36:27 +0000 (01:36 -0700)
committerDavid S. Miller <davem@gcc.gnu.org>
Wed, 16 Jul 2003 08:36:27 +0000 (01:36 -0700)
2003-07-15  David S. Miller  <davem@redhat.com>

* config/sparc/sparc.c (sparc_nonflat_function_epilogue): Only
emit nop if the last real insn is CALL_INSN.

From-SVN: r69440

gcc/ChangeLog
gcc/config/sparc/sparc.c

index 11ade5dd9f5a189077f480250b622d57774f676f..40f58fd8f82a5f7f2920e1451dad73e987dfd686 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-15  David S. Miller  <davem@redhat.com>
+
+       * config/sparc/sparc.c (sparc_nonflat_function_epilogue): Only
+       emit nop if the last real insn is CALL_INSN.
+
 2003-07-16  Danny Smith  <dannysmith@users.sourceforge.net>
 
        * config/i386/xm-mingw32.h (HOST_BIT_BUCKET): Define
index 617a964b6191eeaffa9b0016518a49b26e4a1ca0..14c7c1fcf737c41e7cae59f6e5d8e8b9a6fd1239 100644 (file)
@@ -4046,11 +4046,19 @@ sparc_nonflat_function_epilogue (file, size, leaf_function)
         of a function were call foo; dslot; this can make the return
         PC of foo (ie. address of call instruction plus 8) point to
         the first instruction in the next function.  */
-      rtx insn;
-
-      fputs("\tnop\n", file);
+      rtx insn, last_real_insn;
 
       insn = get_last_insn ();
+
+      last_real_insn = prev_real_insn (insn);
+      if (last_real_insn
+         && GET_CODE (last_real_insn) == INSN
+         && GET_CODE (PATTERN (last_real_insn)) == SEQUENCE)
+       last_real_insn = XVECEXP (PATTERN (last_real_insn), 0, 0);
+
+      if (last_real_insn && GET_CODE (last_real_insn) == CALL_INSN)
+       fputs("\tnop\n", file);
+
       if (GET_CODE (insn) == NOTE)
              insn = prev_nonnote_insn (insn);
       if (insn && GET_CODE (insn) == BARRIER)