]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-vect-slp.c (vect_get_constant_vectors): Fix comment.
authorIra Rosen <irar@il.ibm.com>
Wed, 13 Oct 2010 07:43:10 +0000 (07:43 +0000)
committerIra Rosen <irar@gcc.gnu.org>
Wed, 13 Oct 2010 07:43:10 +0000 (07:43 +0000)
* tree-vect-slp.c (vect_get_constant_vectors): Fix comment.
Use operand's type for POINTER_PLUS_EXPR.

From-SVN: r165412

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

index fe28f76cc14f050db9391d56165be8135cbd2a08..e847c4113afef0c054ca180f8e8a3c5488ef65d9 100644 (file)
@@ -1,3 +1,8 @@
+2010-10-13  Ira Rosen  <irar@il.ibm.com>
+
+       * tree-vect-slp.c (vect_get_constant_vectors): Fix comment.
+       Use operand's type for POINTER_PLUS_EXPR.
+
 2010-10-13  Alexandre Oliva  <aoliva@redhat.com>
 
        * c-parser.c (c_parser_for_statement): Initialize incr.
index 784db84a67ede422e9b69232165a99cc3a91879d..935c578b5e6aad42ee266b26b24198ead5e1e7c5 100644 (file)
@@ -1811,8 +1811,8 @@ vect_update_slp_costs_according_to_vf (loop_vec_info loop_vinfo)
 
 /* For constant and loop invariant defs of SLP_NODE this function returns
    (vector) defs (VEC_OPRNDS) that will be used in the vectorized stmts.
-   OP_NUM determines if we gather defs for operand 0 or operand 1 of the scalar
-   stmts. NUMBER_OF_VECTORS is the number of vector defs to create.  
+   OP_NUM determines if we gather defs for operand 0 or operand 1 of the RHS of
+   scalar stmts.  NUMBER_OF_VECTORS is the number of vector defs to create.
    REDUC_INDEX is the index of the reduction operand in the statements, unless
    it is -1.  */
 
@@ -1836,10 +1836,10 @@ vect_get_constant_vectors (slp_tree slp_node, VEC(tree,heap) **vec_oprnds,
   VEC (tree, heap) *voprnds = VEC_alloc (tree, heap, number_of_vectors);
   bool constant_p, is_store;
   tree neutral_op = NULL;
+  enum tree_code code = gimple_assign_rhs_code (stmt);
 
   if (STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_reduction_def)
     {
-      enum tree_code code = gimple_assign_rhs_code (stmt);
       if (reduc_index == -1)
         {
           VEC_free (tree, heap, *vec_oprnds);
@@ -1895,18 +1895,18 @@ vect_get_constant_vectors (slp_tree slp_node, VEC(tree,heap) **vec_oprnds,
     }
 
   if (CONSTANT_CLASS_P (op))
-    {
-      constant_p = true;
-      if (POINTER_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt))))
-        vector_type = get_vectype_for_scalar_type (TREE_TYPE (op));
-      else
-        vector_type = STMT_VINFO_VECTYPE (stmt_vinfo);
-    }
+    constant_p = true;
   else
-    {
-      constant_p = false;
-      vector_type = get_vectype_for_scalar_type (TREE_TYPE (op));
-    }
+    constant_p = false;
+
+  /* For POINTER_PLUS_EXPR we use the type of the constant/invariant itself.
+     If OP is the first operand of POINTER_PLUS_EXPR, its type is the type of
+     the statement, so it's OK to use OP's type for both first and second
+     operands.  */
+  if (code == POINTER_PLUS_EXPR)
+    vector_type = get_vectype_for_scalar_type (TREE_TYPE (op));
+  else
+    vector_type = STMT_VINFO_VECTYPE (stmt_vinfo);
 
   gcc_assert (vector_type);
   nunits = TYPE_VECTOR_SUBPARTS (vector_type);