Commit 3edaed39 by Richard Sandiford Committed by Richard Sandiford

Don't pass booleans as mask types to simd clones (PR 92710)

In this PR we assigned a vector mask type to the result of a comparison
and then tried to pass that mask type to a simd clone, which expected
a normal (non-mask) type instead.

This patch simply punts on call arguments that have a mask type.
A better fix would be to pattern-match the comparison to a COND_EXPR,
like we would if the comparison was stored to memory, but doing that
isn't gcc 9 or 10 material.

Note that this doesn't affect x86_64-linux-gnu because the ABI promotes
bool arguments to ints.

2019-11-29  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	PR tree-optimization/92710
	* tree-vect-stmts.c (vectorizable_simd_clone_call): Reject
	vector mask arguments.

gcc/testsuite/
	PR tree-optimization/92710
	* gcc.dg/vect/pr92710.c: New test.

From-SVN: r278839
parent 337b04a4
2019-11-29 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/92710
* tree-vect-stmts.c (vectorizable_simd_clone_call): Reject
vector mask arguments.
2019-11-29 Jan Hubicka <hubicka@ucw.cz>
* profile-count.c (profile_count::to_cgraph_frequency,
2019-11-29 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/92710
* gcc.dg/vect/pr92710.c: New test.
2019-11-29 Tobias Burnus <tobias@codesourcery.com>
PR ipa/84963
......
/* { dg-do compile } */
/* { dg-additional-options "-fopenmp-simd" } */
#pragma omp declare simd
_Bool foo (_Bool) __attribute__((const));
void
f (_Bool *restrict x, char *restrict y, char *restrict z)
{
for (int i = 0; i < 128; ++i)
x[i] = foo (y[i] == z[i]);
}
......@@ -3925,7 +3925,16 @@ vectorizable_simd_clone_call (stmt_vec_info stmt_info,
|| thisarginfo.dt == vect_external_def)
gcc_assert (thisarginfo.vectype == NULL_TREE);
else
gcc_assert (thisarginfo.vectype != NULL_TREE);
{
gcc_assert (thisarginfo.vectype != NULL_TREE);
if (VECTOR_BOOLEAN_TYPE_P (thisarginfo.vectype))
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"vector mask arguments are not supported\n");
return false;
}
}
/* For linear arguments, the analyze phase should have saved
the base and step in STMT_VINFO_SIMD_CLONE_INFO. */
......
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