[llvm] [RISCV] Reduce the LMUL for a vrgather operation if legal (PR #125768)
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 5 08:51:45 PST 2025
================
@@ -5619,6 +5619,31 @@ static SDValue lowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG,
}
}
+ // If only a prefix of the source elements influence a prefix of the
+ // destination elements, try to see if we can reduce the required LMUL
+ unsigned MinVLen = Subtarget.getRealMinVLen();
+ unsigned MinVLMAX = MinVLen / VT.getScalarSizeInBits();
+ if (NumElts > MinVLMAX) {
+ unsigned MaxIdx = 0;
+ for (auto [I, M] : enumerate(Mask)) {
+ if (M == -1)
+ continue;
+ MaxIdx = std::max(std::max((unsigned)I,(unsigned)M), MaxIdx);
+ }
+ unsigned NewNumElts = NumElts;
+ while (MaxIdx < NewNumElts / 2 && NewNumElts != MinVLMAX)
----------------
preames wrote:
Yep, done.
https://github.com/llvm/llvm-project/pull/125768
More information about the llvm-commits
mailing list