aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteve Ellcey <sje@cup.hp.com>2005-06-29 15:34:57 +0000
committerSteve Ellcey <sje@gcc.gnu.org>2005-06-29 15:34:57 +0000
commita4e8ea7f419d3ebdbc52a86502bf924273984a0f (patch)
tree108ab57403c614d7414706d5ee2c44f155666064 /gcc
parent63296cb1fedf5f58b90783fab73c90760b5e315b (diff)
downloadgcc-a4e8ea7f419d3ebdbc52a86502bf924273984a0f.zip
gcc-a4e8ea7f419d3ebdbc52a86502bf924273984a0f.tar.gz
gcc-a4e8ea7f419d3ebdbc52a86502bf924273984a0f.tar.bz2
re PR middle-end/21969 (ICE on float __attribute__((vector_size(2048))))
PR middle-end/21969 * tree.h (TYPE_VECTOR_SUBPARTS): Change to shift expression. (SET_TYPE_VECTOR_SUBPARTS): New. * tree.c (make_vector_type): Replace TYPE_VECTOR_SUBPARTS with SET_TYPE_VECTOR_SUBPARTS. * tree-vect-transform.c (vect_transform_loop): Add cast. From-SVN: r101423
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/tree-vect-transform.c2
-rw-r--r--gcc/tree.c2
-rw-r--r--gcc/tree.h7
4 files changed, 17 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 151a7c8..0e44859 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2005-06-29 Steve Ellcey <sje@cup.hp.com>
+
+ PR middle-end/21969
+ * tree.h (TYPE_VECTOR_SUBPARTS): Change to shift expression.
+ (SET_TYPE_VECTOR_SUBPARTS): New.
+ * tree.c (make_vector_type): Replace TYPE_VECTOR_SUBPARTS with
+ SET_TYPE_VECTOR_SUBPARTS.
+ * tree-vect-transform.c (vect_transform_loop): Add cast.
+
2005-06-29 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.c (s390_decompose_address): Accept invalid
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c
index 852ff19..7d15309 100644
--- a/gcc/tree-vect-transform.c
+++ b/gcc/tree-vect-transform.c
@@ -2771,7 +2771,7 @@ vect_transform_loop (loop_vec_info loop_vinfo,
units and no inner unrolling is necessary. */
gcc_assert
(TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
- == vectorization_factor);
+ == (unsigned HOST_WIDE_INT) vectorization_factor);
/* -------- vectorize statement ------------ */
if (vect_print_dump_info (REPORT_DETAILS, UNKNOWN_LOC))
diff --git a/gcc/tree.c b/gcc/tree.c
index e7565e2..0088a9b 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5710,7 +5710,7 @@ make_vector_type (tree innertype, int nunits, enum machine_mode mode)
tree t = make_node (VECTOR_TYPE);
TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype);
- TYPE_VECTOR_SUBPARTS (t) = nunits;
+ SET_TYPE_VECTOR_SUBPARTS (t, nunits);
TYPE_MODE (t) = mode;
TYPE_READONLY (t) = TYPE_READONLY (innertype);
TYPE_VOLATILE (t) = TYPE_VOLATILE (innertype);
diff --git a/gcc/tree.h b/gcc/tree.h
index a2e9a86..191ba13 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1667,7 +1667,12 @@ struct tree_block GTY(())
/* For a VECTOR_TYPE, this is the number of sub-parts of the vector. */
#define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \
- (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.precision)
+ (((unsigned HOST_WIDE_INT) 1) \
+ << VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.precision)
+
+/* Set precision to n when we have 2^n sub-parts of the vector. */
+#define SET_TYPE_VECTOR_SUBPARTS(VECTOR_TYPE, X) \
+ (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.precision = exact_log2 (X))
/* Indicates that objects of this type must be initialized by calling a
function when they are created. */