Hi. Following patch fixes the PR, regtested on x86_64-linux-gnu.
Ready for trunk? Thanks, Martin gcc/ChangeLog: 2016-03-02 Martin Liska <mli...@suse.cz> * tree-vect-loop.c (optimize_mask_stores): Move iterator to previous statement if we see a debug statement. gcc/testsuite/ChangeLog: 2016-03-02 Ilya Enkovich <enkovich....@gmail.com> * gfortran.dg/vect/pr70043.f90: New test. --- gcc/testsuite/gfortran.dg/vect/pr70043.f90 | 14 ++++++++++++++ gcc/tree-vect-loop.c | 5 ++++- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/vect/pr70043.f90 diff --git a/gcc/testsuite/gfortran.dg/vect/pr70043.f90 b/gcc/testsuite/gfortran.dg/vect/pr70043.f90 new file mode 100644 index 0000000..efeeee4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/vect/pr70043.f90 @@ -0,0 +1,14 @@ +! { dg-additional-options "-Ofast -g -march=haswell" } +! { dg-do compile } + +subroutine fn1(a, b) + real(8), intent(in) :: b(100) + real(8), intent(inout) :: a(100) + real(8) c + do i=0,100 + if( a(i) < 0.0 ) then + c = a(i) * b(i) + a(i) = a(i) - c / b(i) + endif + enddo +end subroutine fn1 diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 8c34669..7ab36a8 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -7077,7 +7077,10 @@ optimize_mask_stores (struct loop *loop) /* Skip debug statements. */ if (is_gimple_debug (gsi_stmt (gsi))) - continue; + { + gsi_prev (&gsi); + continue; + } stmt1 = gsi_stmt (gsi); /* Do not consider statements writing to memory or having volatile operand. */ -- 2.7.1