[Bug tree-optimization/61171] vectorization fails for a reduction in presence of subtraction

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Jul 20 11:17:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61171

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
Author: rguenth
Date: Thu Jul 20 11:17:21 2017
New Revision: 250382

URL: https://gcc.gnu.org/viewcvs?rev=250382&root=gcc&view=rev
Log:
2017-07-20  Richard Biener  <rguenther@suse.de>

        PR tree-optimization/61171
        * tree-vectorizer.h (slp_instance): Add reduc_phis member.
        (vect_analyze_stmt): Add slp instance parameter.
        (vectorizable_reduction): Likewise.
        * tree-vect-loop.c (vect_analyze_loop_operations): Adjust.
        (vect_is_simple_reduction): Deal with chains not detected
        as SLP reduction chain, specifically not properly associated
        chains containing a mix of plus/minus.
        (get_reduction_op): Remove.
        (get_initial_defs_for_reduction): Simplify, pass in whether
        this is a reduction chain, pass in the SLP node for the PHIs.
        (vect_create_epilog_for_reduction): Get the SLP instance as
        arg and adjust.
        (vectorizable_reduction): Get the SLP instance as arg.
        During analysis remember the SLP node with the PHIs in the
        instance.  Simplify getting at the vectorized reduction PHIs.
        * tree-vect-slp.c (vect_slp_analyze_node_operations): Pass
        through SLP instance.
        (vect_slp_analyze_operations): Likewise.
        * tree-vect-stms.c (vect_analyze_stmt): Likewise.
        (vect_transform_stmt): Likewise.

        * g++.dg/vect/pr61171.cc: New testcase.
        * gfortran.dg/vect/pr61171.f: Likewise.
        * gcc.dg/vect/vect-reduc-11.c: Likewise.

Added:
    trunk/gcc/testsuite/g++.dg/vect/pr61171.cc
    trunk/gcc/testsuite/gcc.dg/vect/vect-reduc-11.c
    trunk/gcc/testsuite/gfortran.dg/vect/pr61171.f
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-vect-loop.c
    trunk/gcc/tree-vect-slp.c
    trunk/gcc/tree-vect-stmts.c
    trunk/gcc/tree-vectorizer.h


More information about the Gcc-bugs mailing list