From: Richard Biener Date: Mon, 8 May 2017 13:35:29 +0000 (+0000) Subject: tree-ssa-pre.c (bitmap_set_and): Avoid bitmap copy. X-Git-Tag: upstream/12.2.0~39693 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a92464ddb2facbbf0b6b613133c0d8e256c0a96b;p=platform%2Fupstream%2Fgcc.git tree-ssa-pre.c (bitmap_set_and): Avoid bitmap copy. 2017-05-08 Richard Biener * tree-ssa-pre.c (bitmap_set_and): Avoid bitmap copy. (bitmap_set_subtract_values): Likewise. From-SVN: r247739 --- 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 + * tree-ssa-pre.c (bitmap_set_and): Avoid bitmap copy. + (bitmap_set_subtract_values): Likewise. + +2017-05-08 Richard Biener + * 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); }