13#define GET_SDNODE_DESC
14#include "RISCVGenSDNodeInfo.inc"
29 switch (
N->getOpcode()) {
30 case RISCVISD::TUPLE_EXTRACT:
32 "Expected index to be a target constant!");
34 case RISCVISD::TUPLE_INSERT:
36 "Expected index to be a target constant!");
38 case RISCVISD::TUPLE_CAST: {
39 EVT VT =
N->getValueType(0);
40 EVT OpVT =
N->getOperand(0).getValueType();
42 "Expected input and output of TUPLE_CAST to be vector tuples");
49 assert(NF == OpNF && LMUL == OpLMUL &&
50 "Expected input and output of TUPLE_CAST to have the same "
54 case RISCVISD::VDOT4A_VL:
55 case RISCVISD::VDOT4AU_VL:
56 case RISCVISD::VDOT4ASU_VL: {
57 EVT VT =
N->getValueType(0);
59 "Expected result to be an i32 scalable vector");
60 assert(
N->getOperand(0).getValueType() == VT &&
61 N->getOperand(1).getValueType() == VT &&
62 N->getOperand(2).getValueType() == VT &&
63 "Expected result and first 3 operands to have the same type!");
64 EVT MaskVT =
N->getOperand(3).getValueType();
67 "Expected mask VT to be an i1 scalable vector with same number of "
68 "elements as the result");
71 case RISCVISD::PNCLIPP:
72 case RISCVISD::PNCLIPUP: {
73 EVT VT =
N->getValueType(0);
74 EVT OpVT =
N->getOperand(0).getValueType();
77 "Expected result and operands to have the same size!");
78 assert(
N->getOperand(1).getValueType() == OpVT &&
79 "Expected operands to have the same type");
83 "Expected operands to be scalar or a vector with half the number of "
97 if (!Subtarget.hasVendorXqcilsm())
105 uint64_t NumberOfBytesToWrite = ConstantSize->
getZExtValue();
108 if (!(Alignment >= 4) || !((NumberOfBytesToWrite & 3) == 0))
113 int NumberOfWords = NumberOfBytesToWrite / 4;
120 SDValue Ops[] = {Chain, SrcValueReplicated, Dst,
160 if (NumberOfWords >= 48)
163 if (NumberOfWords <= 16) {
165 return getSetwmiNode(NumberOfWords, 0);
168 if (NumberOfWords <= 32) {
170 OutChains.
push_back(getSetwmiNode(NumberOfWords - 16, 64));
171 OutChains.
push_back(getSetwmiNode(16, 0));
174 OutChains.
push_back(getSetwmiNode(NumberOfWords - 31, 124));
175 OutChains.
push_back(getSetwmiNode(15, 64));
176 OutChains.
push_back(getSetwmiNode(16, 0));
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
uint64_t getZExtValue() const
MachineMemOperand * getMachineMemOperand(MachinePointerInfo PtrInfo, MachineMemOperand::Flags F, LLT MemTy, Align BaseAlignment, const MMOMetadata &Metadata=MMOMetadata(), SyncScope::ID SSID=SyncScope::System, AtomicOrdering Ordering=AtomicOrdering::NotAtomic, AtomicOrdering FailureOrdering=AtomicOrdering::NotAtomic)
getMachineMemOperand - Allocate a new MachineMemOperand.
A description of a memory reference used in the backend.
@ MOVolatile
The memory access is volatile.
@ MOStore
The memory access writes data.
SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, const SDLoc &dl, SDValue Chain, SDValue Dst, SDValue Src, SDValue Size, Align Alignment, bool isVolatile, bool AlwaysInline, MachinePointerInfo DstPtrInfo) const override
Emit target-specific code that performs a memset.
void verifyTargetNode(const SelectionDAG &DAG, const SDNode *N) const override
Checks that the given target-specific node is valid. Aborts if it is not.
~RISCVSelectionDAGInfo() override
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation funct...
Represents one node in the SelectionDAG.
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation.
SelectionDAGGenTargetInfo(const SDNodeInfo &GenNodeInfo)
void verifyTargetNode(const SelectionDAG &DAG, const SDNode *N) const override
Checks that the given target-specific node is valid. Aborts if it is not.
This is used to represent a portion of an LLVM function in a low-level Data Dependence DAG representa...
const TargetSubtargetInfo & getSubtarget() const
LLVM_ABI SDVTList getVTList(EVT VT)
Return an SDVTList that represents the list of values specified.
LLVM_ABI SDValue getMemIntrinsicNode(unsigned Opcode, const SDLoc &dl, SDVTList VTList, ArrayRef< SDValue > Ops, EVT MemVT, MachinePointerInfo PtrInfo, Align Alignment, MachineMemOperand::Flags Flags=MachineMemOperand::MOLoad|MachineMemOperand::MOStore, LocationSize Size=LocationSize::precise(0), const AAMDNodes &AAInfo=AAMDNodes())
Creates a MemIntrinsicNode that may produce a result and takes a list of operands.
LLVM_ABI SDValue getConstant(uint64_t Val, const SDLoc &DL, EVT VT, bool isTarget=false, bool isOpaque=false)
Create a ConstantSDNode wrapping a constant value.
LLVM_ABI SDValue getNode(unsigned Opcode, const SDLoc &DL, EVT VT, ArrayRef< SDUse > Ops)
Gets or creates the specified node.
SDValue getTargetConstant(uint64_t Val, const SDLoc &DL, EVT VT, bool isOpaque=false)
MachineFunction & getMachineFunction() const
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
constexpr ScalarTy getKnownMinValue() const
Returns the minimum value this quantity can represent.
@ ZERO_EXTEND
ZERO_EXTEND - Used for integer types, zeroing the new bits.
@ TargetConstant
TargetConstant* - Like Constant*, but the DAG does not do any folding, simplification,...
@ TokenFactor
TokenFactor - This node takes multiple tokens as input and produces a single token result.
static constexpr unsigned RVVBitsPerBlock
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI bool isNullConstant(SDValue V)
Returns true if V is a constant integer zero.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
constexpr T divideCeil(U Numerator, V Denominator)
Returns the integer ceil(Numerator / Denominator).
This struct is a compact representation of a valid (non-zero power of two) alignment.
bool isScalableVectorOf(EVT EltVT) const
Return true if this is a scalable vector with matching element type.
ElementCount getVectorElementCount() const
TypeSize getSizeInBits() const
Return the size of the specified value type in bits.
unsigned getRISCVVectorTupleNumFields() const
Given a RISCV vector tuple type, return the num_fields.
bool isRISCVVectorTuple() const
Return true if this is a vector value type.
bool isVector() const
Return true if this is a vector value type.
bool isScalableVector() const
Return true if this is a vector type where the runtime length is machine dependent.
unsigned getVectorNumElements() const
Given a vector type, return the number of elements it contains.
This class contains a discriminated union of information about pointers in memory operands,...
MachinePointerInfo getWithOffset(int64_t O) const