aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-02-26 10:59:12 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2013-02-26 10:59:12 +0100
commitaca43c6c06d60c7a9b7f53185ead6ce34df0308e (patch)
tree32a84c63a5a68adef879c2b408c89347cf365232 /gcc
parentbed152e3743060ee0b91e890ad470ebd6c35c285 (diff)
downloadgcc-aca43c6c06d60c7a9b7f53185ead6ce34df0308e.zip
gcc-aca43c6c06d60c7a9b7f53185ead6ce34df0308e.tar.gz
gcc-aca43c6c06d60c7a9b7f53185ead6ce34df0308e.tar.bz2
re PR middle-end/56443 (internal compiler error: verify_gimple failed at -O[1-2] -ftree-vectorize)
PR tree-optimization/56443 * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): For overaligned types, pass TYPE_UNSIGNED (scalar_type) as second argument to type_for_mode langhook. * gcc.dg/torture/pr56443.c: New test. From-SVN: r196277
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr56443.c29
-rw-r--r--gcc/tree-vect-stmts.c3
4 files changed, 43 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 69112ed..0fc1478 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-02-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/56443
+ * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): For
+ overaligned types, pass TYPE_UNSIGNED (scalar_type) as second argument
+ to type_for_mode langhook.
+
2013-02-25 Matt Turner <mattst88@gmail.com>
* doc/invoke.texi: Document r4700.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bd2b6d6..8356fa4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-02-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/56443
+ * gcc.dg/torture/pr56443.c: New test.
+
2013-02-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/56175
diff --git a/gcc/testsuite/gcc.dg/torture/pr56443.c b/gcc/testsuite/gcc.dg/torture/pr56443.c
new file mode 100644
index 0000000..ed60e05
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr56443.c
@@ -0,0 +1,29 @@
+/* PR tree-optimization/56443 */
+/* { dg-do run } */
+/* { dg-options "-ftree-vectorize" } */
+
+extern void abort (void);
+typedef int myint __attribute__ ((__aligned__ (16)));
+
+int a1[1024] __attribute__ ((__aligned__ (16)));
+int a2[1024] __attribute__ ((__aligned__ (16)));
+
+__attribute__((noinline, noclone)) void
+test (int n, myint * __restrict__ p1, myint * __restrict__ p2)
+{
+ while (n--)
+ *p1++ = *p2++ + 1;
+}
+
+int
+main ()
+{
+ int n;
+ for (n = 0; n < 1024; n++)
+ a2[n] = n;
+ test (1024, a1, a2);
+ for (n = 0; n < 1024; n++)
+ if (a1[n] != a2[n] + 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 1712d95..37f2423 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -6071,7 +6071,8 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size)
/* We can't build a vector type of elements with alignment bigger than
their size. */
else if (nbytes < TYPE_ALIGN_UNIT (scalar_type))
- scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
+ scalar_type = lang_hooks.types.type_for_mode (inner_mode,
+ TYPE_UNSIGNED (scalar_type));
/* If we felt back to using the mode fail if there was
no scalar type for it. */