* Cgraph alias reorg 9/14 (skip aliases in ipa-cp)
@ 2011-06-10 15:55 Jan Hubicka
0 siblings, 0 replies; only message in thread
From: Jan Hubicka @ 2011-06-10 15:55 UTC (permalink / raw)
To: gcc-patches
Hi.
this patch updates ipa-cp to skip aliases. Since it includes some reformating, I decided
to leave it for separate patch.
It also prevents ipa-cp from an attempt to clone or propagate through thunks. We still
don't do any jump functions on those.
Regtested/boostrapped x86_64-linux, will commit it shortly.
Honza
* ipa-cp.c (ipcp_versionable_function_p): Thunks are not versionable.
(ipcp_initialize_node_lattices): Do not deal with aliases; Do not try to
propagate through thunks.
(ipcp_change_tops_to_bottom): Do not deal with aliases.
Index: ipa-cp.c
===================================================================
--- ipa-cp.c (revision 174911)
+++ ipa-cp.c (working copy)
@@ -354,6 +354,10 @@ ipcp_versionable_function_p (struct cgra
if (node->alias)
return false;
+ /* We don't know how to clone thunks. */
+ if (node->thunk.thunk_p)
+ return false;
+
/* There are a number of generic reasons functions cannot be versioned. We
also cannot remove parameters if there are type attributes such as fnspec
present. */
@@ -507,9 +511,11 @@ ipcp_initialize_node_lattices (struct cg
struct ipa_node_params *info = IPA_NODE_REF (node);
enum ipa_lattice_type type;
- if (ipa_is_called_with_var_arguments (info) || node->alias)
+ if (ipa_is_called_with_var_arguments (info))
type = IPA_BOTTOM;
- else if (node->local.local)
+ /* We don't know how to clone thunks even when they are local. */
+ else if (node->local.local
+ && !node->thunk.thunk_p)
type = IPA_TOP;
/* When cloning is allowed, we can assume that externally visible functions
are not called. We will compensate this by cloning later. */
@@ -592,40 +598,41 @@ ipcp_change_tops_to_bottom (void)
prop_again = false;
for (node = cgraph_nodes; node; node = node->next)
- {
- struct ipa_node_params *info = IPA_NODE_REF (node);
- count = ipa_get_param_count (info);
- for (i = 0; i < count; i++)
- {
- struct ipcp_lattice *lat = ipa_get_lattice (info, i);
- if (lat->type == IPA_TOP)
- {
- prop_again = true;
- if (dump_file)
- {
- fprintf (dump_file, "Forcing param ");
- print_generic_expr (dump_file, ipa_get_param (info, i), 0);
- fprintf (dump_file, " of node %s to bottom.\n",
- cgraph_node_name (node));
- }
- lat->type = IPA_BOTTOM;
- }
- if (!ipa_param_cannot_devirtualize_p (info, i)
- && ipa_param_types_vec_empty (info, i))
- {
- prop_again = true;
- ipa_set_param_cannot_devirtualize (info, i);
- if (dump_file)
- {
- fprintf (dump_file, "Marking param ");
- print_generic_expr (dump_file, ipa_get_param (info, i), 0);
- fprintf (dump_file, " of node %s as unusable for "
- "devirtualization.\n",
- cgraph_node_name (node));
- }
- }
- }
- }
+ if (!node->alias)
+ {
+ struct ipa_node_params *info = IPA_NODE_REF (node);
+ count = ipa_get_param_count (info);
+ for (i = 0; i < count; i++)
+ {
+ struct ipcp_lattice *lat = ipa_get_lattice (info, i);
+ if (lat->type == IPA_TOP)
+ {
+ prop_again = true;
+ if (dump_file)
+ {
+ fprintf (dump_file, "Forcing param ");
+ print_generic_expr (dump_file, ipa_get_param (info, i), 0);
+ fprintf (dump_file, " of node %s to bottom.\n",
+ cgraph_node_name (node));
+ }
+ lat->type = IPA_BOTTOM;
+ }
+ if (!ipa_param_cannot_devirtualize_p (info, i)
+ && ipa_param_types_vec_empty (info, i))
+ {
+ prop_again = true;
+ ipa_set_param_cannot_devirtualize (info, i);
+ if (dump_file)
+ {
+ fprintf (dump_file, "Marking param ");
+ print_generic_expr (dump_file, ipa_get_param (info, i), 0);
+ fprintf (dump_file, " of node %s as unusable for "
+ "devirtualization.\n",
+ cgraph_node_name (node));
+ }
+ }
+ }
+ }
return prop_again;
}
@@ -813,10 +820,11 @@ ipcp_iterate_stage (void)
ipa_update_after_lto_read ();
for (node = cgraph_nodes; node; node = node->next)
- {
- ipcp_initialize_node_lattices (node);
- ipcp_compute_node_scale (node);
- }
+ if (!node->alias)
+ {
+ ipcp_initialize_node_lattices (node);
+ ipcp_compute_node_scale (node);
+ }
if (dump_file && (dump_flags & TDF_DETAILS))
{
ipcp_print_all_lattices (dump_file);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-06-10 15:50 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-10 15:55 Cgraph alias reorg 9/14 (skip aliases in ipa-cp) Jan Hubicka
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).