diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-02-20 05:49:06 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-02-20 05:49:06 +0000 |
commit | 3915b59eb73c81cd06e1c52d275fdecf3151a453 (patch) | |
tree | 51e806341a185dae0e1fc20ec036ecd1ec7fa9be /gcc/sibcall.c | |
parent | 66c4386e4c27657eceb722e2fd79b7911d48a7f2 (diff) | |
download | gcc-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.c | 15 |
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; |