diff options
author | Jakub Jelinek <jakub@redhat.com> | 2023-11-28 10:14:55 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2023-11-28 10:14:55 +0100 |
commit | 03877e7eccd2734ca93a2d13aa2abf55e0aec923 (patch) | |
tree | 7da4dbc1c5d83219b9e31fd3b2eda0c5af36f2a9 /gcc/expr.cc | |
parent | 594ef1ff707866bcdc1f077c5d078a5bd250320f (diff) | |
download | gcc-03877e7eccd2734ca93a2d13aa2abf55e0aec923.zip gcc-03877e7eccd2734ca93a2d13aa2abf55e0aec923.tar.gz gcc-03877e7eccd2734ca93a2d13aa2abf55e0aec923.tar.bz2 |
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.
Diffstat (limited to 'gcc/expr.cc')
0 files changed, 0 insertions, 0 deletions