2014-10-29 Richard Biener <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Oct 2014 09:22:55 +0000 (09:22 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Oct 2014 09:22:55 +0000 (09:22 +0000)
PR tree-optimization/63666
* tree-vect-slp.c (vect_get_mask_element): Properly handle
accessing out-of-bound elements.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216825 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 514cdd5..89665cf 100644 (file)
@@ -1,3 +1,9 @@
+2014-10-29  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/63666
+       * tree-vect-slp.c (vect_get_mask_element): Properly handle
+       accessing out-of-bound elements.
+
 2014-10-29  Alexander Ivchenko  <alexander.ivchenko@intel.com>
            Maxim Kuznetsov  <maxim.kuznetsov@intel.com>
            Anna Tikhonova  <anna.tikhonova@intel.com>
index 90f5ef4..84bec95 100644 (file)
@@ -2890,7 +2890,7 @@ vect_get_mask_element (gimple stmt, int first_mask_element, int m,
     }
 
   /* The mask requires the next vector.  */
-  if (*current_mask_element >= mask_nunits * 2)
+  while (*current_mask_element >= mask_nunits * 2)
     {
       if (*needs_first_vector || *mask_fixed)
         {
@@ -3041,6 +3041,7 @@ vect_transform_slp_perm_load (slp_tree node, vec<tree> dr_chain,
                                          &number_of_mask_fixes, &mask_fixed,
                                          &needs_first_vector))
                return false;
+             gcc_assert (current_mask_element < 2 * nunits);
              mask[index++] = current_mask_element;
 
               if (index == nunits)