Go to the documentation of this file.
13 #ifndef LLVM_LIB_TARGET_RISCV_RISCVISELDAGTODAG_H
14 #define LLVM_LIB_TARGET_RISCV_RISCVISELDAGTODAG_H
32 return "RISCV DAG->DAG Pattern Instruction Selection";
46 std::vector<SDValue> &OutOps)
override;
94 const SDLoc &
DL,
unsigned CurOp,
95 bool IsMasked,
bool IsStridedOrIndexed,
97 bool IsLoad =
false,
MVT *IndexVT =
nullptr);
130 #include "RISCVGenDAGISel.inc"
135 bool doPeepholeMergeVVMFold();
215 #define GET_RISCVVSSEGTable_DECL
216 #define GET_RISCVVLSEGTable_DECL
217 #define GET_RISCVVLXSEGTable_DECL
218 #define GET_RISCVVSXSEGTable_DECL
219 #define GET_RISCVVLETable_DECL
220 #define GET_RISCVVSETable_DECL
221 #define GET_RISCVVLXTable_DECL
222 #define GET_RISCVVSXTable_DECL
223 #define GET_RISCVMaskedPseudosTable_DECL
224 #include "RISCVGenSearchableTables.inc"
void selectVLXSEG(SDNode *Node, bool IsMasked, bool IsOrdered)
This is an optimization pass for GlobalISel generic memory operations.
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation funct...
bool selectVSplatSimm5Plus1(SDValue N, SDValue &SplatVal)
void PreprocessISelDAG() override
PreprocessISelDAG - This hook allows targets to hack on the graph before instruction selection starts...
bool selectRVVSimm5(SDValue N, SDValue &Imm)
bool selectZExti32(SDValue N, SDValue &Val)
void selectVSETVLI(SDNode *Node)
bool SelectFrameAddrRegImm(SDValue Addr, SDValue &Base, SDValue &Offset)
Represents one node in the SelectionDAG.
bool selectVSplat(SDValue N, SDValue &SplatVal)
StringRef getPassName() const override
getPassName - Return a nice clean name for a pass.
bool selectSH1ADDOp(SDValue N, SDValue &Val)
void selectVSSEG(SDNode *Node, bool IsMasked, bool IsStrided)
bool selectVSplatSimm5Plus1NonZero(SDValue N, SDValue &SplatVal)
bool SelectAddrFrameIndex(SDValue Addr, SDValue &Base, SDValue &Offset)
uint16_t UnmaskedTUPseudo
bool selectShiftMask(SDValue N, unsigned ShiftWidth, SDValue &ShAmt)
bool selectSH3ADDOp(SDValue N, SDValue &Val)
CodeGenOpt::Level OptLevel
bool SelectInlineAsmMemoryOperand(const SDValue &Op, unsigned ConstraintID, std::vector< SDValue > &OutOps) override
SelectInlineAsmMemoryOperand - Select the specified address as a target addressing mode,...
bool selectShiftMask32(SDValue N, SDValue &ShAmt)
bool SelectAddrRegImm(SDValue Addr, SDValue &Base, SDValue &Offset)
static RISCVCC::CondCode getRISCVCCForIntCC(ISD::CondCode CC)
mir Rename Register Operands
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
bool selectVLOp(SDValue N, SDValue &VL)
void selectVSXSEG(SDNode *Node, bool IsMasked, bool IsOrdered)
bool selectShiftMaskXLen(SDValue N, SDValue &ShAmt)
bool selectVSplatUimm5(SDValue N, SDValue &SplatVal)
bool runOnMachineFunction(MachineFunction &MF) override
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformat...
void selectVLSEG(SDNode *Node, bool IsMasked, bool IsStrided)
Primary interface to the complete machine description for the target machine.
bool selectSH2ADDOp(SDValue N, SDValue &Val)
CondCode
ISD::CondCode enum - These are ordered carefully to make the bitfields below work out,...
bool hasAllWUsers(SDNode *Node) const
bool selectVSplatSimm5(SDValue N, SDValue &SplatVal)
RISCVDAGToDAGISel(RISCVTargetMachine &TargetMachine, CodeGenOpt::Level OptLevel)
StringRef - Represent a constant reference to a string, i.e.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
void PostprocessISelDAG() override
PostprocessISelDAG() - This hook allows the target to hack on the graph right after selection.
void selectVLSEGFF(SDNode *Node, bool IsMasked)
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation.
bool tryShrinkShlLogicImm(SDNode *Node)
SelectionDAGISel - This is the common base class used for SelectionDAG-based pattern-matching instruc...
bool selectRVVSimm5(SDValue N, unsigned Width, SDValue &Imm)
void Select(SDNode *Node) override
Main hook for targets to transform nodes into machine nodes.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
bool runOnMachineFunction(MachineFunction &MF) override
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformat...
bool selectSHXADDOp(SDValue N, unsigned ShAmt, SDValue &Val)
Look for various patterns that can be done with a SHL that can be folded into a SHXADD.
bool hasAllHUsers(SDNode *Node) const
bool hasAllNBitUsers(SDNode *Node, unsigned Bits) const
bool selectSExti32(SDValue N, SDValue &Val)
void addVectorLoadStoreOperands(SDNode *Node, unsigned SEWImm, const SDLoc &DL, unsigned CurOp, bool IsMasked, bool IsStridedOrIndexed, SmallVectorImpl< SDValue > &Operands, bool IsLoad=false, MVT *IndexVT=nullptr)