Fix SLP def type when computing masks (PR85853)
commitb7765353e7729b515ebc89494442e5558d2c5057
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 May 2018 10:32:16 +0000 (23 10:32 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 May 2018 10:32:16 +0000 (23 10:32 +0000)
treee4ecc9d8f4c8a97c32fc8fc6eab46d0fcaac45f3
parent5abc6fac1e5b5ff95d4ded981f8c3f4d58289762
Fix SLP def type when computing masks (PR85853)

In this PR, SLP failed to include a comparison node in the SLP
tree and so marked the node as external.  It then went on to call
vect_is_simple_use on the comparison with its STMT_VINFO_DEF_TYPE
still claiming that it was an internal definition.

We already avoid that for vect_analyze_stmt by temporarily copying
the node's definition type to each STMT_VINFO_DEF_TYPE.  This patch
extends that to the vector type calculation.  The easiest thing
seemed to be to split the analysis of the root node out into
a subroutine, so that it's possible to return false early without
awkward control flow.

2018-05-23  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
PR tree-optimization/85853
* tree-vect-slp.c (vect_slp_analyze_node_operations): Split out
the handling of the root of the node to...
(vect_slp_analyze_node_operations_1): ...this new function,
and run the whole thing with the child nodes' def types
set according to their SLP node's def type.

gcc/testsuite/
PR tree-optimization/85853
* gfortran.dg/vect/pr85853.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@260601 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/vect/pr85853.f90 [new file with mode: 0644]
gcc/tree-vect-slp.c