match.pd: Decrease number of nop conversions around bitwise ops [PR94718]
authorJakub Jelinek <jakub@redhat.com>
Mon, 4 May 2020 09:01:08 +0000 (11:01 +0200)
committerJakub Jelinek <jakub@redhat.com>
Mon, 4 May 2020 09:01:08 +0000 (11:01 +0200)
commit496f4f884716ae061f771a62e44868a32dbd502f
tree97ee7206b36e9c4ad10545727c3d0f13eec435c9
parent73a8043481d24ac86ce8d19459276181dfd9c858
match.pd: Decrease number of nop conversions around bitwise ops [PR94718]

On the following testcase, there are in *.optimized dump 14 nop conversions
(from signed to unsigned and back), while this patch decreases that number
to just 4; for bitwise ops it really doesn't matter if they are performed in
signed or unsigned, so the patch (in GIMPLE only, there are some comments
about it being undesirable during GENERIC earlier), if it sees both
bitop operands nop converted from the same types performs the bitop in their
non-converted type and converts the result (i.e. 2 conversions into 1),
similarly, if a bitop has one operand nop converted from something, the
other not and the result is converted back to the type of the nop converted
operand before conversion, it is possible to replace those 2 conversions
with just a single conversion of the other operand.

2020-05-04  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/94718
* match.pd (bitop (convert @0) (convert? @1)): For GIMPLE, if we can,
replace two nop conversions on bit_{and,ior,xor} argument
and result with just one conversion on the result or another argument.

* gcc.dg/tree-ssa/pr94718-3.c: New test.
gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr94718-3.c [new file with mode: 0644]