On 6/6/23 18:17, Andrew Pinski via Gcc-patches wrote:
This adds a match pattern that are for boolean values
that optimizes `a ? onezero : 0` to `a & onezero` and
`a ? 1 : onezero` to `a | onezero`.

This was reported a few times and I thought I would finally
add the match pattern for this.

This hits a few times in GCC itself too.

Notes on the testcases:
* phi-opt-2.c: This now is optimized to `a & b` in phiopt rather than ifcombine
* phi-opt-25b.c: The test part that was failing was parity which now gets `x & 
y` treatment.
* ssa-thread-21.c: there is no longer a threading opportunity, so need to 
disable phiopt.
   Note PR 109957 is filed for the now missing optimization in that testcase 
too.

gcc/ChangeLog:

        PR tree-optimization/89263
        PR tree-optimization/99069
        PR tree-optimization/20083
        PR tree-optimization/94898
        * match.pd: Add patterns to optimize `a ? onezero : onezero` with
        one of the operands are constant.

gcc/testsuite/ChangeLog:

        * gcc.dg/tree-ssa/phi-opt-2.c: Adjust the testcase.
        * gcc.dg/tree-ssa/phi-opt-25b.c: Adjust the testcase.
        * gcc.dg/tree-ssa/ssa-thread-21.c: Disable phiopt.
        * gcc.dg/tree-ssa/phi-opt-27.c: New test.
        * gcc.dg/tree-ssa/phi-opt-28.c: New test.
        * gcc.dg/tree-ssa/phi-opt-29.c: New test.
        * gcc.dg/tree-ssa/phi-opt-30.c: New test.
        * gcc.dg/tree-ssa/phi-opt-31.c: New test.
        * gcc.dg/tree-ssa/phi-opt-32.c: New test.
OK.

tbird rendered the bool0^1 as bool0 to the first power, so I was briefly confused before I realized what was going on.

jeff

Reply via email to