Commit 5c7675e9 by Richard Henderson Committed by Richard Henderson

function.c (init_function_start): Clear prologue & epilogue.

        * function.c (init_function_start): Clear prologue & epilogue.
        (prologue_epilogue_contains): New function.
        * alias.c (init_alias_analysis): Use it.
        * rtl.h (prologue_epilogue_contains): Declare it.

From-SVN: r28585
parent d0e80719
Sat Aug 7 19:37:07 1999 Richard Henderson <rth@cygnus.com>
* function.c (init_function_start): Clear prologue & epilogue.
(prologue_epilogue_contains): New function.
* alias.c (init_alias_analysis): Use it.
* rtl.h (prologue_epilogue_contains): Declare it.
Sat Aug 7 19:32:16 1999 Richard Henderson <rth@cygnus.com>
* jump.c (onlyjump_p): New function.
......
......@@ -1468,6 +1468,8 @@ init_alias_analysis ()
/* Walk the insns adding values to the new_reg_base_value array. */
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
{
if (prologue_epilogue_contains (insn))
continue;
if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
{
rtx note, set;
......
......@@ -376,6 +376,10 @@ struct function *current_function = 0;
/* Global list of all compiled functions. */
struct function *all_functions = 0;
/* These arrays record the INSN_UIDs of the prologue and epilogue insns. */
static int *prologue;
static int *epilogue;
/* In order to evaluate some expressions, such as function calls returning
structures in memory, we need to temporarily allocate stack locations.
......@@ -6050,6 +6054,9 @@ init_function_start (subr, filename, line)
current_function_returns_pointer
= POINTER_TYPE_P (TREE_TYPE (DECL_RESULT (subr)));
/* No prologue/epilogue insns yet. */
prologue = epilogue = 0;
}
/* Indicate that the current function uses extra args
......@@ -6656,11 +6663,6 @@ expand_function_end (filename, line, end_bindings)
expand_fixups (get_insns ());
}
/* These arrays record the INSN_UIDs of the prologue and epilogue insns. */
static int *prologue;
static int *epilogue;
/* Create an array that records the INSN_UIDs of INSNS (either a sequence
or a single insn). */
......@@ -6715,6 +6717,17 @@ contains (insn, vec)
}
return 0;
}
int
prologue_epilogue_contains (insn)
rtx insn;
{
if (prologue && contains (insn, prologue))
return 1;
if (epilogue && contains (insn, epilogue))
return 1;
return 0;
}
#endif /* HAVE_prologue || HAVE_epilogue */
/* Generate the prologue and epilogue RTL if the machine supports it. Thread
......@@ -6727,7 +6740,6 @@ thread_prologue_and_epilogue_insns (f)
{
int insertted = 0;
prologue = 0;
#ifdef HAVE_prologue
if (HAVE_prologue)
{
......@@ -6762,7 +6774,6 @@ thread_prologue_and_epilogue_insns (f)
}
#endif
epilogue = 0;
#ifdef HAVE_epilogue
if (HAVE_epilogue)
{
......
......@@ -1452,6 +1452,7 @@ extern void record_excess_regs PROTO ((rtx, rtx, rtx *));
/* In function.c */
extern void reposition_prologue_and_epilogue_notes PROTO ((rtx));
extern void thread_prologue_and_epilogue_insns PROTO ((rtx));
extern int prologue_epilogue_contains PROTO ((rtx));
extern void use_variable PROTO ((rtx));
extern HOST_WIDE_INT get_frame_size PROTO ((void));
extern void preserve_rtl_expr_result PROTO ((rtx));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment