diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4da4d045ce82..8ef85773d7a6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2020-01-15 Richard Biener + + * alias.c (record_alias_subset): Avoid redundant work when + subset is already recorded. + 2020-01-14 David Malcolm * doc/invoke.texi (-fdiagnostics-show-cwe): Add note that some of diff --git a/gcc/alias.c b/gcc/alias.c index 9629b5a9f484..3794f9b6a9ee 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -1164,10 +1164,16 @@ record_alias_subset (alias_set_type superset, alias_set_type subset) superset_entry->has_zero_child = 1; else { - subset_entry = get_alias_set_entry (subset); if (!superset_entry->children) superset_entry->children = hash_map::create_ggc (64); + + /* Enter the SUBSET itself as a child of the SUPERSET. If it was + already there we're done. */ + if (superset_entry->children->put (subset, 0)) + return; + + subset_entry = get_alias_set_entry (subset); /* If there is an entry for the subset, enter all of its children (if they are not already present) as children of the SUPERSET. */ if (subset_entry) @@ -1185,9 +1191,6 @@ record_alias_subset (alias_set_type superset, alias_set_type subset) superset_entry->children->put ((*iter).first, (*iter).second); } } - - /* Enter the SUBSET itself as a child of the SUPERSET. */ - superset_entry->children->put (subset, 0); } }