[llvm] [RISCV] Fold (vslide1up undef, v, (extract_elt x, 0)) into (vslideup x, v, 1) (PR #154847)
Min-Yih Hsu via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 2 10:23:28 PDT 2025
- Previous message: [llvm] [RISCV] Fold (vslide1up undef, v, (extract_elt x, 0)) into (vslideup x, v, 1) (PR #154847)
- Next message: [llvm] [RISCV] Fold (vslide1up undef, v, (extract_elt x, 0)) into (vslideup x, v, 1) (PR #154847)
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
================
@@ -21117,6 +21117,37 @@ SDValue RISCVTargetLowering::PerformDAGCombine(SDNode *N,
return N->getOperand(0);
break;
}
+ case RISCVISD::VSLIDE1UP_VL:
+ case RISCVISD::VFSLIDE1UP_VL: {
+ using namespace SDPatternMatch;
+ SDValue SrcVec;
+ SDLoc DL(N);
+ MVT VT = N->getSimpleValueType(0);
+ // If the scalar we're sliding in was extracted from the first element of a
+ // vector, we can use that vector as the passthru in a normal slideup of 1.
+ // This saves us an extract_element instruction (i.e. vfmv.f.s, vmv.x.s).
+ if (N->getOperand(0).isUndef() &&
+ sd_match(
+ N->getOperand(2),
+ m_OneUse(m_AnyOf(m_ExtractElt(m_Value(SrcVec), m_Zero()),
+ m_Node(RISCVISD::VMV_X_S, m_Value(SrcVec)))))) {
+ MVT SrcVecVT = SrcVec.getSimpleValueType();
+ // Adapt the value type of source vector.
+ if (SrcVecVT.isFixedLengthVector()) {
----------------
mshockwave wrote:
`SrcVec` can be the source operand of extract_element (that produces the scalar value in vslide1up_vl), which can still be fixed vector I believe.
https://github.com/llvm/llvm-project/pull/154847
- Previous message: [llvm] [RISCV] Fold (vslide1up undef, v, (extract_elt x, 0)) into (vslideup x, v, 1) (PR #154847)
- Next message: [llvm] [RISCV] Fold (vslide1up undef, v, (extract_elt x, 0)) into (vslideup x, v, 1) (PR #154847)
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the llvm-commits
mailing list