[vect] Disable vectorization of epilogues for loops with SIMDUID set
authorAndre Vieira <andre.simoesdiasvieira@arm.com>
Fri, 8 Nov 2019 11:30:50 +0000 (11:30 +0000)
committerAndre Vieira <avieira@gcc.gnu.org>
Fri, 8 Nov 2019 11:30:50 +0000 (11:30 +0000)
gcc/ChangeLog:
2019-11-08  Andre Vieira  <andre.simoesdiasvieira@arm.com>

* tree-vect-loop.c (vect_analyze_loop): Disable epilogue vectorization
for loops with SIMDUID set.  Enable epilogue vectorization for loops
with SIMDLEN set after finding a main loop with a VF that matches it.

From-SVN: r277964

gcc/ChangeLog
gcc/tree-vect-loop.c

index 277c21c..c6c7daa 100644 (file)
@@ -1,3 +1,9 @@
+2019-11-08  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+
+       * tree-vect-loop.c (vect_analyze_loop): Disable epilogue vectorization
+       for loops with SIMDUID set.  Enable epilogue vectorization for loops
+       with SIMDLEN set after finding a main loop with a VF that matches it.
+
 2019-11-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/92038
index a2847ef..f25260c 100644 (file)
@@ -2455,11 +2455,15 @@ vect_analyze_loop (class loop *loop, vec_info_shared *shared)
            delete loop_vinfo;
 
          /* Only vectorize epilogues if PARAM_VECT_EPILOGUES_NOMASK is
-            enabled, this is not a simd loop and it is the innermost loop.  */
-         vect_epilogues = (!loop->simdlen
+            enabled, SIMDUID is not set, it is the innermost loop and we have
+            either already found the loop's SIMDLEN or there was no SIMDLEN to
+            begin with.
+            TODO: Enable epilogue vectorization for loops with SIMDUID set.  */
+         vect_epilogues = (!simdlen
                            && loop->inner == NULL
                            && PARAM_VALUE (PARAM_VECT_EPILOGUES_NOMASK)
                            && LOOP_VINFO_PEELING_FOR_NITER (first_loop_vinfo)
+                           && !loop->simduid
                            /* For now only allow one epilogue loop.  */
                            && first_loop_vinfo->epilogue_vinfos.is_empty ());