mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-05 08:00:26 +08:00
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
This commit is contained in:
parent
2d3a20632b
commit
4ad08ee838
@ -1,3 +1,11 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
15
gcc/ipa.c
15
gcc/ipa.c
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user