Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2019-10-04  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/91982
        * tree-vect-loop.c (vectorizable_live_operation): Also guard
        against EXTRACT_LAST_REDUCTION.
        * tree-vect-stmts.c (vect_transform_stmt): Likewise.

Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c        (revision 276564)
+++ gcc/tree-vect-loop.c        (working copy)
@@ -7901,7 +7901,10 @@ vectorizable_live_operation (stmt_vec_in
        return true;
       if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def)
        {
-         if (STMT_VINFO_REDUC_TYPE (stmt_info) == FOLD_LEFT_REDUCTION)
+         if (STMT_VINFO_REDUC_TYPE (stmt_info) == FOLD_LEFT_REDUCTION
+             || (STMT_VINFO_REDUC_TYPE (stmt_info) == COND_REDUCTION
+                 && (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info)
+                     == EXTRACT_LAST_REDUCTION)))
            return true;
          if (slp_node)
            {
Index: gcc/tree-vect-stmts.c
===================================================================
--- gcc/tree-vect-stmts.c       (revision 276564)
+++ gcc/tree-vect-stmts.c       (working copy)
@@ -10897,6 +10897,9 @@ vect_transform_stmt (stmt_vec_info stmt_
   stmt_vec_info orig_stmt_info = vect_orig_stmt (stmt_info);
   if (!slp_node && STMT_VINFO_REDUC_DEF (orig_stmt_info)
       && STMT_VINFO_REDUC_TYPE (orig_stmt_info) != FOLD_LEFT_REDUCTION
+      && (STMT_VINFO_REDUC_TYPE (orig_stmt_info) != COND_REDUCTION
+         || (STMT_VINFO_VEC_REDUCTION_TYPE (orig_stmt_info)
+             != EXTRACT_LAST_REDUCTION))
       && is_a <gphi *> (STMT_VINFO_REDUC_DEF (orig_stmt_info)->stmt))
     {
       gphi *phi = as_a <gphi *> (STMT_VINFO_REDUC_DEF (orig_stmt_info)->stmt);

Reply via email to