diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2017-05-18 13:05:55 +0200 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2017-05-18 11:05:55 +0000 |
commit | 8b656ca7ea26bb53e6058c10c0016e080c39930c (patch) | |
tree | bad2b7bb3b9a02a1e6c6b9b76e1d5f4956ef07ed /gcc/match.pd | |
parent | e3455240edf5c8fa4ee4ee73219b35ce1265b076 (diff) | |
download | gcc-8b656ca7ea26bb53e6058c10c0016e080c39930c.zip gcc-8b656ca7ea26bb53e6058c10c0016e080c39930c.tar.gz gcc-8b656ca7ea26bb53e6058c10c0016e080c39930c.tar.bz2 |
Move X==15-X to match.pd
2017-05-18 Marc Glisse <marc.glisse@inria.fr>
* fold-const.c (fold_binary_loc): Move transformation...
* match.pd (C - X CMP X): ... here.
From-SVN: r248193
Diffstat (limited to 'gcc/match.pd')
-rw-r--r-- | gcc/match.pd | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/match.pd b/gcc/match.pd index 80a17ba..ba50149 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1090,6 +1090,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) || TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0)))) (op @1 @0)))) +/* X == C - X can never be true if C is odd. */ +(for cmp (eq ne) + (simplify + (cmp:c (convert? @0) (convert1? (minus INTEGER_CST@1 (convert2? @0)))) + (if (TREE_INT_CST_LOW (@1) & 1) + { constant_boolean_node (cmp == NE_EXPR, type); }))) + /* ((X inner_op C0) outer_op C1) With X being a tree where value_range has reasoned certain bits to always be zero throughout its computed value range, |