aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-05-08 13:35:29 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-05-08 13:35:29 +0000
commita92464ddb2facbbf0b6b613133c0d8e256c0a96b (patch)
tree4c5dc168a82196df0321f9620d3ffc1d264dedbe /gcc
parentda11a720a3001f170f044bd605d1b2b0a02cedd7 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/tree-ssa-pre.c36
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);
}