new file mode 100644
@@ -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];
+ }
+}
@@ -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;
}