diff options
author | Bin Cheng <bin.cheng@arm.com> | 2013-11-07 08:34:02 +0000 |
---|---|---|
committer | Bin Cheng <amker@gcc.gnu.org> | 2013-11-07 08:34:02 +0000 |
commit | 1a1a55342cdeae4d1431b2b0c6c753939b8f1d4d (patch) | |
tree | d117536054d5fdf9039e45d6c0a4d1915332bb5d /gcc | |
parent | be8c1c8cc0ff3da71e4cfb553e27a2832f4a939d (diff) | |
download | gcc-1a1a55342cdeae4d1431b2b0c6c753939b8f1d4d.zip gcc-1a1a55342cdeae4d1431b2b0c6c753939b8f1d4d.tar.gz gcc-1a1a55342cdeae4d1431b2b0c6c753939b8f1d4d.tar.bz2 |
tree-ssa-loop-ivopts.c (get_shiftadd_cost): Check equality using operand_equal_p.
* tree-ssa-loop-ivopts.c (get_shiftadd_cost): Check equality
using operand_equal_p.
From-SVN: r204498
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-ivopts.c | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fcbcbb5..89ce097 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2013-11-07 Bin Cheng <bin.cheng@arm.com> + * tree-ssa-loop-ivopts.c (get_shiftadd_cost): Check equality + using operand_equal_p. + +2013-11-07 Bin Cheng <bin.cheng@arm.com> + * tree-ssa-loop-ivopts.c (alloc_iv): Lower address expressions. * tree-affine.c (get_inner_reference_aff): Return base. * tree-affine.h (get_inner_reference_aff): Change prototype. diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index 220aae6..f7da126 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -3500,17 +3500,21 @@ get_shiftadd_cost (tree expr, enum machine_mode mode, comp_cost cost0, int m = exact_log2 (int_cst_value (cst)); int maxm = MIN (BITS_PER_WORD, GET_MODE_BITSIZE (mode)); int sa_cost; + bool equal_p = false; if (!(m >= 0 && m < maxm)) return false; + if (operand_equal_p (op1, mult, 0)) + equal_p = true; + sa_cost = (TREE_CODE (expr) != MINUS_EXPR ? shiftadd_cost (speed, mode, m) - : (mult == op1 + : (equal_p ? shiftsub1_cost (speed, mode, m) : shiftsub0_cost (speed, mode, m))); res = new_cost (sa_cost, 0); - res = add_costs (res, mult == op1 ? cost0 : cost1); + res = add_costs (res, equal_p ? cost0 : cost1); STRIP_NOPS (multop); if (!is_gimple_val (multop)) |