From: Joel Brobecker <brobecker@adacore.com>
To: Tom Tromey <tromey@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: RFA: shrink main_type
Date: Mon, 18 Aug 2008 13:01:00 -0000 [thread overview]
Message-ID: <20080818130009.GM16894@adacore.com> (raw)
In-Reply-To: <m37iafzdcp.fsf@fleche.redhat.com>
> This patch shrinks struct main_type 32- and 64-bit machines by
> shrinking the type_code and flags fields and moving around a couple
> other fields.
>
> On my x86 box, this saves about 1% of memory on "gdb -readnow cc1" --
> a few hundred K -- at the cost of slightly increasing gdb's text size.
I'm not opposed to this sort of packing, particularly since this is
something that we already do for other fields of this type, but I'm
interested in the performance impact of such a change. A few hundred
K of memory for cc1 doesn't sound like a lot nowadays. I wonder what
it would cost and save for a program of the size of Mozilla...
> I noticed that the Ada code does not use TYPE_FLAG_* consistently with
> the rest of gdb (it tests the flags directly rather than using the
> macros), but I didn't change this.
Another good observation. I will try to find some time to fix...
I only saw a couple of instances (with TYPE_FIXED_INSTANCE). Did you
spot any other?
:REVIEWMAIL:
> 2008-08-17 Tom Tromey <tromey@redhat.com>
>
> * gdbtypes.h (enum type_flag_value): New enum.
> (TYPE_FLAG_UNSIGNED, TYPE_FLAG_NOSIGN, TYPE_FLAG_STUB,
> TYPE_FLAG_TARGET_STUB, TYPE_FLAG_STATIC, TYPE_FLAG_CONST,
> TYPE_FLAG_VOLATILE, TYPE_FLAG_PROTOTYPED, TYPE_FLAG_INCOMPLETE,
> TYPE_FLAG_CODE_SPACE, TYPE_FLAG_DATA_SPACE, TYPE_FLAG_VARARGS,
> TYPE_FLAG_VECTOR, TYPE_FLAG_ADDRESS_CLASS_1,
> TYPE_FLAG_ADDRESS_CLASS_2, TYPE_FLAG_FIXED_INSTANCE,
> TYPE_FLAG_STUB_SUPPORTED, TYPE_FLAG_NOTTEXT): Now enum constants.
I think this change is really great, and can be checked in separately
from the rest.
> (struct main_type) <code>: Now 5 bits.
> <flags>: Move earlier. Now a bit field.
> <nfields, vptr_fieldno>: Move earlier.
I'm having trouble understanding the new layout that you propose.
It looks like this:
ENUM_BITFIELD(type_code) code : 5;
/* Array bounds. These fields appear at this location because
they pack nicely here. */
ENUM_BITFIELD(array_bound_type) upper_bound_type : 4;
ENUM_BITFIELD(array_bound_type) lower_bound_type : 4;
/* Flags about this type. This field appears at this location
because it packs nicely here. */
ENUM_BITFIELD(type_flag_value) flags : 18;
Do the upper/lower_bound_type fields still "pack nicely"?
This is where my knowledge of C (or lack thereof) shows up, but
would the following declaration instead help the compiler?
ENUM_BITFIELD(type_code) code : 6;
ENUM_BITFIELD(type_flag_value) flags : 18;
ENUM_BITFIELD(array_bound_type) upper_bound_type : 4;
ENUM_BITFIELD(array_bound_type) lower_bound_type : 4;
Then, I don't understand why the two "short" fields have been
moved up just behind the "flags" field (sorry, like I said, there
are holes in my C knowledge).
--
Joel
next prev parent reply other threads:[~2008-08-18 13:01 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-17 18:50 Tom Tromey
2008-08-18 13:01 ` Joel Brobecker [this message]
2008-08-18 13:20 ` Daniel Jacobowitz
2008-08-18 13:30 ` Joel Brobecker
2008-08-18 15:19 ` Tom Tromey
2008-08-18 19:39 ` Tom Tromey
2008-08-18 22:17 ` Andreas Schwab
2008-08-18 22:32 ` Daniel Jacobowitz
2008-08-19 5:13 ` Joel Brobecker
2008-08-19 17:56 ` Tom Tromey
2008-08-24 10:12 ` Joel Brobecker
2008-08-24 16:41 ` Tom Tromey
2008-08-24 18:03 ` Tom Tromey
2008-08-24 20:35 ` Tom Tromey
2008-08-25 15:50 ` Joel Brobecker
2008-08-25 19:12 ` Tom Tromey
2010-09-15 19:23 ` Ken Werner
2010-09-25 14:38 ` Ken Werner
2010-09-30 18:56 ` Joel Brobecker
2010-10-01 13:23 ` Ken Werner
2010-10-01 15:34 ` [patch] move the nottext flag to the instance_flags Ken Werner
2010-10-01 16:15 ` Joel Brobecker
2010-10-05 21:50 ` Tom Tromey
2010-10-06 8:45 ` Ken Werner
2008-08-18 15:04 ` RFA: shrink main_type Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080818130009.GM16894@adacore.com \
--to=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=tromey@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox