LLVM: llvm::HexagonDAGToDAGISel Class Reference (original) (raw)
#include "[Target/Hexagon/HexagonISelDAGToDAG.h](HexagonISelDAGToDAG%5F8h%5Fsource.html)"
| Public Member Functions | |
|---|---|
| HexagonDAGToDAGISel ()=delete | |
| HexagonDAGToDAGISel (HexagonTargetMachine &tm, CodeGenOptLevel OptLevel) | |
| bool | runOnMachineFunction (MachineFunction &MF) override |
| bool | ComplexPatternFuncMutatesDAG () const override |
| Return true if complex patterns for this target can mutate the DAG. | |
| void | PreprocessISelDAG () override |
| PreprocessISelDAG - This hook allows targets to hack on the graph before instruction selection starts. | |
| void | emitFunctionEntryCode () override |
| void | Select (SDNode *N) override |
| Main hook for targets to transform nodes into machine nodes. | |
| bool | SelectAddrGA (SDValue &N, SDValue &R) |
| bool | SelectAddrGP (SDValue &N, SDValue &R) |
| bool | SelectAnyImm (SDValue &N, SDValue &R) |
| bool | SelectAnyInt (SDValue &N, SDValue &R) |
| bool | SelectAnyImmediate (SDValue &N, SDValue &R, Align Alignment) |
| bool | SelectGlobalAddress (SDValue &N, SDValue &R, bool UseGP, Align Alignment) |
| bool | SelectAddrFI (SDValue &N, SDValue &R) |
| bool | DetectUseSxtw (SDValue &N, SDValue &R) |
| bool | SelectAnyImm0 (SDValue &N, SDValue &R) |
| bool | SelectAnyImm1 (SDValue &N, SDValue &R) |
| bool | SelectAnyImm2 (SDValue &N, SDValue &R) |
| bool | SelectAnyImm3 (SDValue &N, SDValue &R) |
| MachineSDNode * | LoadInstrForLoadIntrinsic (SDNode *IntN) |
| SDNode * | StoreInstrForLoadIntrinsic (MachineSDNode *LoadN, SDNode *IntN) |
| void | SelectFrameIndex (SDNode *N) |
| bool | SelectInlineAsmMemoryOperand (const SDValue &Op, InlineAsm::ConstraintCode ConstraintID, std::vector< SDValue > &OutOps) override |
| SelectInlineAsmMemoryOperand - Implement addressing mode selection for inline asm expressions. | |
| bool | tryLoadOfLoadIntrinsic (LoadSDNode *N) |
| bool | SelectBrevLdIntrinsic (SDNode *IntN) |
| bool | SelectNewCircIntrinsic (SDNode *IntN) |
| Generate a machine instruction node for the new circular buffer intrinsics. | |
| void | SelectLoad (SDNode *N) |
| void | SelectIndexedLoad (LoadSDNode *LD, const SDLoc &dl) |
| void | SelectIndexedStore (StoreSDNode *ST, const SDLoc &dl) |
| void | SelectStore (SDNode *N) |
| void | SelectSHL (SDNode *N) |
| void | SelectIntrinsicWChain (SDNode *N) |
| void | SelectIntrinsicWOChain (SDNode *N) |
| void | SelectExtractSubvector (SDNode *N) |
| void | SelectConstant (SDNode *N) |
| void | SelectConstantFP (SDNode *N) |
| void | SelectV65Gather (SDNode *N) |
| void | SelectV65GatherPred (SDNode *N) |
| void | SelectHVXDualOutput (SDNode *N) |
| void | SelectAddSubCarry (SDNode *N) |
| void | SelectVAlign (SDNode *N) |
| void | SelectVAlignAddr (SDNode *N) |
| void | SelectTypecast (SDNode *N) |
| void | SelectP2D (SDNode *N) |
| void | SelectD2P (SDNode *N) |
| void | SelectQ2V (SDNode *N) |
| void | SelectV2Q (SDNode *N) |
| void | SelectFDiv (SDNode *N) |
| void | FDiv (SDNode *N) |
| void | FastFDiv (SDNode *N) |
| Public Member Functions inherited from llvm::SelectionDAGISel | |
| SelectionDAGISel (TargetMachine &tm, CodeGenOptLevel OL=CodeGenOptLevel::Default) | |
| virtual | ~SelectionDAGISel () |
| BatchAAResults * | getBatchAA () const |
| Returns a (possibly null) pointer to the current BatchAAResults. | |
| const TargetLowering * | getTargetLowering () const |
| void | initializeAnalysisResults (MachineFunctionAnalysisManager &MFAM) |
| void | initializeAnalysisResults (MachineFunctionPass &MFP) |
| virtual void | PostprocessISelDAG () |
| PostprocessISelDAG() - This hook allows the target to hack on the graph right after selection. | |
| virtual bool | IsProfitableToFold (SDValue N, SDNode *U, SDNode *Root) const |
| IsProfitableToFold - Returns true if it's profitable to fold the specific operand node N of U during instruction selection that starts at Root. | |
| bool | CheckAndMask (SDValue LHS, ConstantSDNode *RHS, int64_t DesiredMaskS) const |
| CheckAndMask - The isel is trying to match something like (and X, 255). | |
| bool | CheckOrMask (SDValue LHS, ConstantSDNode *RHS, int64_t DesiredMaskS) const |
| CheckOrMask - The isel is trying to match something like (or X, 255). | |
| virtual bool | CheckPatternPredicate (unsigned PredNo) const |
| CheckPatternPredicate - This function is generated by tblgen in the target. | |
| virtual bool | CheckNodePredicate (SDValue Op, unsigned PredNo) const |
| CheckNodePredicate - This function is generated by tblgen in the target. | |
| virtual bool | CheckNodePredicateWithOperands (SDValue Op, unsigned PredNo, ArrayRef< SDValue > Operands) const |
| CheckNodePredicateWithOperands - This function is generated by tblgen in the target. | |
| virtual bool | CheckComplexPattern (SDNode *Root, SDNode *Parent, SDValue N, unsigned PatternNo, SmallVectorImpl< std::pair< SDValue, SDNode * > > &Result) |
| virtual SDValue | RunSDNodeXForm (SDValue V, unsigned XFormNo) |
| void | SelectCodeCommon (SDNode *NodeToMatch, const unsigned char *MatcherTable, unsigned TableSize) |
| bool | mayRaiseFPException (SDNode *Node) const |
| Return whether the node may raise an FP exception. | |
| bool | isOrEquivalentToAdd (const SDNode *N) const |
| Friends | |
|---|---|
| struct | HvxSelector |
Definition at line 28 of file HexagonISelDAGToDAG.h.
| llvm::HexagonDAGToDAGISel::HexagonDAGToDAGISel ( ) | delete |
|---|
◆ HexagonDAGToDAGISel() [2/2]
◆ ComplexPatternFuncMutatesDAG()
| bool llvm::HexagonDAGToDAGISel::ComplexPatternFuncMutatesDAG ( ) const | inlineoverridevirtual |
|---|
◆ DetectUseSxtw()
Definition at line 1589 of file HexagonISelDAGToDAG.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, assert(), llvm::ISD::AssertSext, llvm::cast(), llvm::SelectionDAGISel::CurDAG, llvm::dyn_cast(), N, Opc, SDValue(), llvm::ISD::SEXTLOAD, llvm::ISD::SIGN_EXTEND, llvm::ISD::SIGN_EXTEND_INREG, llvm::ISD::SRA, and T.
◆ emitFunctionEntryCode()
| void HexagonDAGToDAGISel::emitFunctionEntryCode ( ) | overridevirtual |
|---|
◆ FastFDiv()
| void HexagonDAGToDAGISel::FastFDiv | ( | SDNode * | N | ) |
|---|
◆ FDiv()
| void HexagonDAGToDAGISel::FDiv | ( | SDNode * | N | ) |
|---|
◆ LoadInstrForLoadIntrinsic()
◆ PreprocessISelDAG()
| void HexagonDAGToDAGISel::PreprocessISelDAG ( ) | overridevirtual |
|---|
◆ runOnMachineFunction()
| bool llvm::HexagonDAGToDAGISel::runOnMachineFunction ( MachineFunction & MF) | inlineoverridevirtual |
|---|
◆ Select()
| void HexagonDAGToDAGISel::Select ( SDNode * N) | overridevirtual |
|---|
Main hook for targets to transform nodes into machine nodes.
Implements llvm::SelectionDAGISel.
Definition at line 1007 of file HexagonISelDAGToDAG.cpp.
References llvm::HexagonISD::ADDC, llvm::ISD::Constant, llvm::ISD::ConstantFP, llvm::HexagonISD::D2P, llvm::ISD::EXTRACT_SUBVECTOR, llvm::ISD::FDIV, llvm::ISD::FrameIndex, I, llvm::ISD::INTRINSIC_W_CHAIN, llvm::ISD::INTRINSIC_WO_CHAIN, N, llvm::HexagonISD::P2D, llvm::HexagonISD::Q2V, SelectAddSubCarry(), SelectConstant(), SelectConstantFP(), SelectD2P(), SelectExtractSubvector(), SelectFDiv(), SelectFrameIndex(), SelectIntrinsicWChain(), SelectIntrinsicWOChain(), SelectLoad(), SelectP2D(), SelectQ2V(), SelectSHL(), SelectStore(), SelectTypecast(), SelectV2Q(), SelectVAlign(), SelectVAlignAddr(), llvm::ISD::SHL, llvm::HexagonISD::SUBC, llvm::HexagonISD::TYPECAST, llvm::HexagonISD::V2Q, llvm::HexagonISD::VALIGN, llvm::HexagonISD::VALIGNADDR, llvm::ISD::VECTOR_SHUFFLE, and llvm::HexagonISD::VROR.
◆ SelectAddrFI()
◆ SelectAddrGA()
◆ SelectAddrGP()
◆ SelectAddSubCarry()
| void HexagonDAGToDAGISel::SelectAddSubCarry | ( | SDNode * | N | ) |
|---|
◆ SelectAnyImm()
◆ SelectAnyImm0()
◆ SelectAnyImm1()
◆ SelectAnyImm2()
◆ SelectAnyImm3()
◆ SelectAnyImmediate()
Definition at line 1503 of file HexagonISelDAGToDAG.cpp.
References llvm::ISD::BlockAddress, llvm::cast(), llvm::ISD::Constant, llvm::HexagonISD::CP, llvm::SelectionDAGISel::CurDAG, llvm::ISD::ExternalSymbol, llvm::getOffset(), llvm::isAligned(), llvm::HexagonISD::JT, N, and SelectGlobalAddress().
Referenced by SelectAnyImm(), SelectAnyImm0(), SelectAnyImm1(), SelectAnyImm2(), and SelectAnyImm3().
◆ SelectAnyInt()
◆ SelectBrevLdIntrinsic()
| bool HexagonDAGToDAGISel::SelectBrevLdIntrinsic | ( | SDNode * | IntN | ) |
|---|
◆ SelectConstant()
| void HexagonDAGToDAGISel::SelectConstant | ( | SDNode * | N | ) |
|---|
◆ SelectConstantFP()
| void HexagonDAGToDAGISel::SelectConstantFP | ( | SDNode * | N | ) |
|---|
◆ SelectD2P()
| void HexagonDAGToDAGISel::SelectD2P | ( | SDNode * | N | ) |
|---|
◆ SelectExtractSubvector()
| void HexagonDAGToDAGISel::SelectExtractSubvector | ( | SDNode * | N | ) |
|---|
Definition at line 710 of file HexagonISelDAGToDAG.cpp.
References assert(), llvm::SelectionDAGISel::CurDAG, llvm::SDValue::getNode(), llvm::EVT::getSimpleVT(), llvm::MVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::MVT::getVectorElementType(), llvm::MVT::getVectorNumElements(), N, llvm::SelectionDAGISel::ReplaceNode(), and SubReg.
Referenced by Select().
◆ SelectFDiv()
| void HexagonDAGToDAGISel::SelectFDiv | ( | SDNode * | N | ) |
|---|
◆ SelectFrameIndex()
| void HexagonDAGToDAGISel::SelectFrameIndex | ( | SDNode * | N | ) |
|---|
Definition at line 765 of file HexagonISelDAGToDAG.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, llvm::cast(), CH, llvm::SelectionDAGISel::CurDAG, DL, llvm::MachineFrameInfo::getMaxAlign(), llvm::TargetFrameLowering::getStackAlign(), llvm::MachineFrameInfo::hasVarSizedObjects(), llvm::SelectionDAGISel::MF, N, and llvm::SelectionDAGISel::ReplaceNode().
Referenced by Select().
◆ SelectGlobalAddress()
Definition at line 1544 of file HexagonISelDAGToDAG.cpp.
References llvm::ISD::ADD, llvm::HexagonISD::CONST32, llvm::HexagonISD::CONST32_GP, llvm::HexagonISD::CP, llvm::SelectionDAGISel::CurDAG, llvm::dyn_cast(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::isAligned(), llvm::HexagonISD::JT, N, and llvm::ISD::TargetGlobalAddress.
Referenced by SelectAddrGA(), SelectAddrGP(), and SelectAnyImmediate().
◆ SelectHVXDualOutput()
| void HexagonDAGToDAGISel::SelectHVXDualOutput | ( | SDNode * | N | ) |
|---|
◆ SelectIndexedLoad()
Definition at line 76 of file HexagonISelDAGToDAG.cpp.
References A(), assert(), llvm::sampleprof::Base, llvm::cast(), const, llvm::SelectionDAGISel::CurDAG, llvm::ISD::EXTLOAD, llvm::EVT::getSimpleVT(), llvm::EVT::getSizeInBits(), HexagonDAGToDAGISel(), llvm::EVT::isSimple(), llvm_unreachable, N, llvm::ISD::NON_EXTLOAD, llvm::Offset, llvm::SelectionDAGISel::ReplaceUses(), SDValue(), SelectIndexedLoad(), llvm::ISD::SEXTLOAD, llvm::MVT::SimpleTy, and llvm::ISD::ZEXTLOAD.
Referenced by SelectIndexedLoad(), and SelectLoad().
◆ SelectIndexedStore()
Definition at line 474 of file HexagonISelDAGToDAG.cpp.
References A(), AbstractManglingParser< Derived, Alloc >::Ops, assert(), llvm::sampleprof::Base, llvm::cast(), llvm::SelectionDAGISel::CurDAG, llvm::EVT::getSimpleVT(), llvm::EVT::getSizeInBits(), llvm::EVT::isSimple(), llvm_unreachable, llvm::Offset, llvm::SelectionDAGISel::ReplaceUses(), SDValue(), and llvm::MVT::SimpleTy.
Referenced by SelectStore().
◆ SelectInlineAsmMemoryOperand()
◆ SelectIntrinsicWChain()
| void HexagonDAGToDAGISel::SelectIntrinsicWChain | ( | SDNode * | N | ) |
|---|
◆ SelectIntrinsicWOChain()
| void HexagonDAGToDAGISel::SelectIntrinsicWOChain | ( | SDNode * | N | ) |
|---|
◆ SelectLoad()
| void HexagonDAGToDAGISel::SelectLoad | ( | SDNode * | N | ) |
|---|
◆ SelectNewCircIntrinsic()
| bool HexagonDAGToDAGISel::SelectNewCircIntrinsic | ( | SDNode * | IntN | ) |
|---|
Generate a machine instruction node for the new circular buffer intrinsics.
The new versions use a CSx register instead of the K field.
Definition at line 370 of file HexagonISelDAGToDAG.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, llvm::cast(), llvm::SelectionDAGISel::CurDAG, DL, llvm::SDNode::getConstantOperandVal(), llvm::SDNode::getNumOperands(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), I, llvm::ISD::INTRINSIC_W_CHAIN, llvm::SelectionDAGISel::ReplaceUses(), and SDValue().
Referenced by SelectIntrinsicWChain().
◆ SelectP2D()
| void HexagonDAGToDAGISel::SelectP2D | ( | SDNode * | N | ) |
|---|
◆ SelectQ2V()
| void HexagonDAGToDAGISel::SelectQ2V | ( | SDNode * | N | ) |
|---|
◆ SelectSHL()
| void HexagonDAGToDAGISel::SelectSHL | ( | SDNode * | N | ) |
|---|
Definition at line 579 of file HexagonISelDAGToDAG.cpp.
References llvm::CallingConv::C, llvm::cast(), llvm::ISD::Constant, llvm::SelectionDAGISel::CurDAG, llvm::Default, llvm::dyn_cast(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::isInt(), llvm::ISD::MUL, N, llvm::SelectionDAGISel::ReplaceNode(), llvm::ISD::SHL, and llvm::ISD::SUB.
Referenced by Select().
◆ SelectStore()
| void HexagonDAGToDAGISel::SelectStore | ( | SDNode * | N | ) |
|---|
◆ SelectTypecast()
| void HexagonDAGToDAGISel::SelectTypecast | ( | SDNode * | N | ) |
|---|
◆ SelectV2Q()
| void HexagonDAGToDAGISel::SelectV2Q | ( | SDNode * | N | ) |
|---|
◆ SelectV65Gather()
| void HexagonDAGToDAGISel::SelectV65Gather | ( | SDNode * | N | ) |
|---|
◆ SelectV65GatherPred()
| void HexagonDAGToDAGISel::SelectV65GatherPred | ( | SDNode * | N | ) |
|---|
◆ SelectVAlign()
| void HexagonDAGToDAGISel::SelectVAlign | ( | SDNode * | N | ) |
|---|
Definition at line 803 of file HexagonISelDAGToDAG.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, assert(), llvm::CallingConv::C, llvm::SelectionDAGISel::CurDAG, llvm::MVT::getSizeInBits(), llvm::M0(), llvm::M1(), N, llvm::SelectionDAGISel::ReplaceNode(), SDValue(), and T.
Referenced by Select().
◆ SelectVAlignAddr()
| void HexagonDAGToDAGISel::SelectVAlignAddr | ( | SDNode * | N | ) |
|---|
◆ StoreInstrForLoadIntrinsic()
Definition at line 227 of file HexagonISelDAGToDAG.cpp.
References llvm::SelectionDAGISel::CurDAG, F, llvm::MVT::getIntegerVT(), llvm::SDNode::getMachineOpcode(), llvm::SDValue::getNode(), llvm::SDNode::getOperand(), llvm::HandleSDNode::getValue(), llvm::HexagonII::MemAccesSizeMask, llvm::HexagonII::MemAccessSizePos, llvm::SelectionDAGISel::ReplaceUses(), SDValue(), SelectStore(), and Size.
Referenced by SelectIntrinsicWChain(), and tryLoadOfLoadIntrinsic().
◆ tryLoadOfLoadIntrinsic()
Definition at line 262 of file HexagonISelDAGToDAG.cpp.
References llvm::CallingConv::C, llvm::SelectionDAGISel::CurDAG, F, llvm::SDValue::getNode(), llvm::ISD::INTRINSIC_W_CHAIN, LoadInstrForLoadIntrinsic(), N, llvm::ISD::NON_EXTLOAD, llvm::SelectionDAGISel::ReplaceUses(), SDValue(), llvm::ISD::SEXTLOAD, StoreInstrForLoadIntrinsic(), T, and llvm::ISD::ZEXTLOAD.
Referenced by SelectLoad().
◆ HvxSelector
The documentation for this class was generated from the following files:
- lib/Target/Hexagon/HexagonISelDAGToDAG.h
- lib/Target/Hexagon/HexagonISelDAGToDAG.cpp
- lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp