/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
-/* { dg-options "-mavx2 -O3 -fopenmp-simd -fdump-tree-vect-details -fdisable-tree-thread1" } */
+/* { dg-options "-mavx2 -O3 -fopenmp-simd -fdump-tree-vect-details -fdisable-tree-thread1 -fno-split-loops" } */
#include "avx2-check.h"
#define N 64
|| !empty_block_p (loop1->latch)
|| !easy_exit_values (loop1)
|| !number_of_iterations_exit (loop1, exit1, &niter, false, true)
- || niter.cmp == ERROR_MARK
- /* We can't yet handle loops controlled by a != predicate. */
- || niter.cmp == NE_EXPR)
+ || niter.cmp == ERROR_MARK)
return false;
+ if (niter.cmp == NE_EXPR)
+ {
+ if (!niter.control.no_overflow)
+ return false;
+ if (tree_int_cst_sign_bit (niter.control.step) > 0)
+ niter.cmp = GT_EXPR;
+ else
+ niter.cmp = LT_EXPR;
+ }
bbs = get_loop_body (loop1);