]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/56443 (internal compiler error: verify_gimple failed at -O[1-2]...
authorJakub Jelinek <jakub@redhat.com>
Tue, 26 Feb 2013 10:29:47 +0000 (11:29 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 26 Feb 2013 10:29:47 +0000 (11:29 +0100)
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: r196279

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr56443.c [new file with mode: 0644]
gcc/tree-vect-stmts.c

index 724f4aed3dafaea6c3482c497c4f08e126e4bf5f..c4af302053e1d88cfbdfbab7090cfc788fe59d8e 100644 (file)
@@ -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-21  Jakub Jelinek  <jakub@redhat.com>
 
        PR bootstrap/56258
index a9f84c41def7268b507eff02136bba671c49259e..e25253a308e23dd294ce1c28d72f38b184528f6e 100644 (file)
@@ -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-22  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/56385
diff --git a/gcc/testsuite/gcc.dg/torture/pr56443.c b/gcc/testsuite/gcc.dg/torture/pr56443.c
new file mode 100644 (file)
index 0000000..ed60e05
--- /dev/null
@@ -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;
+}
index e3dcbb48df8b7871c7e01268a153eed6d610df93..7deaffcb5da349f88035f203767cead20546b0b0 100644 (file)
@@ -5797,7 +5797,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.  */