This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Short-circuit some bitmap lookups
- From: Richard Earnshaw <rearnsha at arm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Richard dot Earnshaw at arm dot com
- Date: Tue, 21 May 2002 15:48:16 +0100
- Subject: Short-circuit some bitmap lookups
- Organization: ARM Ltd.
- Reply-to: Richard dot Earnshaw at arm dot com
As discussed on the recent thread on compile-time performance:
On Mon, May 20, 2002 at 02:34:12PM +0100, Richard Earnshaw wrote:
> Here's some more relatively low hanging fruit to pick. bitmap_find_bit is
> probably the most-called function in the compiler (ok, it is inlined, but
> it is still effectively called). This cuts the execution time of the
> function by about 45% (according to gprof). It simply notes that if head->
> current is the element we want, we don't have to go and do a lot of
> grunging to reposition the current element to itself!
Bootstrapped on i686-linux.
2002-05-21 Richard Earnshaw <rearnsha@arm.com>
* bitmap.c (bitmap_find_bit): Return early if we have the correct
element cached.
Index: bitmap.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/bitmap.c,v
retrieving revision 1.33
diff -p -r1.33 bitmap.c
*** bitmap.c 31 Oct 2001 03:01:15 -0000 1.33
--- bitmap.c 21 May 2002 14:44:38 -0000
*************** bitmap_find_bit (head, bit)
*** 300,307 ****
bitmap_element *element;
unsigned HOST_WIDE_INT indx = bit / BITMAP_ELEMENT_ALL_BITS;
! if (head->current == 0)
! return 0;
if (head->indx > indx)
for (element = head->current;
--- 300,308 ----
bitmap_element *element;
unsigned HOST_WIDE_INT indx = bit / BITMAP_ELEMENT_ALL_BITS;
! if (head->current == 0
! || head->indx == indx)
! return head->current;
if (head->indx > indx)
for (element = head->current;