mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-16 06:54:37 +00:00
comp-filter: Speed up harmless/harmful categorization
Categorizing a diff graph with a thousands of function diff nodes takes a lot of time. At that point, categorizing each node has harmful/harmless is showing up in the profile, particularly because has_var_type_cv_qual_change and to a lesser extend class_diff_has_harmless_odr_violation_change perform some structural comparison still, oops. This patch avoids doing that. On my machine, the categorizing of each node goes from around 130ms to 92 ms. * src/abg-comp-filter.cc (class_diff_has_harmless_odr_violation_change) (has_var_type_cv_qual_change): Avoid doing structural comparison here. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
This commit is contained in:
parent
4e58cdaba6
commit
acfa51d52d
@ -775,14 +775,10 @@ class_diff_has_harmless_odr_violation_change(const diff* dif)
|
||||
class_decl_sptr first = d->first_class_decl();
|
||||
class_decl_sptr second = d->second_class_decl();
|
||||
|
||||
if (equals(*first, *second, 0))
|
||||
{
|
||||
class_decl_sptr fc = is_class_type(first->get_canonical_type());
|
||||
class_decl_sptr sc = is_class_type(second->get_canonical_type());
|
||||
|
||||
if (!equals(*fc, *sc, 0))
|
||||
return true;
|
||||
}
|
||||
if (first->get_qualified_name() == second->get_qualified_name()
|
||||
&& first != second
|
||||
&& first->get_corpus() == second->get_corpus())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -1643,18 +1639,9 @@ has_var_type_cv_qual_change(const diff* dif)
|
||||
if (!var_dif)
|
||||
return false;
|
||||
|
||||
{
|
||||
// Make sure the variable diff does carry a type change at least
|
||||
change_kind ch_kind = NO_CHANGE_KIND;
|
||||
if (equals(*var_dif->first_var(), *var_dif->second_var(), &ch_kind))
|
||||
return false;
|
||||
|
||||
if (!(ch_kind & LOCAL_TYPE_CHANGE_KIND || ch_kind & SUBTYPE_CHANGE_KIND))
|
||||
return false;
|
||||
}
|
||||
|
||||
diff *type_dif = var_dif->type_diff().get();
|
||||
ABG_ASSERT(type_dif);
|
||||
if (!type_dif)
|
||||
return false;
|
||||
|
||||
return type_diff_has_cv_qual_change_only(type_dif);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user