re PR target/52736 (miscompilation: store to aliased __m128d is 8 Bytes off)
PR target/52736 * config/i386/sse.md (sse2_loadlpd splitter): Use offset 0 instead of 8 in adjust_address. * gcc.target/i386/pr52736.c: New test. From-SVN: r185905
This commit is contained in:
parent
f7bb11f848
commit
3381e23cf6
|
@ -1,3 +1,9 @@
|
|||
2012-03-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/52736
|
||||
* config/i386/sse.md (sse2_loadlpd splitter): Use offset 0
|
||||
instead of 8 in adjust_address.
|
||||
|
||||
2012-03-27 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* expmed.c (store_bit_field): Assert that BITREGION_START is a multiple
|
||||
|
|
|
@ -4890,7 +4890,7 @@
|
|||
(vec_select:DF (match_dup 0) (parallel [(const_int 1)]))))]
|
||||
"TARGET_SSE2 && reload_completed"
|
||||
[(set (match_dup 0) (match_dup 1))]
|
||||
"operands[0] = adjust_address (operands[0], DFmode, 8);")
|
||||
"operands[0] = adjust_address (operands[0], DFmode, 0);")
|
||||
|
||||
(define_insn "sse2_movsd"
|
||||
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,x,m,x,x,x,o")
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-03-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/52736
|
||||
* gcc.target/i386/pr52736.c: New test.
|
||||
|
||||
2012-03-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/52720
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
/* PR target/52736 */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O1 -msse2" } */
|
||||
/* { dg-require-effective-target sse2_runtime } */
|
||||
|
||||
#include <x86intrin.h>
|
||||
|
||||
typedef double D __attribute__((may_alias));
|
||||
__attribute__((aligned(16))) static const double r[4] = { 1., 5., 1., 3. };
|
||||
|
||||
__attribute__((noinline, noclone))
|
||||
void
|
||||
foo (int x)
|
||||
{
|
||||
asm volatile ("" : "+g" (x) : : "memory");
|
||||
if (x != 3)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
__m128d t = _mm_set1_pd (5.);
|
||||
((D *)(&t))[0] = 1.;
|
||||
foo (_mm_movemask_pd (_mm_cmpeq_pd (t, _mm_load_pd (&r[0]))));
|
||||
((D *)(&t))[1] = 3.;
|
||||
foo (_mm_movemask_pd (_mm_cmpeq_pd (t, _mm_load_pd (&r[2]))));
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue