Commit 35f5b1c1 by Lawrence Crowl Committed by Diego Novillo

lto-streamer-in.c (input_struct_function_base): Factor out of ...

2011-10-12   Lawrence Crowl  <crowl@google.com>
	     Diego Novillo  <dnovillo@google.com>

	* lto-streamer-in.c (input_struct_function_base): Factor out of ...
	(input_function): ... here.
	* lto-streamer-out.c (output_struct_function_base): Factor out of ...
	(output_function): ... here.

Co-Authored-By: Diego Novillo <dnovillo@google.com>

From-SVN: r179928
parent a22286c3
2011-10-13 Lawrence Crowl <crowl@google.com>
Diego Novillo <dnovillo@google.com>
* lto-streamer-in.c (input_struct_function_base): Factor out of ...
(input_function): ... here.
* lto-streamer-out.c (output_struct_function_base): Factor out of ...
(output_function): ... here.
2011-10-13 Gabriel Charette <gchare@google.com>
Diego Novillo <dnovillo@google.com>
......@@ -764,27 +764,40 @@ fixup_call_stmt_edges (struct cgraph_node *orig, gimple *stmts)
}
}
/* Read the body of function FN_DECL from DATA_IN using input block IB. */
/* Input the base body of struct function FN from DATA_IN
using input block IB. */
static void
input_function (tree fn_decl, struct data_in *data_in,
struct lto_input_block *ib)
input_struct_function_base (struct function *fn, struct data_in *data_in,
struct lto_input_block *ib)
{
struct function *fn;
enum LTO_tags tag;
gimple *stmts;
basic_block bb;
struct bitpack_d bp;
struct cgraph_node *node;
tree args, narg, oarg;
int len;
fn = DECL_STRUCT_FUNCTION (fn_decl);
tag = streamer_read_record_start (ib);
clear_line_info (data_in);
/* Read the static chain and non-local goto save area. */
fn->static_chain_decl = stream_read_tree (ib, data_in);
fn->nonlocal_goto_save_area = stream_read_tree (ib, data_in);
gimple_register_cfg_hooks ();
lto_tag_check (tag, LTO_function);
/* Read all the local symbols. */
len = streamer_read_hwi (ib);
if (len > 0)
{
int i;
VEC_safe_grow (tree, gc, fn->local_decls, len);
for (i = 0; i < len; i++)
{
tree t = stream_read_tree (ib, data_in);
VEC_replace (tree, fn->local_decls, i, t);
}
}
/* Input the function start and end loci. */
fn->function_start_locus = lto_input_location (ib, data_in);
fn->function_end_locus = lto_input_location (ib, data_in);
/* Input the current IL state of the function. */
fn->curr_properties = streamer_read_uhwi (ib);
/* Read all the attributes for FN. */
bp = streamer_read_bitpack (ib);
......@@ -802,30 +815,30 @@ input_function (tree fn_decl, struct data_in *data_in,
fn->calls_setjmp = bp_unpack_value (&bp, 1);
fn->va_list_fpr_size = bp_unpack_value (&bp, 8);
fn->va_list_gpr_size = bp_unpack_value (&bp, 8);
}
/* Input the function start and end loci. */
fn->function_start_locus = lto_input_location (ib, data_in);
fn->function_end_locus = lto_input_location (ib, data_in);
/* Input the current IL state of the function. */
fn->curr_properties = streamer_read_uhwi (ib);
/* Read the body of function FN_DECL from DATA_IN using input block IB. */
/* Read the static chain and non-local goto save area. */
fn->static_chain_decl = stream_read_tree (ib, data_in);
fn->nonlocal_goto_save_area = stream_read_tree (ib, data_in);
static void
input_function (tree fn_decl, struct data_in *data_in,
struct lto_input_block *ib)
{
struct function *fn;
enum LTO_tags tag;
gimple *stmts;
basic_block bb;
struct cgraph_node *node;
tree args, narg, oarg;
/* Read all the local symbols. */
len = streamer_read_hwi (ib);
if (len > 0)
{
int i;
VEC_safe_grow (tree, gc, fn->local_decls, len);
for (i = 0; i < len; i++)
{
tree t = stream_read_tree (ib, data_in);
VEC_replace (tree, fn->local_decls, i, t);
}
}
fn = DECL_STRUCT_FUNCTION (fn_decl);
tag = streamer_read_record_start (ib);
clear_line_info (data_in);
gimple_register_cfg_hooks ();
lto_tag_check (tag, LTO_function);
input_struct_function_base (fn, data_in, ib);
/* Read all function arguments. We need to re-map them here to the
arguments of the merged function declaration. */
......
......@@ -719,36 +719,30 @@ produce_asm (struct output_block *ob, tree fn)
}
/* Output the body of function NODE->DECL. */
/* Output the base body of struct function FN using output block OB. */
static void
output_function (struct cgraph_node *node)
output_struct_function_base (struct output_block *ob, struct function *fn)
{
struct bitpack_d bp;
tree function;
struct function *fn;
basic_block bb;
struct output_block *ob;
unsigned i;
tree t;
function = node->decl;
fn = DECL_STRUCT_FUNCTION (function);
ob = create_output_block (LTO_section_function_body);
clear_line_info (ob);
ob->cgraph_node = node;
gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
/* Output the static chain and non-local goto save area. */
stream_write_tree (ob, fn->static_chain_decl, true);
stream_write_tree (ob, fn->nonlocal_goto_save_area, true);
/* Set current_function_decl and cfun. */
current_function_decl = function;
push_cfun (fn);
/* Output all the local variables in the function. */
streamer_write_hwi (ob, VEC_length (tree, fn->local_decls));
FOR_EACH_VEC_ELT (tree, fn->local_decls, i, t)
stream_write_tree (ob, t, true);
/* Make string 0 be a NULL string. */
streamer_write_char_stream (ob->string_stream, 0);
/* Output the function start and end loci. */
lto_output_location (ob, fn->function_start_locus);
lto_output_location (ob, fn->function_end_locus);
streamer_write_record_start (ob, LTO_function);
/* Output current IL state of the function. */
streamer_write_uhwi (ob, fn->curr_properties);
/* Write all the attributes for FN. */
bp = bitpack_create (ob->main_stream);
......@@ -767,22 +761,38 @@ output_function (struct cgraph_node *node)
bp_pack_value (&bp, fn->va_list_fpr_size, 8);
bp_pack_value (&bp, fn->va_list_gpr_size, 8);
streamer_write_bitpack (&bp);
}
/* Output the function start and end loci. */
lto_output_location (ob, fn->function_start_locus);
lto_output_location (ob, fn->function_end_locus);
/* Output current IL state of the function. */
streamer_write_uhwi (ob, fn->curr_properties);
/* Output the body of function NODE->DECL. */
/* Output the static chain and non-local goto save area. */
stream_write_tree (ob, fn->static_chain_decl, true);
stream_write_tree (ob, fn->nonlocal_goto_save_area, true);
static void
output_function (struct cgraph_node *node)
{
tree function;
struct function *fn;
basic_block bb;
struct output_block *ob;
/* Output all the local variables in the function. */
streamer_write_hwi (ob, VEC_length (tree, fn->local_decls));
FOR_EACH_VEC_ELT (tree, fn->local_decls, i, t)
stream_write_tree (ob, t, true);
function = node->decl;
fn = DECL_STRUCT_FUNCTION (function);
ob = create_output_block (LTO_section_function_body);
clear_line_info (ob);
ob->cgraph_node = node;
gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
/* Set current_function_decl and cfun. */
current_function_decl = function;
push_cfun (fn);
/* Make string 0 be a NULL string. */
streamer_write_char_stream (ob->string_stream, 0);
streamer_write_record_start (ob, LTO_function);
output_struct_function_base (ob, fn);
/* Output the head of the arguments list. */
stream_write_tree (ob, DECL_ARGUMENTS (function), true);
......
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