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> Sat Aug 7 19:32:16 1999 Richard Henderson <rth@cygnus.com>
* jump.c (onlyjump_p): New function. * jump.c (onlyjump_p): New function.
......
...@@ -1468,6 +1468,8 @@ init_alias_analysis () ...@@ -1468,6 +1468,8 @@ init_alias_analysis ()
/* Walk the insns adding values to the new_reg_base_value array. */ /* Walk the insns adding values to the new_reg_base_value array. */
for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
{ {
if (prologue_epilogue_contains (insn))
continue;
if (GET_RTX_CLASS (GET_CODE (insn)) == 'i') if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
{ {
rtx note, set; rtx note, set;
......
...@@ -376,6 +376,10 @@ struct function *current_function = 0; ...@@ -376,6 +376,10 @@ struct function *current_function = 0;
/* Global list of all compiled functions. */ /* Global list of all compiled functions. */
struct function *all_functions = 0; 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 /* In order to evaluate some expressions, such as function calls returning
structures in memory, we need to temporarily allocate stack locations. structures in memory, we need to temporarily allocate stack locations.
...@@ -6050,6 +6054,9 @@ init_function_start (subr, filename, line) ...@@ -6050,6 +6054,9 @@ init_function_start (subr, filename, line)
current_function_returns_pointer current_function_returns_pointer
= POINTER_TYPE_P (TREE_TYPE (DECL_RESULT (subr))); = POINTER_TYPE_P (TREE_TYPE (DECL_RESULT (subr)));
/* No prologue/epilogue insns yet. */
prologue = epilogue = 0;
} }
/* Indicate that the current function uses extra args /* Indicate that the current function uses extra args
...@@ -6656,11 +6663,6 @@ expand_function_end (filename, line, end_bindings) ...@@ -6656,11 +6663,6 @@ expand_function_end (filename, line, end_bindings)
expand_fixups (get_insns ()); 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 /* Create an array that records the INSN_UIDs of INSNS (either a sequence
or a single insn). */ or a single insn). */
...@@ -6715,6 +6717,17 @@ contains (insn, vec) ...@@ -6715,6 +6717,17 @@ contains (insn, vec)
} }
return 0; 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 */ #endif /* HAVE_prologue || HAVE_epilogue */
/* Generate the prologue and epilogue RTL if the machine supports it. Thread /* Generate the prologue and epilogue RTL if the machine supports it. Thread
...@@ -6727,7 +6740,6 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6727,7 +6740,6 @@ thread_prologue_and_epilogue_insns (f)
{ {
int insertted = 0; int insertted = 0;
prologue = 0;
#ifdef HAVE_prologue #ifdef HAVE_prologue
if (HAVE_prologue) if (HAVE_prologue)
{ {
...@@ -6762,7 +6774,6 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6762,7 +6774,6 @@ thread_prologue_and_epilogue_insns (f)
} }
#endif #endif
epilogue = 0;
#ifdef HAVE_epilogue #ifdef HAVE_epilogue
if (HAVE_epilogue) if (HAVE_epilogue)
{ {
......
...@@ -1452,6 +1452,7 @@ extern void record_excess_regs PROTO ((rtx, rtx, rtx *)); ...@@ -1452,6 +1452,7 @@ extern void record_excess_regs PROTO ((rtx, rtx, rtx *));
/* In function.c */ /* In function.c */
extern void reposition_prologue_and_epilogue_notes PROTO ((rtx)); extern void reposition_prologue_and_epilogue_notes PROTO ((rtx));
extern void thread_prologue_and_epilogue_insns 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 void use_variable PROTO ((rtx));
extern HOST_WIDE_INT get_frame_size PROTO ((void)); extern HOST_WIDE_INT get_frame_size PROTO ((void));
extern void preserve_rtl_expr_result PROTO ((rtx)); 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