]> git.ipfire.org Git - thirdparty/gcc.git/commit
match.pd: Fix popcount (X) + popcount (Y) simplification [PR112719]
authorJakub Jelinek <jakub@redhat.com>
Tue, 28 Nov 2023 09:14:55 +0000 (10:14 +0100)
committerJakub Jelinek <jakub@redhat.com>
Tue, 28 Nov 2023 09:14:55 +0000 (10:14 +0100)
commit03877e7eccd2734ca93a2d13aa2abf55e0aec923
tree7da4dbc1c5d83219b9e31fd3b2eda0c5af36f2a9
parent594ef1ff707866bcdc1f077c5d078a5bd250320f
match.pd: Fix popcount (X) + popcount (Y) simplification [PR112719]

Since my PR112566 r14-5557 changes the following testcase ICEs, because
.POPCOUNT (x) + .POPCOUNT (y) has a simplification attempted even when
x and y have incompatible types (different precisions).
Note, with _BitInt it can ICE already starting with r14-5435 and
I think as a latent problem it exists for years, because IFN_POPCOUNT
calls inherently can have different argument types and return type
is always the same.
The following patch fixes it by using widest_int during the analysis
(which is where it was ICEing) and if it is optimizable, casting to
the wider type so that bit_ior has matching argument types.

2023-11-28  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/112719
* match.pd (popcount (X) + popcount (Y) -> POPCOUNT (X | Y)): Deal
with argument types with different precisions.
gcc/match.pd
gcc/testsuite/gcc.dg/pr112719.c [new file with mode: 0644]