re PR tree-optimization/77848 (Gimple if-conversion results in redundant comparisons)

[gcc]

2016-11-17  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
            Richard Biener  <rguenther@suse.de>

	PR tree-optimization/77848
	* tree-if-conv.c (tree_if_conversion): Always version loops unless
	the user specified -ftree-loop-if-convert.

[gcc/testsuite]

2016-11-17  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
            Richard Biener  <rguenther@suse.de>

	PR tree-optimization/77848
	* gfortran.dg/vect/pr77848.f: New test.


Co-Authored-By: Richard Biener <rguenther@suse.de>

From-SVN: r242550
This commit is contained in:
Bill Schmidt 2016-11-17 14:22:17 +00:00 committed by William Schmidt
parent 2fe3721128
commit 54e63f0028
4 changed files with 44 additions and 4 deletions

View file

@ -1,3 +1,10 @@
2016-11-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Richard Biener <rguenther@suse.de>
PR tree-optimization/77848
* tree-if-conv.c (tree_if_conversion): Always version loops unless
the user specified -ftree-loop-if-convert.
2016-11-17 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR target/77308
@ -116,6 +123,7 @@
* rtl.h: Declare gt_ggc_mx and gt_pch_nx.
2016-11-16 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Richard Biener <rguenther@suse.de>
PR tree-optimization/77848
* tree-if-conv.c (version_loop_for_if_conversion): When versioning

View file

@ -1,3 +1,9 @@
2016-11-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Richard Biener <rguenther@suse.de>
PR tree-optimization/77848
* gfortran.dg/vect/pr77848.f: New test.
2016-11-17 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR target/77308

View file

@ -0,0 +1,24 @@
! PR 77848: Verify versioning is on when vectorization fails
! { dg-do compile }
! { dg-options "-O3 -ffast-math -fdump-tree-ifcvt -fdump-tree-vect-details" }
subroutine sub(x,a,n,m)
implicit none
real*8 x(*),a(*),atemp
integer i,j,k,m,n
real*8 s,t,u,v
do j=1,m
atemp=0.d0
do i=1,n
if (abs(a(i)).gt.atemp) then
atemp=a(i)
k = i
end if
enddo
call dummy(atemp,k)
enddo
return
end
! { dg-final { scan-tree-dump "LOOP_VECTORIZED" "ifcvt" } }
! { dg-final { scan-tree-dump "vectorized 0 loops in function" "vect" } }

View file

@ -2803,10 +2803,12 @@ tree_if_conversion (struct loop *loop)
|| loop->dont_vectorize))
goto cleanup;
/* 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)
/* 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))