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>
* 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.
(adjust_setup_cost): New parameter supporting round up adjustment.
(struct address_cost_data): Delete.
......
......@@ -4080,6 +4080,11 @@ force_expr_to_var_cost (tree expr, bool speed)
case PLUS_EXPR:
case MINUS_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);
op1 = TREE_OPERAND (expr, 1);
STRIP_NOPS (op0);
......@@ -4088,6 +4093,7 @@ force_expr_to_var_cost (tree expr, bool speed)
CASE_CONVERT:
case NEGATE_EXPR:
case BIT_NOT_EXPR:
op0 = TREE_OPERAND (expr, 0);
STRIP_NOPS (op0);
op1 = NULL_TREE;
......@@ -4156,6 +4162,23 @@ force_expr_to_var_cost (tree expr, bool speed)
return comp_cost (target_spill_cost [speed], 0);
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:
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