X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fbitmap.h;h=bbc0e20cfefe778894f4e766daedc5085ab37ef0;hb=398fecb4d4b147ebabae96a235584ae735349581;hp=a81945d121653d3a137eacb62dbc51c9143b6429;hpb=4486418e176c6c8fc4c3f2ecb12f130406c46e89;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/bitmap.h b/gcc/bitmap.h index a81945d1216..bbc0e20cfef 100644 --- a/gcc/bitmap.h +++ b/gcc/bitmap.h @@ -1,12 +1,12 @@ /* Functions to support general ended bitmaps. - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -15,14 +15,14 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301, USA. */ +along with GCC; see the file COPYING3. If not see +. */ #ifndef GCC_BITMAP_H #define GCC_BITMAP_H #include "hashtab.h" #include "statistics.h" +#include "obstack.h" /* Fundamental storage type for bitmap. */ @@ -42,8 +42,7 @@ typedef unsigned long BITMAP_WORD; #define BITMAP_ELEMENT_ALL_BITS (BITMAP_ELEMENT_WORDS * BITMAP_WORD_BITS) /* Obstack for allocating bitmaps and elements from. */ -typedef struct bitmap_obstack GTY (()) -{ +typedef struct GTY (()) bitmap_obstack { struct bitmap_element_def *elements; struct bitmap_head_def *heads; struct obstack GTY ((skip)) obstack; @@ -61,8 +60,7 @@ typedef struct bitmap_obstack GTY (()) bitmap_elt_clear_from to be implemented in unit time rather than linear in the number of elements to be freed. */ -typedef struct bitmap_element_def GTY(()) -{ +typedef struct GTY(()) bitmap_element_def { struct bitmap_element_def *next; /* Next element. */ struct bitmap_element_def *prev; /* Previous element. */ unsigned int indx; /* regno/BITMAP_ELEMENT_ALL_BITS. */ @@ -74,7 +72,7 @@ struct bitmap_descriptor; statistics we need to add a bitmap descriptor pointer. As it is not collected, we can just GTY((skip)) it. */ -typedef struct bitmap_head_def GTY(()) { +typedef struct GTY(()) bitmap_head_def { bitmap_element *first; /* First element in linked list. */ bitmap_element *current; /* Last element looked at. */ unsigned int indx; /* Index of last element looked at. */ @@ -93,60 +91,66 @@ extern bitmap_obstack bitmap_default_obstack; /* Default bitmap obstack */ extern void bitmap_clear (bitmap); /* Copy a bitmap to another bitmap. */ -extern void bitmap_copy (bitmap, bitmap); +extern void bitmap_copy (bitmap, const_bitmap); /* True if two bitmaps are identical. */ -extern bool bitmap_equal_p (bitmap, bitmap); +extern bool bitmap_equal_p (const_bitmap, const_bitmap); /* True if the bitmaps intersect (their AND is non-empty). */ -extern bool bitmap_intersect_p (bitmap, bitmap); +extern bool bitmap_intersect_p (const_bitmap, const_bitmap); /* True if the complement of the second intersects the first (their AND_COMPL is non-empty). */ -extern bool bitmap_intersect_compl_p (bitmap, bitmap); +extern bool bitmap_intersect_compl_p (const_bitmap, const_bitmap); /* True if MAP is an empty bitmap. */ #define bitmap_empty_p(MAP) (!(MAP)->first) +/* True if the bitmap has only a single bit set. */ +extern bool bitmap_single_bit_set_p (const_bitmap); + /* Count the number of bits set in the bitmap. */ -extern unsigned long bitmap_count_bits (bitmap); +extern unsigned long bitmap_count_bits (const_bitmap); /* Boolean operations on bitmaps. The _into variants are two operand versions that modify the first source operand. The other variants are three operand versions that to not destroy the source bitmaps. The operations supported are &, & ~, |, ^. */ -extern void bitmap_and (bitmap, bitmap, bitmap); -extern void bitmap_and_into (bitmap, bitmap); -extern void bitmap_and_compl (bitmap, bitmap, bitmap); -extern bool bitmap_and_compl_into (bitmap, bitmap); +extern void bitmap_and (bitmap, const_bitmap, const_bitmap); +extern void bitmap_and_into (bitmap, const_bitmap); +extern bool bitmap_and_compl (bitmap, const_bitmap, const_bitmap); +extern bool bitmap_and_compl_into (bitmap, const_bitmap); #define bitmap_compl_and(DST, A, B) bitmap_and_compl (DST, B, A) -extern void bitmap_compl_and_into (bitmap, bitmap); +extern void bitmap_compl_and_into (bitmap, const_bitmap); extern void bitmap_clear_range (bitmap, unsigned int, unsigned int); -extern bool bitmap_ior (bitmap, bitmap, bitmap); -extern bool bitmap_ior_into (bitmap, bitmap); -extern void bitmap_xor (bitmap, bitmap, bitmap); -extern void bitmap_xor_into (bitmap, bitmap); - +extern void bitmap_set_range (bitmap, unsigned int, unsigned int); +extern bool bitmap_ior (bitmap, const_bitmap, const_bitmap); +extern bool bitmap_ior_into (bitmap, const_bitmap); +extern void bitmap_xor (bitmap, const_bitmap, const_bitmap); +extern void bitmap_xor_into (bitmap, const_bitmap); + +/* DST = A | (B & C). Return true if DST changes. */ +extern bool bitmap_ior_and_into (bitmap DST, const_bitmap B, const_bitmap C); /* DST = A | (B & ~C). Return true if DST changes. */ -extern bool bitmap_ior_and_compl (bitmap DST, bitmap A, bitmap B, bitmap C); +extern bool bitmap_ior_and_compl (bitmap DST, const_bitmap A, const_bitmap B, const_bitmap C); /* A |= (B & ~C). Return true if A changes. */ -extern bool bitmap_ior_and_compl_into (bitmap DST, bitmap B, bitmap C); +extern bool bitmap_ior_and_compl_into (bitmap DST, const_bitmap B, const_bitmap C); -/* Clear a single register in a register set. */ -extern void bitmap_clear_bit (bitmap, int); +/* Clear a single bit in a bitmap. Return true if the bit changed. */ +extern bool bitmap_clear_bit (bitmap, int); -/* Set a single register in a register set. */ -extern void bitmap_set_bit (bitmap, int); +/* Set a single bit in a bitmap. Return true if the bit changed. */ +extern bool bitmap_set_bit (bitmap, int); /* Return true if a register is set in a register set. */ extern int bitmap_bit_p (bitmap, int); /* Debug functions to print a bitmap linked list. */ -extern void debug_bitmap (bitmap); -extern void debug_bitmap_file (FILE *, bitmap); +extern void debug_bitmap (const_bitmap); +extern void debug_bitmap_file (FILE *, const_bitmap); /* Print a bitmap. */ -extern void bitmap_print (FILE *, bitmap, const char *, const char *); +extern void bitmap_print (FILE *, const_bitmap, const char *, const char *); /* Initialize and release a bitmap obstack. */ extern void bitmap_obstack_initialize (bitmap_obstack *); @@ -178,10 +182,11 @@ extern void bitmap_obstack_free (bitmap); /* A few compatibility/functions macros for compatibility with sbitmaps */ #define dump_bitmap(file, bitmap) bitmap_print (file, bitmap, "", "\n") #define bitmap_zero(a) bitmap_clear (a) -extern unsigned bitmap_first_set_bit (bitmap); +extern unsigned bitmap_first_set_bit (const_bitmap); +extern unsigned bitmap_last_set_bit (const_bitmap); /* Compute bitmap hash (for purposes of hashing etc.) */ -extern hashval_t bitmap_hash(bitmap); +extern hashval_t bitmap_hash(const_bitmap); /* Allocate a bitmap from a bit obstack. */ #define BITMAP_ALLOC(OBSTACK) bitmap_obstack_alloc (OBSTACK) @@ -190,8 +195,8 @@ extern hashval_t bitmap_hash(bitmap); #define BITMAP_GGC_ALLOC() bitmap_gc_alloc () /* Do any cleanup needed on a bitmap when it is no longer used. */ -#define BITMAP_FREE(BITMAP) \ - ((void)(bitmap_obstack_free (BITMAP), (BITMAP) = NULL)) +#define BITMAP_FREE(BITMAP) \ + ((void) (bitmap_obstack_free ((bitmap) BITMAP), (BITMAP) = (bitmap) NULL)) /* Iterator for bitmaps. */ @@ -216,7 +221,7 @@ typedef struct iterate from. */ static inline void -bmp_iter_set_init (bitmap_iterator *bi, bitmap map, +bmp_iter_set_init (bitmap_iterator *bi, const_bitmap map, unsigned start_bit, unsigned *bit_no) { bi->elt1 = map->first; @@ -258,7 +263,7 @@ bmp_iter_set_init (bitmap_iterator *bi, bitmap map, bitmaps. START_BIT is the bit to commence from. */ static inline void -bmp_iter_and_init (bitmap_iterator *bi, bitmap map1, bitmap map2, +bmp_iter_and_init (bitmap_iterator *bi, const_bitmap map1, const_bitmap map2, unsigned start_bit, unsigned *bit_no) { bi->elt1 = map1->first; @@ -326,7 +331,7 @@ bmp_iter_and_init (bitmap_iterator *bi, bitmap map1, bitmap map2, */ static inline void -bmp_iter_and_compl_init (bitmap_iterator *bi, bitmap map1, bitmap map2, +bmp_iter_and_compl_init (bitmap_iterator *bi, const_bitmap map1, const_bitmap map2, unsigned start_bit, unsigned *bit_no) { bi->elt1 = map1->first;