Commit c544114f by Bin Cheng Committed by Bin Cheng

tree-ssa-loop-ivopts.c (force_expr_to_var_cost): Handle more operators...

	* tree-ssa-loop-ivopts.c (force_expr_to_var_cost): Handle more
	operators: TRUNC_DIV_EXPR, BIT_AND_EXPR, BIT_IOR_EXPR, LSHIFT_EXPR,
	RSHIFT_EXPR and BIT_NOT_EXPR.

From-SVN: r247886
parent f9f69dd6
2017-05-11 Bin Cheng <bin.cheng@arm.com> 2017-05-11 Bin Cheng <bin.cheng@arm.com>
* tree-ssa-loop-ivopts.c (force_expr_to_var_cost): Handle more
operators: TRUNC_DIV_EXPR, BIT_AND_EXPR, BIT_IOR_EXPR, LSHIFT_EXPR,
RSHIFT_EXPR and BIT_NOT_EXPR.
2017-05-11 Bin Cheng <bin.cheng@arm.com>
* tree-ssa-loop-ivopts.c (get_loop_invariant_expr): Simplify. * tree-ssa-loop-ivopts.c (get_loop_invariant_expr): Simplify.
(adjust_setup_cost): New parameter supporting round up adjustment. (adjust_setup_cost): New parameter supporting round up adjustment.
(struct address_cost_data): Delete. (struct address_cost_data): Delete.
......
...@@ -4080,6 +4080,11 @@ force_expr_to_var_cost (tree expr, bool speed) ...@@ -4080,6 +4080,11 @@ force_expr_to_var_cost (tree expr, bool speed)
case PLUS_EXPR: case PLUS_EXPR:
case MINUS_EXPR: case MINUS_EXPR:
case MULT_EXPR: case MULT_EXPR:
case TRUNC_DIV_EXPR:
case BIT_AND_EXPR:
case BIT_IOR_EXPR:
case LSHIFT_EXPR:
case RSHIFT_EXPR:
op0 = TREE_OPERAND (expr, 0); op0 = TREE_OPERAND (expr, 0);
op1 = TREE_OPERAND (expr, 1); op1 = TREE_OPERAND (expr, 1);
STRIP_NOPS (op0); STRIP_NOPS (op0);
...@@ -4088,6 +4093,7 @@ force_expr_to_var_cost (tree expr, bool speed) ...@@ -4088,6 +4093,7 @@ force_expr_to_var_cost (tree expr, bool speed)
CASE_CONVERT: CASE_CONVERT:
case NEGATE_EXPR: case NEGATE_EXPR:
case BIT_NOT_EXPR:
op0 = TREE_OPERAND (expr, 0); op0 = TREE_OPERAND (expr, 0);
STRIP_NOPS (op0); STRIP_NOPS (op0);
op1 = NULL_TREE; op1 = NULL_TREE;
...@@ -4156,6 +4162,23 @@ force_expr_to_var_cost (tree expr, bool speed) ...@@ -4156,6 +4162,23 @@ force_expr_to_var_cost (tree expr, bool speed)
return comp_cost (target_spill_cost [speed], 0); return comp_cost (target_spill_cost [speed], 0);
break; break;
case TRUNC_DIV_EXPR:
/* Division by power of two is usually cheap, so we allow it. Forbid
anything else. */
if (integer_pow2p (TREE_OPERAND (expr, 1)))
cost = comp_cost (add_cost (speed, mode), 0);
else
cost = comp_cost (target_spill_cost[speed], 0);
break;
case BIT_AND_EXPR:
case BIT_IOR_EXPR:
case BIT_NOT_EXPR:
case LSHIFT_EXPR:
case RSHIFT_EXPR:
cost = comp_cost (add_cost (speed, mode), 0);
break;
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment