re PR lto/54095 (Unnecessary static variable renaming)
PR lto/54095 * symtab.c (insert_to_assembler_name_hash): Handle clones. (unlink_from_assembler_name_hash): Likewise. (symtab_prevail_in_asm_name_hash, symtab_register_node, symtab_unregister_node, symtab_initialize_asm_name_hash, change_decl_assembler_name): Update. From-SVN: r198736
This commit is contained in:
parent
12dc697479
commit
c3167b004d
|
@ -1,3 +1,12 @@
|
||||||
|
2013-05-09 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
|
PR lto/54095
|
||||||
|
* symtab.c (insert_to_assembler_name_hash): Handle clones.
|
||||||
|
(unlink_from_assembler_name_hash): Likewise.
|
||||||
|
(symtab_prevail_in_asm_name_hash, symtab_register_node,
|
||||||
|
symtab_unregister_node, symtab_initialize_asm_name_hash,
|
||||||
|
change_decl_assembler_name): Update.
|
||||||
|
|
||||||
2013-05-09 Sofiane Naci <sofiane.naci@arm.com>
|
2013-05-09 Sofiane Naci <sofiane.naci@arm.com>
|
||||||
|
|
||||||
* config/aarch64/aarch64.md: New movtf split.
|
* config/aarch64/aarch64.md: New movtf split.
|
||||||
|
|
40
gcc/symtab.c
40
gcc/symtab.c
|
@ -102,7 +102,7 @@ eq_assembler_name (const void *p1, const void *p2)
|
||||||
/* Insert NODE to assembler name hash. */
|
/* Insert NODE to assembler name hash. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
insert_to_assembler_name_hash (symtab_node node)
|
insert_to_assembler_name_hash (symtab_node node, bool with_clones)
|
||||||
{
|
{
|
||||||
if (is_a <varpool_node> (node) && DECL_HARD_REGISTER (node->symbol.decl))
|
if (is_a <varpool_node> (node) && DECL_HARD_REGISTER (node->symbol.decl))
|
||||||
return;
|
return;
|
||||||
|
@ -111,6 +111,9 @@ insert_to_assembler_name_hash (symtab_node node)
|
||||||
if (assembler_name_hash)
|
if (assembler_name_hash)
|
||||||
{
|
{
|
||||||
void **aslot;
|
void **aslot;
|
||||||
|
struct cgraph_node *cnode;
|
||||||
|
tree decl = node->symbol.decl;
|
||||||
|
|
||||||
tree name = DECL_ASSEMBLER_NAME (node->symbol.decl);
|
tree name = DECL_ASSEMBLER_NAME (node->symbol.decl);
|
||||||
|
|
||||||
aslot = htab_find_slot_with_hash (assembler_name_hash, name,
|
aslot = htab_find_slot_with_hash (assembler_name_hash, name,
|
||||||
|
@ -121,6 +124,13 @@ insert_to_assembler_name_hash (symtab_node node)
|
||||||
if (*aslot != NULL)
|
if (*aslot != NULL)
|
||||||
((symtab_node)*aslot)->symbol.previous_sharing_asm_name = node;
|
((symtab_node)*aslot)->symbol.previous_sharing_asm_name = node;
|
||||||
*aslot = node;
|
*aslot = node;
|
||||||
|
|
||||||
|
/* Update also possible inline clones sharing a decl. */
|
||||||
|
cnode = dyn_cast <cgraph_node> (node);
|
||||||
|
if (cnode && cnode->clones && with_clones)
|
||||||
|
for (cnode = cnode->clones; cnode; cnode = cnode->next_sibling_clone)
|
||||||
|
if (cnode->symbol.decl == decl)
|
||||||
|
insert_to_assembler_name_hash ((symtab_node) cnode, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -128,10 +138,13 @@ insert_to_assembler_name_hash (symtab_node node)
|
||||||
/* Remove NODE from assembler name hash. */
|
/* Remove NODE from assembler name hash. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
unlink_from_assembler_name_hash (symtab_node node)
|
unlink_from_assembler_name_hash (symtab_node node, bool with_clones)
|
||||||
{
|
{
|
||||||
if (assembler_name_hash)
|
if (assembler_name_hash)
|
||||||
{
|
{
|
||||||
|
struct cgraph_node *cnode;
|
||||||
|
tree decl = node->symbol.decl;
|
||||||
|
|
||||||
if (node->symbol.next_sharing_asm_name)
|
if (node->symbol.next_sharing_asm_name)
|
||||||
node->symbol.next_sharing_asm_name->symbol.previous_sharing_asm_name
|
node->symbol.next_sharing_asm_name->symbol.previous_sharing_asm_name
|
||||||
= node->symbol.previous_sharing_asm_name;
|
= node->symbol.previous_sharing_asm_name;
|
||||||
|
@ -155,6 +168,13 @@ unlink_from_assembler_name_hash (symtab_node node)
|
||||||
}
|
}
|
||||||
node->symbol.next_sharing_asm_name = NULL;
|
node->symbol.next_sharing_asm_name = NULL;
|
||||||
node->symbol.previous_sharing_asm_name = NULL;
|
node->symbol.previous_sharing_asm_name = NULL;
|
||||||
|
|
||||||
|
/* Update also possible inline clones sharing a decl. */
|
||||||
|
cnode = dyn_cast <cgraph_node> (node);
|
||||||
|
if (cnode && cnode->clones && with_clones)
|
||||||
|
for (cnode = cnode->clones; cnode; cnode = cnode->next_sibling_clone)
|
||||||
|
if (cnode->symbol.decl == decl)
|
||||||
|
unlink_from_assembler_name_hash ((symtab_node) cnode, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,8 +183,8 @@ unlink_from_assembler_name_hash (symtab_node node)
|
||||||
void
|
void
|
||||||
symtab_prevail_in_asm_name_hash (symtab_node node)
|
symtab_prevail_in_asm_name_hash (symtab_node node)
|
||||||
{
|
{
|
||||||
unlink_from_assembler_name_hash (node);
|
unlink_from_assembler_name_hash (node, false);
|
||||||
insert_to_assembler_name_hash (node);
|
insert_to_assembler_name_hash (node, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -196,7 +216,7 @@ symtab_register_node (symtab_node node)
|
||||||
|
|
||||||
/* Be sure to do this last; C++ FE might create new nodes via
|
/* Be sure to do this last; C++ FE might create new nodes via
|
||||||
DECL_ASSEMBLER_NAME langhook! */
|
DECL_ASSEMBLER_NAME langhook! */
|
||||||
insert_to_assembler_name_hash (node);
|
insert_to_assembler_name_hash (node, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make NODE to be the one symtab hash is pointing to. Used when reshaping tree
|
/* Make NODE to be the one symtab hash is pointing to. Used when reshaping tree
|
||||||
|
@ -259,7 +279,7 @@ symtab_unregister_node (symtab_node node)
|
||||||
else
|
else
|
||||||
*slot = replacement_node;
|
*slot = replacement_node;
|
||||||
}
|
}
|
||||||
unlink_from_assembler_name_hash (node);
|
unlink_from_assembler_name_hash (node, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return symbol table node associated with DECL, if any,
|
/* Return symbol table node associated with DECL, if any,
|
||||||
|
@ -312,7 +332,7 @@ symtab_initialize_asm_name_hash (void)
|
||||||
htab_create_ggc (10, hash_node_by_assembler_name, eq_assembler_name,
|
htab_create_ggc (10, hash_node_by_assembler_name, eq_assembler_name,
|
||||||
NULL);
|
NULL);
|
||||||
FOR_EACH_SYMBOL (node)
|
FOR_EACH_SYMBOL (node)
|
||||||
insert_to_assembler_name_hash (node);
|
insert_to_assembler_name_hash (node, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,7 +375,7 @@ change_decl_assembler_name (tree decl, tree name)
|
||||||
{
|
{
|
||||||
SET_DECL_ASSEMBLER_NAME (decl, name);
|
SET_DECL_ASSEMBLER_NAME (decl, name);
|
||||||
if (node)
|
if (node)
|
||||||
insert_to_assembler_name_hash (node);
|
insert_to_assembler_name_hash (node, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -363,14 +383,14 @@ change_decl_assembler_name (tree decl, tree name)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (node)
|
if (node)
|
||||||
unlink_from_assembler_name_hash (node);
|
unlink_from_assembler_name_hash (node, true);
|
||||||
if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
|
if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
|
||||||
&& DECL_RTL_SET_P (decl))
|
&& DECL_RTL_SET_P (decl))
|
||||||
warning (0, "%D renamed after being referenced in assembly", decl);
|
warning (0, "%D renamed after being referenced in assembly", decl);
|
||||||
|
|
||||||
SET_DECL_ASSEMBLER_NAME (decl, name);
|
SET_DECL_ASSEMBLER_NAME (decl, name);
|
||||||
if (node)
|
if (node)
|
||||||
insert_to_assembler_name_hash (node);
|
insert_to_assembler_name_hash (node, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue