]> gcc.gnu.org Git - gcc.git/commitdiff
re PR tree-optimization/33987 (internal compiler error: in get_initial_def_for_reduct...
authorDorit Nuzman <dorit@il.ibm.com>
Sun, 4 Nov 2007 03:48:58 +0000 (03:48 +0000)
committerDorit Nuzman <dorit@gcc.gnu.org>
Sun, 4 Nov 2007 03:48:58 +0000 (03:48 +0000)
        PR tree-optimization/33987
        * tree-vect-transform.c (get_initial_def_for_reduction): Fix assert.
        Fix indentation.
        (vectorizable_reduction): Add type check.

From-SVN: r129880

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

index 0ec67363b9974cf22a0d2c35aedc0eac3049d272..81c4241a6cd0b550b8ad5c7a3174049f1cb7f870 100644 (file)
@@ -1,3 +1,10 @@
+2007-11-03  Dorit Nuzman  <dorit@il.ibm.com>
+
+       PR tree-optimization/33987
+       * tree-vect-transform.c (get_initial_def_for_reduction): Fix assert.
+       Fix indentation.
+       (vectorizable_reduction): Add type check.
+
 2007-11-03  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
 
        PR c/29062
index 4b88bdf7f4389aece69ac311790e509e2d04d816..2cdc79b28e5a7251be9cb60b4dadc64a68026693 100644 (file)
@@ -2107,7 +2107,7 @@ get_initial_def_for_reduction (tree stmt, tree init_val, tree *adjustment_def)
   tree vector_type;
   bool nested_in_vect_loop = false; 
 
-  gcc_assert (INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type));
+  gcc_assert (POINTER_TYPE_P (type) || INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type));
   if (nested_in_vect_loop_p (loop, stmt))
     nested_in_vect_loop = true;
   else
@@ -2120,17 +2120,17 @@ get_initial_def_for_reduction (tree stmt, tree init_val, tree *adjustment_def)
   case WIDEN_SUM_EXPR:
   case DOT_PROD_EXPR:
   case PLUS_EXPR:
-      if (nested_in_vect_loop)
-       *adjustment_def = vecdef;
-      else
-       *adjustment_def = init_val;
-    /* Create a vector of zeros for init_def.  */
-    if (INTEGRAL_TYPE_P (type))
-      def_for_init = build_int_cst (type, 0);
+    if (nested_in_vect_loop)
+      *adjustment_def = vecdef;
     else
+      *adjustment_def = init_val;
+    /* Create a vector of zeros for init_def.  */
+    if (SCALAR_FLOAT_TYPE_P (type))
       def_for_init = build_real (type, dconst0);
-      for (i = nunits - 1; i >= 0; --i)
-    t = tree_cons (NULL_TREE, def_for_init, t);
+    else
+      def_for_init = build_int_cst (type, 0);
+    for (i = nunits - 1; i >= 0; --i)
+      t = tree_cons (NULL_TREE, def_for_init, t);
     vector_type = get_vectype_for_scalar_type (TREE_TYPE (def_for_init));
     gcc_assert (vector_type);
     init_def = build_vector (vector_type, t);
@@ -2716,6 +2716,9 @@ vectorizable_reduction (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
     return false;
   scalar_dest = GIMPLE_STMT_OPERAND (stmt, 0);
   scalar_type = TREE_TYPE (scalar_dest);
+  if (!POINTER_TYPE_P (scalar_type) && !INTEGRAL_TYPE_P (scalar_type) 
+      && !SCALAR_FLOAT_TYPE_P (scalar_type))
+    return false;
 
   /* All uses but the last are expected to be defined in the loop.
      The last use is the reduction variable.  */
This page took 0.106288 seconds and 5 git commands to generate.