aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-02-26 13:34:38 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-02-26 13:34:38 +0000
commit2f81659160adbbdb8ae6fbe80bbddfcf4bfcac13 (patch)
tree34c433c5896a376908b666c2976d2a1df592a0e3
parent7ce321b3e30e47927e1b25bcc132a5c329fd7de3 (diff)
downloadgcc-2f81659160adbbdb8ae6fbe80bbddfcf4bfcac13.zip
gcc-2f81659160adbbdb8ae6fbe80bbddfcf4bfcac13.tar.gz
gcc-2f81659160adbbdb8ae6fbe80bbddfcf4bfcac13.tar.bz2
re PR tree-optimization/43188 ("error: alignment of array elements is greater than element size")
2010-02-26 Richard Guenther <rguenther@suse.de> PR tree-optimization/43188 * tree-vect-stmts.c (get_vectype_for_scalar_type): Do not build vector types of over-aligned element type. * gcc.c-torture/compile/pr43188.c: New testcase. From-SVN: r157088
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr43188.c6
-rw-r--r--gcc/tree-vect-stmts.c7
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5c889ad..047ba5e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-02-26 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/43188
+ * tree-vect-stmts.c (get_vectype_for_scalar_type): Do not build
+ vector types of over-aligned element type.
+
2010-02-26 Uros Bizjak <ubizjak@gmail.com>
PR target/43175
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8c78047..09fc468 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-02-26 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/43188
+ * gcc.c-torture/compile/pr43188.c: New testcase.
+
2010-02-26 H.J. Lu <hongjiu.lu@intel.com>
PR target/43175
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr43188.c b/gcc/testsuite/gcc.c-torture/compile/pr43188.c
new file mode 100644
index 0000000..bbc6f42
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr43188.c
@@ -0,0 +1,6 @@
+int *__attribute__((__aligned__(16))) *p;
+
+int main (void)
+{
+ return **p;
+}
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 9923090..ce604b3 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -4405,13 +4405,18 @@ tree
get_vectype_for_scalar_type (tree scalar_type)
{
enum machine_mode inner_mode = TYPE_MODE (scalar_type);
- int nbytes = GET_MODE_SIZE (inner_mode);
+ unsigned int nbytes = GET_MODE_SIZE (inner_mode);
int nunits;
tree vectype;
if (nbytes == 0 || nbytes >= UNITS_PER_SIMD_WORD (inner_mode))
return NULL_TREE;
+ /* We can't build a vector type of elements with alignment bigger than
+ their size. */
+ if (nbytes < TYPE_ALIGN_UNIT (scalar_type))
+ return NULL_TREE;
+
/* FORNOW: Only a single vector size per mode (UNITS_PER_SIMD_WORD)
is expected. */
nunits = UNITS_PER_SIMD_WORD (inner_mode) / nbytes;