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

Reply via email to