Commit eb38d071 by Richard Sandiford Committed by Richard Sandiford

Add missing cases to vect_get_smallest_scalar_type (PR 85286)

In this PR we used WIDEN_SUM_EXPR to vectorise:

  short i, y;
  int sum;
  [...]
  for (i = x; i > 0; i--)
    sum += y;

with 4 ints and 8 shorts per vector.  The problem was that we set
the VF based only on the ints, then calculated the number of vector
copies based on the shorts, giving 4/8.  Previously that led to
ncopies==0, but after r249897 we pick it up as an ICE.

In this particular case we could vectorise the reduction by setting
ncopies based on the output type rather than the input type, but it
doesn't seem worth adding a special "optimisation" for such a
pathological case.  I think it's really an instance of the more general
problem that we can't vectorise using combinations of (say) 64-bit and
128-bit vectors on targets that support both.

2018-04-10  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	PR tree-optimization/85286
	* tree-vect-data-refs.c (vect_get_smallest_scalar_type):

gcc/testsuite/
	PR tree-optimization/85286
	* gcc.dg/vect/pr85286.c: New test.

From-SVN: r259268
parent 02149a78
2018-04-10 Richard Sandiford <richard.sandiford@linaro.org> 2018-04-10 Richard Sandiford <richard.sandiford@linaro.org>
PR tree-optimization/85286
* tree-vect-data-refs.c (vect_get_smallest_scalar_type):
2018-04-10 Richard Sandiford <richard.sandiford@linaro.org>
* final.c (final_1): Set insn_last_address as well as * final.c (final_1): Set insn_last_address as well as
insn_current_address. insn_current_address.
......
2018-04-10 Richard Sandiford <richard.sandiford@linaro.org>
PR tree-optimization/85286
* gcc.dg/vect/pr85286.c: New test.
2018-04-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com> 2018-04-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/85173 PR target/85173
......
/* PR tree-optimization/45241 */
/* { dg-do compile } */
/* { dg-additional-options "--param scev-max-expr-complexity=0" } */
int
foo (short x)
{
short i, y;
int sum;
for (i = 0; i < x; i++)
y = x * i;
for (i = x; i > 0; i--)
sum += y;
return sum;
}
...@@ -132,6 +132,8 @@ vect_get_smallest_scalar_type (gimple *stmt, HOST_WIDE_INT *lhs_size_unit, ...@@ -132,6 +132,8 @@ vect_get_smallest_scalar_type (gimple *stmt, HOST_WIDE_INT *lhs_size_unit,
if (is_gimple_assign (stmt) if (is_gimple_assign (stmt)
&& (gimple_assign_cast_p (stmt) && (gimple_assign_cast_p (stmt)
|| gimple_assign_rhs_code (stmt) == DOT_PROD_EXPR
|| gimple_assign_rhs_code (stmt) == WIDEN_SUM_EXPR
|| gimple_assign_rhs_code (stmt) == WIDEN_MULT_EXPR || gimple_assign_rhs_code (stmt) == WIDEN_MULT_EXPR
|| gimple_assign_rhs_code (stmt) == WIDEN_LSHIFT_EXPR || gimple_assign_rhs_code (stmt) == WIDEN_LSHIFT_EXPR
|| gimple_assign_rhs_code (stmt) == FLOAT_EXPR)) || gimple_assign_rhs_code (stmt) == FLOAT_EXPR))
......
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