diff mbox

Skip properly debug stmt in optimize_mask_stores (PR tree-optimization/70043)

Message ID 56D7120D.30700@suse.cz
State New
Headers show

Commit Message

Martin Liška March 2, 2016, 4:17 p.m. UTC
Hi.

Following patch fixes the PR, regtested on x86_64-linux-gnu.

Ready for trunk?
Thanks,
Martin

gcc/ChangeLog:

2016-03-02  Martin Liska  <mliska@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.gnu@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

Comments

Jakub Jelinek March 2, 2016, 4:25 p.m. UTC | #1
On Wed, Mar 02, 2016 at 05:17:17PM +0100, Martin Liška wrote:
> 2016-03-02  Martin Liska  <mliska@suse.cz>
> 

Missing
	PR tree-optimization/70043
(both in gcc/ and gcc/testsuite/ ChangeLog entry).

> --- /dev/null
> +++ b/gcc/testsuite/gfortran.dg/vect/pr70043.f90
> @@ -0,0 +1,14 @@
> +! { dg-additional-options "-Ofast -g -march=haswell" }
> +! { dg-do compile  }

Please change this to:
! PR tree-optimization/70043
! { dg-do compile }
! { dg-additional-options "-Ofast -g" }
! { dg-additional-options "-march=haswell" { target i?86-*-* x86_64-*-* } }

> +
> +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.  */

Ok with those changes.

	Jakub
diff mbox

Patch

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.  */