Micro-optimize partial_die_info::read
While profiling the DWARF reader, I noticed that partial_die_info::read creates a vector to store attributes. However, the vector is not needed, as this code only processes a single attribute at a time. This patch removes the vector. On my machine, this improves the time of "./gdb ./gdb" from 2.22 seconds to 1.92 seconds (mean times over 10 runs). Note that the attribute is initialized by read_attribute, so it does not need any special initialization. Avoiding this also improves performance a bit. Tested on x86-64 Fedora 30. I'm checking this in. gdb/ChangeLog 2020-04-02 Tom Tromey <tromey@adacore.com> * dwarf2/read.c (partial_die_info::read): Do not create a vector of attributes.
This commit is contained in:
parent
c90d28ac89
commit
e7da7f8f71
|
@ -1,3 +1,8 @@
|
|||
2020-04-02 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* dwarf2/read.c (partial_die_info::read): Do not create a vector
|
||||
of attributes.
|
||||
|
||||
2020-04-02 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
Tom Tromey <tromey@adacore.com>
|
||||
|
|
|
@ -17879,18 +17879,17 @@ partial_die_info::read (const struct die_reader_specs *reader,
|
|||
int has_high_pc_attr = 0;
|
||||
int high_pc_relative = 0;
|
||||
|
||||
std::vector<struct attribute> attr_vec (abbrev.num_attrs);
|
||||
for (i = 0; i < abbrev.num_attrs; ++i)
|
||||
{
|
||||
attribute attr;
|
||||
bool need_reprocess;
|
||||
info_ptr = read_attribute (reader, &attr_vec[i], &abbrev.attrs[i],
|
||||
info_ptr = read_attribute (reader, &attr, &abbrev.attrs[i],
|
||||
info_ptr, &need_reprocess);
|
||||
/* String and address offsets that need to do the reprocessing have
|
||||
already been read at this point, so there is no need to wait until
|
||||
the loop terminates to do the reprocessing. */
|
||||
if (need_reprocess)
|
||||
read_attribute_reprocess (reader, &attr_vec[i]);
|
||||
attribute &attr = attr_vec[i];
|
||||
read_attribute_reprocess (reader, &attr);
|
||||
/* Store the data if it is of an attribute we want to keep in a
|
||||
partial symbol table. */
|
||||
switch (attr.name)
|
||||
|
|
Loading…
Reference in New Issue