LLVM 20.0.0git
|
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/GraphTraits.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/ilist_node.h"
#include "llvm/ADT/iterator.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/CodeGen/ISDOpcodes.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/Register.h"
#include "llvm/CodeGen/ValueTypes.h"
#include "llvm/CodeGenTypes/MachineValueType.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Operator.h"
#include "llvm/Support/AlignOf.h"
#include "llvm/Support/AtomicOrdering.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/TypeSize.h"
#include <algorithm>
#include <cassert>
#include <climits>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <iterator>
#include <string>
#include <tuple>
#include <utility>
#include "llvm/IR/ConstrainedOps.def"
Go to the source code of this file.
Classes | |
struct | llvm::SDVTList |
This represents a list of ValueType's that has been intern'd by a SelectionDAG. More... | |
class | llvm::SDValue |
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation. More... | |
struct | llvm::DenseMapInfo< SDValue > |
struct | llvm::simplify_type< SDValue > |
Allow casting operators to work directly on SDValues as if they were SDNode*'s. More... | |
struct | llvm::simplify_type< const SDValue > |
class | llvm::SDUse |
Represents a use of a SDNode. More... | |
struct | llvm::simplify_type< SDUse > |
simplify_type specializations - Allow casting operators to work directly on SDValues as if they were SDNode*'s. More... | |
struct | llvm::SDNodeFlags |
These are IR-level optimization flags that may be propagated to SDNodes. More... | |
class | llvm::SDNode |
Represents one node in the SelectionDAG. More... | |
class | llvm::SDNode::SDNodeBitfields |
class | llvm::SDNode::ConstantSDNodeBitfields |
class | llvm::SDNode::MemSDNodeBitfields |
class | llvm::SDNode::LSBaseSDNodeBitfields |
class | llvm::SDNode::LoadSDNodeBitfields |
class | llvm::SDNode::StoreSDNodeBitfields |
class | llvm::SDNode::use_iterator |
This class provides iterator support for SDUse operands that use a specific SDNode. More... | |
class | llvm::SDNode::user_iterator |
struct | llvm::SDNode::value_op_iterator |
Iterator for directly iterating over the operand SDValue's. More... | |
class | llvm::SDLoc |
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation functions. More... | |
class | llvm::HandleSDNode |
This class is used to form a handle around another node that is persistent and is updated across invocations of replaceAllUsesWith on its operand. More... | |
class | llvm::AddrSpaceCastSDNode |
class | llvm::MemSDNode |
This is an abstract virtual class for memory operations. More... | |
class | llvm::AtomicSDNode |
This is an SDNode representing atomic operations. More... | |
class | llvm::MemIntrinsicSDNode |
This SDNode is used for target intrinsics that touch memory and need an associated MachineMemOperand. More... | |
class | llvm::ShuffleVectorSDNode |
This SDNode is used to implement the code generator support for the llvm IR shufflevector instruction. More... | |
class | llvm::ConstantSDNode |
class | llvm::ConstantFPSDNode |
class | llvm::GlobalAddressSDNode |
class | llvm::FrameIndexSDNode |
class | llvm::LifetimeSDNode |
This SDNode is used for LIFETIME_START/LIFETIME_END values, which indicate the offet and size that are started/ended in the underlying FrameIndex. More... | |
class | llvm::PseudoProbeSDNode |
This SDNode is used for PSEUDO_PROBE values, which are the function guid and the index of the basic block being probed. More... | |
class | llvm::JumpTableSDNode |
class | llvm::ConstantPoolSDNode |
class | llvm::TargetIndexSDNode |
Completely target-dependent object reference. More... | |
class | llvm::BasicBlockSDNode |
class | llvm::BuildVectorSDNode |
A "pseudo-class" with methods for operating on BUILD_VECTORs. More... | |
class | llvm::SrcValueSDNode |
An SDNode that holds an arbitrary LLVM IR Value. More... | |
class | llvm::MDNodeSDNode |
class | llvm::RegisterSDNode |
class | llvm::RegisterMaskSDNode |
class | llvm::BlockAddressSDNode |
class | llvm::LabelSDNode |
class | llvm::ExternalSymbolSDNode |
class | llvm::MCSymbolSDNode |
class | llvm::CondCodeSDNode |
class | llvm::VTSDNode |
This class is used to represent EVT's, which are used to parameterize some operations. More... | |
class | llvm::LSBaseSDNode |
Base class for LoadSDNode and StoreSDNode. More... | |
class | llvm::LoadSDNode |
This class is used to represent ISD::LOAD nodes. More... | |
class | llvm::StoreSDNode |
This class is used to represent ISD::STORE nodes. More... | |
class | llvm::VPBaseLoadStoreSDNode |
This base class is used to represent VP_LOAD, VP_STORE, EXPERIMENTAL_VP_STRIDED_LOAD and EXPERIMENTAL_VP_STRIDED_STORE nodes. More... | |
class | llvm::VPLoadSDNode |
This class is used to represent a VP_LOAD node. More... | |
class | llvm::VPStridedLoadSDNode |
This class is used to represent an EXPERIMENTAL_VP_STRIDED_LOAD node. More... | |
class | llvm::VPStoreSDNode |
This class is used to represent a VP_STORE node. More... | |
class | llvm::VPStridedStoreSDNode |
This class is used to represent an EXPERIMENTAL_VP_STRIDED_STORE node. More... | |
class | llvm::MaskedLoadStoreSDNode |
This base class is used to represent MLOAD and MSTORE nodes. More... | |
class | llvm::MaskedLoadSDNode |
This class is used to represent an MLOAD node. More... | |
class | llvm::MaskedStoreSDNode |
This class is used to represent an MSTORE node. More... | |
class | llvm::VPGatherScatterSDNode |
This is a base class used to represent VP_GATHER and VP_SCATTER nodes. More... | |
class | llvm::VPGatherSDNode |
This class is used to represent an VP_GATHER node. More... | |
class | llvm::VPScatterSDNode |
This class is used to represent an VP_SCATTER node. More... | |
class | llvm::MaskedGatherScatterSDNode |
This is a base class used to represent MGATHER and MSCATTER nodes. More... | |
class | llvm::MaskedGatherSDNode |
This class is used to represent an MGATHER node. More... | |
class | llvm::MaskedScatterSDNode |
This class is used to represent an MSCATTER node. More... | |
class | llvm::MaskedHistogramSDNode |
class | llvm::FPStateAccessSDNode |
class | llvm::MachineSDNode |
An SDNode that represents everything that will be needed to construct a MachineInstr. More... | |
class | llvm::AssertAlignSDNode |
An SDNode that records if a register contains a value that is guaranteed to be aligned accordingly. More... | |
class | llvm::SDNodeIterator |
struct | llvm::GraphTraits< SDNode * > |
Namespaces | |
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
namespace | llvm::ISD |
ISD namespace - This namespace contains an enum which represents all of the SelectionDAG node types and value types. | |
Macros | |
#define | BEGIN_TWO_BYTE_PACK() |
#define | END_TWO_BYTE_PACK() |
#define | DAG_INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC, DAGN) case ISD::STRICT_##DAGN: |
Typedefs | |
using | llvm::LargestSDNode = AlignedCharArrayUnion< AtomicSDNode, TargetIndexSDNode, BlockAddressSDNode, GlobalAddressSDNode, PseudoProbeSDNode > |
A representation of the largest SDNode, for use in sizeof(). | |
using | llvm::MostAlignedSDNode = GlobalAddressSDNode |
The SDNode class with the greatest alignment requirement. | |
Functions | |
void | llvm::checkForCycles (const SDNode *N, const SelectionDAG *DAG=nullptr, bool force=false) |
bool | llvm::ISD::isConstantSplatVector (const SDNode *N, APInt &SplatValue) |
Node predicates. | |
bool | llvm::ISD::isConstantSplatVectorAllOnes (const SDNode *N, bool BuildVectorOnly=false) |
Return true if the specified node is a BUILD_VECTOR or SPLAT_VECTOR where all of the elements are ~0 or undef. | |
bool | llvm::ISD::isConstantSplatVectorAllZeros (const SDNode *N, bool BuildVectorOnly=false) |
Return true if the specified node is a BUILD_VECTOR or SPLAT_VECTOR where all of the elements are 0 or undef. | |
bool | llvm::ISD::isBuildVectorAllOnes (const SDNode *N) |
Return true if the specified node is a BUILD_VECTOR where all of the elements are ~0 or undef. | |
bool | llvm::ISD::isBuildVectorAllZeros (const SDNode *N) |
Return true if the specified node is a BUILD_VECTOR where all of the elements are 0 or undef. | |
bool | llvm::ISD::isBuildVectorOfConstantSDNodes (const SDNode *N) |
Return true if the specified node is a BUILD_VECTOR node of all ConstantSDNode or undef. | |
bool | llvm::ISD::isBuildVectorOfConstantFPSDNodes (const SDNode *N) |
Return true if the specified node is a BUILD_VECTOR node of all ConstantFPSDNode or undef. | |
bool | llvm::ISD::isVectorShrinkable (const SDNode *N, unsigned NewEltSize, bool Signed) |
Returns true if the specified node is a vector where all elements can be truncated to the specified element size without a loss in meaning. | |
bool | llvm::ISD::allOperandsUndef (const SDNode *N) |
Return true if the node has at least one operand and all operands of the specified node are ISD::UNDEF. | |
bool | llvm::ISD::isFreezeUndef (const SDNode *N) |
Return true if the specified node is FREEZE(UNDEF). | |
llvm::LLVM_DECLARE_ENUM_AS_BITMASK (decltype(SDNodeFlags::None), SDNodeFlags::SameSign) | |
SDNodeFlags | llvm::operator| (SDNodeFlags LHS, SDNodeFlags RHS) |
SDNodeFlags | llvm::operator& (SDNodeFlags LHS, SDNodeFlags RHS) |
bool | llvm::isNullConstant (SDValue V) |
Returns true if V is a constant integer zero. | |
bool | llvm::isNullConstantOrUndef (SDValue V) |
Returns true if V is a constant integer zero or an UNDEF node. | |
bool | llvm::isNullFPConstant (SDValue V) |
Returns true if V is an FP constant with a value of positive zero. | |
bool | llvm::isAllOnesConstant (SDValue V) |
Returns true if V is an integer constant with all bits set. | |
bool | llvm::isOneConstant (SDValue V) |
Returns true if V is a constant integer one. | |
bool | llvm::isMinSignedConstant (SDValue V) |
Returns true if V is a constant min signed integer value. | |
bool | llvm::isNeutralConstant (unsigned Opc, SDNodeFlags Flags, SDValue V, unsigned OperandNo) |
Returns true if V is a neutral element of Opc with Flags. | |
SDValue | llvm::peekThroughBitcasts (SDValue V) |
Return the non-bitcasted source operand of V if it exists. | |
SDValue | llvm::peekThroughOneUseBitcasts (SDValue V) |
Return the non-bitcasted and one-use source operand of V if it exists. | |
SDValue | llvm::peekThroughExtractSubvectors (SDValue V) |
Return the non-extracted vector source operand of V if it exists. | |
SDValue | llvm::peekThroughTruncates (SDValue V) |
Return the non-truncated source operand of V if it exists. | |
bool | llvm::isBitwiseNot (SDValue V, bool AllowUndefs=false) |
Returns true if V is a bitwise not operation. | |
SDValue | llvm::getBitwiseNotOperand (SDValue V, SDValue Mask, bool AllowUndefs) |
If V is a bitwise not, returns the inverted operand. | |
ConstantSDNode * | llvm::isConstOrConstSplat (SDValue N, bool AllowUndefs=false, bool AllowTruncation=false) |
Returns the SDNode if it is a constant splat BuildVector or constant int. | |
ConstantSDNode * | llvm::isConstOrConstSplat (SDValue N, const APInt &DemandedElts, bool AllowUndefs=false, bool AllowTruncation=false) |
Returns the SDNode if it is a demanded constant splat BuildVector or constant int. | |
ConstantFPSDNode * | llvm::isConstOrConstSplatFP (SDValue N, bool AllowUndefs=false) |
Returns the SDNode if it is a constant splat BuildVector or constant float. | |
ConstantFPSDNode * | llvm::isConstOrConstSplatFP (SDValue N, const APInt &DemandedElts, bool AllowUndefs=false) |
Returns the SDNode if it is a demanded constant splat BuildVector or constant float. | |
bool | llvm::isNullOrNullSplat (SDValue V, bool AllowUndefs=false) |
Return true if the value is a constant 0 integer or a splatted vector of a constant 0 integer (with no undefs by default). | |
bool | llvm::isOneOrOneSplat (SDValue V, bool AllowUndefs=false) |
Return true if the value is a constant 1 integer or a splatted vector of a constant 1 integer (with no undefs). | |
bool | llvm::isAllOnesOrAllOnesSplat (SDValue V, bool AllowUndefs=false) |
Return true if the value is a constant -1 integer or a splatted vector of a constant -1 integer (with no undefs). | |
bool | llvm::isIntOrFPConstant (SDValue V) |
Return true if V is either a integer or FP constant. | |
bool | llvm::ISD::isNormalLoad (const SDNode *N) |
Returns true if the specified node is a non-extending and unindexed load. | |
bool | llvm::ISD::isNON_EXTLoad (const SDNode *N) |
Returns true if the specified node is a non-extending load. | |
bool | llvm::ISD::isEXTLoad (const SDNode *N) |
Returns true if the specified node is a EXTLOAD. | |
bool | llvm::ISD::isSEXTLoad (const SDNode *N) |
Returns true if the specified node is a SEXTLOAD. | |
bool | llvm::ISD::isZEXTLoad (const SDNode *N) |
Returns true if the specified node is a ZEXTLOAD. | |
bool | llvm::ISD::isUNINDEXEDLoad (const SDNode *N) |
Returns true if the specified node is an unindexed load. | |
bool | llvm::ISD::isNormalStore (const SDNode *N) |
Returns true if the specified node is a non-truncating and unindexed store. | |
bool | llvm::ISD::isUNINDEXEDStore (const SDNode *N) |
Returns true if the specified node is an unindexed store. | |
template<typename ConstNodeType > | |
bool | llvm::ISD::matchUnaryPredicateImpl (SDValue Op, std::function< bool(ConstNodeType *)> Match, bool AllowUndefs=false) |
Attempt to match a unary predicate against a scalar/splat constant or every element of a constant BUILD_VECTOR. | |
bool | llvm::ISD::matchUnaryPredicate (SDValue Op, std::function< bool(ConstantSDNode *)> Match, bool AllowUndefs=false) |
Hook for matching ConstantSDNode predicate. | |
bool | llvm::ISD::matchUnaryFpPredicate (SDValue Op, std::function< bool(ConstantFPSDNode *)> Match, bool AllowUndefs=false) |
Hook for matching ConstantFPSDNode predicate. | |
bool | llvm::ISD::matchBinaryPredicate (SDValue LHS, SDValue RHS, std::function< bool(ConstantSDNode *, ConstantSDNode *)> Match, bool AllowUndefs=false, bool AllowTypeMismatch=false) |
Attempt to match a binary predicate against a pair of scalar/splat constants or every element of a pair of constant BUILD_VECTORs. | |
bool | llvm::ISD::isOverflowIntrOpRes (SDValue Op) |
Returns true if the specified value is the overflow result from one of the overflow intrinsic nodes. | |
#define BEGIN_TWO_BYTE_PACK | ( | ) |
Definition at line 515 of file SelectionDAGNodes.h.
#define DAG_INSTRUCTION | ( | NAME, | |
NARG, | |||
ROUND_MODE, | |||
INTRINSIC, | |||
DAGN | |||
) | case ISD::STRICT_##DAGN: |
#define END_TWO_BYTE_PACK | ( | ) |
Definition at line 516 of file SelectionDAGNodes.h.