aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2011-06-18 08:33:47 +0000
committerJan Hubicka <jh@suse.cz>2011-06-18 08:33:47 +0000
commit478481a931eb774464cc1de97c20a6f92eeb529b (patch)
tree92ef40a17a9585af7df791295b1cbc59dc587bd5 /gcc/ipa.c
parent9e0d836c6d2735637c764fc0ddae551924fe77f0 (diff)
* lto-symtab.c (lto_varpool_replace_node): Remove code handling
extra name aliases. (lto_symtab_resolve_can_prevail_p): Likewise. (lto_symtab_merge_cgraph_nodes): Update alias_of pointers. * cgraphbuild.c (record_reference): Remove extra body alias code. (mark_load): Likewise. (mark_store): Likewise. * cgraph.h (varpool_node): Remove extra_name filed; add alias_of and extraname_alias. (varpool_create_variable_alias, varpool_for_node_and_aliases): Declare. (varpool_alias_aliased_node): New inline function. (varpool_variable_node): New function. * cgraphunit.c (handle_alias_pairs): Handle also variable aliases. * ipa-ref.c (ipa_record_reference): Allow aliases on variables. * lto-cgraph.c (lto_output_varpool_node): Update streaming. (input_varpool_node): Likewise. * lto-streamer-out.c (produce_symtab): Remove extra name aliases. (varpool_externally_visible_p): Remove extra body alias code. (function_and_variable_visibility): Likewise. * tree-ssa-structalias.c (associate_varinfo_to_alias_1): New function. (ipa_pta_execute): Use it. * varpool.c (varpool_remove_node): Remove extra name alias code. (varpool_mark_needed_node): Likewise. (varpool_analyze_pending_decls): Analyze aliases. (assemble_aliases): New functoin. (varpool_assemble_decl): Use it. (varpool_create_variable_alias): New function. (varpool_extra_name_alias): Rewrite. (varpool_for_node_and_aliases): New function. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@175169 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa.c')
-rw-r--r--gcc/ipa.c30
1 files changed, 2 insertions, 28 deletions
diff --git a/gcc/ipa.c b/gcc/ipa.c
index b9ae579cd45..260cc26cc6f 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -655,7 +655,6 @@ cgraph_externally_visible_p (struct cgraph_node *node,
static bool
varpool_externally_visible_p (struct varpool_node *vnode, bool aliased)
{
- struct varpool_node *alias;
if (!DECL_COMDAT (vnode->decl) && !TREE_PUBLIC (vnode->decl))
return false;
@@ -668,14 +667,6 @@ varpool_externally_visible_p (struct varpool_node *vnode, bool aliased)
if (varpool_used_from_object_file_p (vnode))
return true;
- /* FIXME: We get wrong symbols with asm aliases in callgraph and LTO.
- This is because very little of code knows that assembler name needs to
- mangled. Avoid touching declarations with user asm name set to mask
- some of the problems. */
- if (DECL_ASSEMBLER_NAME_SET_P (vnode->decl)
- && IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (vnode->decl))[0]=='*')
- return true;
-
if (DECL_PRESERVE_P (vnode->decl))
return true;
if (lookup_attribute ("externally_visible",
@@ -694,11 +685,6 @@ varpool_externally_visible_p (struct varpool_node *vnode, bool aliased)
This is needed for i.e. references from asm statements. */
if (varpool_used_from_object_file_p (vnode))
return true;
- for (alias = vnode->extra_name; alias; alias = alias->next)
- if (alias->resolution != LDPR_PREVAILING_DEF_IRONLY)
- break;
- if (!alias && vnode->resolution == LDPR_PREVAILING_DEF_IRONLY)
- return false;
/* As a special case, the COMDAT virutal tables can be unshared.
In LTO mode turn vtables into static variables. The variable is readonly,
@@ -782,13 +768,7 @@ function_and_variable_visibility (bool whole_program)
{
if (!node->analyzed)
continue;
- /* Weakrefs alias symbols from other compilation unit. In the case
- the destination of weakref became available because of LTO, we must
- mark it as needed. */
- if (in_lto_p
- && lookup_attribute ("weakref", DECL_ATTRIBUTES (p->decl))
- && !node->needed)
- cgraph_mark_needed_node (node);
+ cgraph_mark_needed_node (node);
gcc_assert (node->needed);
pointer_set_insert (aliased_nodes, node);
if (dump_file)
@@ -798,13 +778,7 @@ function_and_variable_visibility (bool whole_program)
else if ((vnode = varpool_node_for_asm (p->target)) != NULL
&& !DECL_EXTERNAL (vnode->decl))
{
- /* Weakrefs alias symbols from other compilation unit. In the case
- the destination of weakref became available because of LTO, we must
- mark it as needed. */
- if (in_lto_p
- && lookup_attribute ("weakref", DECL_ATTRIBUTES (p->decl))
- && !vnode->needed)
- varpool_mark_needed_node (vnode);
+ varpool_mark_needed_node (vnode);
gcc_assert (vnode->needed);
pointer_set_insert (aliased_vnodes, vnode);
if (dump_file)