aboutsummaryrefslogtreecommitdiff
path: root/gcc/except.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-07-29 23:28:42 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2001-07-29 21:28:42 +0000
commit833366d6c90ddcb12ec0b7d63b6e57fd3b0f5793 (patch)
tree3c01d1ea251b427b8df8b3e9d0756203c265d556 /gcc/except.c
parentb5832b43726d2d44b202c7a5669b3e97a2bc60c2 (diff)
downloadgcc-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.c46
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));