aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKamlesh Kumar <kamleshbhalui@gmail.com>2019-09-03 20:13:22 +0000
committerJeff Law <law@gcc.gnu.org>2019-09-03 14:13:22 -0600
commit52792faa0c8510b7bfc2c184c9f67d4a87f83215 (patch)
tree3c5f5a01416ec909271f3aa44d5c8d2a1c7a462e /gcc
parent42bf58bb137992b876be37f8b2e683c49bc2abed (diff)
downloadgcc-52792faa0c8510b7bfc2c184c9f67d4a87f83215.zip
gcc-52792faa0c8510b7bfc2c184c9f67d4a87f83215.tar.gz
gcc-52792faa0c8510b7bfc2c184c9f67d4a87f83215.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/match.pd5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr91504.c18
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6ac810f..abbbf16 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/match.pd b/gcc/match.pd
index cd75dac..1d13543 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -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)))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 44c43d2..4cf3e9b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr91504.c b/gcc/testsuite/gcc.dg/tree-ssa/pr91504.c
new file mode 100644
index 0000000..a52dea4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr91504.c
@@ -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" } } */