Commit 4ad08ee8 by Jan Hubicka Committed by Jan Hubicka

ipa.c (symbol_table::remove_unreachable_nodes): Mark all inline clones as having…

ipa.c (symbol_table::remove_unreachable_nodes): Mark all inline clones as having abstract origin used.


	* ipa.c (symbol_table::remove_unreachable_nodes): Mark all inline clones
	as having abstract origin used.
	* ipa-inline-transform.c (can_remove_node_now_p_1): Drop abstract origin check.
	(clone_inlined_nodes): Copy abstract originflag.
	* lto-cgraph.c (compute_ltrans_boundary): Use get_create to get abstract origin node.

From-SVN: r217973
parent 2d3a2063
2014-11-22 Jan Hubicka <hubicka@ucw.cz>
* ipa.c (symbol_table::remove_unreachable_nodes): Mark all inline clones
as having abstract origin used.
* ipa-inline-transform.c (can_remove_node_now_p_1): Drop abstract origin check.
(clone_inlined_nodes): Copy abstract originflag.
* lto-cgraph.c (compute_ltrans_boundary): Use get_create to get abstract origin node.
2014-11-22 Uros Bizjak <ubizjak@gmail.com>
* params.def (PARAM_MAX_COMPLETELY_PEELED_INSNS): Increase to 200.
......@@ -100,7 +100,6 @@ can_remove_node_now_p_1 (struct cgraph_node *node)
the callgraph so references can point to it. */
return (!node->address_taken
&& !node->has_aliases_p ()
&& !node->used_as_abstract_origin
&& node->can_remove_if_no_direct_calls_p ()
/* Inlining might enable more devirtualizing, so we want to remove
those only after all devirtualizable virtual calls are processed.
......@@ -218,6 +217,7 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate,
update_original, vNULL, true,
inlining_into,
NULL);
n->used_as_abstract_origin = e->callee->used_as_abstract_origin;
e->redirect_callee (n);
}
}
......
......@@ -360,9 +360,18 @@ symbol_table::remove_unreachable_nodes (bool before_inlining_p, FILE *file)
&& DECL_ABSTRACT_ORIGIN (node->decl))
{
struct cgraph_node *origin_node
= cgraph_node::get_create (DECL_ABSTRACT_ORIGIN (node->decl));
origin_node->used_as_abstract_origin = true;
enqueue_node (origin_node, &first, &reachable);
= cgraph_node::get (DECL_ABSTRACT_ORIGIN (node->decl));
if (origin_node && !origin_node->used_as_abstract_origin)
{
origin_node->used_as_abstract_origin = true;
gcc_assert (!origin_node->prev_sibling_clone);
gcc_assert (!origin_node->next_sibling_clone);
for (cgraph_node *n = origin_node->clones; n;
n = n->next_sibling_clone)
if (n->decl == DECL_ABSTRACT_ORIGIN (node->decl))
n->used_as_abstract_origin = true;
enqueue_node (origin_node, &first, &reachable);
}
}
/* If any symbol in a comdat group is reachable, force
all externally visible symbols in the same comdat
......
......@@ -877,7 +877,8 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
if (DECL_ABSTRACT_ORIGIN (node->decl))
{
struct cgraph_node *origin_node
= cgraph_node::get (DECL_ABSTRACT_ORIGIN (node->decl));
= cgraph_node::get_create (DECL_ABSTRACT_ORIGIN (node->decl));
origin_node->used_as_abstract_origin = true;
add_node_to (encoder, origin_node, 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