diff options
author | Richard Guenther <rguenther@suse.de> | 2012-03-14 14:55:11 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-03-14 14:55:11 +0000 |
commit | 995ec13233c0c62086a11c49b9e4e9f420781036 (patch) | |
tree | a764a3f47d0f537ceba2eb92b3b53366dcabc11a | |
parent | 0ec2c2a9437e1d9de4d6866bb7976b7bbc8e68fe (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-vect-generic.c | 19 |
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)) |