diff options
author | Bin Cheng <bin.cheng@arm.com> | 2013-11-12 06:42:05 +0000 |
---|---|---|
committer | Bin Cheng <amker@gcc.gnu.org> | 2013-11-12 06:42:05 +0000 |
commit | 801a661c44fdc05f6ad1edc3143386be4c7853b5 (patch) | |
tree | 8121aef024fc425b95d1a2e94170968717ce1c23 | |
parent | 97a23b74754430a479c33536c03b99b23bd1b5bd (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-ivopts.c | 41 |
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), |