Skip to content

Commit f66b5a8

Browse files
author
rguenth
committed
2017-10-23 Richard Biener <[email protected]>
* tree-ssa-pre.c (bitmap_remove_from_set): Rename to... (bitmap_remove_expr_from_set): ... this. All callers call this for non-constant values. (bitmap_set_subtract): Rename to... (bitmap_set_subtract_expressions): ... this. Adjust and optimize. (bitmap_set_contains_value): Remove superfluous check. (bitmap_set_replace_value): Inline into single caller ... (bitmap_value_replace_in_set): ... here and simplify. (dependent_clean): Merge into ... (clean): ... this using an overload. Adjust. (prune_clobbered_mems): Adjust. (compute_antic_aux): Likewise. (compute_partial_antic_aux): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254007 138bc75d-0d04-0410-961f-82ee72b054a4
1 parent f063100 commit f66b5a8

File tree

2 files changed

+62
-87
lines changed

2 files changed

+62
-87
lines changed

gcc/ChangeLog

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
2017-10-23 Richard Biener <[email protected]>
2+
3+
* tree-ssa-pre.c (bitmap_remove_from_set): Rename to...
4+
(bitmap_remove_expr_from_set): ... this. All callers call this
5+
for non-constant values.
6+
(bitmap_set_subtract): Rename to...
7+
(bitmap_set_subtract_expressions): ... this. Adjust and
8+
optimize.
9+
(bitmap_set_contains_value): Remove superfluous check.
10+
(bitmap_set_replace_value): Inline into single caller ...
11+
(bitmap_value_replace_in_set): ... here and simplify.
12+
(dependent_clean): Merge into ...
13+
(clean): ... this using an overload. Adjust.
14+
(prune_clobbered_mems): Adjust.
15+
(compute_antic_aux): Likewise.
16+
(compute_partial_antic_aux): Likewise.
17+
118
2017-10-23 Richard Biener <[email protected]>
219

320
PR tree-optimization/82129

gcc/tree-ssa-pre.c

Lines changed: 45 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -719,14 +719,11 @@ sccvn_valnum_from_value_id (unsigned int val)
719719
/* Remove an expression EXPR from a bitmapped set. */
720720

721721
static void
722-
bitmap_remove_from_set (bitmap_set_t set, pre_expr expr)
722+
bitmap_remove_expr_from_set (bitmap_set_t set, pre_expr expr)
723723
{
724724
unsigned int val = get_expr_value_id (expr);
725-
if (!value_id_constant_p (val))
726-
{
727-
bitmap_clear_bit (&set->values, val);
728-
bitmap_clear_bit (&set->expressions, get_expression_id (expr));
729-
}
725+
bitmap_clear_bit (&set->values, val);
726+
bitmap_clear_bit (&set->expressions, get_expression_id (expr));
730727
}
731728

732729
/* Insert an expression EXPR into a bitmapped set. */
@@ -802,7 +799,7 @@ sorted_array_from_bitmap_set (bitmap_set_t set)
802799
/* Subtract all expressions contained in ORIG from DEST. */
803800

804801
static bitmap_set_t
805-
bitmap_set_subtract (bitmap_set_t dest, bitmap_set_t orig)
802+
bitmap_set_subtract_expressions (bitmap_set_t dest, bitmap_set_t orig)
806803
{
807804
bitmap_set_t result = bitmap_set_new ();
808805
bitmap_iterator bi;
@@ -833,15 +830,15 @@ bitmap_set_subtract_values (bitmap_set_t a, bitmap_set_t b)
833830
{
834831
if (to_remove)
835832
{
836-
bitmap_remove_from_set (a, to_remove);
833+
bitmap_remove_expr_from_set (a, to_remove);
837834
to_remove = NULL;
838835
}
839836
pre_expr expr = expression_for_id (i);
840-
if (bitmap_set_contains_value (b, get_expr_value_id (expr)))
837+
if (bitmap_bit_p (&b->values, get_expr_value_id (expr)))
841838
to_remove = expr;
842839
}
843840
if (to_remove)
844-
bitmap_remove_from_set (a, to_remove);
841+
bitmap_remove_expr_from_set (a, to_remove);
845842
}
846843

847844

@@ -853,9 +850,6 @@ bitmap_set_contains_value (bitmap_set_t set, unsigned int value_id)
853850
if (value_id_constant_p (value_id))
854851
return true;
855852

