Commit 0a8a198c by Mark Mitchell Committed by Mark Mitchell

function.h (free_after_compilation): Remove decl parameter.

	* function.h (free_after_compilation): Remove decl parameter.
	(free_varasm_status0: Likewise.
	(free_emit_status): Likewise.
	(free_stmt_status): Likewise.
	(free_after_compilation): Likewise.
	(init_lang_status): New variable.
	(free_lang_status): Likewise.
	* emit-rtl.c (free_emit_status): Make decl parameter implicit.
	* function.c (init_lang_status): New variable.
	(free_lang_status): Likewise.
	(push_function_context_to): Don't set function::decl here.
	(free_after_copmilation): Make decl parameter implicit.  Call
	free_lang_status if defined.
	(prepare_function_start): Call init_lang_status if defined.
	(init_function_start): Set function::decl here.
	* profile.c (output_func_start_profiler): Don't call pushdecl
	until we've actually started the function.
	* stmt.c (free_stmt_status): Make decl parameter implicit.
	* toplev.c (rest_of_compilation): Don't pass decl to
	free_after_compilation.
	* varasm.c (free_varasm_status): Likewise.

From-SVN: r29239
parent 1814b96b
Thu Sep 9 09:40:58 1999 Mark Mitchell <mark@codesourcery.com>
* function.h (free_after_compilation): Remove decl parameter.
(free_varasm_status0: Likewise.
(free_emit_status): Likewise.
(free_stmt_status): Likewise.
(free_after_compilation): Likewise.
(init_lang_status): New variable.
(free_lang_status): Likewise.
* emit-rtl.c (free_emit_status): Make decl parameter implicit.
* function.c (init_lang_status): New variable.
(free_lang_status): Likewise.
(push_function_context_to): Don't set function::decl here.
(free_after_copmilation): Make decl parameter implicit. Call
free_lang_status if defined.
(prepare_function_start): Call init_lang_status if defined.
(init_function_start): Set function::decl here.
* profile.c (output_func_start_profiler): Don't call pushdecl
until we've actually started the function.
* stmt.c (free_stmt_status): Make decl parameter implicit.
* toplev.c (rest_of_compilation): Don't pass decl to
free_after_compilation.
* varasm.c (free_varasm_status): Likewise.
Thu Sep 9 17:23:19 1999 Bernd Schmidt <bernds@cygnus.co.uk> Thu Sep 9 17:23:19 1999 Bernd Schmidt <bernds@cygnus.co.uk>
* except.c (call_get_eh_context): Add root when allocating static * except.c (call_get_eh_context): Add root when allocating static
......
...@@ -1609,15 +1609,13 @@ restore_emit_status (p) ...@@ -1609,15 +1609,13 @@ restore_emit_status (p)
/* Clear out all parts of the state in F that can safely be discarded /* Clear out all parts of the state in F that can safely be discarded
after the function has been compiled, to let garbage collection after the function has been compiled, to let garbage collection
reclaim the memory. D is the declaration for the function just reclaim the memory. */
compiled. Its output may have been deferred. */
void void
free_emit_status (f, d) free_emit_status (f)
struct function *f; struct function *f;
tree d;
{ {
if (DECL_DEFER_OUTPUT (d)) if (DECL_DEFER_OUTPUT (f->decl))
return; return;
free (f->emit->x_regno_reg_rtx); free (f->emit->x_regno_reg_rtx);
......
...@@ -124,9 +124,11 @@ void (*restore_machine_status) PROTO((struct function *)); ...@@ -124,9 +124,11 @@ void (*restore_machine_status) PROTO((struct function *));
void (*mark_machine_status) PROTO((struct function *)); void (*mark_machine_status) PROTO((struct function *));
/* Likewise, but for language-specific data. */ /* Likewise, but for language-specific data. */
void (*init_lang_status) PROTO((struct function *));
void (*save_lang_status) PROTO((struct function *)); void (*save_lang_status) PROTO((struct function *));
void (*restore_lang_status) PROTO((struct function *)); void (*restore_lang_status) PROTO((struct function *));
void (*mark_lang_status) PROTO((struct function *)); void (*mark_lang_status) PROTO((struct function *));
void (*free_lang_status) PROTO((struct function *));
/* The FUNCTION_DECL for an inline function currently being expanded. */ /* The FUNCTION_DECL for an inline function currently being expanded. */
tree inline_function_decl; tree inline_function_decl;
...@@ -323,7 +325,6 @@ push_function_context_to (context) ...@@ -323,7 +325,6 @@ push_function_context_to (context)
p->next = outer_function_chain; p->next = outer_function_chain;
outer_function_chain = p; outer_function_chain = p;
p->decl = current_function_decl;
p->fixup_var_refs_queue = 0; p->fixup_var_refs_queue = 0;
save_tree_status (p); save_tree_status (p);
...@@ -390,19 +391,19 @@ pop_function_context () ...@@ -390,19 +391,19 @@ pop_function_context ()
/* Clear out all parts of the state in F that can safely be discarded /* Clear out all parts of the state in F that can safely be discarded
after the function has been compiled, to let garbage collection after the function has been compiled, to let garbage collection
reclaim the memory. D is the declaration for the function just reclaim the memory. */
compiled. Its output may have been deferred. */
void void
free_after_compilation (f, d) free_after_compilation (f)
struct function *f; struct function *f;
tree d;
{ {
free_emit_status (f, d); free_emit_status (f);
free_varasm_status (f, d); free_varasm_status (f);
free_stmt_status (f, d); free_stmt_status (f);
if (free_lang_status)
(*free_lang_status) (f);
if (!DECL_DEFER_OUTPUT (d)) if (!DECL_DEFER_OUTPUT (f->decl))
{ {
free (f->x_parm_reg_stack_loc); free (f->x_parm_reg_stack_loc);
f->can_garbage_collect = 1; f->can_garbage_collect = 1;
...@@ -5621,6 +5622,8 @@ prepare_function_start () ...@@ -5621,6 +5622,8 @@ prepare_function_start ()
current_function_outgoing_args_size = 0; current_function_outgoing_args_size = 0;
if (init_lang_status)
(*init_lang_status) (current_function);
if (init_machine_status) if (init_machine_status)
(*init_machine_status) (current_function); (*init_machine_status) (current_function);
} }
...@@ -5651,6 +5654,7 @@ init_function_start (subr, filename, line) ...@@ -5651,6 +5654,7 @@ init_function_start (subr, filename, line)
all_functions = current_function; all_functions = current_function;
current_function_name = (*decl_printable_name) (subr, 2); current_function_name = (*decl_printable_name) (subr, 2);
current_function->decl = subr;
/* Nonzero if this is a nested function that uses a static chain. */ /* Nonzero if this is a nested function that uses a static chain. */
......
...@@ -541,24 +541,22 @@ extern void (*save_machine_status) PROTO((struct function *)); ...@@ -541,24 +541,22 @@ extern void (*save_machine_status) PROTO((struct function *));
extern void (*restore_machine_status) PROTO((struct function *)); extern void (*restore_machine_status) PROTO((struct function *));
/* Likewise, but for language-specific data. */ /* Likewise, but for language-specific data. */
extern void (*init_lang_status) PROTO((struct function *));
extern void (*mark_lang_status) PROTO((struct function *)); extern void (*mark_lang_status) PROTO((struct function *));
extern void (*save_lang_status) PROTO((struct function *)); extern void (*save_lang_status) PROTO((struct function *));
extern void (*restore_lang_status) PROTO((struct function *)); extern void (*restore_lang_status) PROTO((struct function *));
extern void (*free_lang_status) PROTO((struct function *));
/* Save and restore status information for a nested function. */ /* Save and restore status information for a nested function. */
extern void save_tree_status PROTO((struct function *)); extern void save_tree_status PROTO((struct function *));
extern void restore_tree_status PROTO((struct function *)); extern void restore_tree_status PROTO((struct function *));
extern void restore_emit_status PROTO((struct function *)); extern void restore_emit_status PROTO((struct function *));
extern void free_after_compilation PROTO((struct function *, extern void free_after_compilation PROTO((struct function *));
tree));
extern void init_varasm_status PROTO((struct function *)); extern void init_varasm_status PROTO((struct function *));
extern void free_varasm_status PROTO((struct function *, extern void free_varasm_status PROTO((struct function *));
tree)); extern void free_emit_status PROTO((struct function *));
extern void free_emit_status PROTO((struct function *, extern void free_stmt_status PROTO((struct function *));
tree));
extern void free_stmt_status PROTO((struct function *,
tree));
extern rtx get_first_block_beg PROTO((void)); extern rtx get_first_block_beg PROTO((void));
extern void init_virtual_regs PROTO((struct emit_status *)); extern void init_virtual_regs PROTO((struct emit_status *));
......
...@@ -1672,9 +1672,9 @@ output_func_start_profiler () ...@@ -1672,9 +1672,9 @@ output_func_start_profiler ()
current_function_decl = fndecl; current_function_decl = fndecl;
DECL_INITIAL (fndecl) = error_mark_node; DECL_INITIAL (fndecl) = error_mark_node;
temporary_allocation (); temporary_allocation ();
pushlevel (0);
make_function_rtl (fndecl); make_function_rtl (fndecl);
init_function_start (fndecl, input_filename, lineno); init_function_start (fndecl, input_filename, lineno);
pushlevel (0);
expand_function_start (fndecl, 0); expand_function_start (fndecl, 0);
/* Actually generate the code to call __bb_init_func. */ /* Actually generate the code to call __bb_init_func. */
......
...@@ -552,13 +552,11 @@ mark_goto_fixup (g) ...@@ -552,13 +552,11 @@ mark_goto_fixup (g)
/* Clear out all parts of the state in F that can safely be discarded /* Clear out all parts of the state in F that can safely be discarded
after the function has been compiled, to let garbage collection after the function has been compiled, to let garbage collection
reclaim the memory. D is the declaration for the function just reclaim the memory. */
compiled. Its output may have been deferred. */
void void
free_stmt_status (f, d) free_stmt_status (f)
struct function *f; struct function *f;
tree d ATTRIBUTE_UNUSED;
{ {
/* We're about to free the function obstack. If we hold pointers to /* We're about to free the function obstack. If we hold pointers to
things allocated there, then we'll try to mark them when we do things allocated there, then we'll try to mark them when we do
......
...@@ -4469,7 +4469,7 @@ rest_of_compilation (decl) ...@@ -4469,7 +4469,7 @@ rest_of_compilation (decl)
init_recog_no_volatile (); init_recog_no_volatile ();
/* We're done with this function. Free up memory if we can. */ /* We're done with this function. Free up memory if we can. */
free_after_compilation (current_function, decl); free_after_compilation (current_function);
current_function = 0; current_function = 0;
......
...@@ -3235,17 +3235,15 @@ mark_varasm_state (p) ...@@ -3235,17 +3235,15 @@ mark_varasm_state (p)
/* Clear out all parts of the state in F that can safely be discarded /* Clear out all parts of the state in F that can safely be discarded
after the function has been compiled, to let garbage collection after the function has been compiled, to let garbage collection
reclaim the memory. D is the declaration for the function just reclaim the memory. */
compiled. Its output may have been deferred. */
void void
free_varasm_status (f, d) free_varasm_status (f)
struct function *f; struct function *f;
tree d;
{ {
struct varasm_status *p; struct varasm_status *p;
if (DECL_DEFER_OUTPUT (d)) if (DECL_DEFER_OUTPUT (f->decl))
return; return;
p = f->varasm; p = f->varasm;
......
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