From 54e63f002885fb595f17f39998e93bb9fc23a49d Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Thu, 17 Nov 2016 14:22:17 +0000 Subject: [PATCH] re PR tree-optimization/77848 (Gimple if-conversion results in redundant comparisons) [gcc] 2016-11-17 Bill Schmidt Richard Biener 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 Richard Biener PR tree-optimization/77848 * gfortran.dg/vect/pr77848.f: New test. Co-Authored-By: Richard Biener From-SVN: r242550 --- gcc/ChangeLog | 8 ++++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gfortran.dg/vect/pr77848.f | 24 ++++++++++++++++++++++++ gcc/tree-if-conv.c | 10 ++++++---- 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/vect/pr77848.f diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8797a218b36..b9b3b8a8e73 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-11-17 Bill Schmidt + Richard Biener + + 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 PR target/77308 @@ -116,6 +123,7 @@ * rtl.h: Declare gt_ggc_mx and gt_pch_nx. 2016-11-16 Bill Schmidt + Richard Biener PR tree-optimization/77848 * tree-if-conv.c (version_loop_for_if_conversion): When versioning diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e16f2d0966c..bd766209150 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-11-17 Bill Schmidt + Richard Biener + + PR tree-optimization/77848 + * gfortran.dg/vect/pr77848.f: New test. + 2016-11-17 Bernd Edlinger PR target/77308 diff --git a/gcc/testsuite/gfortran.dg/vect/pr77848.f b/gcc/testsuite/gfortran.dg/vect/pr77848.f new file mode 100644 index 00000000000..d54676eee2d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/vect/pr77848.f @@ -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" } } diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index dc97fc498df..1235faf81b6 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -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)) -- 2.30.2