mirror of git://gcc.gnu.org/git/gcc.git
bitmap.h (bitmap_set_bit): Return bool.
2008-07-02 Richard Guenther <rguenther@suse.de> * bitmap.h (bitmap_set_bit): Return bool. (bitmap_clear_bit): Likewise. * bitmap.c (bitmap_set_bit): Return if the bit changed. Only write to the bitmap if it would. (bitmap_clear_bit): Likewise. * tree-ssa-structalias.c (add_implicit_graph_edge): Use bitmap_set_bit return value. (add_pred_graph_edge): Likewise. (add_graph_edge): Likewise. (do_sd_constraint): Likewise. (do_ds_constraint): Likewise. From-SVN: r137345
This commit is contained in:
parent
78209f30ad
commit
5f0d975b0d
|
@ -1,3 +1,17 @@
|
||||||
|
2008-07-02 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
* bitmap.h (bitmap_set_bit): Return bool.
|
||||||
|
(bitmap_clear_bit): Likewise.
|
||||||
|
* bitmap.c (bitmap_set_bit): Return if the bit changed. Only
|
||||||
|
write to the bitmap if it would.
|
||||||
|
(bitmap_clear_bit): Likewise.
|
||||||
|
* tree-ssa-structalias.c (add_implicit_graph_edge): Use
|
||||||
|
bitmap_set_bit return value.
|
||||||
|
(add_pred_graph_edge): Likewise.
|
||||||
|
(add_graph_edge): Likewise.
|
||||||
|
(do_sd_constraint): Likewise.
|
||||||
|
(do_ds_constraint): Likewise.
|
||||||
|
|
||||||
2008-07-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
2008-07-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||||
|
|
||||||
* config/alpha/alpha.c (alpha_need_linkage, alpha_use_linkage):
|
* config/alpha/alpha.c (alpha_need_linkage, alpha_use_linkage):
|
||||||
|
|
25
gcc/bitmap.c
25
gcc/bitmap.c
|
@ -595,9 +595,9 @@ bitmap_find_bit (bitmap head, unsigned int bit)
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear a single bit in a bitmap. */
|
/* Clear a single bit in a bitmap. Return true if the bit changed. */
|
||||||
|
|
||||||
void
|
bool
|
||||||
bitmap_clear_bit (bitmap head, int bit)
|
bitmap_clear_bit (bitmap head, int bit)
|
||||||
{
|
{
|
||||||
bitmap_element *const ptr = bitmap_find_bit (head, bit);
|
bitmap_element *const ptr = bitmap_find_bit (head, bit);
|
||||||
|
@ -606,17 +606,24 @@ bitmap_clear_bit (bitmap head, int bit)
|
||||||
{
|
{
|
||||||
unsigned bit_num = bit % BITMAP_WORD_BITS;
|
unsigned bit_num = bit % BITMAP_WORD_BITS;
|
||||||
unsigned word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
|
unsigned word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
|
||||||
ptr->bits[word_num] &= ~ (((BITMAP_WORD) 1) << bit_num);
|
BITMAP_WORD bit_val = ((BITMAP_WORD) 1) << bit_num;
|
||||||
|
bool res = (ptr->bits[word_num] & bit_val) != 0;
|
||||||
|
if (res)
|
||||||
|
ptr->bits[word_num] &= ~bit_val;
|
||||||
|
|
||||||
/* If we cleared the entire word, free up the element. */
|
/* If we cleared the entire word, free up the element. */
|
||||||
if (bitmap_element_zerop (ptr))
|
if (bitmap_element_zerop (ptr))
|
||||||
bitmap_element_free (head, ptr);
|
bitmap_element_free (head, ptr);
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set a single bit in a bitmap. */
|
/* Set a single bit in a bitmap. Return true if the bit changed. */
|
||||||
|
|
||||||
void
|
bool
|
||||||
bitmap_set_bit (bitmap head, int bit)
|
bitmap_set_bit (bitmap head, int bit)
|
||||||
{
|
{
|
||||||
bitmap_element *ptr = bitmap_find_bit (head, bit);
|
bitmap_element *ptr = bitmap_find_bit (head, bit);
|
||||||
|
@ -630,9 +637,15 @@ bitmap_set_bit (bitmap head, int bit)
|
||||||
ptr->indx = bit / BITMAP_ELEMENT_ALL_BITS;
|
ptr->indx = bit / BITMAP_ELEMENT_ALL_BITS;
|
||||||
ptr->bits[word_num] = bit_val;
|
ptr->bits[word_num] = bit_val;
|
||||||
bitmap_element_link (head, ptr);
|
bitmap_element_link (head, ptr);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ptr->bits[word_num] |= bit_val;
|
{
|
||||||
|
bool res = (ptr->bits[word_num] & bit_val) == 0;
|
||||||
|
if (res)
|
||||||
|
ptr->bits[word_num] |= bit_val;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return whether a bit is set within a bitmap. */
|
/* Return whether a bit is set within a bitmap. */
|
||||||
|
|
|
@ -136,11 +136,11 @@ extern bool bitmap_ior_and_compl (bitmap DST, const_bitmap A, const_bitmap B, co
|
||||||
/* A |= (B & ~C). Return true if A changes. */
|
/* A |= (B & ~C). Return true if A changes. */
|
||||||
extern bool bitmap_ior_and_compl_into (bitmap DST, const_bitmap B, const_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. */
|
/* Clear a single bit in a bitmap. Return true if the bit changed. */
|
||||||
extern void bitmap_clear_bit (bitmap, int);
|
extern bool bitmap_clear_bit (bitmap, int);
|
||||||
|
|
||||||
/* Set a single register in a register set. */
|
/* Set a single bit in a bitmap. Return true if the bit changed. */
|
||||||
extern void bitmap_set_bit (bitmap, int);
|
extern bool bitmap_set_bit (bitmap, int);
|
||||||
|
|
||||||
/* Return true if a register is set in a register set. */
|
/* Return true if a register is set in a register set. */
|
||||||
extern int bitmap_bit_p (bitmap, int);
|
extern int bitmap_bit_p (bitmap, int);
|
||||||
|
|
|
@ -904,11 +904,8 @@ add_implicit_graph_edge (constraint_graph_t graph, unsigned int to,
|
||||||
if (!graph->implicit_preds[to])
|
if (!graph->implicit_preds[to])
|
||||||
graph->implicit_preds[to] = BITMAP_ALLOC (&predbitmap_obstack);
|
graph->implicit_preds[to] = BITMAP_ALLOC (&predbitmap_obstack);
|
||||||
|
|
||||||
if (!bitmap_bit_p (graph->implicit_preds[to], from))
|
if (bitmap_set_bit (graph->implicit_preds[to], from))
|
||||||
{
|
stats.num_implicit_edges++;
|
||||||
stats.num_implicit_edges++;
|
|
||||||
bitmap_set_bit (graph->implicit_preds[to], from);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add a predecessor graph edge to GRAPH, going from TO to FROM if
|
/* Add a predecessor graph edge to GRAPH, going from TO to FROM if
|
||||||
|
@ -921,8 +918,7 @@ add_pred_graph_edge (constraint_graph_t graph, unsigned int to,
|
||||||
{
|
{
|
||||||
if (!graph->preds[to])
|
if (!graph->preds[to])
|
||||||
graph->preds[to] = BITMAP_ALLOC (&predbitmap_obstack);
|
graph->preds[to] = BITMAP_ALLOC (&predbitmap_obstack);
|
||||||
if (!bitmap_bit_p (graph->preds[to], from))
|
bitmap_set_bit (graph->preds[to], from);
|
||||||
bitmap_set_bit (graph->preds[to], from);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add a graph edge to GRAPH, going from FROM to TO if
|
/* Add a graph edge to GRAPH, going from FROM to TO if
|
||||||
|
@ -943,12 +939,11 @@ add_graph_edge (constraint_graph_t graph, unsigned int to,
|
||||||
|
|
||||||
if (!graph->succs[from])
|
if (!graph->succs[from])
|
||||||
graph->succs[from] = BITMAP_ALLOC (&pta_obstack);
|
graph->succs[from] = BITMAP_ALLOC (&pta_obstack);
|
||||||
if (!bitmap_bit_p (graph->succs[from], to))
|
if (bitmap_set_bit (graph->succs[from], to))
|
||||||
{
|
{
|
||||||
r = true;
|
r = true;
|
||||||
if (to < FIRST_REF_NODE && from < FIRST_REF_NODE)
|
if (to < FIRST_REF_NODE && from < FIRST_REF_NODE)
|
||||||
stats.num_edges++;
|
stats.num_edges++;
|
||||||
bitmap_set_bit (graph->succs[from], to);
|
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -1405,13 +1400,11 @@ do_sd_constraint (constraint_graph_t graph, constraint_t c,
|
||||||
unsigned int j;
|
unsigned int j;
|
||||||
bitmap_iterator bi;
|
bitmap_iterator bi;
|
||||||
|
|
||||||
if (bitmap_bit_p (delta, anything_id))
|
if (bitmap_bit_p (delta, anything_id))
|
||||||
{
|
{
|
||||||
flag = !bitmap_bit_p (sol, anything_id);
|
flag |= bitmap_set_bit (sol, anything_id);
|
||||||
if (flag)
|
goto done;
|
||||||
bitmap_set_bit (sol, anything_id);
|
}
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For each variable j in delta (Sol(y)), add
|
/* For each variable j in delta (Sol(y)), add
|
||||||
an edge in the graph from j to x, and union Sol(j) into Sol(x). */
|
an edge in the graph from j to x, and union Sol(j) into Sol(x). */
|
||||||
|
@ -1436,13 +1429,9 @@ do_sd_constraint (constraint_graph_t graph, constraint_t c,
|
||||||
/* Merging the solution from ESCAPED needlessly increases
|
/* Merging the solution from ESCAPED needlessly increases
|
||||||
the set. Use ESCAPED as representative instead.
|
the set. Use ESCAPED as representative instead.
|
||||||
Same for CALLUSED. */
|
Same for CALLUSED. */
|
||||||
else if ((get_varinfo (t)->id == escaped_id
|
else if (get_varinfo (t)->id == escaped_id
|
||||||
|| get_varinfo (t)->id == callused_id)
|
|| get_varinfo (t)->id == callused_id)
|
||||||
&& !bitmap_bit_p (sol, get_varinfo (t)->id))
|
flag |= bitmap_set_bit (sol, get_varinfo (t)->id);
|
||||||
{
|
|
||||||
bitmap_set_bit (sol, get_varinfo (t)->id);
|
|
||||||
flag = true;
|
|
||||||
}
|
|
||||||
else if (add_graph_edge (graph, lhs, t))
|
else if (add_graph_edge (graph, lhs, t))
|
||||||
flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
|
flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
|
||||||
}
|
}
|
||||||
|
@ -1486,14 +1475,11 @@ do_ds_constraint (constraint_t c, bitmap delta)
|
||||||
continue;
|
continue;
|
||||||
t = find (v->id);
|
t = find (v->id);
|
||||||
|
|
||||||
if (!bitmap_bit_p (get_varinfo (t)->solution, anything_id))
|
if (bitmap_set_bit (get_varinfo (t)->solution, anything_id)
|
||||||
|
&& !TEST_BIT (changed, t))
|
||||||
{
|
{
|
||||||
bitmap_set_bit (get_varinfo (t)->solution, anything_id);
|
SET_BIT (changed, t);
|
||||||
if (!TEST_BIT (changed, t))
|
changed_count++;
|
||||||
{
|
|
||||||
SET_BIT (changed, t);
|
|
||||||
changed_count++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue