On Wed, Apr 25, 2012 at 10:56 AM, Igor Zamyatin <izamya...@gmail.com> wrote:
> Hi all!
>
> I'd like to post for review the patch which makes some costs adjusting
> in get_computation_cost_at routine in ivopts part.
> As mentioned in the PR changes also fix the bwaves regression from PR 52272.
> Also changes introduce no degradations on spec2000/2006 and
> EEMBC1.1/2.0(this was measured on Atom) on x86
>
>
> Bootstrapped and regtested on x86. Ok to commit?

I can't make sense of the patch and the comment does not help.

+      diff_cost = cost.cost;
       cost.cost /= avg_loop_niter (data->current_loop);
+      add_cost_val = add_cost (TYPE_MODE (ctype), data->speed);
+      /* Do cost correction if address cost is small enough
+         and difference cost is high enough.  */
+      if (address_p && diff_cost > add_cost_val
+          && get_address_cost (symbol_present, var_present,
+                               offset, ratio, cstepi,
+                               TYPE_MODE (TREE_TYPE (utype)),
+                               TYPE_ADDR_SPACE (TREE_TYPE (utype)),
+                               speed, stmt_is_after_inc,
+                               can_autoinc).cost <= add_cost_val)
+        cost.cost += add_cost_val;

Please explain more thoroughly.  It also would seem to be better to add
an extra case, as later code does

  /* Now the computation is in shape symbol + var1 + const + ratio * var2.
     (symbol/var1/const parts may be omitted).  If we are looking for an
     address, find the cost of addressing this.  */
  if (address_p)
    return add_costs (cost,
                      get_address_cost (symbol_present, var_present,
                                        offset, ratio, cstepi,
                                        TYPE_MODE (TREE_TYPE (utype)),
                                        TYPE_ADDR_SPACE (TREE_TYPE (utype)),
                                        speed, stmt_is_after_inc,
                                        can_autoinc));

thus refactoring the code a bit would make it possible to CSE the
get_address_cost
call and eventually make it clearer what the code does.

Richard.

>
> Changelog:
>
> 2012-04-26  Yuri Rumyantsev  <yuri.rumyant...@intel.com>
>
>        * tree-ssa-loop-ivopts.c (get_computation_cost_at): Add cost
>        of extra addition if cost of address difference is high enough.
>
> Thanks,
> Igor

Reply via email to