diff options
author | Jan Hubicka <jh@suse.cz> | 2001-07-29 23:28:42 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-07-29 21:28:42 +0000 |
commit | 833366d6c90ddcb12ec0b7d63b6e57fd3b0f5793 (patch) | |
tree | 3c01d1ea251b427b8df8b3e9d0756203c265d556 /gcc/except.c | |
parent | b5832b43726d2d44b202c7a5669b3e97a2bc60c2 (diff) | |
download | gcc-833366d6c90ddcb12ec0b7d63b6e57fd3b0f5793.zip gcc-833366d6c90ddcb12ec0b7d63b6e57fd3b0f5793.tar.gz gcc-833366d6c90ddcb12ec0b7d63b6e57fd3b0f5793.tar.bz2 |
rtlanal.c (parms_set, [...]): Break out from...; handle multiple sets.
* rtlanal.c (parms_set, find_first_parameter_load): Break out from...;
handle multiple sets.
* except.c (sjlj_mark_call_sites): .... here.
* gcse.c (insert_insn_end_bb): Use find_first_parameter_load.
From-SVN: r44465
Diffstat (limited to 'gcc/except.c')
-rw-r--r-- | gcc/except.c | 46 |
1 files changed, 1 insertions, 45 deletions
diff --git a/gcc/except.c b/gcc/except.c index 49df0df..0ed89a0 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -2083,51 +2083,7 @@ sjlj_mark_call_sites (lp_info) /* Don't separate a call from it's argument loads. */ before = insn; if (GET_CODE (insn) == CALL_INSN) - { - HARD_REG_SET parm_regs; - int nparm_regs; - - /* Since different machines initialize their parameter registers - in different orders, assume nothing. Collect the set of all - parameter registers. */ - CLEAR_HARD_REG_SET (parm_regs); - nparm_regs = 0; - for (p = CALL_INSN_FUNCTION_USAGE (insn); p ; p = XEXP (p, 1)) - if (GET_CODE (XEXP (p, 0)) == USE - && GET_CODE (XEXP (XEXP (p, 0), 0)) == REG) - { - if (REGNO (XEXP (XEXP (p, 0), 0)) >= FIRST_PSEUDO_REGISTER) - abort (); - - /* We only care about registers which can hold function - arguments. */ - if (! FUNCTION_ARG_REGNO_P (REGNO (XEXP (XEXP (p, 0), 0)))) - continue; - - SET_HARD_REG_BIT (parm_regs, REGNO (XEXP (XEXP (p, 0), 0))); - nparm_regs++; - } - - /* Search backward for the first set of a register in this set. */ - while (nparm_regs) - { - before = PREV_INSN (before); - - /* Given that we've done no other optimizations yet, - the arguments should be immediately available. */ - if (GET_CODE (before) == CODE_LABEL) - abort (); - - p = single_set (before); - if (p && GET_CODE (SET_DEST (p)) == REG - && REGNO (SET_DEST (p)) < FIRST_PSEUDO_REGISTER - && TEST_HARD_REG_BIT (parm_regs, REGNO (SET_DEST (p)))) - { - CLEAR_HARD_REG_BIT (parm_regs, REGNO (SET_DEST (p))); - nparm_regs--; - } - } - } + before = find_first_parameter_load (insn, NULL_RTX); start_sequence (); emit_move_insn (mem, GEN_INT (this_call_site)); |