Hi,
This fixes a latent bug I introduced.  Variable "cbase" shouldn't be modified 
since it will be used afterwards.  Bootstrap and test on x86_64.  I think it's 
an obvious change, is it OK?

Thanks,
bin

2016-04-28  Bin Cheng  <bin.ch...@arm.com>

        * tree-ssa-loop-ivopts.c (get_computation_cost_at): Don't clobber
        cbase.
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index 7be4f16..acafaff 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -4927,17 +4927,19 @@ get_computation_cost_at (struct ivopts_data *data,
                (ratio, mem_mode,
                        TYPE_ADDR_SPACE (TREE_TYPE (utype))))
     {
+      tree real_cbase = cbase;
+
       if (cstepi == 0 && stmt_is_after_inc)
        {
          if (POINTER_TYPE_P (ctype))
-           cbase = fold_build2 (POINTER_PLUS_EXPR, ctype, cbase, cstep);
+           real_cbase = fold_build2 (POINTER_PLUS_EXPR, ctype, cbase, cstep);
          else
-           cbase = fold_build2 (PLUS_EXPR, ctype, cbase, cstep);
+           real_cbase = fold_build2 (PLUS_EXPR, ctype, cbase, cstep);
        }
-      cbase
-       = fold_build2 (MULT_EXPR, ctype, cbase, build_int_cst (ctype, ratio));
+      real_cbase = fold_build2 (MULT_EXPR, ctype, real_cbase,
+                               build_int_cst (ctype, ratio));
       cost = difference_cost (data,
-                             ubase, cbase,
+                             ubase, real_cbase,
                              &symbol_present, &var_present, &offset,
                              depends_on);
       cost.cost /= avg_loop_niter (data->current_loop);

Reply via email to