Commit 1f786170 by Richard Sandiford Committed by Richard Sandiford

[5/n] PR85694: Remove dead WIDEN_SUM handling

vect_recog_dot_prod_pattern and vect_recog_sad_pattern both checked
whether the statement passed in had already been recognised as a
WIDEN_SUM_EXPR pattern.  That isn't possible (any more?), since the
first recognised pattern wins, and since vect_recog_widen_sum_pattern
never matches a later statement than the one it's given.

2018-06-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-patterns.c (vect_recog_dot_prod_pattern): Remove
	redundant WIDEN_SUM_EXPR handling.
	(vect_recog_sad_pattern): Likewise.

From-SVN: r261788
parent 44ae7a00
2018-06-20 Richard Sandiford <richard.sandiford@arm.com> 2018-06-20 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-patterns.c (vect_recog_dot_prod_pattern): Remove * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Remove
redundant WIDEN_SUM_EXPR handling.
(vect_recog_sad_pattern): Likewise.
2018-06-20 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-patterns.c (vect_recog_dot_prod_pattern): Remove
redundant check that the types of a PLUS_EXPR or MULT_EXPR agree. redundant check that the types of a PLUS_EXPR or MULT_EXPR agree.
(vect_recog_sad_pattern): Likewise PLUS_EXPR, ABS_EXPR and MINUS_EXPR. (vect_recog_sad_pattern): Likewise PLUS_EXPR, ABS_EXPR and MINUS_EXPR.
(vect_recog_widen_mult_pattern): Likewise MULT_EXPR. (vect_recog_widen_mult_pattern): Likewise MULT_EXPR.
......
...@@ -339,37 +339,25 @@ vect_recog_dot_prod_pattern (vec<gimple *> *stmts, tree *type_in, ...@@ -339,37 +339,25 @@ vect_recog_dot_prod_pattern (vec<gimple *> *stmts, tree *type_in,
return NULL; return NULL;
if (STMT_VINFO_IN_PATTERN_P (stmt_vinfo)) if (STMT_VINFO_IN_PATTERN_P (stmt_vinfo))
{ return NULL;
/* Has been detected as widening-summation? */
stmt = STMT_VINFO_RELATED_STMT (stmt_vinfo); if (!vect_reassociating_reduction_p (stmt_vinfo))
type = gimple_expr_type (stmt); return NULL;
if (gimple_assign_rhs_code (stmt) != WIDEN_SUM_EXPR)
return NULL;
oprnd0 = gimple_assign_rhs1 (stmt);
oprnd1 = gimple_assign_rhs2 (stmt);
half_type = TREE_TYPE (oprnd0);
}
else
{
gimple *def_stmt;
if (!vect_reassociating_reduction_p (stmt_vinfo)) oprnd0 = gimple_assign_rhs1 (last_stmt);
return NULL; oprnd1 = gimple_assign_rhs2 (last_stmt);
oprnd0 = gimple_assign_rhs1 (last_stmt); stmt = last_stmt;
oprnd1 = gimple_assign_rhs2 (last_stmt);
stmt = last_stmt;
if (type_conversion_p (oprnd0, stmt, true, &half_type, &def_stmt, gimple *def_stmt;
&promotion) if (type_conversion_p (oprnd0, stmt, true, &half_type, &def_stmt,
&& promotion) &promotion)
{ && promotion)
stmt = def_stmt; {
oprnd0 = gimple_assign_rhs1 (stmt); stmt = def_stmt;
} oprnd0 = gimple_assign_rhs1 (stmt);
else
half_type = type;
} }
else
half_type = type;
/* So far so good. Since last_stmt was detected as a (summation) reduction, /* So far so good. Since last_stmt was detected as a (summation) reduction,
we know that oprnd1 is the reduction variable (defined by a loop-header we know that oprnd1 is the reduction variable (defined by a loop-header
...@@ -553,34 +541,22 @@ vect_recog_sad_pattern (vec<gimple *> *stmts, tree *type_in, ...@@ -553,34 +541,22 @@ vect_recog_sad_pattern (vec<gimple *> *stmts, tree *type_in,
tree plus_oprnd0, plus_oprnd1; tree plus_oprnd0, plus_oprnd1;
if (STMT_VINFO_IN_PATTERN_P (stmt_vinfo)) if (STMT_VINFO_IN_PATTERN_P (stmt_vinfo))
{ return NULL;
/* Has been detected as widening-summation? */
gimple *stmt = STMT_VINFO_RELATED_STMT (stmt_vinfo); if (!vect_reassociating_reduction_p (stmt_vinfo))
sum_type = gimple_expr_type (stmt); return NULL;
if (gimple_assign_rhs_code (stmt) != WIDEN_SUM_EXPR)
return NULL;
plus_oprnd0 = gimple_assign_rhs1 (stmt);
plus_oprnd1 = gimple_assign_rhs2 (stmt);
half_type = TREE_TYPE (plus_oprnd0);
}
else
{
gimple *def_stmt;
if (!vect_reassociating_reduction_p (stmt_vinfo)) plus_oprnd0 = gimple_assign_rhs1 (last_stmt);
return NULL; plus_oprnd1 = gimple_assign_rhs2 (last_stmt);
plus_oprnd0 = gimple_assign_rhs1 (last_stmt);
plus_oprnd1 = gimple_assign_rhs2 (last_stmt); /* The type conversion could be promotion, demotion,
or just signed -> unsigned. */
/* The type conversion could be promotion, demotion, gimple *def_stmt;
or just signed -> unsigned. */ if (type_conversion_p (plus_oprnd0, last_stmt, false,
if (type_conversion_p (plus_oprnd0, last_stmt, false, &half_type, &def_stmt, &promotion))
&half_type, &def_stmt, &promotion)) plus_oprnd0 = gimple_assign_rhs1 (def_stmt);
plus_oprnd0 = gimple_assign_rhs1 (def_stmt); else
else half_type = sum_type;
half_type = sum_type;
}
/* So far so good. Since last_stmt was detected as a (summation) reduction, /* So far so good. Since last_stmt was detected as a (summation) reduction,
we know that plus_oprnd1 is the reduction variable (defined by a loop-header we know that plus_oprnd1 is the reduction variable (defined by a loop-header
...@@ -639,7 +615,6 @@ vect_recog_sad_pattern (vec<gimple *> *stmts, tree *type_in, ...@@ -639,7 +615,6 @@ vect_recog_sad_pattern (vec<gimple *> *stmts, tree *type_in,
return NULL; return NULL;
tree half_type0, half_type1; tree half_type0, half_type1;
gimple *def_stmt;
tree minus_oprnd0 = gimple_assign_rhs1 (diff_stmt); tree minus_oprnd0 = gimple_assign_rhs1 (diff_stmt);
tree minus_oprnd1 = gimple_assign_rhs2 (diff_stmt); tree minus_oprnd1 = gimple_assign_rhs2 (diff_stmt);
......
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