]> gcc.gnu.org Git - gcc.git/commitdiff
tree-optimization/103800 - sanity check more PHI vectorization
authorRichard Biener <rguenther@suse.de>
Tue, 4 Jan 2022 14:49:50 +0000 (15:49 +0100)
committerRichard Biener <rguenther@suse.de>
Tue, 4 Jan 2022 15:51:53 +0000 (16:51 +0100)
Bool pattern detection doesn't really handle PHIs well so we have
to be prepared for mismatched vector types in more cases than
originally thought.

2022-01-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/103800
* tree-vect-loop.c (vectorizable_phi): Remove assert and
expand comment.

* gcc.dg/vect/bb-slp-pr103800.c: New testcase.

gcc/testsuite/gcc.dg/vect/bb-slp-pr103800.c [new file with mode: 0644]
gcc/tree-vect-loop.c

diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr103800.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr103800.c
new file mode 100644 (file)
index 0000000..33c2d20
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-O3" } */
+
+int a;
+long b;
+extern int c[], d[];
+extern _Bool e[];
+void f() {
+  if (a)
+    ;
+  for (;;) {
+    for (int g = 2; g; g = a)
+      d[g] = 0;
+    for (int h = 1; h < 13; h++)
+      e[h] = b ? (short)c[4 + h - 1] : c[4 + h - 1];
+  }
+}
index ebd7d9c22181d218a4e59270d770bf8a5d3f6a8a..77f1cc0f788b72820c2afb4f8964eb6f1e85bbbb 100644 (file)
@@ -7850,17 +7850,15 @@ vectorizable_phi (vec_info *,
                 && !useless_type_conversion_p (vectype,
                                                SLP_TREE_VECTYPE (child)))
          {
-           /* With bools we can have mask and non-mask precision vectors,
-              while pattern recog is supposed to guarantee consistency here
-              bugs in it can cause mismatches (PR103489 for example).
+           /* With bools we can have mask and non-mask precision vectors
+              or different non-mask precisions.  while pattern recog is
+              supposed to guarantee consistency here bugs in it can cause
+              mismatches (PR103489 and PR103800 for example).
               Deal with them here instead of ICEing later.  */
            if (dump_enabled_p ())
              dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
                               "incompatible vector type setup from "
                               "bool pattern detection\n");
-           gcc_checking_assert
-             (VECTOR_BOOLEAN_TYPE_P (SLP_TREE_VECTYPE (child))
-              != VECTOR_BOOLEAN_TYPE_P (vectype));
            return false;
          }
 
This page took 0.091357 seconds and 5 git commands to generate.