856-
if (!set || bitmap_empty_p (&set->expressions))
857-
return false;
858-
859853
return bitmap_bit_p (&set->values, value_id);
860854
}
861855

@@ -865,44 +859,6 @@ bitmap_set_contains_expr (bitmap_set_t set, const pre_expr expr)
865859
return bitmap_bit_p (&set->expressions, get_expression_id (expr));
866860
}
867861

868-
/* Replace an instance of value LOOKFOR with expression EXPR in SET. */
869-
870-
static void
871-
bitmap_set_replace_value (bitmap_set_t set, unsigned int lookfor,
872-
const pre_expr expr)
873-
{
874-
bitmap exprset;
875-
unsigned int i;
876-
bitmap_iterator bi;
877-
878-
if (value_id_constant_p (lookfor))
879-
return;
880-
881-
if (!bitmap_set_contains_value (set, lookfor))
882-
return;
883-
884-
/* The number of expressions having a given value is usually
885-
significantly less than the total number of expressions in SET.
886-
Thus, rather than check, for each expression in SET, whether it
887-
has the value LOOKFOR, we walk the reverse mapping that tells us
888-
what expressions have a given value, and see if any of those
889-
expressions are in our set. For large testcases, this is about
890-
5-10x faster than walking the bitmap. If this is somehow a
891-
significant lose for some cases, we can choose which set to walk
892-
based on the set size. */
893-
exprset = value_expressions[lookfor];
894-
EXECUTE_IF_SET_IN_BITMAP (exprset, 0, i, bi)
895-
{
896-
if (bitmap_clear_bit (&set->expressions, i))
897-
{
898-
bitmap_set_bit (&set->expressions, get_expression_id (expr));
899-
return;
900-
}
901-
}
902-
903-
gcc_unreachable ();
904-
}
905-
906862
/* Return true if two bitmap sets are equal. */
907863

908864
static bool
@@ -918,9 +874,33 @@ static void
918874
bitmap_value_replace_in_set (bitmap_set_t set, pre_expr expr)
919875
{
920876
unsigned int val = get_expr_value_id (expr);
877+
if (value_id_constant_p (val))
878+
return;
921879

922880
if (bitmap_set_contains_value (set, val))
923-
bitmap_set_replace_value (set, val, expr);
881+
{
882+
/* The number of expressions having a given value is usually
883+
significantly less than the total number of expressions in SET.
884+
Thus, rather than check, for each expression in SET, whether it
885+
has the value LOOKFOR, we walk the reverse mapping that tells us
886+
what expressions have a given value, and see if any of those
887+
expressions are in our set. For large testcases, this is about
888+
5-10x faster than walking the bitmap. If this is somehow a
889+
significant lose for some cases, we can choose which set to walk
890+
based on the set size. */
891+
unsigned int i;
892+
bitmap_iterator bi;
893+
bitmap exprset = value_expressions[val];
894+
EXECUTE_IF_SET_IN_BITMAP (exprset, 0, i, bi)
895+
{
896+
if (bitmap_clear_bit (&set->expressions, i))
897+
{
898+
bitmap_set_bit (&set->expressions, get_expression_id (expr));
899+
return;
900+
}
901+
}
902+
gcc_unreachable ();
903+
}
924904
else
925905
bitmap_insert_into_set (set, expr);
926906
}
@@ -1979,14 +1959,12 @@ valid_in_sets (bitmap_set_t set1, bitmap_set_t set2, pre_expr expr)
19791959
}
19801960
}
19811961

1982-
/* Clean the set of expressions that are no longer valid in SET1 or
1983-
SET2. This means expressions that are made up of values we have no
1984-
leaders for in SET1 or SET2. This version is used for partial
1985-
anticipation, which means it is not valid in either ANTIC_IN or
1986-
PA_IN. */
1962+
/* Clean the set of expressions SET1 that are no longer valid in SET1 or SET2.
1963+
This means expressions that are made up of values we have no leaders for
1964+
in SET1 or SET2. */
19871965

