sbitmap.c (sbitmap_resize): New function.

* sbitmap.c (sbitmap_resize): New function.
	* sbitmap.h (sbitmap_resize): Prototype here.
	* recog.c (split_all_insns): Use sbitmap_resize.

From-SVN: r63058
This commit is contained in:
Roger Sayle 2003-02-18 19:35:08 +00:00 committed by Roger Sayle
parent 6b00cbc7f4
commit e360ab394f
4 changed files with 68 additions and 14 deletions

View File

@ -1,3 +1,9 @@
2003-02-18 Roger Sayle <roger@eyesopen.com>
* sbitmap.c (sbitmap_resize): New function.
* sbitmap.h (sbitmap_resize): Prototype here.
* recog.c (split_all_insns): Use sbitmap_resize.
2003-02-18 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.md (*zero_extendhisi2_h8300): Fix the

View File

@ -2883,18 +2883,7 @@ split_all_insns (upd_life)
find_many_sub_basic_blocks (blocks);
if (old_last_basic_block != last_basic_block && upd_life)
{
sbitmap new_blocks = sbitmap_alloc (last_basic_block);
sbitmap_copy (new_blocks, blocks);
while (old_last_basic_block < last_basic_block)
{
SET_BIT (new_blocks, old_last_basic_block);
old_last_basic_block++;
}
sbitmap_free (blocks);
new_blocks = blocks;
}
blocks = sbitmap_resize (blocks, last_basic_block, 1);
}
if (changed && upd_life)

View File

@ -1,5 +1,5 @@
/* Simple bitmaps.
Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@ -49,6 +49,64 @@ sbitmap_alloc (n_elms)
return bmap;
}
/* Resize a simple bitmap BMAP to N_ELMS bits. If increasing the
size of BMAP, clear the new bits to zero if the DEF argument
is zero, and set them to one otherwise. */
sbitmap
sbitmap_resize (bmap, n_elms, def)
sbitmap bmap;
unsigned int n_elms;
int def;
{
unsigned int bytes, size, amt;
unsigned int last_bit;
size = SBITMAP_SET_SIZE (n_elms);
bytes = size * sizeof (SBITMAP_ELT_TYPE);
if (bytes > bmap->bytes)
{
amt = (sizeof (struct simple_bitmap_def)
+ bytes - sizeof (SBITMAP_ELT_TYPE));
bmap = (sbitmap) xrealloc ((PTR) bmap, amt);
}
if (n_elms > bmap->n_bits)
{
if (def)
{
memset ((PTR) (bmap->elms + bmap->size), -1, bytes - bmap->bytes);
/* Set the new bits if the original last element. */
last_bit = bmap->n_bits % SBITMAP_ELT_BITS;
if (last_bit)
bmap->elms[bmap->size - 1]
|= ~((SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit));
/* Clear the unused bit in the new last element. */
last_bit = n_elms % SBITMAP_ELT_BITS;
if (last_bit)
bmap->elms[size - 1]
&= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
}
else
memset ((PTR) (bmap->elms + bmap->size), 0, bytes - bmap->bytes);
}
else if (n_elms < bmap->n_bits)
{
/* Clear the surplus bits in the last word. */
last_bit = n_elms % SBITMAP_ELT_BITS;
if (last_bit)
bmap->elms[size - 1]
&= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
}
bmap->n_bits = n_elms;
bmap->size = size;
bmap->bytes = bytes;
return bmap;
}
/* Allocate a vector of N_VECS bitmaps of N_ELMS bits. */
sbitmap *

View File

@ -1,5 +1,5 @@
/* Simple bitmaps.
Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@ -125,6 +125,7 @@ extern void dump_sbitmap_vector PARAMS ((FILE *, const char *,
int));
extern sbitmap sbitmap_alloc PARAMS ((unsigned int));
extern sbitmap *sbitmap_vector_alloc PARAMS ((unsigned int, unsigned int));
extern sbitmap sbitmap_resize PARAMS ((sbitmap, unsigned int, int));
extern void sbitmap_copy PARAMS ((sbitmap, sbitmap));
extern int sbitmap_equal PARAMS ((sbitmap, sbitmap));
extern void sbitmap_zero PARAMS ((sbitmap));