summaryrefslogtreecommitdiff
path: root/gcc/sibcall.c
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2001-02-20 05:49:06 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2001-02-20 05:49:06 +0000
commit3915b59eb73c81cd06e1c52d275fdecf3151a453 (patch)
tree51e806341a185dae0e1fc20ec036ecd1ec7fa9be /gcc/sibcall.c
parent66c4386e4c27657eceb722e2fd79b7911d48a7f2 (diff)
downloadgcc-3915b59eb73c81cd06e1c52d275fdecf3151a453.tar.gz
* sibcall.c (skip_copy_to_return_value): Call
identify_call_return_value here, and return orig_insn if it returns zero. Hardret and softret arguments now unnecessary. (call_ends_block_p): Don't call identify_call_return_value here. * ggc-common.c (ggc_mark_rtx_children): No need to mark 'S' or 's' slots in RTXen. * ggc-page.c, ggc-simple.c (ggc_mark_if_gcable): Delete function. * ggc.h (ggc_mark_if_gcable): Delete prototype. testsuite: * g77.dg: New directory. * g77.dg/20010216-1.f: New test case. * g77.dg/dg.exp: New driver. * lib/g77-dg.exp: New driver library. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39916 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sibcall.c')
-rw-r--r--gcc/sibcall.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/sibcall.c b/gcc/sibcall.c
index 67b1e85f8c4..e00e8b790d6 100644
--- a/gcc/sibcall.c
+++ b/gcc/sibcall.c
@@ -33,7 +33,7 @@ Boston, MA 02111-1307, USA. */
#include "except.h"
static int identify_call_return_value PARAMS ((rtx, rtx *, rtx *));
-static rtx skip_copy_to_return_value PARAMS ((rtx, rtx, rtx));
+static rtx skip_copy_to_return_value PARAMS ((rtx));
static rtx skip_use_of_return_value PARAMS ((rtx, enum rtx_code));
static rtx skip_stack_adjustment PARAMS ((rtx));
static rtx skip_pic_restore PARAMS ((rtx));
@@ -133,11 +133,15 @@ identify_call_return_value (cp, p_hard_return, p_soft_return)
copy. Otherwise return ORIG_INSN. */
static rtx
-skip_copy_to_return_value (orig_insn, hardret, softret)
+skip_copy_to_return_value (orig_insn)
rtx orig_insn;
- rtx hardret, softret;
{
rtx insn, set = NULL_RTX;
+ rtx hardret, softret;
+
+ /* If there is no return value, we have nothing to do. */
+ if (! identify_call_return_value (PATTERN (orig_insn), &hardret, &softret))
+ return orig_insn;
insn = next_nonnote_insn (orig_insn);
if (! insn)
@@ -265,8 +269,6 @@ call_ends_block_p (insn, end)
rtx insn;
rtx end;
{
- rtx hardret, softret;
-
/* END might be a note, so get the last nonnote insn of the block. */
end = next_nonnote_insn (PREV_INSN (end));
@@ -277,8 +279,7 @@ call_ends_block_p (insn, end)
/* Skip over copying from the call's return value pseudo into
this function's hard return register and if that's the end
of the block, we're OK. */
- identify_call_return_value (PATTERN (insn), &hardret, &softret);
- insn = skip_copy_to_return_value (insn, hardret, softret);
+ insn = skip_copy_to_return_value (insn);
if (insn == end)
return 1;