aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ScriptInterpreter/Python/Interfaces
diff options
context:
space:
mode:
authorPhilip Reames <preames@rivosinc.com>2025-01-16 14:55:45 -0800
committerGitHub <noreply@github.com>2025-01-16 14:55:45 -0800
commitbb6e94a05d15d289e3685c5599f0eb905dc46925 (patch)
tree501008b7bca60265ff1402aec5253dd266e337da /lldb/source/Plugins/ScriptInterpreter/Python/Interfaces
parent65dc0d44473481d67d34dcffd1037d2f9f0e574b (diff)
downloadllvm-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