re PR tree-optimization/91504 (Inlining misses some logical operation folding)

PR tree-optimization/91504
	* match.pd: Add ((~a & b) ^a) --> (a | b).

        PR tree-optimization/91504
	gcc.dg/tree-ssa/pr91504.c: New test.

From-SVN: r275354
This commit is contained in:
Kamlesh Kumar 2019-09-03 20:13:22 +00:00 committed by Jeff Law
parent 42bf58bb13
commit 52792faa0c
4 changed files with 33 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2019-09-03 Kamlesh Kumar <kamleshbhalui@gmail.com>
PR tree-optimization/91504
* match.pd: Add ((~a & b) ^a) --> (a | b).
2019-09-03 Jakub Jelinek <jakub@redhat.com>
PR target/91604

View File

@ -831,6 +831,11 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(bit_xor:c (bit_and:cs @0 (bit_not @1)) (bit_not @0))
(bit_not (bit_and @0 @1)))
/* (~a & b) ^ a --> (a | b) */
(simplify
(bit_xor:c (bit_and:cs (bit_not @0) @1) @0)
(bit_ior @0 @1))
/* (a | b) & ~(a ^ b) --> a & b */
(simplify
(bit_and:c (bit_ior @0 @1) (bit_not (bit_xor:c @0 @1)))

View File

@ -1,3 +1,8 @@
2019-09-03 Kamlesh Kumar <kamleshbhalui@gmail.com>
PR tree-optimization/91504
gcc.dg/tree-ssa/pr91504.c: New test.
2019-09-03 Jakub Jelinek <jakub@redhat.com>
PR target/91604

View File

@ -0,0 +1,18 @@
/* { dg-do compile } */
/* { dg-options "-O -fdump-tree-optimized-raw" } */
static inline unsigned deposit32(unsigned value, int start, int length,
unsigned fieldval)
{
unsigned mask = (~0U >> (32 - length)) << start;
return (value & ~mask) | ((fieldval << start) & mask);
}
unsigned foo(unsigned value)
{
return deposit32(value, 10, 1, 1);
}
/* { dg-final { scan-tree-dump-not "bit_and_expr" "optimized" } } */
/* { dg-final { scan-tree-dump-not "bit_xor_expr" "optimized" } } */
/* { dg-final { scan-tree-dump-not "bit_not_expr" "optimized" } } */