re PR tree-optimization/40550 (Segmentation fault caused by alignment error in sse code)

PR tree-optimization/40550
	* tree-vect-generic.c (expand_vector_operations_1): Compute in
	vector_compute_type only when the size of vector_compute_type is
	less than the size of type.

testsuite/ChangeLog:

	PR tree-optimization/40550
	* gcc.dg/pr40550.c: New test.

From-SVN: r149027
This commit is contained in:
Uros Bizjak 2009-06-28 17:18:46 +02:00
parent e8229e8dad
commit bc4fc3e5e6
4 changed files with 77 additions and 29 deletions

View File

@ -1,3 +1,10 @@
2009-06-28 Uros Bizjak <ubizjak@gmail.com>
PR tree-optimization/40550
* tree-vect-generic.c (expand_vector_operations_1): Compute in
vector_compute_type only when the size of vector_compute_type is
less than the size of type.
2009-06-27 Kai Tietz <kai.tietz@onevision.com>
Merged from trunk rev/148061

View File

@ -1,3 +1,8 @@
2009-06-28 Uros Bizjak <ubizjak@gmail.com>
PR tree-optimization/40550
* gcc.dg/pr40550.c: New test.
2009-06-24 Jason Merrill <jason@redhat.com>
PR c++/40342
@ -215,33 +220,33 @@
* g++.dg/torture/pr34222.C (ptrdiff_t): Likewise.
* g++.dg/tree-ssa/pr22444.C (ptrdiff_t): Likewise.
(size_t): Use __extension__ and __SIZE_TYPE__.
* gcc.c-torture/compile/20000211-1.c (size_t): Typedef size_t via
* gcc.c-torture/compile/20000211-1.c (size_t): Typedef size_t via
__SIZE_TYPE__.
* gcc.c-torture/compile/20010328-1.c (size_t): Likewise,
* gcc.c-torture/compile/20030320-1.c (size_t): Likewise,
* gcc.c-torture/compile/20030405-1.c (size_t): Likewise,
* gcc.c-torture/compile/20030902-1.c (size_t): Likewise,
* gcc.c-torture/compile/20060202-1.c (size_t): Likewise,
* gcc.c-torture/compile/20080613-1.c (size_t): Likewise,
* gcc.c-torture/compile/920428-2.c (size_t): Likewise,
* gcc.c-torture/compile/980329-1.c (size_t): Likewise,
* gcc.c-torture/compile/980816-1.c (size_t): Likewise,
* gcc.c-torture/compile/pr32584.c (size_t): Likewise,
* (__ssize_t): Likewise.
* gcc.c-torture/compile/pr33173.c (size_t): Likewise,
* gcc.c-torture/compile/pr33382.c (size_t): Likewise,
* gcc.c-torture/compile/pr34334.c (size_t): Likewise,
* gcc.c-torture/compile/pr34688.c (size_t): Likewise,
* gcc.c-torture/compile/pr35043.c (size_t): Likewise,
* gcc.c-torture/compile/pr37669.c (size_t): Likewise,
* gcc.dg/20050629-1.c (size_t): Typedef size_t via __SIZE_TYPE__.
* gcc.dg/pr33667.c (size_t): Likewise.
* gcc.dg/prefetch-loop-arrays-1.c (size_t): Likewise.
* gcc.dg/torture/pr39204.c (size_t): Likewise.
* gcc.dg/tree-ssa/20041122-1.c (size_t): Likewise.
* gcc.dg/tree-ssa/pr36908.c (size_t): Likewise.
* gcc.dg/tree-ssa/pr38250.c (size_t): Likewise.
* gcc.dg/tree-ssa/ssa-dse-10.c (size_t): Likewise.
* gcc.c-torture/compile/20010328-1.c (size_t): Likewise,
* gcc.c-torture/compile/20030320-1.c (size_t): Likewise,
* gcc.c-torture/compile/20030405-1.c (size_t): Likewise,
* gcc.c-torture/compile/20030902-1.c (size_t): Likewise,
* gcc.c-torture/compile/20060202-1.c (size_t): Likewise,
* gcc.c-torture/compile/20080613-1.c (size_t): Likewise,
* gcc.c-torture/compile/920428-2.c (size_t): Likewise,
* gcc.c-torture/compile/980329-1.c (size_t): Likewise,
* gcc.c-torture/compile/980816-1.c (size_t): Likewise,
* gcc.c-torture/compile/pr32584.c (size_t): Likewise,
* (__ssize_t): Likewise.
* gcc.c-torture/compile/pr33173.c (size_t): Likewise,
* gcc.c-torture/compile/pr33382.c (size_t): Likewise,
* gcc.c-torture/compile/pr34334.c (size_t): Likewise,
* gcc.c-torture/compile/pr34688.c (size_t): Likewise,
* gcc.c-torture/compile/pr35043.c (size_t): Likewise,
* gcc.c-torture/compile/pr37669.c (size_t): Likewise,
* gcc.dg/20050629-1.c (size_t): Typedef size_t via __SIZE_TYPE__.
* gcc.dg/pr33667.c (size_t): Likewise.
* gcc.dg/prefetch-loop-arrays-1.c (size_t): Likewise.
* gcc.dg/torture/pr39204.c (size_t): Likewise.
* gcc.dg/tree-ssa/20041122-1.c (size_t): Likewise.
* gcc.dg/tree-ssa/pr36908.c (size_t): Likewise.
* gcc.dg/tree-ssa/pr38250.c (size_t): Likewise.
* gcc.dg/tree-ssa/ssa-dse-10.c (size_t): Likewise.
2009-05-27 Kai TIetz <kai.tietz@onevision.com>
@ -814,7 +819,7 @@
2009-04-06 Laurent GUERBY <laurent@guerby.net>
* lib/gnat.exp: Handle multilib.
* lib/gnat.exp: Handle multilib.
2009-04-06 Jason Merrill <jason@redhat.com>

View File

@ -0,0 +1,34 @@
/* { dg-do run } */
/* { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#ifdef __i386__
#include "cpuid.h"
#endif
typedef float v2sf __attribute__ ((vector_size (2 * sizeof(float))));
static void test (void)
{
v2sf a = {1.0, 0.0};
v2sf b = {0.0, 1.0};
v2sf d;
d = a + b;
}
int main ()
{
#ifdef __i386__
unsigned int eax, ebx, ecx, edx;
if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
return 0;
if (!(edx & bit_SSE))
return 0;
#endif
test ();
return 0;
}

View File

@ -481,8 +481,10 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
tree vector_compute_type
= type_for_widest_vector_mode (TYPE_MODE (TREE_TYPE (type)), op,
TYPE_SATURATING (TREE_TYPE (type)));
if (vector_compute_type != NULL_TREE)
compute_type = vector_compute_type;
if (vector_compute_type != NULL_TREE
&& (TYPE_VECTOR_SUBPARTS (vector_compute_type)
< TYPE_VECTOR_SUBPARTS (compute_type)))
compute_type = vector_compute_type;
}
/* If we are breaking a BLKmode vector into smaller pieces,