Skip to content
Snippets Groups Projects
Commit 2096ebd3 authored by Patrick Palka's avatar Patrick Palka
Browse files

c++: Reuse identical ATOMIC_CONSTRs during normalization

Profiling revealed that sat_hasher::equal accounts for nearly 40% of
compile time in some cmcstl2 tests.

This patch eliminates this bottleneck by caching the ATOMIC_CONSTRs
returned by normalize_atom.  This in turn allows us to replace the
expensive atomic_constraints_identical_p check in sat_hasher::equal
with cheap pointer equality, with no loss in cache hit rate.

With this patch, compile time for the cmcstl2 test
test/algorithm/set_symmetric_difference4.cpp drops from 19s to 11s with
an --enable-checking=release compiler.

gcc/cp/ChangeLog:

	* constraint.cc (atom_cache): Define this deletable hash_table.
	(normalize_atom): Use it to cache ATOMIC_CONSTRs when not
	generating diagnostics.
	(sat_hasher::hash): Use htab_hash_pointer instead of
	hash_atomic_constraint.
	(sat_hasher::equal): Test for pointer equality instead of
	atomic_constraints_identical_p.
	* cp-tree.h (struct atom_hasher): Moved and renamed from ...
	* logic.cc (struct constraint_hash): ... here.
	(clause::m_set): Adjust accordingly.
parent 71a80407
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment