diff options
author | Philip Reames <preames@rivosinc.com> | 2025-01-16 14:55:45 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-16 14:55:45 -0800 |
commit | bb6e94a05d15d289e3685c5599f0eb905dc46925 (patch) | |
tree | 501008b7bca60265ff1402aec5253dd266e337da /lldb/source/Plugins/ScriptInterpreter/Python/Interfaces | |
parent | 65dc0d44473481d67d34dcffd1037d2f9f0e574b (diff) | |
download | llvm-bb6e94a05d15d289e3685c5599f0eb905dc46925.zip llvm-bb6e94a05d15d289e3685c5599f0eb905dc46925.tar.gz llvm-bb6e94a05d15d289e3685c5599f0eb905dc46925.tar.bz2 |
[RISCV] Custom legalize <N x i128>, <4 x i256>, etc.. shuffles (#122352)
I have a particular user downstream who likes to write shuffles in terms
of unions involving _BitInt(128) types. This isn't completely crazy
because there's a bunch of code in the wild which was written with SSE
in mind, so 128 bits is a common data fragment size.
The problem is that generic lowering scalarizes this to ELEN, and we end
up with really terrible extract/insert sequences if the i128 shuffle is
between other (non-i128) operations.
I explored trying to do this via generic lowering infrastructure, and
frankly got lost. Doing this a target specific DAG is a bit ugly -
really, there's nothing hugely target specific here - but oh well. If
reviewers prefer, I could probably phrase this as a generic DAG combine,
but I'm not sure that's hugely better. If reviewers have a strong
preference on how to handle this, let me know, but I may need a bit of
help.
A couple notes:
* The argument passing weirdness is due to a missing combine to turn a
build_vector of adjacent i64 loads back into a vector load. I'm a bit
surprised we don't get that, but the isel output clearly has the
build_vector at i64.
* The splat case I plan to revisit in another patch. That's a relatively
common pattern, and the fact I have to scalarize that to avoid an
infinite loop is non-ideal.
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/Interfaces')
0 files changed, 0 insertions, 0 deletions