diff options
author | David S. Miller <davem@redhat.com> | 2003-07-16 01:36:27 -0700 |
---|---|---|
committer | David S. Miller <davem@gcc.gnu.org> | 2003-07-16 01:36:27 -0700 |
commit | ac59ed379bee7707f973c3cc2bafa536a9c5a032 (patch) | |
tree | 772f98ae3b65200ab669ce9a1de315eb0077ed69 /gcc | |
parent | 9f13608f62f6a55bd9058d6b27c027fc3c246c35 (diff) | |
download | gcc-ac59ed379bee7707f973c3cc2bafa536a9c5a032.zip gcc-ac59ed379bee7707f973c3cc2bafa536a9c5a032.tar.gz gcc-ac59ed379bee7707f973c3cc2bafa536a9c5a032.tar.bz2 |
sparc.c (sparc_nonflat_function_epilogue): Only emit nop if the last real insn is CALL_INSN.
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 14 |
2 files changed, 16 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 11ade5d..40f58fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 617a964b..14c7c1f 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -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) |