match.pd: Optimize ((cst << x) & 1) [PR96669]
authorJakub Jelinek <jakub@redhat.com>
Sat, 16 Jan 2021 08:21:52 +0000 (09:21 +0100)
committerJakub Jelinek <jakub@redhat.com>
Sat, 16 Jan 2021 08:21:52 +0000 (09:21 +0100)
commite2559c3945a09521ffe4f59669bc4d902ae77adb
tree0d9e7dc7f3ca5d311e691c467152a09b234733a2
parentb673e7547fb95d1f0d5cd17ae9e3874742cade66
match.pd: Optimize ((cst << x) & 1) [PR96669]

While we had a ((1 << x) & 1) != 0 to x == 0 optimization already,
this patch adds ((cst << x) & 1) optimization too, this time the
second constant must be 1 though, not some power of two, but the first
one can be any constant.  If it is even, the result is false, if it is
odd, the result is x == 0.

2021-01-16  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/96669
* match.pd ((CST << x) & 1 -> x == 0): New simplification.

* gcc.dg/tree-ssa/pr96669-1.c: Adjust regexp.
* gcc.dg/tree-ssa/pr96669-2.c: New test.
gcc/match.pd
gcc/testsuite/gcc.dg/tree-ssa/pr96669-1.c
gcc/testsuite/gcc.dg/tree-ssa/pr96669-2.c [new file with mode: 0644]