genmatch.c (capture_info::walk_c_expr): Ignore capture uses inside TREE_TYPE ().

2014-10-30  Richard Biener  <rguenther@suse.de>

	* genmatch.c (capture_info::walk_c_expr): Ignore capture
	uses inside TREE_TYPE ().
	* gimple-ssa-strength-reduction.c (stmt_cost): Use CASE_CONVERT.
	(find_candidates_dom_walker::before_dom_children): Likewise.
	(replace_mult_candidate): Use CONVERT_EXPR_CODE_P.
	(replace_profitable_candidates): Likewise.
	* tree-ssa-dom.c (initialize_hash_element): Canonicalize
	CONVERT_EXPR_CODE_P to CONVERT_EXPR.
	* convert.c (convert_to_integer): Use CASE_CONVERT.

From-SVN: r216939
This commit is contained in:
Richard Biener 2014-10-30 15:36:05 +00:00 committed by Richard Biener
parent 665c06cec2
commit d822570f73
5 changed files with 47 additions and 20 deletions

View File

@ -1,3 +1,15 @@
2014-10-30 Richard Biener <rguenther@suse.de>
* genmatch.c (capture_info::walk_c_expr): Ignore capture
uses inside TREE_TYPE ().
* gimple-ssa-strength-reduction.c (stmt_cost): Use CASE_CONVERT.
(find_candidates_dom_walker::before_dom_children): Likewise.
(replace_mult_candidate): Use CONVERT_EXPR_CODE_P.
(replace_profitable_candidates): Likewise.
* tree-ssa-dom.c (initialize_hash_element): Canonicalize
CONVERT_EXPR_CODE_P to CONVERT_EXPR.
* convert.c (convert_to_integer): Use CASE_CONVERT.
2014-10-30 Richard Biener <rguenther@suse.de>
* match.pd: Implement more patterns that simplify to a single value.

View File

@ -831,7 +831,7 @@ convert_to_integer (tree type, tree expr)
TREE_OPERAND (expr, 0))));
}
case NOP_EXPR:
CASE_CONVERT:
/* Don't introduce a
"can't convert between vector values of different size" error. */
if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == VECTOR_TYPE

View File

@ -2004,21 +2004,34 @@ capture_info::walk_result (operand *o, bool conditional_p)
void
capture_info::walk_c_expr (c_expr *e)
{
/* Give up for C exprs mentioning captures. */
/* Give up for C exprs mentioning captures not inside TREE_TYPE (). */
unsigned p_depth = 0;
for (unsigned i = 0; i < e->code.length (); ++i)
if (e->code[i].type == CPP_ATSIGN
&& (e->code[i+1].type == CPP_NUMBER
|| e->code[i+1].type == CPP_NAME)
&& !(e->code[i+1].flags & PREV_WHITE))
{
const cpp_token *n = &e->code[i+1];
const char *id;
if (n->type == CPP_NUMBER)
id = (const char *)n->val.str.text;
else
id = (const char *)CPP_HASHNODE (n->val.node.node)->ident.str;
info[(*e->capture_ids)[id]].force_no_side_effects_p = true;
}
{
const cpp_token *t = &e->code[i];
const cpp_token *n = i < e->code.length () - 1 ? &e->code[i+1] : NULL;
if (t->type == CPP_NAME
&& strcmp ((const char *)CPP_HASHNODE
(t->val.node.node)->ident.str, "TREE_TYPE") == 0
&& n->type == CPP_OPEN_PAREN)
p_depth++;
else if (t->type == CPP_CLOSE_PAREN
&& p_depth > 0)
p_depth--;
else if (p_depth == 0
&& t->type == CPP_ATSIGN
&& (n->type == CPP_NUMBER
|| n->type == CPP_NAME)
&& !(n->flags & PREV_WHITE))
{
const char *id;
if (n->type == CPP_NUMBER)
id = (const char *)n->val.str.text;
else
id = (const char *)CPP_HASHNODE (n->val.node.node)->ident.str;
info[(*e->capture_ids)[id]].force_no_side_effects_p = true;
}
}
}

View File

@ -705,7 +705,7 @@ stmt_cost (gimple gs, bool speed)
case NEGATE_EXPR:
return neg_cost (speed, lhs_mode);
case NOP_EXPR:
CASE_CONVERT:
return convert_cost (lhs_mode, TYPE_MODE (TREE_TYPE (rhs1)), speed);
/* Note that we don't assign costs to copies that in most cases
@ -1715,7 +1715,7 @@ find_candidates_dom_walker::before_dom_children (basic_block bb)
rhs2 = gimple_assign_rhs2 (gs);
/* Fall-through. */
case NOP_EXPR:
CASE_CONVERT:
case MODIFY_EXPR:
case NEGATE_EXPR:
rhs1 = gimple_assign_rhs1 (gs);
@ -1743,7 +1743,7 @@ find_candidates_dom_walker::before_dom_children (basic_block bb)
slsr_process_neg (gs, rhs1, speed);
break;
case NOP_EXPR:
CASE_CONVERT:
slsr_process_cast (gs, rhs1, speed);
break;
@ -2033,7 +2033,7 @@ replace_mult_candidate (slsr_cand_t c, tree basis_name, widest_int bump)
/* It is not useful to replace casts, copies, or adds of
an SSA name and a constant. */
&& cand_code != MODIFY_EXPR
&& cand_code != NOP_EXPR
&& !CONVERT_EXPR_CODE_P (cand_code)
&& cand_code != PLUS_EXPR
&& cand_code != POINTER_PLUS_EXPR
&& cand_code != MINUS_EXPR)
@ -3472,7 +3472,7 @@ replace_profitable_candidates (slsr_cand_t c)
if (i >= 0
&& profitable_increment_p (i)
&& orig_code != MODIFY_EXPR
&& orig_code != NOP_EXPR)
&& !CONVERT_EXPR_CODE_P (orig_code))
{
if (phi_dependent_cand_p (c))
{

View File

@ -305,6 +305,8 @@ initialize_hash_element (gimple stmt, tree lhs,
case GIMPLE_UNARY_RHS:
expr->kind = EXPR_UNARY;
expr->type = TREE_TYPE (gimple_assign_lhs (stmt));
if (CONVERT_EXPR_CODE_P (subcode))
subcode = CONVERT_EXPR;
expr->ops.unary.op = subcode;
expr->ops.unary.opnd = gimple_assign_rhs1 (stmt);
break;