diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-02-26 10:59:12 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-02-26 10:59:12 +0100 |
commit | aca43c6c06d60c7a9b7f53185ead6ce34df0308e (patch) | |
tree | 32a84c63a5a68adef879c2b408c89347cf365232 /gcc | |
parent | bed152e3743060ee0b91e890ad470ebd6c35c285 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr56443.c | 29 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 3 |
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. */ |