tree-optimization/95866 - avoid using scalar ops for vectorized shift
authorRichard Biener <rguenther@suse.de>
Thu, 25 Jun 2020 09:21:20 +0000 (11:21 +0200)
committerRichard Biener <rguenther@suse.de>
Thu, 25 Jun 2020 10:29:52 +0000 (12:29 +0200)
commit86ce59b4f05d8f68ec4d9a14a7732acb370412db
treeeb7c81a823bc2aaef6319c4cf91d561847bab2d7
parent88891c5ff0e3e20d3dd743c4eb6cc45399ee5c33
tree-optimization/95866 - avoid using scalar ops for vectorized shift

This avoids using the original scalar SSA operand when vectorizing
a shift with a vectorized shift operand where we know all vector
components have the same value and thus we can use a vector by
scalar shift.  Using the scalar SSA operand causes a possibly
long chain of scalar computation to be retained so it's better
to simply extract lane zero from the available vectorized shift
operand.

2020-06-25  Richard Biener  <rguenther@suse.de>

PR tree-optimization/95866
* tree-vect-stmts.c (vectorizable_shift): Reject incompatible
vectorized shift operands.  For scalar shifts use lane zero
of a vectorized shift operand.

* gcc.dg/vect/bb-slp-pr95866.c: New testcase.
gcc/testsuite/gcc.dg/vect/bb-slp-pr95866.c [new file with mode: 0644]
gcc/tree-vect-stmts.c