aboutsummaryrefslogtreecommitdiff
path: root/gcc/hash-table.h
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2016-01-16 11:03:18 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2016-01-16 11:03:18 +0000
commit677cb11df0d67bb9590eefd61aebd8851872e2ae (patch)
tree735d4ab3ae87c19e68d98349fe4ca7d2e98347e6 /gcc/hash-table.h
parentb62df3bfc5a32eadd99a274186a23427a6369d5b (diff)
downloadgcc-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.h10
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;