public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/vendors/redhat/heads/gcc-8-branch)] Add missing alignment checks in epilogue loop vectorisation (PR 86877)
@ 2021-05-14 14:56 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2021-05-14 14:56 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:eeadf4a78d6f67de31980d00bfcd66418309166e

commit eeadf4a78d6f67de31980d00bfcd66418309166e
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Thu Sep 20 12:58:16 2018 +0000

    Add missing alignment checks in epilogue loop vectorisation (PR 86877)
    
    Epilogue loop vectorisation skips vect_enhance_data_refs_alignment
    since it doesn't make sense to version or peel the epilogue loop
    (that will already have happened for the main loop).  But this means
    that it also fails to check whether the accesses are suitably aligned
    for the new vector subarch.
    
    We don't seem to carry alignment information from the (potentially
    peeled or versioned) main loop to the epilogue loop, which would be
    good to fix at some point.  I think we want this patch regardless,
    since there's no guarantee that the alignment requirements are the
    same for every subarch.
    
    2018-09-20  Richard Sandiford  <richard.sandiford@arm.com>
    
    gcc/
            PR tree-optimization/86877
            * tree-vect-loop.c (vect_analyze_loop_2): Call
            vect_verify_datarefs_alignment.
    
    gcc/testsuite/
            PR tree-optimization/86877
            * gfortran.dg/vect/vect-8-epilogue.F90: New test.
    
    (cherry picked from commit 508a909eca536f7f6a60af9bd7ecea761bd2e8f1)

Diff:
---
 gcc/testsuite/gfortran.dg/vect/vect-8-epilogue.F90 |  6 ++++++
 gcc/tree-vect-loop.c                               | 21 +++++++++++----------
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/gcc/testsuite/gfortran.dg/vect/vect-8-epilogue.F90 b/gcc/testsuite/gfortran.dg/vect/vect-8-epilogue.F90
new file mode 100644
index 00000000000..2a09539a510
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/vect/vect-8-epilogue.F90
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! { dg-require-effective-target vect_double }
+! { dg-additional-options "-finline-matmul-limit=0 --param vect-epilogues-nomask=1" }
+! { dg-additional-options "-mstrict-align" { target { aarch64*-*-* } } }
+
+#include "vect-8.f90"
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index ce87614d253..b0c43afa692 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -2297,20 +2297,21 @@ start_over:
   if (!ok)
     return false;
 
-  /* Do not invoke vect_enhance_data_refs_alignment for eplilogue
-     vectorization.  */
+  /* Do not invoke vect_enhance_data_refs_alignment for epilogue
+     vectorization, since we do not want to add extra peeling or
+     add versioning for alignment.  */
   if (!LOOP_VINFO_EPILOGUE_P (loop_vinfo))
-    {
     /* This pass will decide on using loop versioning and/or loop peeling in
        order to enhance the alignment of data references in the loop.  */
     ok = vect_enhance_data_refs_alignment (loop_vinfo);
-    if (!ok)
-      {
-	if (dump_enabled_p ())
-	  dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
-			   "bad data alignment.\n");
-        return false;
-      }
+  else
+    ok = vect_verify_datarefs_alignment (loop_vinfo);
+  if (!ok)
+    {
+      if (dump_enabled_p ())
+	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+			 "bad data alignment.\n");
+      return false;
     }
 
   if (slp)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-05-14 14:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-14 14:56 [gcc(refs/vendors/redhat/heads/gcc-8-branch)] Add missing alignment checks in epilogue loop vectorisation (PR 86877) Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).