2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2024-12-27 20:15:48 +08:00

except.h (can_throw): Declare it.

* except.h (can_throw): Declare it.
	* except.c (can_throw): Give it external linkage.
	* resource.c (find_dead_or_set_registers): Use can_throw.

From-SVN: r34178
This commit is contained in:
Mark Mitchell 2000-05-25 23:43:43 +00:00 committed by Mark Mitchell
parent 3ec6bad360
commit 0519ce3019
4 changed files with 20 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2000-05-25 Mark Mitchell <mark@codesourcery.com>
* except.h (can_throw): Declare it.
* except.c (can_throw): Give it external linkage.
* resource.c (find_dead_or_set_registers): Use can_throw.
2000-05-25 Richard Henderson <rth@cygnus.com>
* flow.c (mark_set_1): Don't record conditionally dead memory.

View File

@ -463,7 +463,6 @@ static void start_dynamic_cleanup PARAMS ((tree, tree));
static void start_dynamic_handler PARAMS ((void));
static void expand_rethrow PARAMS ((rtx));
static void output_exception_table_entry PARAMS ((FILE *, int));
static int can_throw PARAMS ((rtx));
static rtx scan_region PARAMS ((rtx, int, int *));
static void eh_regs PARAMS ((rtx *, rtx *, rtx *, int));
static void set_insn_eh_region PARAMS ((rtx *, int));
@ -2688,12 +2687,11 @@ free_eh_status (f)
}
/* This section is for the exception handling specific optimization
pass. First are the internal routines, and then the main
optimization pass. */
pass. */
/* Determine if the given INSN can throw an exception. */
static int
int
can_throw (insn)
rtx insn;
{

View File

@ -439,6 +439,10 @@ extern struct label_node *outer_context_label_stack;
extern rtx exception_handler_labels;
/* Determine if the given INSN can throw an exception. */
extern int can_throw PARAMS ((rtx));
/* Return nonzero if nothing in this function can throw. */
extern int nothrow_function_p PARAMS ((void));

View File

@ -422,6 +422,14 @@ find_dead_or_set_registers (target, res, jump_target, jump_count, set, needed)
rtx this_jump_insn = insn;
next = NEXT_INSN (insn);
/* If this instruction can throw an exception, then we don't
know where we might end up next. That means that we have to
assume that whatever we have already marked as live really is
live. */
if (can_throw (insn))
break;
switch (GET_CODE (insn))
{
case CODE_LABEL: