https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85853
--- Comment #3 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> --- Author: rsandifo Date: Wed May 23 10:32:16 2018 New Revision: 260601 URL: https://gcc.gnu.org/viewcvs?rev=260601&root=gcc&view=rev Log: 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.sandif...@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. Added: trunk/gcc/testsuite/gfortran.dg/vect/pr85853.f90 Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-vect-slp.c