re PR rtl-optimization/64957 (wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu)

PR rtl-optimization/64957
	PR debug/64817
	* simplify-rtx.c (simplify_binary_operation_1): Use ~cval for
	IOR rather than for AND.

	* gcc.c-torture/execute/pr64957.c: New test.

From-SVN: r220475
This commit is contained in:
Jakub Jelinek 2015-02-06 12:36:34 +01:00 committed by Jakub Jelinek
parent e3a7c6cf72
commit d26ac279bc
4 changed files with 38 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2015-02-06 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/64957
PR debug/64817
* simplify-rtx.c (simplify_binary_operation_1): Use ~cval for
IOR rather than for AND.
2015-02-06 Eric Botcazou <ebotcazou@adacore.com>
PR target/62631

View File

@ -2731,9 +2731,9 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode,
HOST_WIDE_INT xcval;
if (op == IOR)
xcval = cval;
else
xcval = ~cval;
else
xcval = cval;
return simplify_gen_binary (XOR, mode,
simplify_gen_binary (op, mode, a, c),

View File

@ -1,3 +1,9 @@
2015-02-06 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/64957
PR debug/64817
* gcc.c-torture/execute/pr64957.c: New test.
2015-02-05 Jeff Law <law@redhat.com>
PR target/17306

View File

@ -0,0 +1,23 @@
/* PR rtl-optimization/64957 */
__attribute__((noinline, noclone)) int
foo (int b)
{
return (((b ^ 5) | 1) ^ 5) | 1;
}
__attribute__((noinline, noclone)) int
bar (int b)
{
return (((b ^ ~5) & ~1) ^ ~5) & ~1;
}
int
main ()
{
int i;
for (i = 0; i < 16; i++)
if (foo (i) != (i | 1) || bar (i) != (i & ~1))
__builtin_abort ();
return 0;
}