diff options
author | Zdenek Dvorak <dvorakz@suse.cz> | 2004-10-16 18:49:53 +0200 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2004-10-16 16:49:53 +0000 |
commit | 80cad5faeb98e96f52597f2e8817c742a1ddacd0 (patch) | |
tree | 44606bf9ab44f65ab4dfa8b82f013615abb9f0d6 | |
parent | f59b0bd4e69f883adcf25fa44b15b993ff52cc07 (diff) | |
download | gcc-80cad5faeb98e96f52597f2e8817c742a1ddacd0.zip gcc-80cad5faeb98e96f52597f2e8817c742a1ddacd0.tar.gz gcc-80cad5faeb98e96f52597f2e8817c742a1ddacd0.tar.bz2 |
tree-ssa-loop-ivopts.c (struct ivopts_data): New field important_candidates.
* tree-ssa-loop-ivopts.c (struct ivopts_data): New field important_candidates.
(find_best_candidate): Take also important candidates into account.
(find_optimal_iv_set): Initialize important_candidates bitmap.
From-SVN: r89146
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-ivopts.c | 17 |
2 files changed, 22 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 69a6326..2ddfb50 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2004-10-16 Zdenek Dvorak <dvorakz@suse.cz> + * tree-ssa-loop-ivopts.c (struct ivopts_data): New field important_candidates. + (find_best_candidate): Take also important candidates into account. + (find_optimal_iv_set): Initialize important_candidates bitmap. + +2004-10-16 Zdenek Dvorak <dvorakz@suse.cz> + PR tree-optimization/17560 * predict.c (tree_estimate_probability): Mark irreducible loops. diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index 93ff3b74..70379dd 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -219,6 +219,9 @@ struct ivopts_data /* The candidates. */ varray_type iv_candidates; + /* A bitmap of important candidates. */ + bitmap important_candidates; + /* Whether to consider just related and important candidates when replacing a use. */ bool consider_all_candidates; @@ -3474,7 +3477,9 @@ find_best_candidate (struct ivopts_data *data, else { asol = BITMAP_XMALLOC (); - bitmap_a_and_b (asol, sol, use->related_cands); + + bitmap_a_or_b (asol, data->important_candidates, use->related_cands); + bitmap_a_and_b (asol, asol, sol); } EXECUTE_IF_SET_IN_BITMAP (asol, 0, c, bi) @@ -3741,6 +3746,15 @@ find_optimal_iv_set (struct ivopts_data *data) bitmap inv = BITMAP_XMALLOC (); struct iv_use *use; + data->important_candidates = BITMAP_XMALLOC (); + for (i = 0; i < n_iv_cands (data); i++) + { + struct iv_cand *cand = iv_cand (data, i); + + if (cand->important) + bitmap_set_bit (data->important_candidates, i); + } + /* Set the upper bound. */ cost = get_initial_solution (data, set, inv); if (cost == INFTY) @@ -3783,6 +3797,7 @@ find_optimal_iv_set (struct ivopts_data *data) } BITMAP_XFREE (inv); + BITMAP_XFREE (data->important_candidates); return set; } |