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
This commit is contained in:
parent
b62df3bfc5
commit
677cb11df0
2 changed files with 14 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
|||
2016-01-16 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2016-01-15 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR diagnostic/68899
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue