diff options
author | Nikita Popov <npopov@redhat.com> | 2024-02-13 09:29:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-13 09:29:56 +0100 |
commit | 070848c17c2944afa494d42d3ad42929f3379842 (patch) | |
tree | 64cdda266b0a57bcb2303c434e253d727c204f99 /llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp | |
parent | 0e16950e741aee7ffec865c81596e1411471475e (diff) | |
download | llvm-070848c17c2944afa494d42d3ad42929f3379842.zip llvm-070848c17c2944afa494d42d3ad42929f3379842.tar.gz llvm-070848c17c2944afa494d42d3ad42929f3379842.tar.bz2 |
[AArch64][GISel] Don't pointlessly lower G_TRUNC (#81479)
If we have something like G_TRUNC from v2s32 to v2s16, then lowering
this to a concat of two G_TRUNC s32 to s16 followed by G_TRUNC from
v2s16 to v2s8 does not bring us any closer to legality. In fact, the
first part of that is a G_BUILD_VECTOR whose legalization will produce a
new G_TRUNC from v2s32 to v2s16, and both G_TRUNCs will then get
combined to the original, causing a legalization cycle.
Make the lowering condition more precise, by requiring that the original
vector is >128 bits, which is I believe the only case where this
specific splitting approach is useful.
Note that this doesn't actually produce a legal result (the alwaysLegal
is a lie, as before), but it will cause a proper globalisel abort
instead of an infinite legalization loop.
Fixes https://github.com/llvm/llvm-project/issues/81244.
Diffstat (limited to 'llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp')
0 files changed, 0 insertions, 0 deletions