From df1f7315c7fbad1fa24e4bf0490e42a9cc090dda Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Tue, 24 May 2011 17:31:12 +0200 Subject: re PR target/49133 (modification of aliased __m128d miscompiles) PR target/49133 * config/i386/sse.md (sse2_loadhpd): Remove shufpd alternative. testsuite/ChangeLog: PR target/49133 * g++.dg/other/pr49133.C: New test. From-SVN: r174122 --- gcc/testsuite/ChangeLog | 7 ++++++- gcc/testsuite/g++.dg/other/pr49133.C | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/other/pr49133.C (limited to 'gcc/testsuite') diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 48fb720..bdc0f3e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-05-24 Uros Bizjak + + PR target/49133 + * g++.dg/other/pr49133.C: New test. + 2011-05-24 Uros Bizjak Rainer Orth @@ -450,7 +455,7 @@ 2011-05-08 Ville Voutilainen - * g++.dg/inherit/virtual9.C: New. + * g++.dg/inherit/virtual9.C: New. 2011-05-09 Dodji Seketeli diff --git a/gcc/testsuite/g++.dg/other/pr49133.C b/gcc/testsuite/g++.dg/other/pr49133.C new file mode 100644 index 0000000..a59687f --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr49133.C @@ -0,0 +1,36 @@ +/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -msse2" } */ +/* { dg-require-effective-target sse2_runtime } */ + +#include + +extern "C" void abort (); + +typedef double double_a __attribute__((__may_alias__)); + +struct V +{ + __m128d data; +}; + +int +main() +{ + V a; + __m128d b; + + b = _mm_set_pd (1., 0.); + a.data = _mm_set_pd (1., 0.); + a.data = _mm_add_pd (a.data, + _mm_and_pd (_mm_cmpeq_pd (a.data, _mm_set1_pd (0.)), + _mm_set1_pd (2.))); + reinterpret_cast(&a.data)[1] += 1.; + b = _mm_add_pd (b, _mm_and_pd (_mm_cmpeq_pd (b, _mm_set1_pd (0.)), + _mm_set1_pd (1.))); + b = _mm_add_pd (b, _mm_and_pd (_mm_cmpeq_pd (b, _mm_set1_pd (1.)), + _mm_set1_pd (1.))); + if (_mm_movemask_pd (_mm_cmpeq_pd (a.data, b)) != 0x3) + abort(); + + return 0; +} -- cgit v1.1