Commit 1e26ff73 by Richard Sandiford

vect: Pattern-matched calls in reduction chains

gcc.dg/pr56350.c started ICEing for SVE in GCC 10 because we
pattern-matched a division reduction:

      a /= 8;

into a signed shift with division semantics:

      ... = IFN_SDIV_POW2 (..., 3);

whereas the reduction code expected it still to be a gassign.

One fix would be to check for a reduction in the pattern matcher
(but current patterns don't generally do that).  Another would be
to fail gracefully for reductions involving calls.  Since we can't
vectorise the reduction either way, and probably have a better shot
with the shift form, this patch goes for the "fail gracefully" approach.

2020-01-28  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-loop.c (vectorizable_reduction): Fail gracefully
	for reduction chains that (now) include a call.
parent 627d59b6
2020-01-28 Richard Sandiford <richard.sandiford@arm.com> 2020-01-28 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-loop.c (vectorizable_reduction): Fail gracefully
for reduction chains that (now) include a call.
2020-01-28 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/92822 PR tree-optimization/92822
* tree-ssa-forwprop.c (simplify_vector_constructor): When filling * tree-ssa-forwprop.c (simplify_vector_constructor): When filling
out the don't-care elements of a vector whose significant elements out the don't-care elements of a vector whose significant elements
......
...@@ -6026,10 +6026,18 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node, ...@@ -6026,10 +6026,18 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node,
info_for_reduction to work. */ info_for_reduction to work. */
if (STMT_VINFO_LIVE_P (vdef)) if (STMT_VINFO_LIVE_P (vdef))
STMT_VINFO_REDUC_DEF (def) = phi_info; STMT_VINFO_REDUC_DEF (def) = phi_info;
if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (vdef->stmt))) gassign *assign = dyn_cast <gassign *> (vdef->stmt);
if (!assign)
{ {
if (!tree_nop_conversion_p (TREE_TYPE (gimple_assign_lhs (vdef->stmt)), if (dump_enabled_p ())
TREE_TYPE (gimple_assign_rhs1 (vdef->stmt)))) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"reduction chain includes calls.\n");
return false;
}
if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (assign)))
{
if (!tree_nop_conversion_p (TREE_TYPE (gimple_assign_lhs (assign)),
TREE_TYPE (gimple_assign_rhs1 (assign))))
{ {
if (dump_enabled_p ()) if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
......
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