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: r174215
This commit is contained in:
parent
d37155aa5a
commit
81e97b147a
|
@ -1,3 +1,8 @@
|
|||
2011-05-25 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/49133
|
||||
* config/i386/sse.md (sse2_loadhpd): Remove shufpd alternative.
|
||||
|
||||
2011-05-23 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
PR rtl-optimization/49007
|
||||
|
|
|
@ -4402,22 +4402,21 @@
|
|||
(set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
|
||||
|
||||
(define_insn "sse2_loadhpd"
|
||||
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,o,o,o")
|
||||
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,o,o,o")
|
||||
(vec_concat:V2DF
|
||||
(vec_select:DF
|
||||
(match_operand:V2DF 1 "nonimmediate_operand" " 0,0,x,0,0,0")
|
||||
(match_operand:V2DF 1 "nonimmediate_operand" " 0,0,0,0,0")
|
||||
(parallel [(const_int 0)]))
|
||||
(match_operand:DF 2 "nonimmediate_operand" " m,x,0,x,*f,r")))]
|
||||
(match_operand:DF 2 "nonimmediate_operand" " m,x,x,*f,r")))]
|
||||
"TARGET_SSE2 && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
|
||||
"@
|
||||
movhpd\t{%2, %0|%0, %2}
|
||||
unpcklpd\t{%2, %0|%0, %2}
|
||||
shufpd\t{$1, %1, %0|%0, %1, 1}
|
||||
#
|
||||
#
|
||||
#"
|
||||
[(set_attr "type" "ssemov,sselog,sselog,ssemov,fmov,imov")
|
||||
(set_attr "mode" "V1DF,V2DF,V2DF,DF,DF,DF")])
|
||||
[(set_attr "type" "ssemov,sselog,ssemov,fmov,imov")
|
||||
(set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:V2DF 0 "memory_operand" "")
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2011-05-25 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/49133
|
||||
* g++.dg/other/pr49133.C: New test.
|
||||
|
||||
2011-05-20 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/init/new32.C: New.
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
|
||||
/* { dg-options "-O2 -msse2" } */
|
||||
/* { dg-require-effective-target sse2 } */
|
||||
/* { dg-require-effective-target sse2_runtime } */
|
||||
|
||||
#include <xmmintrin.h>
|
||||
|
||||
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<double_a *>(&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;
|
||||
}
|
Loading…
Reference in New Issue