cgraph.c (dump_cgraph_node): Dump versionable flag.
* cgraph.c (dump_cgraph_node): Dump versionable flag. * cgraph.h (cgraph_local_info): Add versionable flag. * ipa-cp.c (ipcp_analyze_node): Set versionable flag. (ipcp_versionable_function_p): Use it. * lto-cgraph.c (lto_output_node, input_overwrite_node): Stream versionable flag. From-SVN: r159467
This commit is contained in:
parent
91fbf0c7c6
commit
ccbbf8a2db
@ -1,3 +1,12 @@
|
||||
2010-05-16 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* cgraph.c (dump_cgraph_node): Dump versionable flag.
|
||||
* cgraph.h (cgraph_local_info): Add versionable flag.
|
||||
* ipa-cp.c (ipcp_analyze_node): Set versionable flag.
|
||||
(ipcp_versionable_function_p): Use it.
|
||||
* lto-cgraph.c (lto_output_node, input_overwrite_node): Stream
|
||||
versionable flag.
|
||||
|
||||
2010-05-16 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* cgraph.c (cgraph_clone_node): Take decl argument and insert
|
||||
@ -7,7 +16,8 @@
|
||||
* lto-cgrpah.c (lto_cgraph_encoder_new): Create body map.
|
||||
(lto_cgraph_encoder_delete): Delete body map.
|
||||
(lto_cgraph_encoder_size): Move to header.
|
||||
(lto_cgraph_encoder_encode_body_p, lto_set_cgraph_encoder_encode_body): New.
|
||||
(lto_cgraph_encoder_encode_body_p,
|
||||
lto_set_cgraph_encoder_encode_body): New.
|
||||
(lto_output_node): Do not take written_decls argument; output clone_of
|
||||
pointer.
|
||||
(add_node_to): Add include_body_argument; call
|
||||
|
@ -1830,6 +1830,8 @@ dump_cgraph_node (FILE *f, struct cgraph_node *node)
|
||||
fprintf (f, " always_inline");
|
||||
else if (node->local.inlinable)
|
||||
fprintf (f, " inlinable");
|
||||
else if (node->local.versionable)
|
||||
fprintf (f, " versionable");
|
||||
if (node->local.redefined_extern_inline)
|
||||
fprintf (f, " redefined_extern_inline");
|
||||
if (TREE_ASM_WRITTEN (node->decl))
|
||||
@ -2046,6 +2048,8 @@ cgraph_clone_edge (struct cgraph_edge *e, struct cgraph_node *n,
|
||||
|
||||
/* Create node representing clone of N executed COUNT times. Decrease
|
||||
the execution counts from original node too.
|
||||
The new clone will have decl set to DECL that may or may not be the same
|
||||
as decl of N.
|
||||
|
||||
When UPDATE_ORIGINAL is true, the counts are subtracted from the original
|
||||
function's profile to reflect the fact that part of execution is handled
|
||||
|
@ -105,6 +105,10 @@ struct GTY(()) cgraph_local_info {
|
||||
/* False when there something makes inlining impossible (such as va_arg). */
|
||||
unsigned inlinable : 1;
|
||||
|
||||
/* False when there something makes versioning impossible.
|
||||
Currently computed and used only by ipa-cp. */
|
||||
unsigned versionable : 1;
|
||||
|
||||
/* True when function should be inlined independently on its size. */
|
||||
unsigned disregard_inline_limits : 1;
|
||||
|
||||
|
@ -183,6 +183,7 @@ ipcp_analyze_node (struct cgraph_node *node)
|
||||
/* Unreachable nodes should have been eliminated before ipcp. */
|
||||
gcc_assert (node->needed || node->reachable);
|
||||
|
||||
node->local.versionable = tree_versionable_function_p (node->decl);
|
||||
ipa_initialize_node_params (node);
|
||||
ipa_detect_param_modifications (node);
|
||||
}
|
||||
@ -419,7 +420,7 @@ ipcp_versionable_function_p (struct cgraph_node *node)
|
||||
basic_block bb;
|
||||
|
||||
/* There are a number of generic reasons functions cannot be versioned. */
|
||||
if (!tree_versionable_function_p (decl))
|
||||
if (!node->local.versionable)
|
||||
return false;
|
||||
|
||||
/* Removing arguments doesn't work if the function takes varargs. */
|
||||
|
@ -468,6 +468,7 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node,
|
||||
bp_pack_value (bp, node->local.externally_visible, 1);
|
||||
bp_pack_value (bp, node->local.finalized, 1);
|
||||
bp_pack_value (bp, node->local.inlinable, 1);
|
||||
bp_pack_value (bp, node->local.versionable, 1);
|
||||
bp_pack_value (bp, node->local.disregard_inline_limits, 1);
|
||||
bp_pack_value (bp, node->local.redefined_extern_inline, 1);
|
||||
bp_pack_value (bp, node->local.vtable_method, 1);
|
||||
@ -921,6 +922,7 @@ input_overwrite_node (struct lto_file_decl_data *file_data,
|
||||
node->local.externally_visible = bp_unpack_value (bp, 1);
|
||||
node->local.finalized = bp_unpack_value (bp, 1);
|
||||
node->local.inlinable = bp_unpack_value (bp, 1);
|
||||
node->local.versionable = bp_unpack_value (bp, 1);
|
||||
node->local.disregard_inline_limits = bp_unpack_value (bp, 1);
|
||||
node->local.redefined_extern_inline = bp_unpack_value (bp, 1);
|
||||
node->local.vtable_method = bp_unpack_value (bp, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user