This is the mail archive of the
mailing list for the GCC project.
Re: Hashing of "switch/case" selections
- To: Zack Weinberg <zackw at stanford dot edu>
- Subject: Re: Hashing of "switch/case" selections
- From: Michael Meissner <meissner at cygnus dot com>
- Date: Fri, 5 Jan 2001 13:54:28 -0500
- Cc: Andy Walker <jawalker at stl dot quik dot com>, GCC general mailing list <gcc at gcc dot gnu dot org>
- References: <3A4AC4FC.35E70BEE@stl.quik.com> <20010104013910.F12948@wolery.stanford.edu>
On Thu, Jan 04, 2001 at 01:39:10AM -0800, Zack Weinberg wrote:
> On Wed, Dec 27, 2000 at 10:43:40PM -0600, Andy Walker wrote:
> [much interesting stuff]
> > My experience as a programmer is that programs are almost never written
> > with switches to more than a few hundred cases. I personally have never
> > seen one. More than that, and the programmer finds a more efficient,
> > more readable, more maintainable solution, and he can do so because he
> > has a deep knowledge of the problem that is unavailable to the
> > compiler. My seat-of-pants estimate is that 400 cases is a good, maybe
> > even high, maximum for Hash evaluations. A program containing a switch
> > statement with more than 400 cases in it probably has enough other
> > severe design problems that it will never be worth running anyway.
> This is true in my experience for code written by humans, but not
> necessarily for machine-generated code. Take a look at insn-attrtab.c
> in your GCC build directory, or at cp/parse.c in the source tree.
Some of the simulators in the gdb releases have the ability to build very giant
switch tables to speed up decoding machine instructions, though we haven't
built them with the largest tables in quite some time, because the compiler's
memory was going into the gigabytes.
At a former job, I recall hearing that they had built a profiler/simulator for
the machine, and used a completely dense 65k element switch table.
Michael Meissner, Red Hat, Inc. (GCC group)
PMB 198, 174 Littleton Road #3, Westford, Massachusetts 01886, USA
Work: firstname.lastname@example.org phone: +1 978-486-9304
Non-work: email@example.com fax: +1 978-692-4482