http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56487
Bug #: 56487
Summary: SSE2 code crashes when compiled at -O0 -m32 -msse2
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: [email protected]
ReportedBy: [email protected]
The following code (simplified from an SSE testcase0 crashes when compiled with
-m32 -msse2 -O0 on all gcc 4.x versions including mainline. With optimization
enabled, or with gcc 3.x, it executes successfully. Host/target is
x86_64-unknown-linux-gnu.
$ gcc-trunk --version
gcc-trunk (GCC) 4.8.0 20130228 (experimental) [trunk revision 196339]
$ gcc-trunk -m32 -msse2 -O1 sse-isamax.c
$ ./a.out
$ gcc-trunk -m32 -msse2 -O0 sse-isamax.c
$ ./a.out
Segmentation fault (core dumped)
$ cat sse-isamax.c
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
typedef float __v4sf __attribute__ ((__vector_size__ (16)));
extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__,
__artificial__))
_mm_load_ps (float const *__P)
{
return (__m128) *(__v4sf *)__P;
}
void exit(int);
int isamax0(float *x)
{
__m128 V0;
V0 = _mm_load_ps(x);
exit(0);
return (int)(*x + 4);
}
int main()
{
float x[4];
int i;
for(i=0;i<4;i++)
x[i] = -2.0 + (float) i;
return isamax0(x);
}