Inline abbrev lookup
Profiling showed that calls to abbrev_table::lookup_abbrev were "too visible". As these are just forwarding calls to the hash table, this patch inlines the lookup. Also, htab_find_with_hash is used, avoiding another call. The run previous to this had times of (see the first patch in the series for an explanation): gdb 1.69 libxul 2.02 Ada 2.52 This patch improves the times to: gdb 1.64 libxul 1.99 Ada 2.47 gdb/ChangeLog 2020-05-27 Tom Tromey <tromey@adacore.com> * dwarf2/abbrev.h (struct abbrev_table) <lookup_abbrev>: Inline. Use htab_find_with_hash. <add_abbrev>: Remove "abbrev_number" parameter. * dwarf2/abbrev.c (abbrev_table::add_abbrev): Remove "abbrev_number" parameter. Use htab_find_slot_with_hash. (hash_abbrev): Add comment. (abbrev_table::lookup_abbrev): Move to header file. (abbrev_table::read): Update.
This commit is contained in:
parent
7d00ffecd2
commit
af0b2a3e85
@ -1,3 +1,14 @@
|
||||
2020-05-27 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* dwarf2/abbrev.h (struct abbrev_table) <lookup_abbrev>: Inline.
|
||||
Use htab_find_with_hash.
|
||||
<add_abbrev>: Remove "abbrev_number" parameter.
|
||||
* dwarf2/abbrev.c (abbrev_table::add_abbrev): Remove
|
||||
"abbrev_number" parameter. Use htab_find_slot_with_hash.
|
||||
(hash_abbrev): Add comment.
|
||||
(abbrev_table::lookup_abbrev): Move to header file.
|
||||
(abbrev_table::read): Update.
|
||||
|
||||
2020-05-27 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* dwarf2/read.c (struct partial_die_info) <name>: Declare new
|
||||
|
@ -36,6 +36,8 @@ static hashval_t
|
||||
hash_abbrev (const void *item)
|
||||
{
|
||||
const struct abbrev_info *info = (const struct abbrev_info *) item;
|
||||
/* Warning: if you change this next line, you must also update the
|
||||
other code in this class using the _with_hash functions. */
|
||||
return info->number;
|
||||
}
|
||||
|
||||
@ -79,25 +81,13 @@ abbrev_table::alloc_abbrev ()
|
||||
/* Add an abbreviation to the table. */
|
||||
|
||||
void
|
||||
abbrev_table::add_abbrev (unsigned int abbrev_number,
|
||||
struct abbrev_info *abbrev)
|
||||
abbrev_table::add_abbrev (struct abbrev_info *abbrev)
|
||||
{
|
||||
void **slot = htab_find_slot (m_abbrevs.get (), abbrev, INSERT);
|
||||
void **slot = htab_find_slot_with_hash (m_abbrevs.get (), abbrev,
|
||||
abbrev->number, INSERT);
|
||||
*slot = abbrev;
|
||||
}
|
||||
|
||||
/* Look up an abbrev in the table.
|
||||
Returns NULL if the abbrev is not found. */
|
||||
|
||||
struct abbrev_info *
|
||||
abbrev_table::lookup_abbrev (unsigned int abbrev_number)
|
||||
{
|
||||
struct abbrev_info search;
|
||||
search.number = abbrev_number;
|
||||
|
||||
return (struct abbrev_info *) htab_find (m_abbrevs.get (), &search);
|
||||
}
|
||||
|
||||
/* Read in an abbrev table. */
|
||||
|
||||
abbrev_table_up
|
||||
@ -172,7 +162,7 @@ abbrev_table::read (struct objfile *objfile,
|
||||
memcpy (cur_abbrev->attrs, cur_attrs.data (),
|
||||
cur_abbrev->num_attrs * sizeof (struct attr_abbrev));
|
||||
|
||||
abbrev_table->add_abbrev (abbrev_number, cur_abbrev);
|
||||
abbrev_table->add_abbrev (cur_abbrev);
|
||||
|
||||
/* Get next abbreviation.
|
||||
Under Irix6 the abbreviations for a compilation unit are not
|
||||
|
@ -27,6 +27,8 @@
|
||||
#ifndef GDB_DWARF2_ABBREV_H
|
||||
#define GDB_DWARF2_ABBREV_H
|
||||
|
||||
#include "hashtab.h"
|
||||
|
||||
/* This data structure holds the information of an abbrev. */
|
||||
struct abbrev_info
|
||||
{
|
||||
@ -60,8 +62,15 @@ struct abbrev_table
|
||||
/* Look up an abbrev in the table.
|
||||
Returns NULL if the abbrev is not found. */
|
||||
|
||||
struct abbrev_info *lookup_abbrev (unsigned int abbrev_number);
|
||||
struct abbrev_info *lookup_abbrev (unsigned int abbrev_number)
|
||||
{
|
||||
struct abbrev_info search;
|
||||
search.number = abbrev_number;
|
||||
|
||||
return (struct abbrev_info *) htab_find_with_hash (m_abbrevs.get (),
|
||||
&search,
|
||||
abbrev_number);
|
||||
}
|
||||
|
||||
/* Where the abbrev table came from.
|
||||
This is used as a sanity check when the table is used. */
|
||||
@ -78,7 +87,7 @@ private:
|
||||
struct abbrev_info *alloc_abbrev ();
|
||||
|
||||
/* Add an abbreviation to the table. */
|
||||
void add_abbrev (unsigned int abbrev_number, struct abbrev_info *abbrev);
|
||||
void add_abbrev (struct abbrev_info *abbrev);
|
||||
|
||||
/* Hash table of abbrevs. */
|
||||
htab_up m_abbrevs;
|
||||
|
Loading…
x
Reference in New Issue
Block a user