diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2016-01-16 11:03:18 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2016-01-16 11:03:18 +0000 |
commit | 677cb11df0d67bb9590eefd61aebd8851872e2ae (patch) | |
tree | 735d4ab3ae87c19e68d98349fe4ca7d2e98347e6 /gcc/hash-table.h | |
parent | b62df3bfc5a32eadd99a274186a23427a6369d5b (diff) | |
download | gcc-677cb11df0d67bb9590eefd61aebd8851872e2ae.zip gcc-677cb11df0d67bb9590eefd61aebd8851872e2ae.tar.gz gcc-677cb11df0d67bb9590eefd61aebd8851872e2ae.tar.bz2 |
Optimise hash_table::empty
Calling redirect_edge_var_map_empty after each pass was slowing things
down because hash_table::empty () cleared all slots even if the hash
table was already empty.
Tested on x86_64-linux-gnu, where it gives a 1% compile time improvement
for fold-const.ii at -O and -O2.
gcc/
* hash-table.h (hash_table::empty): Turn into an inline wrapper
that checks whether the table is already empty. Rename the
original implementation to...
(hash_table::empty_slot): ...this new private function.
From-SVN: r232467
Diffstat (limited to 'gcc/hash-table.h')
-rw-r--r-- | gcc/hash-table.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/hash-table.h b/gcc/hash-table.h index 2c52a4a..e925e1e 100644 --- a/gcc/hash-table.h +++ b/gcc/hash-table.h @@ -390,8 +390,8 @@ public: /* Return the current number of elements in this hash table. */ size_t elements_with_deleted () const { return m_n_elements; } - /* This function clears all entries in the given hash table. */ - void empty (); + /* This function clears all entries in this hash table. */ + void empty () { if (elements ()) empty_slow (); } /* This function clears a specified SLOT in a hash table. It is useful when you've already done the lookup and don't want to do it @@ -499,6 +499,8 @@ private: template<typename T> friend void gt_cleare_cache (hash_table<T> *); + void empty_slow (); + value_type *alloc_entries (size_t n CXX_MEM_STAT_INFO) const; value_type *find_empty_slot_for_expand (hashval_t); void expand (); @@ -755,9 +757,11 @@ hash_table<Descriptor, Allocator>::expand () ggc_free (oentries); } +/* Implements empty() in cases where it isn't a no-op. */ + template<typename Descriptor, template<typename Type> class Allocator> void -hash_table<Descriptor, Allocator>::empty () +hash_table<Descriptor, Allocator>::empty_slow () { size_t size = m_size; value_type *entries = m_entries; |