aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2016-05-03 08:38:18 +0000
committerBin Cheng <amker@gcc.gnu.org>2016-05-03 08:38:18 +0000
commite0db140205f73e6fecf8dee1c1dd35d41e653d7b (patch)
treeedbbea8539ed7cb082182017579697fb9b2ac21c
parentfb2647aaf55b453b37badfd40c14c59486a74584 (diff)
downloadgcc-e0db140205f73e6fecf8dee1c1dd35d41e653d7b.zip
gcc-e0db140205f73e6fecf8dee1c1dd35d41e653d7b.tar.gz
gcc-e0db140205f73e6fecf8dee1c1dd35d41e653d7b.tar.bz2
tree-ssa-loop-ivopts.c (get_computation_cost_at): Don't clobber cbase.
* tree-ssa-loop-ivopts.c (get_computation_cost_at): Don't clobber cbase. From-SVN: r235805
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-ssa-loop-ivopts.c12
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3910c62..d5895ca 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2016-05-03 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-ssa-loop-ivopts.c (get_computation_cost_at): Don't clobber
+ cbase.
+
2016-05-03 Oleg Endo <olegendo@gcc.gnu.org>
* config/sh/sh.md (udivsi3, divsi3, mulsi3): Simplify.
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index 9314363..e6d35a4 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -4814,17 +4814,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);