[llvm] [RISCV][llvm] Preliminary P extension codegen support (PR #162668)
Brandon Wu via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 4 22:30:23 PST 2025
================
@@ -10426,6 +10530,26 @@ SDValue RISCVTargetLowering::lowerEXTRACT_VECTOR_ELT(SDValue Op,
return DAG.getNode(RISCVISD::FMV_H_X, DL, EltVT, IntExtract);
}
+ if (Subtarget.enablePExtCodeGen() && VecVT.isFixedLengthVector()) {
+ if (VecVT != MVT::v4i16 && VecVT != MVT::v2i16 && VecVT != MVT::v8i8 &&
+ VecVT != MVT::v4i8 && VecVT != MVT::v2i32)
+ return SDValue();
+ SDValue Extracted = DAG.getBitcast(XLenVT, Vec);
+ unsigned ElemWidth = EltVT.getSizeInBits();
+ if (auto *IdxC = dyn_cast<ConstantSDNode>(Idx)) {
+ unsigned Idx = IdxC->getZExtValue();
+ unsigned Shamt = Idx * ElemWidth;
+ if (Shamt > 0)
+ Extracted = DAG.getNode(ISD::SRL, DL, XLenVT,
+ DAG.getConstant(Shamt, DL, XLenVT));
+ } else {
+ SDValue Shamt = DAG.getNode(ISD::MUL, DL, XLenVT, Idx,
+ DAG.getConstant(ElemWidth, DL, XLenVT));
+ Extracted = DAG.getNode(ISD::SRL, DL, XLenVT, Shamt);
+ }
+ return DAG.getNode(ISD::TRUNCATE, DL, EltVT, Extracted);
----------------
4vtomat wrote:
Is it because I set legal type for operation action? so it always goes through op legalization.
https://github.com/llvm/llvm-project/pull/162668
More information about the llvm-commits
mailing list