Related articles |
---|
[16 earlier articles] |
Re: eliminating array bounds checking overhead monnier+comp/compilers/news/@flint.cs.yale.edu (Stefan Monnier) (2000-05-01) |
Re: eliminating array bounds checking overhead r_c_chapman@my-deja.com (2000-05-01) |
Re: eliminating array bounds checking overhead markw65@my-deja.com (Mark Williams) (2000-05-04) |
Re: eliminating array bounds checking overhead world!bobduff@uunet.uu.net (Robert A Duff) (2000-05-04) |
Re: eliminating array bounds checking overhead paule@martex.gen.oh.us (Paul Evans) (2000-05-04) |
Re: eliminating array bounds checking overhead d95josef@dtek.chalmers.se (Josef Sveningsson) (2000-05-12) |
Re: eliminating array bounds checking overhead mtimmerm@opentext.nospam-remove.com (Matt Timmermans) (2000-05-12) |
From: | "Matt Timmermans" <mtimmerm@opentext.nospam-remove.com> |
Newsgroups: | comp.compilers |
Date: | 12 May 2000 22:34:04 -0400 |
Organization: | http://extra.newsguy.com |
References: | 00-04-194 00-04-208 |
Keywords: | performance, architecture |
X-MimeOLE: | Produced By Microsoft MimeOLE V4.72.3110.3 |
Norman Ramsey wrote in message 00-04-208...
>Bonus trick, which I learned from Andrew Appel:
>
> ((unsigned)(i-(lo+1)) < hi)
>
>Beware fencepost errors.
>--
Uh oh... I think your programs are exploding.
To replace (i > lo && i < hi), you need ((unsigned)(i-(lo+1)) <
(hi-(lo+1))).
Note to the original poster: This isn't too useful as written, but that's
because of the way you phrased your check. When this trick is used, you
store the first valid index (lo) and the number of valid indeces (size), so
your check would be (i>=lo && i<(lo+size)). The trick is then
((unsigned)(i-lo)) < size), which is certainly faster than the two
comparisons.
Often, lo is known to be zero, because you are indexing from a pointer to
the first element in the array, and so the quick check is just (unsigned)lo
< size, and the cast is free.
Return to the
comp.compilers page.
Search the
comp.compilers archives again.