19881966
static void
1989-
dependent_clean (bitmap_set_t set1, bitmap_set_t set2)
1967+
clean (bitmap_set_t set1, bitmap_set_t set2 = NULL)
19901968
{
19911969
vec<pre_expr> exprs = sorted_array_from_bitmap_set (set1);
19921970
pre_expr expr;
@@ -1995,26 +1973,7 @@ dependent_clean (bitmap_set_t set1, bitmap_set_t set2)
19951973
FOR_EACH_VEC_ELT (exprs, i, expr)
19961974
{
19971975
if (!valid_in_sets (set1, set2, expr))
1998-
bitmap_remove_from_set (set1, expr);
1999-
}
2000-
exprs.release ();
2001-
}
2002-
2003-
/* Clean the set of expressions that are no longer valid in SET. This
2004-
means expressions that are made up of values we have no leaders for
2005-
in SET. */
2006-
2007-
static void
2008-
clean (bitmap_set_t set)
2009-
{
2010-
vec<pre_expr> exprs = sorted_array_from_bitmap_set (set);
2011-
pre_expr expr;
2012-
int i;
2013-
2014-
FOR_EACH_VEC_ELT (exprs, i, expr)
2015-
{
2016-
if (!valid_in_sets (set, NULL, expr))
2017-
bitmap_remove_from_set (set, expr);
1976+
bitmap_remove_expr_from_set (set1, expr);
20181977
}
20191978
exprs.release ();
20201979
}
@@ -2034,7 +1993,7 @@ prune_clobbered_mems (bitmap_set_t set, basic_block block)
20341993
/* Remove queued expr. */
20351994
if (to_remove)
20361995
{
2037-
bitmap_remove_from_set (set, to_remove);
1996+
bitmap_remove_expr_from_set (set, to_remove);
20381997
to_remove = NULL;
20391998
}
20401999

@@ -2069,7 +2028,7 @@ prune_clobbered_mems (bitmap_set_t set, basic_block block)
20692028

20702029
/* Remove queued expr. */
20712030
if (to_remove)
2072-
bitmap_remove_from_set (set, to_remove);
2031+
bitmap_remove_expr_from_set (set, to_remove);
20732032
}
20742033

20752034
static sbitmap has_abnormal_preds;
@@ -2206,11 +2165,11 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge)
22062165
prune_clobbered_mems (ANTIC_OUT, block);
22072166

22082167
/* Generate ANTIC_OUT - TMP_GEN. */
2209-
S = bitmap_set_subtract (ANTIC_OUT, TMP_GEN (block));
2168+
S = bitmap_set_subtract_expressions (ANTIC_OUT, TMP_GEN (block));
22102169

22112170
/* Start ANTIC_IN with EXP_GEN - TMP_GEN. */
2212-
ANTIC_IN (block) = bitmap_set_subtract (EXP_GEN (block),
2213-
TMP_GEN (block));
2171+
ANTIC_IN (block) = bitmap_set_subtract_expressions (EXP_GEN (block),
2172+
TMP_GEN (block));
22142173

22152174
/* Then union in the ANTIC_OUT - TMP_GEN values,
22162175
to get ANTIC_OUT U EXP_GEN - TMP_GEN */
@@ -2254,8 +2213,7 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge)
22542213
else if succs(BLOCK) == 1 then
22552214
PA_OUT[BLOCK] = phi_translate (PA_IN[succ(BLOCK)])
22562215
2257-
PA_IN[BLOCK] = dependent_clean(PA_OUT[BLOCK] - TMP_GEN[BLOCK]
2258-
- ANTIC_IN[BLOCK])
2216+
PA_IN[BLOCK] = clean(PA_OUT[BLOCK] - TMP_GEN[BLOCK] - ANTIC_IN[BLOCK])
22592217
22602218
*/
22612219
static void
@@ -2348,7 +2306,7 @@ compute_partial_antic_aux (basic_block block,
23482306

23492307
/* PA_IN starts with PA_OUT - TMP_GEN.
23502308
Then we subtract things from ANTIC_IN. */
2351-
PA_IN (block) = bitmap_set_subtract (PA_OUT, TMP_GEN (block));
2309+
PA_IN (block) = bitmap_set_subtract_expressions (PA_OUT, TMP_GEN (block));
23522310

23532311
/* For partial antic, we want to put back in the phi results, since
23542312
we will properly avoid making them partially antic over backedges. */
@@ -2358,7 +2316,7 @@ compute_partial_antic_aux (basic_block block,
23582316
/* PA_IN[block] = PA_IN[block] - ANTIC_IN[block] */
23592317
bitmap_set_subtract_values (PA_IN (block), ANTIC_IN (block));
23602318

2361-
dependent_clean (PA_IN (block), ANTIC_IN (block));
2319+
clean (PA_IN (block), ANTIC_IN (block));
23622320

23632321
maybe_dump_sets:
23642322
if (dump_file && (dump_flags & TDF_DETAILS))

0 commit comments

Comments
 (0)