[2/2] PR88598: Optimise reduc (bit_and)
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 7 Jan 2019 12:17:10 +0000 (12:17 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 7 Jan 2019 12:17:10 +0000 (12:17 +0000)
commitf4bf2aabe36633d75852313caafe7efab71d5ba7
tree4b1605d010ed5331fcd70d90790c5ce41dd2f7c2
parent46c66a46aa33077bda821e0428cc7859945c04c8
[2/2] PR88598: Optimise reduc (bit_and)

This patch folds certain reductions of X & CST to X[I] & CST[I] if I is
the only nonzero element of CST.  This includes the motivating case in
which CST[I] is -1.

We could do the same for REDUC_MAX on unsigned types, but I wasn't sure
that that special case was worth it.

2019-01-07  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR tree-optimization/88598
* tree.h (single_nonzero_element): Declare.
* tree.c (single_nonzero_element): New function.
* match.pd: Fold certain reductions of X & CST to X[I] & CST[I]
if I is the only nonzero element of CST.

gcc/testsuite/
PR tree-optimization/88598
* gcc.dg/vect/pr88598-1.c: New test.
* gcc.dg/vect/pr88598-2.c: Likewise.
* gcc.dg/vect/pr88598-3.c: Likewise.
* gcc.dg/vect/pr88598-4.c: Likewise.
* gcc.dg/vect/pr88598-5.c: Likewise.
* gcc.dg/vect/pr88598-6.c: Likewise.

From-SVN: r267646
gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/pr88598-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr88598-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr88598-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr88598-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr88598-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr88598-6.c [new file with mode: 0644]
gcc/tree.c
gcc/tree.h