Commit 554f1948 by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/48377 (miscompilation at -O3)

	PR tree-optimization/48377
	* tree-vect-data-refs.c (vector_alignment_reachable_p): Set
	is_packed to true even for types with smaller TYPE_ALIGN than
	TYPE_SIZE.

	* gcc.dg/vect/pr48377.c: New test.

From-SVN: r172172
parent ddf72388
2011-04-08 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/48377
* tree-vect-data-refs.c (vector_alignment_reachable_p): Set
is_packed to true even for types with smaller TYPE_ALIGN than
TYPE_SIZE.
2011-04-08 Richard Guenther <rguenther@suse.de> 2011-04-08 Richard Guenther <rguenther@suse.de>
PR bootstrap/48513 PR bootstrap/48513
......
2011-04-08 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/48377
* gcc.dg/vect/pr48377.c: New test.
2011-04-07 Jason Merrill <jason@redhat.com> 2011-04-07 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/regress/call1.C: New. * g++.dg/cpp0x/regress/call1.C: New.
......
/* PR tree-optimization/48377 */
/* { dg-do run } */
typedef unsigned int U __attribute__((__aligned__ (1), __may_alias__));
__attribute__((noinline, noclone)) unsigned int
foo (const char *s, int len)
{
const U *p = (const U *) s;
unsigned int f = len / sizeof (unsigned int), hash = len, i;
for (i = 0; i < f; ++i)
hash += *p++;
return hash;
}
char buf[64] __attribute__((aligned (32)));
int
main (void)
{
return foo (buf + 1, 26) != 26;
}
/* { dg-final { cleanup-tree-dump "vect" } } */
/* Data References Analysis and Manipulation Utilities for Vectorization. /* Data References Analysis and Manipulation Utilities for Vectorization.
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Dorit Naishlos <dorit@il.ibm.com> Contributed by Dorit Naishlos <dorit@il.ibm.com>
and Ira Rosen <irar@il.ibm.com> and Ira Rosen <irar@il.ibm.com>
...@@ -1110,6 +1110,9 @@ vector_alignment_reachable_p (struct data_reference *dr) ...@@ -1110,6 +1110,9 @@ vector_alignment_reachable_p (struct data_reference *dr)
if (ba) if (ba)
is_packed = contains_packed_reference (ba); is_packed = contains_packed_reference (ba);
if (compare_tree_int (TYPE_SIZE (type), TYPE_ALIGN (type)) > 0)
is_packed = true;
if (vect_print_dump_info (REPORT_DETAILS)) if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "Unknown misalignment, is_packed = %d",is_packed); fprintf (vect_dump, "Unknown misalignment, is_packed = %d",is_packed);
if (targetm.vectorize.vector_alignment_reachable (type, is_packed)) if (targetm.vectorize.vector_alignment_reachable (type, is_packed))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment