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

Reply via email to