+2016-11-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/78445
+ * tree-if-conv.c (tree_if_conversion): If any_pred_load_store or
+ any_complicated_phi, version loop even if flag_tree_loop_if_convert is
+ 1. Formatting fix.
+
2016-11-22 Martin Liska <mliska@suse.cz>
PR ipa/78309
+2016-11-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/78445
+ * gcc.dg/pr78445.c: New test.
+
2016-11-22 Szabolcs Nagy <szabolcs.nagy@arm.com>
PR libgfortran/78449
--- /dev/null
+/* PR tree-optimization/78445 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-loop-if-convert -ftree-vectorize" } */
+/* { dg-additional-options "-mavx2" { target { i?86-*-* x86_64-*-* } } } */
+
+int a;
+
+void
+foo (int x, int *y)
+{
+ while (a != 0)
+ if (x != 0)
+ {
+ *y = a;
+ x = *y;
+ }
+ else
+ x = a;
+}
goto cleanup;
/* Since we have no cost model, always version loops unless the user
- specified -ftree-loop-if-convert. Either version this loop, or if
- the pattern is right for outer-loop vectorization, version the
- outer loop. In the latter case we will still if-convert the
- original inner loop. */
- if (flag_tree_loop_if_convert != 1
- && !version_loop_for_if_conversion
- (versionable_outer_loop_p (loop_outer (loop))
- ? loop_outer (loop) : loop))
- goto cleanup;
+ specified -ftree-loop-if-convert or unless versioning is required.
+ Either version this loop, or if the pattern is right for outer-loop
+ vectorization, version the outer loop. In the latter case we will
+ still if-convert the original inner loop. */
+ if (any_pred_load_store
+ || any_complicated_phi
+ || flag_tree_loop_if_convert != 1)
+ {
+ struct loop *vloop
+ = (versionable_outer_loop_p (loop_outer (loop))
+ ? loop_outer (loop) : loop);
+ if (!version_loop_for_if_conversion (vloop))
+ goto cleanup;
+ }
/* Now all statements are if-convertible. Combine all the basic
blocks into one huge basic block doing the if-conversion