2012-03-14 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 Mar 2012 14:55:11 +0000 (14:55 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 Mar 2012 14:55:11 +0000 (14:55 +0000)
PR middle-end/52584
* tree-vect-generic.c (type_for_widest_vector_mode): Take
element type instead of mode, use build_vector_type_for_mode
instead of the langhook, build a vector of proper signedness.
(expand_vector_operations_1): Adjust.

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

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

index eca4d0b..68bb5b1 100644 (file)
@@ -1,5 +1,13 @@
 2012-03-14  Richard Guenther  <rguenther@suse.de>
 
+       PR middle-end/52584
+       * tree-vect-generic.c (type_for_widest_vector_mode): Take
+       element type instead of mode, use build_vector_type_for_mode
+       instead of the langhook, build a vector of proper signedness.
+       (expand_vector_operations_1): Adjust.
+
+2012-03-14  Richard Guenther  <rguenther@suse.de>
+
        PR middle-end/52582
        * gimple-fold.c (canonicalize_constructor_val): Make sure
        we have a cgraph node for a FUNCTION_DECL that comes from
index 9dec8c6..83f1770 100644 (file)
@@ -471,13 +471,13 @@ expand_vector_operation (gimple_stmt_iterator *gsi, tree type, tree compute_type
                                    gimple_assign_rhs2 (assign), code);
 }
 \f
-/* Return a type for the widest vector mode whose components are of mode
-   INNER_MODE, or NULL_TREE if none is found.
-   SATP is true for saturating fixed-point types.  */
+/* Return a type for the widest vector mode whose components are of type
+   TYPE, or NULL_TREE if none is found.  */
 
 static tree
-type_for_widest_vector_mode (enum machine_mode inner_mode, optab op, int satp)
+type_for_widest_vector_mode (tree type, optab op)
 {
+  enum machine_mode inner_mode = TYPE_MODE (type);
   enum machine_mode best_mode = VOIDmode, mode;
   int best_nunits = 0;
 
@@ -503,13 +503,7 @@ type_for_widest_vector_mode (enum machine_mode inner_mode, optab op, int satp)
   if (best_mode == VOIDmode)
     return NULL_TREE;
   else
-    {
-      /* For fixed-point modes, we need to pass satp as the 2nd parameter.  */
-      if (ALL_FIXED_POINT_MODE_P (best_mode))
-       return lang_hooks.types.type_for_mode (best_mode, satp);
-
-      return lang_hooks.types.type_for_mode (best_mode, 1);
-    }
+    return build_vector_type_for_mode (type, best_mode);
 }
 
 
@@ -856,8 +850,7 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
   if (!VECTOR_MODE_P (TYPE_MODE (type)) && op)
     {
       tree vector_compute_type
-        = type_for_widest_vector_mode (TYPE_MODE (TREE_TYPE (type)), op,
-                                      TYPE_SATURATING (TREE_TYPE (type)));
+        = type_for_widest_vector_mode (TREE_TYPE (type), op);
       if (vector_compute_type != NULL_TREE
          && (TYPE_VECTOR_SUBPARTS (vector_compute_type)
              < TYPE_VECTOR_SUBPARTS (compute_type))