aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2013-11-12 06:42:05 +0000
committerBin Cheng <amker@gcc.gnu.org>2013-11-12 06:42:05 +0000
commit801a661c44fdc05f6ad1edc3143386be4c7853b5 (patch)
tree8121aef024fc425b95d1a2e94170968717ce1c23
parent97a23b74754430a479c33536c03b99b23bd1b5bd (diff)
downloadgcc-801a661c44fdc05f6ad1edc3143386be4c7853b5.zip
gcc-801a661c44fdc05f6ad1edc3143386be4c7853b5.tar.gz
gcc-801a661c44fdc05f6ad1edc3143386be4c7853b5.tar.bz2
tree-ssa-loop-ivopts.c (force_expr_to_var_cost): Refactor the code.
* tree-ssa-loop-ivopts.c (force_expr_to_var_cost): Refactor the code. Handle type conversion. From-SVN: r204695
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-ssa-loop-ivopts.c41
2 files changed, 28 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 92bb7a1..9fcafb6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-12 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-ssa-loop-ivopts.c (force_expr_to_var_cost): Refactor the code.
+ Handle type conversion.
+
2013-11-11 Martin Liska <marxin.liska@gmail.com>
Jan Hubicka <jh@suse.cz>
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index f7da126..d024bb4 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -3608,30 +3608,13 @@ force_expr_to_var_cost (tree expr, bool speed)
op1 = TREE_OPERAND (expr, 1);
STRIP_NOPS (op0);
STRIP_NOPS (op1);
-
- if (is_gimple_val (op0))
- cost0 = no_cost;
- else
- cost0 = force_expr_to_var_cost (op0, speed);
-
- if (is_gimple_val (op1))
- cost1 = no_cost;
- else
- cost1 = force_expr_to_var_cost (op1, speed);
-
break;
+ CASE_CONVERT:
case NEGATE_EXPR:
op0 = TREE_OPERAND (expr, 0);
STRIP_NOPS (op0);
op1 = NULL_TREE;
-
- if (is_gimple_val (op0))
- cost0 = no_cost;
- else
- cost0 = force_expr_to_var_cost (op0, speed);
-
- cost1 = no_cost;
break;
default:
@@ -3639,6 +3622,18 @@ force_expr_to_var_cost (tree expr, bool speed)
return new_cost (target_spill_cost[speed], 0);
}
+ if (op0 == NULL_TREE
+ || TREE_CODE (op0) == SSA_NAME || CONSTANT_CLASS_P (op0))
+ cost0 = no_cost;
+ else
+ cost0 = force_expr_to_var_cost (op0, speed);
+
+ if (op1 == NULL_TREE
+ || TREE_CODE (op1) == SSA_NAME || CONSTANT_CLASS_P (op1))
+ cost1 = no_cost;
+ else
+ cost1 = force_expr_to_var_cost (op1, speed);
+
mode = TYPE_MODE (TREE_TYPE (expr));
switch (TREE_CODE (expr))
{
@@ -3664,6 +3659,16 @@ force_expr_to_var_cost (tree expr, bool speed)
}
break;
+ CASE_CONVERT:
+ {
+ tree inner_mode, outer_mode;
+ outer_mode = TREE_TYPE (expr);
+ inner_mode = TREE_TYPE (op0);
+ cost = new_cost (convert_cost (TYPE_MODE (outer_mode),
+ TYPE_MODE (inner_mode), speed), 0);
+ }
+ break;
+
case MULT_EXPR:
if (cst_and_fits_in_hwi (op0))
cost = new_cost (mult_by_coeff_cost (int_cst_value (op0),