diff options
author | Richard Biener <rguenther@suse.de> | 2017-05-08 13:35:29 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-05-08 13:35:29 +0000 |
commit | a92464ddb2facbbf0b6b613133c0d8e256c0a96b (patch) | |
tree | 4c5dc168a82196df0321f9620d3ffc1d264dedbe /gcc | |
parent | da11a720a3001f170f044bd605d1b2b0a02cedd7 (diff) | |
download | gcc-a92464ddb2facbbf0b6b613133c0d8e256c0a96b.zip gcc-a92464ddb2facbbf0b6b613133c0d8e256c0a96b.tar.gz gcc-a92464ddb2facbbf0b6b613133c0d8e256c0a96b.tar.bz2 |
tree-ssa-pre.c (bitmap_set_and): Avoid bitmap copy.
2017-05-08 Richard Biener <rguenther@suse.de>
* tree-ssa-pre.c (bitmap_set_and): Avoid bitmap copy.
(bitmap_set_subtract_values): Likewise.
From-SVN: r247739
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 36 |
2 files changed, 26 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b1dabfb..5749477 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2017-05-08 Richard Biener <rguenther@suse.de> + * tree-ssa-pre.c (bitmap_set_and): Avoid bitmap copy. + (bitmap_set_subtract_values): Likewise. + +2017-05-08 Richard Biener <rguenther@suse.de> + * tree-vrp.c (gimple_assign_nonzero_warnv_p): Rename to ... (gimple_assign_nonzero): ... this and remove strict_overflow_p argument. diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index b01fa8a..65cf523 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -817,19 +817,23 @@ bitmap_set_and (bitmap_set_t dest, bitmap_set_t orig) if (dest != orig) { - bitmap_head temp; - bitmap_initialize (&temp, &grand_bitmap_obstack); - bitmap_and_into (&dest->values, &orig->values); - bitmap_copy (&temp, &dest->expressions); - EXECUTE_IF_SET_IN_BITMAP (&temp, 0, i, bi) + + unsigned int to_clear = -1U; + FOR_EACH_EXPR_ID_IN_SET (dest, i, bi) { + if (to_clear != -1U) + { + bitmap_clear_bit (&dest->expressions, to_clear); + to_clear = -1U; + } pre_expr expr = expression_for_id (i); unsigned int value_id = get_expr_value_id (expr); if (!bitmap_bit_p (&dest->values, value_id)) - bitmap_clear_bit (&dest->expressions, i); + to_clear = i; } - bitmap_clear (&temp); + if (to_clear != -1U) + bitmap_clear_bit (&dest->expressions, to_clear); } } @@ -862,18 +866,20 @@ bitmap_set_subtract_values (bitmap_set_t a, bitmap_set_t b) { unsigned int i; bitmap_iterator bi; - bitmap_head temp; - - bitmap_initialize (&temp, &grand_bitmap_obstack); - - bitmap_copy (&temp, &a->expressions); - EXECUTE_IF_SET_IN_BITMAP (&temp, 0, i, bi) + pre_expr to_remove = NULL; + FOR_EACH_EXPR_ID_IN_SET (a, i, bi) { + if (to_remove) + { + bitmap_remove_from_set (a, to_remove); + to_remove = NULL; + } pre_expr expr = expression_for_id (i); if (bitmap_set_contains_value (b, get_expr_value_id (expr))) - bitmap_remove_from_set (a, expr); + to_remove = expr; } - bitmap_clear (&temp); + if (to_remove) + bitmap_remove_from_set (a, to_remove); } |