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

Richard.

2017-09-25  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/82285
        * tree-vect-patterns.c (vect_recog_bool_pattern): Also handle
        enumeral types.

        * gcc.dg/torture/pr82285.c: New testcase.

Index: gcc/tree-vect-patterns.c
===================================================================
--- gcc/tree-vect-patterns.c    (revision 253134)
+++ gcc/tree-vect-patterns.c    (working copy)
@@ -3643,7 +3643,7 @@ vect_recog_bool_pattern (vec<gimple *> *
   rhs_code = gimple_assign_rhs_code (last_stmt);
   if (CONVERT_EXPR_CODE_P (rhs_code))
     {
-      if (TREE_CODE (TREE_TYPE (lhs)) != INTEGER_TYPE
+      if (! INTEGRAL_TYPE_P (TREE_TYPE (lhs))
          || TYPE_PRECISION (TREE_TYPE (lhs)) == 1)
        return NULL;
       vectype = get_vectype_for_scalar_type (TREE_TYPE (lhs));
Index: gcc/testsuite/gcc.dg/torture/pr82285.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr82285.c      (nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr82285.c      (working copy)
@@ -0,0 +1,16 @@
+/* { dg-do run } */
+
+enum tst { first = 0, second = 1 };
+
+int
+main ()
+{
+  enum tst data[16];
+
+  for (unsigned i = 0; i < 16; i++)
+    data[i] = (i < 5 ? second : first);
+
+  if (data[2] != second)
+    __builtin_abort ();
+  return 0;
+}

Reply via email to