@@ -719,14 +719,11 @@ sccvn_valnum_from_value_id (unsigned int val)
719719/* Remove an expression EXPR from a bitmapped set. */
720720
721721static 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
804801static 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
908864static bool
@@ -918,9 +874,33 @@ static void
918874bitmap_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
19881966static 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
20752034static 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*/
22612219static 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