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

Richard.

2018-08-27  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/86927
        * tree-vect-loop.c (vect_create_epilog_for_reduction): Properly
        use const cond reduction code.

        * gcc.dg/vect/pr86927.c: New testcase.

Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c        (revision 263875)
+++ gcc/tree-vect-loop.c        (working copy)
@@ -5197,6 +5197,9 @@ vect_create_epilog_for_reduction (vec<tr
          if (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info)
              == INTEGER_INDUC_COND_REDUCTION)
            code = induc_code;
+         else if (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info)
+                  == CONST_COND_REDUCTION)
+           code = STMT_VINFO_VEC_CONST_COND_REDUC_CODE (stmt_info);
          else
            code = MAX_EXPR;
        }
Index: gcc/testsuite/gcc.dg/vect/pr86927.c
===================================================================
--- gcc/testsuite/gcc.dg/vect/pr86927.c (nonexistent)
+++ gcc/testsuite/gcc.dg/vect/pr86927.c (working copy)
@@ -0,0 +1,15 @@
+#include "tree-vect.h"
+
+int a[28];
+int main()
+{
+  check_vect ();
+  a[4] = 1;
+  int c = 1;
+  for (int b = 0; b < 8; b++)
+    if (a[b])
+      c = 0;
+  if (c)
+    abort();
+  return 0;
+}

Reply via email to