Commit 6b74529d by Jakub Jelinek Committed by Jakub Jelinek

re PR target/54703 (_mm_sub_pd is incorrectly substituted with vandnps)

	PR target/54703
	* simplify-rtx.c (simplify_binary_operation_1): Perform
	(x - (x & y)) -> (x & ~y) optimization only for integral
	modes.

	* gcc.target/i386/pr54703.c: New test.

From-SVN: r191801
parent e481cda6
2012-09-27 Jakub Jelinek <jakub@redhat.com>
PR target/54703
* simplify-rtx.c (simplify_binary_operation_1): Perform
(x - (x & y)) -> (x & ~y) optimization only for integral
modes.
2012-09-27 Marc Glisse <marc.glisse@inria.fr> 2012-09-27 Marc Glisse <marc.glisse@inria.fr>
PR c/53024 PR c/53024
......
...@@ -2239,7 +2239,7 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode, ...@@ -2239,7 +2239,7 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode,
neg_const_int (mode, op1)); neg_const_int (mode, op1));
/* (x - (x & y)) -> (x & ~y) */ /* (x - (x & y)) -> (x & ~y) */
if (GET_CODE (op1) == AND) if (INTEGRAL_MODE_P (mode) && GET_CODE (op1) == AND)
{ {
if (rtx_equal_p (op0, XEXP (op1, 0))) if (rtx_equal_p (op0, XEXP (op1, 0)))
{ {
......
2012-09-27 Jakub Jelinek <jakub@redhat.com>
PR target/54703
* gcc.target/i386/pr54703.c: New test.
2012-09-27 Richard Guenther <rguenther@suse.de> 2012-09-27 Richard Guenther <rguenther@suse.de>
PR lto/54709 PR lto/54709
......
/* PR target/54703 */
/* { dg-do run { target sse2_runtime } } */
/* { dg-options "-O -msse2" } */
/* { dg-additional-options "-mavx -mtune=bdver1" { target avx_runtime } } */
extern void abort (void);
typedef double V __attribute__((vector_size(16)));
union {
unsigned long long m[2];
V v;
} u = { { 0xffffffffff000000ULL, 0xffffffffff000000ULL } };
static inline V
foo (V x)
{
V y = __builtin_ia32_andpd (x, u.v);
V z = __builtin_ia32_subpd (x, y);
return __builtin_ia32_mulpd (y, z);
}
void
test (V *x)
{
V a = { 2.1, 2.1 };
*x = foo (foo (a));
}
int
main ()
{
test (&u.v);
if (u.m[0] != 0x3acbf487f0a30550ULL || u.m[1] != u.m[0])
abort ();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment