aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-03-14 14:55:11 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-03-14 14:55:11 +0000
commit995ec13233c0c62086a11c49b9e4e9f420781036 (patch)
treea764a3f47d0f537ceba2eb92b3b53366dcabc11a
parent0ec2c2a9437e1d9de4d6866bb7976b7bbc8e68fe (diff)
downloadgcc-995ec13233c0c62086a11c49b9e4e9f420781036.zip
gcc-995ec13233c0c62086a11c49b9e4e9f420781036.tar.gz
gcc-995ec13233c0c62086a11c49b9e4e9f420781036.tar.bz2
re PR middle-end/52584 (Fails to constant fold vector upper/lower half BIT_FIELD_REFs)
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. From-SVN: r185385
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/tree-vect-generic.c19
2 files changed, 14 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eca4d0b..68bb5b1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c
index 9dec8c6..83f1770 100644
--- a/gcc/tree-vect-generic.c
+++ b/gcc/tree-vect-generic.c
@@ -471,13 +471,13 @@ expand_vector_operation (gimple_stmt_iterator *gsi, tree type, tree compute_type
gimple_assign_rhs2 (assign), code);
}
-/* 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))