tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Don't do versioning for...
authorJoern Rennecke <joern.rennecke@riscy-ip.com>
Thu, 20 Dec 2018 23:00:00 +0000 (23:00 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Thu, 20 Dec 2018 23:00:00 +0000 (23:00 +0000)
2018-12-20  Joern Rennecke  <joern.rennecke@riscy-ip.com>

        * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Don't do
        versioning for data accesses with misaligned step.

From-SVN: r267314

gcc/ChangeLog
gcc/tree-vect-data-refs.c

index acadee92ef3aee37e1077234b0c8bcf65824ac48..2c12ca2ae262a8189af125bd837812306b4b5d14 100644 (file)
@@ -1,3 +1,8 @@
+2018-12-20  Joern Rennecke  <joern.rennecke@riscy-ip.com>
+
+       * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Don't do
+       versioning for data accesses with misaligned step.
+
 2018-12-20  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR c/51628
index deb7121623ee4408cba706b61743a06bcee57626..6cd2c30ef4b06e202fcc1fc0d58407c7faa4cea6 100644 (file)
@@ -2160,6 +2160,20 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
                  break;
                }
 
+             /* Forcing alignment in the first iteration is no good if
+                we don't keep it across iterations.  For now, just disable
+                versioning in this case.
+                ?? We could actually unroll the loop to archive the required
+                overall step alignemnt, and forcing the alignment could be
+                done by doing some iterations of the non-vectorized loop.  */
+             if (!multiple_p (LOOP_VINFO_VECT_FACTOR (loop_vinfo)
+                              * DR_STEP_ALIGNMENT (dr),
+                              DR_TARGET_ALIGNMENT (dr)))
+               {
+                 do_versioning = false;
+                 break;
+               }
+
               /* The rightmost bits of an aligned address must be zeros.
                  Construct the mask needed for this test.  For example,
                  GET_MODE_SIZE for the vector mode V4SI is 16 bytes so the