https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88598

--- Comment #8 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
Author: rsandifo
Date: Mon Jan  7 12:16:30 2019
New Revision: 267645

URL: https://gcc.gnu.org/viewcvs?rev=267645&root=gcc&view=rev
Log:
[1/2] PR88598: Optimise x * { 0 or 1, 0 or 1, ... }

The PR has:

    vect__6.24_42 = vect__5.23_41 * { 0.0, 1.0e+0, 0.0, 0.0 };

which for -fno-signed-zeros -fno-signaling-nans can be simplified to:

    vect__6.24_42 = vect__5.23_41 & { 0, -1, 0, 0 };

I deliberately didn't handle COMPLEX_CST or CONSTRUCTOR in
initializer_each_zero_or_onep since there are no current use cases.

The patch also makes (un)signed_type_for handle floating-point types.
I tried to audit all callers and the few that handle null returns would
be unaffected.

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

gcc/
        PR tree-optimization/88598
        * tree.h (initializer_each_zero_or_onep): Declare.
        * tree.c (initializer_each_zero_or_onep): New function.
        (signed_or_unsigned_type_for): Handle float types too.
        (unsigned_type_for, signed_type_for): Update comments accordingly.
        * match.pd: Fold x * { 0 or 1, 0 or 1, ...} to
        x & { 0 or -1, 0 or -1, ... }.

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

Added:
    trunk/gcc/testsuite/gcc.dg/pr88598-1.c
    trunk/gcc/testsuite/gcc.dg/pr88598-2.c
    trunk/gcc/testsuite/gcc.dg/pr88598-3.c
    trunk/gcc/testsuite/gcc.dg/pr88598-4.c
    trunk/gcc/testsuite/gcc.dg/pr88598-5.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/match.pd
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree.c
    trunk/gcc/tree.h

Reply via email to