[all-commits] [llvm/llvm-project] dd68f3: [RISCV] Support insertion of misaligned subvectors
Fraser Cormack via All-commits
all-commits at lists.llvm.org
Tue Feb 23 02:37:43 PST 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: dd68f3cf2899c554cab7baf3ccdcd3f987d77736
https://github.com/llvm/llvm-project/commit/dd68f3cf2899c554cab7baf3ccdcd3f987d77736
Author: Fraser Cormack <fraser at codeplay.com>
Date: 2021-02-23 (Tue, 23 Feb 2021)
Changed paths:
M llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
M llvm/lib/Target/RISCV/RISCVISelLowering.cpp
M llvm/lib/Target/RISCV/RISCVISelLowering.h
M llvm/test/CodeGen/RISCV/rvv/insert-subvector.ll
Log Message:
-----------
[RISCV] Support insertion of misaligned subvectors
This patch extends the support for RVV INSERT_SUBVECTOR to cover those
which don't align to a vector register boundary. Like the support for
EXTRACT_SUBVECTOR in D96959, it accomplishes this by extracting the
nearest register-sized subvector (a subregister operation), then sliding
the vector down with VSLIDEDOWN, inserting the subvector to the first
position, and sliding the vector back up again afterwards.
Unlike subvector extraction, for vectors that occupy less than a full
vector register we must preserve the untouched elements. We do this by
lowering to an LMUL=1 INSERT_SUBVECTOR using the above method and
lowering that to a VSLIDEUP with a zero offset. This uses a
tail-undisturbed policy and so has the effect of "sliding in" the
subvector elements while preserving the surrounding ones.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D96972
More information about the All-commits
mailing list