OSDN Git Service

* tree-ssa-loop-ivopts.c (struct ivopts_data): New field important_candidates.
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 16 Oct 2004 16:49:53 +0000 (16:49 +0000)
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 16 Oct 2004 16:49:53 +0000 (16:49 +0000)
(find_best_candidate): Take also important candidates into account.
(find_optimal_iv_set): Initialize important_candidates bitmap.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89146 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-ssa-loop-ivopts.c

index 69a6326..2ddfb50 100644 (file)
@@ -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.
index 93ff3b7..70379dd 100644 (file)
@@ -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;
 }