Commit 606711a1 by Martin Liska Committed by Martin Liska

Significantly speed up verifiers for a cgraph_node with many clones.

2019-03-07  Martin Liska  <mliska@suse.cz>

	* cgraph.c (cgraph_node::verify_node): Verify with a neighbour
	which is equivalent to searching for this in clones chain.
	* symtab.c (symtab_node::verify_base): Similarly compare ASM
	names with a neighbour and special case first node in a chain.

From-SVN: r269461
parent 7c3f98ca
2019-03-07 Martin Liska <mliska@suse.cz>
* cgraph.c (cgraph_node::verify_node): Verify with a neighbour
which is equivalent to searching for this in clones chain.
* symtab.c (symtab_node::verify_base): Similarly compare ASM
names with a neighbour and special case first node in a chain.
2019-01-25 Jason Merrill <jason@redhat.com>
PR c++/80916 - spurious "static but not defined" warning.
......
......@@ -3240,16 +3240,16 @@ cgraph_node::verify_node (void)
if (clone_of)
{
cgraph_node *n;
for (n = clone_of->clones; n; n = n->next_sibling_clone)
if (n == this)
break;
if (!n)
cgraph_node *first_clone = clone_of->clones;
if (first_clone != this)
{
if (prev_sibling_clone->clone_of != clone_of)
{
error ("cgraph_node has wrong clone_of");
error_found = true;
}
}
}
if (clones)
{
cgraph_node *n;
......
......@@ -1040,25 +1040,32 @@ symtab_node::verify_base (void)
if (symtab->assembler_name_hash)
{
hashed_node = symtab_node::get_for_asmname (DECL_ASSEMBLER_NAME (decl));
if (hashed_node && hashed_node->previous_sharing_asm_name)
if (hashed_node)
{
if (hashed_node->previous_sharing_asm_name)
{
error ("assembler name hash list corrupted");
error_found = true;
}
while (hashed_node)
else if (previous_sharing_asm_name == NULL)
{
if (hashed_node == this)
break;
hashed_node = hashed_node->next_sharing_asm_name;
if (hashed_node != this)
{
error ("assembler name hash list corrupted");
error_found = true;
}
if (!hashed_node
&& !(is_a <varpool_node *> (this)
&& DECL_HARD_REGISTER (decl)))
}
else if (!(is_a <varpool_node *> (this) && DECL_HARD_REGISTER (decl)))
{
if (!asmname_hasher::equal (previous_sharing_asm_name,
DECL_ASSEMBLER_NAME (decl)))
{
error ("node not found in symtab assembler name hash");
error_found = true;
}
}
}
}
if (previous_sharing_asm_name
&& previous_sharing_asm_name->next_sharing_asm_name != this)
{
......
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