Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 4,735 Lines • ▼ Show 20 Lines | if (const auto *VPStore = dyn_cast<VPStoreSDNode>(Op)) { | ||||
Mask = VPStore->getMask(); | Mask = VPStore->getMask(); | ||||
VL = VPStore->getVectorLength(); | VL = VPStore->getVectorLength(); | ||||
} else { | } else { | ||||
const auto *MStore = cast<MaskedStoreSDNode>(Op); | const auto *MStore = cast<MaskedStoreSDNode>(Op); | ||||
Val = MStore->getValue(); | Val = MStore->getValue(); | ||||
Mask = MStore->getMask(); | Mask = MStore->getMask(); | ||||
} | } | ||||
bool IsUnmasked = ISD::isConstantSplatVectorAllOnes(Mask.getNode()); | |||||
MVT VT = Val.getSimpleValueType(); | MVT VT = Val.getSimpleValueType(); | ||||
MVT XLenVT = Subtarget.getXLenVT(); | MVT XLenVT = Subtarget.getXLenVT(); | ||||
MVT ContainerVT = VT; | MVT ContainerVT = VT; | ||||
if (VT.isFixedLengthVector()) { | if (VT.isFixedLengthVector()) { | ||||
ContainerVT = getContainerForFixedLengthVector(VT); | ContainerVT = getContainerForFixedLengthVector(VT); | ||||
MVT MaskVT = MVT::getVectorVT(MVT::i1, ContainerVT.getVectorElementCount()); | |||||
Val = convertToScalableVector(ContainerVT, Val, DAG, Subtarget); | Val = convertToScalableVector(ContainerVT, Val, DAG, Subtarget); | ||||
if (!IsUnmasked) { | |||||
MVT MaskVT = | |||||
MVT::getVectorVT(MVT::i1, ContainerVT.getVectorElementCount()); | |||||
Mask = convertToScalableVector(MaskVT, Mask, DAG, Subtarget); | Mask = convertToScalableVector(MaskVT, Mask, DAG, Subtarget); | ||||
} | } | ||||
} | |||||
if (!VL) | if (!VL) | ||||
VL = getDefaultVLOps(VT, ContainerVT, DL, DAG, Subtarget).second; | VL = getDefaultVLOps(VT, ContainerVT, DL, DAG, Subtarget).second; | ||||
SDValue IntID = DAG.getTargetConstant(Intrinsic::riscv_vse_mask, DL, XLenVT); | unsigned IntID = | ||||
return DAG.getMemIntrinsicNode( | IsUnmasked ? Intrinsic::riscv_vse : Intrinsic::riscv_vse_mask; | ||||
ISD::INTRINSIC_VOID, DL, DAG.getVTList(MVT::Other), | SmallVector<SDValue, 8> Ops{Chain, DAG.getTargetConstant(IntID, DL, XLenVT)}; | ||||
{Chain, IntID, Val, BasePtr, Mask, VL}, MemVT, MMO); | Ops.push_back(Val); | ||||
Ops.push_back(BasePtr); | |||||
if (!IsUnmasked) | |||||
Ops.push_back(Mask); | |||||
Ops.push_back(VL); | |||||
return DAG.getMemIntrinsicNode(ISD::INTRINSIC_VOID, DL, | |||||
DAG.getVTList(MVT::Other), Ops, MemVT, MMO); | |||||
} | } | ||||
SDValue | SDValue | ||||
RISCVTargetLowering::lowerFixedLengthVectorSetccToRVV(SDValue Op, | RISCVTargetLowering::lowerFixedLengthVectorSetccToRVV(SDValue Op, | ||||
SelectionDAG &DAG) const { | SelectionDAG &DAG) const { | ||||
MVT InVT = Op.getOperand(0).getSimpleValueType(); | MVT InVT = Op.getOperand(0).getSimpleValueType(); | ||||
MVT ContainerVT = getContainerForFixedLengthVector(InVT); | MVT ContainerVT = getContainerForFixedLengthVector(InVT); | ||||
▲ Show 20 Lines • Show All 4,888 Lines • Show Last 20 Lines |