19 #ifndef LLVM_CODEGEN_SELECTIONDAGNODES_H
20 #define LLVM_CODEGEN_SELECTIONDAGNODES_H
33 #include "llvm/Support/DataTypes.h"
42 class MachineBasicBlock;
43 class MachineConstantPoolValue;
47 template <
typename T>
struct DenseMapInfo;
48 template <
typename T>
struct simplify_type;
49 template <
typename T>
struct ilist_traits;
113 return Node == O.Node && ResNo == O.ResNo;
119 return Node < O.Node || (Node == O.Node && ResNo < O.ResNo);
154 inline void dump()
const;
155 inline void dumpr()
const;
163 unsigned Depth = 2)
const;
185 return ((
unsigned)((uintptr_t)Val.
getNode() >> 4) ^
231 operator const SDValue&()
const {
return Val; }
273 inline void set(
const SDValue &V);
276 inline void setInitial(
const SDValue &V);
279 inline void setNode(
SDNode *
N);
283 if (Next) Next->Prev = &Next;
288 void removeFromList() {
290 if (Next) Next->Prev = Prev;
314 uint16_t OperandsNeedDelete : 1;
318 uint16_t HasDebugValue : 1;
336 const EVT *ValueList;
342 unsigned short NumOperands, NumValues;
355 static const EVT *getValueTypeList(
EVT VT);
440 :
public std::iterator<std::forward_iterator_tag, SDUse, ptrdiff_t> {
446 typedef std::iterator<std::forward_iterator_tag,
448 typedef std::iterator<std::forward_iterator_tag,
462 bool atEnd()
const {
return Op == 0; }
466 assert(Op &&
"Cannot increment end iterator!");
477 assert(Op &&
"Cannot dereference end iterator!");
488 assert(Op &&
"Cannot dereference end iterator!");
489 return (
unsigned)(Op - Op->
getUser()->OperandList);
555 assert(Num < NumOperands &&
"Invalid child # of SDNode!");
556 return OperandList[Num];
580 const SDNode *FoundNode =
this;
597 if (UI.getUse().get().getValueType() ==
MVT::Glue)
610 assert(ResNo < NumValues &&
"Illegal result number!");
611 return ValueList[ResNo];
654 unsigned depth = 100)
const;
702 const SDValue *Ops,
unsigned NumOps)
705 OperandList(NumOps ? new
SDUse[NumOps] : 0),
706 ValueList(VTs.VTs), UseList(NULL),
707 NumOperands(NumOps), NumValues(VTs.NumVTs),
708 debugLoc(dl), IROrder(Order) {
709 for (
unsigned i = 0; i != NumOps; ++i) {
710 OperandList[i].setUser(
this);
711 OperandList[i].setInitial(Ops[i]);
721 ValueList(VTs.VTs), UseList(NULL), NumOperands(0), NumValues(VTs.NumVTs),
722 debugLoc(dl), IROrder(Order) {}
726 Ops[0].setUser(
this);
727 Ops[0].setInitial(Op0);
735 Ops[0].setUser(
this);
736 Ops[0].setInitial(Op0);
737 Ops[1].setUser(
this);
738 Ops[1].setInitial(Op1);
747 Ops[0].setUser(
this);
748 Ops[0].setInitial(Op0);
749 Ops[1].setUser(
this);
750 Ops[1].setInitial(Op1);
751 Ops[2].setUser(
this);
752 Ops[2].setInitial(Op2);
761 Ops[0].setUser(
this);
762 Ops[0].setInitial(Op0);
763 Ops[1].setUser(
this);
764 Ops[1].setInitial(Op1);
765 Ops[2].setUser(
this);
766 Ops[2].setInitial(Op2);
767 Ops[3].setUser(
this);
768 Ops[3].setInitial(Op3);
776 for (
unsigned i = 0; i !=
N; ++i) {
777 Ops[i].setUser(
this);
778 Ops[i].setInitial(Vals[i]);
809 assert(N &&
"null SDNode");
812 assert(Ptr &&
"null SDNode");
815 assert(Order >= 0 &&
"bad IROrder");
818 if (IROrder >= 0 || Ptr == NULL) {
819 return (
unsigned)IROrder;
880 return Node->
dumpr();
884 inline void SDUse::set(
const SDValue &V) {
885 if (Val.
getNode()) removeFromList();
890 inline void SDUse::setInitial(
const SDValue &V) {
895 inline void SDUse::setNode(SDNode *
N) {
896 if (Val.
getNode()) removeFromList();
898 if (N) N->addUse(*
this);
908 :
SDNode(Opc, Order, dl, VTs) {
920 :
SDNode(Opc, Order, dl, VTs) {
932 :
SDNode(Opc, Order, dl, VTs) {
955 unsigned SrcAddrSpace;
956 unsigned DestAddrSpace;
960 unsigned SrcAS,
unsigned DestAS);
1090 assert((Ordering & 15) == Ordering &&
1091 "Ordering may not require more than 4 bits!");
1092 assert((SynchScope & 1) == SynchScope &&
1093 "SynchScope may not require more than 1 bit!");
1096 assert(
getOrdering() == Ordering &&
"Ordering encoding error!");
1097 assert(
getSynchScope() == SynchScope &&
"Synch-scope encoding error!");
1114 :
MemSDNode(Opc, Order, dl, VTL, MemVT, MMO) {
1115 InitAtomic(Ordering, SynchScope);
1123 :
MemSDNode(Opc, Order, dl, VTL, MemVT, MMO) {
1124 InitAtomic(Ordering, SynchScope);
1132 :
MemSDNode(Opc, Order, dl, VTL, MemVT, MMO) {
1133 InitAtomic(Ordering, SynchScope);
1140 :
MemSDNode(Opc, Order, dl, VTL, MemVT, MMO) {
1141 InitAtomic(Ordering, SynchScope);
1143 "Too many ops for internal storage!");
1181 const SDValue *Ops,
unsigned NumOps,
1183 :
MemSDNode(Opc, Order, dl, VTs, Ops, NumOps, MemoryVT, MMO) {
1225 assert(Idx <
getValueType(0).getVectorNumElements() &&
"Idx out of range!");
1231 assert(
isSplat() &&
"Cannot get splat index for non-splat!");
1316 unsigned char TargetFlags;
1320 unsigned char TargetFlags);
1356 unsigned char TargetFlags;
1380 unsigned char TargetFlags;
1383 unsigned Align,
unsigned char TF)
1387 assert(Offset >= 0 &&
"Offset is too large");
1391 EVT VT,
int o,
unsigned Align,
unsigned char TF)
1395 assert(Offset >= 0 &&
"Offset is too large");
1396 Val.MachineCPVal = v;
1397 Offset |= 1 << (
sizeof(
unsigned)*CHAR_BIT-1);
1407 return Val.ConstVal;
1412 return Val.MachineCPVal;
1416 return Offset & ~(1 << (
sizeof(
unsigned)*CHAR_BIT-1));
1434 unsigned char TargetFlags;
1442 TargetFlags(TF), Index(Idx), Offset(Ofs) {}
1488 unsigned &SplatBitSize,
bool &HasAnyUndefs,
1489 unsigned MinSplatBits = 0,
bool isBigEndian =
false);
1548 const uint32_t *RegMask;
1565 unsigned char TargetFlags;
1568 int64_t o,
unsigned char Flags)
1570 BA(ba), Offset(o), TargetFlags(Flags) {
1601 unsigned char TargetFlags;
1641 const SDValue *Ops,
unsigned NumOps,
1645 assert(NumOps == 5 &&
"wrong number of operations");
1685 SDValue *Operands,
unsigned numOperands,
1688 :
MemSDNode(NodeTy, Order, dl, VTs, MemVT, MMO) {
1693 "Only indexed loads and stores have a non-undef offset operand");
1725 :
LSBaseSDNode(ISD::
LOAD, Order, dl, ChainPtrOff, 3, VTs, AM, MemVT, MMO) {
1728 assert(
readMem() &&
"Load MachineMemOperand is not a load!");
1729 assert(!
writeMem() &&
"Load MachineMemOperand is a store!");
1755 VTs, AM, MemVT, MMO) {
1758 assert(!
readMem() &&
"Store MachineMemOperand is a load!");
1759 assert(
writeMem() &&
"Store MachineMemOperand is not a store!");
1788 :
SDNode(Opc, Order, DL, VTs), MemRefs(0), MemRefsEnd(0) {}
1792 SDUse LocalOperands[4];
1806 for (
mmo_iterator MMI = NewMemRefs, MME = NewMemRefsEnd; MMI != MME; ++MMI)
1807 assert(*MMI &&
"Null mem ref detected!");
1808 MemRefs = NewMemRefs;
1809 MemRefsEnd = NewMemRefsEnd;
1818 SDNode, ptrdiff_t> {
1825 return Operand == x.Operand;
1830 assert(I.Node == Node &&
"Cannot assign iterators to two different nodes!");
1831 Operand = I.Operand;
1848 assert(Node == Other.Node &&
1849 "Cannot compare iterators of two different nodes!");
1850 return Operand - Other.Operand;
1895 return isa<LoadSDNode>(
N) &&
1902 return isa<LoadSDNode>(
N) &&
1903 cast<LoadSDNode>(N)->getExtensionType() ==
ISD::EXTLOAD;
1909 return isa<LoadSDNode>(
N) &&
1916 return isa<LoadSDNode>(
N) &&
1923 return isa<LoadSDNode>(
N) &&
1938 return isa<StoreSDNode>(
N) && !cast<StoreSDNode>(N)->isTruncatingStore();
1944 return isa<StoreSDNode>(
N) && cast<StoreSDNode>(N)->isTruncatingStore();
1950 return isa<StoreSDNode>(
N) &&
MVT getSimpleValueType() const
Return the simple ValueType of the referenced return value.
value_iterator value_begin() const
pointer operator->() const
unsigned getValueSizeInBits(unsigned ResNo) const
MCSymbol * getLabel() const
SDValue getValue(unsigned R) const
const char * getSymbol() const
bool isExactlyValue(double V) const
static bool classof(const SDNode *N)
void dump() const
dump - Dump this node, for debugging.
const SDNodeIterator & operator=(const SDNodeIterator &I)
SDNode * operator->() const
bool isNON_TRUNCStore(const SDNode *N)
void InitOperands(SDUse *Ops, const SDValue &Op0, const SDValue &Op1, const SDValue &Op2, const SDValue &Op3)
InitOperands - Initialize the operands list of this with 4 operands.
void setMemRefs(mmo_iterator NewMemRefs, mmo_iterator NewMemRefsEnd)
unsigned getDestAddressSpace() const
bool hasNUsesOfValue(unsigned NUses, unsigned Value) const
void InitOperands(SDUse *Ops, const SDValue *Vals, unsigned N)
InitOperands - Initialize the operands list of this with N operands.
const Value * getValue() const
getValue - return the contained Value.
SDVTList getVTList() const
const SDValue & getVal() const
enable_if_c<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
int getSplatIndex() const
bool operator!=(const use_iterator &x) const
SDNode * getGluedNode() const
unsigned getSrcAddressSpace() const
const GlobalValue * getGlobal() const
Completely target-dependent object reference.
unsigned getOpcode() const
UnarySDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs, SDValue X)
bool operator!=(const SDNodeIterator &x) const
bool getHasDebugValue() const
getHasDebugValue - get this bit.
bool isUnindexed() const
isUnindexed - Return true if this is NOT a pre/post inc/dec load/store.
unsigned getRawSubclassData() const
static bool classof(const SDNode *N)
unsigned getNumOperands() const
SDNode * operator->() const
unsigned getNumOperands() const
unsigned getValueSizeInBits() const
int64_t getOffset() const
const SDValue & getOffset() const
MDNode - a tuple of other values.
const SDValue & getOperand(unsigned Num) const
mmo_iterator memoperands_end() const
BinarySDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs, SDValue X, SDValue Y)
const uint32_t * getRegMask() const
void setNodeId(int Id)
setNodeId - Set unique node id.
const MachinePointerInfo & getPointerInfo() const
const SDValue & getValue() const
const SDValue & getBasePtr() const
static SimpleType getSimplifiedValue(SDUse &Val)
void printrFull(raw_ostream &O, const SelectionDAG *G=0) const
MachineMemOperand ** mmo_iterator
unsigned getResNo() const
get the index which selects a specific result in the SDNode
int64_t getSrcValueOffset() const
void InitOperands(SDUse *Ops, const SDValue &Op0, const SDValue &Op1, const SDValue &Op2)
InitOperands - Initialize the operands list of this with 3 operands.
bool isAllOnesValue() const
static bool classof(const SDNode *N)
bool operator!=(const SDValue &V) const
operator!= - Convenience function for get().operator!=
bool isTargetOpcode() const
void dumpr() const
dumpr - Dump (recursively) this node and its use-def subgraph.
const DebugLoc getDebugLoc() const
getDebugLoc - Return the source location info.
static SDVTList getSDVTList(EVT VT)
void checkForCycles(const SDNode *N)
void print_types(raw_ostream &OS, const SelectionDAG *G) const
static bool classof(const SDNode *N)
bool isSEXTLoad(const SDNode *N)
mmo_iterator memoperands_begin() const
static bool classof(const SDNode *N)
int64_t getOffset() const
static SDValue getTombstoneKey()
ArrayRef< T > makeArrayRef(const T &OneElt)
Construct an ArrayRef from a single element.
bool isNormalStore(const SDNode *N)
#define llvm_unreachable(msg)
bool isBuildVectorAllZeros(const SDNode *N)
EVT getValueType(unsigned ResNo) const
unsigned getOperand() const
bool isZEXTLoad(const SDNode *N)
unsigned getAddressSpace() const
bool memoperands_empty() const
unsigned getMachineOpcode() const
bool isTRUNCStore(const SDNode *N)
int getMaskElt(unsigned Idx) const
ID
LLVM Calling Convention Representation.
static unsigned getHashValue(const SDValue &Val)
EVT getValueType() const
getValueType - Convenience function for get().getValueType().
bool operator!=(const SDValue &O) const
static bool classof(const SDNode *N)
unsigned getIROrder() const
bool operator==(const use_iterator &x) const
const MDNode * getTBAAInfo() const
getTBAAInfo - Return the TBAA tag for the memory reference.
static SDNodeIterator begin(const SDNode *N)
bool isUNINDEXEDStore(const SDNode *N)
size_t array_lengthof(T(&)[N])
Find the length of an array.
unsigned getNumValues() const
static bool classof(const SDNode *N)
value_iterator value_end() const
static SimpleType getSimplifiedValue(const SDValue &Val)
AtomicOrdering getOrdering() const
const SDNode * getGluedMachineNode() const
static bool classof(const SDNode *N)
uint64_t getAlignment() const
bool isTargetOpcode() const
const SDValue & getBasePtr() const
MachineConstantPoolValue * getMachineCPVal() const
const APInt & getAPIntValue() const
EVT getMemoryVT() const
getMemoryVT - Return the type of the in-memory value.
static const char * getIndexedModeName(ISD::MemIndexedMode AM)
MachineConstantPoolValue * MachineCPVal
const ConstantInt * getConstantIntValue() const
void setIROrder(unsigned Order)
pointer operator*() const
unsigned char getTargetFlags() const
static bool classof(const SDNode *N)
UNDEF - An undefined node.
const SDValue & getBasePtr() const
bool isConstantSplat(APInt &SplatValue, APInt &SplatUndef, unsigned &SplatBitSize, bool &HasAnyUndefs, unsigned MinSplatBits=0, bool isBigEndian=false)
LSBaseSDNode(ISD::NodeType NodeTy, unsigned Order, DebugLoc dl, SDValue *Operands, unsigned numOperands, SDVTList VTs, ISD::MemIndexedMode AM, EVT MemVT, MachineMemOperand *MMO)
SDNode * getNode() const
get the SDNode which holds the desired result
bool isNaN() const
isNaN - Return true if the value is a NaN.
A self-contained host- and target-independent arbitrary-precision floating-point software implementat...
bool hasPredecessor(const SDNode *N) const
void dumprFull(const SelectionDAG *G=0) const
static bool classof(const SDNode *N)
bool isNormalLoad(const SDNode *N)
bool operator==(const SDValue &V) const
operator== - Convenience function for get().operator==
SynchronizationScope getSynchScope() const
const SDValue & getBasePtr() const
bool isZero() const
isZero - Return true if the value is positive or negative zero.
AddrSpaceCastSDNode(unsigned Order, DebugLoc dl, EVT VT, SDValue X, unsigned SrcAS, unsigned DestAS)
SDNodeIterator ChildIteratorType
bool isMachineConstantPoolEntry() const
bool isTargetMemoryOpcode() const
static bool classof(const SDNode *N)
LLVM Basic Block Representation.
const SDValue & getOperand(unsigned i) const
bool isCompareAndSwap() const
void setDebugLoc(const DebugLoc dl)
bool isNonTemporal() const
unsigned getOperandNo() const
LLVM Constant Representation.
void printr(raw_ostream &OS, const SelectionDAG *G=0) const
static bool classof(const SDNode *N)
MachineBasicBlock * getBasicBlock() const
const Constant * getConstVal() const
use_iterator operator++(int)
static ChildIteratorType child_begin(NodeType *N)
const DebugLoc & getDebugLoc() const
getDebugLoc - Return the debug location for this node as a DebugLoc.
unsigned getOriginalAlignment() const
Returns alignment and volatility of the memory access.
ItTy next(ItTy it, Dist n)
void print(raw_ostream &OS, const SelectionDAG *G=0) const
static bool classof(const SDNode *N)
opStatus convert(const fltSemantics &, roundingMode, bool *)
unsigned getOpcode() const
void InitOperands(SDUse *Ops, const SDValue &Op0)
InitOperands - Initialize the operands list of this with 1 operand.
SDNodeIterator & operator++()
SDNodeIterator operator++(int)
unsigned char getTargetFlags() const
std::iterator< std::forward_iterator_tag, SDUse, ptrdiff_t >::pointer pointer
static bool classof(const SDNode *N)
MemIntrinsicSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs, const SDValue *Ops, unsigned NumOps, EVT MemoryVT, MachineMemOperand *MMO)
static bool classof(const SDNode *N)
const SDNode * getNode() const
static bool classof(const SDNode *N)
use_iterator use_begin() const
MemSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs, EVT MemoryVT, MachineMemOperand *MMO)
const SDValue & getValue() const
unsigned char getTargetFlags() const
bool operator<(const SDValue &V) const
operator< - Convenience function for get().operator<
static bool isValueValidForType(EVT VT, const APFloat &Val)
GlobalAddressSDNode MostAlignedSDNode
static bool classof(const SDNode *N)
static bool classof(const SDNode *N)
const APFloat & getValueAPF() const
const ConstantFP * getConstantFPValue() const
std::iterator< std::forward_iterator_tag, SDUse, ptrdiff_t >::reference reference
static bool classof(const SDNode *N)
ISD::MemIndexedMode getAddressingMode() const
uint64_t getConstantOperandVal(unsigned Num) const
HANDLENODE node - Used as a handle for various purposes.
const BlockAddress * getBlockAddress() const
bool operator<(const SDValue &O) const
void refineAlignment(const MachineMemOperand *MMO)
bool isEXTLoad(const SDNode *N)
const MachinePointerInfo & getPointerInfo() const
MachineMemOperand * MMO
MMO - Memory reference information.
static bool classof(const SDNode *N)
const MDNode * getRanges() const
Returns the Ranges that describes the dereference.
bool isUNINDEXEDLoad(const SDNode *N)
const SDValue & getOffset() const
ArrayRef< int > getMask() const
void printrWithDepth(raw_ostream &O, const SelectionDAG *G=0, unsigned depth=100) const
bool isBuildVectorAllOnes(const SDNode *N)
Node predicates.
static bool classof(const SDNode *N)
Class for constant integers.
void setNode(SDNode *N)
set the SDNode
use_iterator(const use_iterator &I)
TargetIndexSDNode(int Idx, EVT VT, int64_t Ofs, unsigned char TF)
void InitOperands(SDUse *Ops, const SDValue &Op0, const SDValue &Op1)
InitOperands - Initialize the operands list of this with 2 operands.
static bool classof(const SDNode *N)
bool isPredecessorOf(const SDNode *N) const
SDNode(unsigned Opc, unsigned Order, const DebugLoc dl, SDVTList VTs, const SDValue *Ops, unsigned NumOps)
bool allOperandsUndef(const SDNode *N)
const DebugLoc getDebugLoc() const
SDNode * getGluedUser() const
const SDValue & getChain() const
Promote Memory to Register
AtomicSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTL, EVT MemVT, SDValue *AllOps, SDUse *DynOps, unsigned NumOps, MachineMemOperand *MMO, AtomicOrdering Ordering, SynchronizationScope SynchScope)
MachineMemOperand * getMemOperand() const
unsigned char getTargetFlags() const
Abstact virtual class for operations for memory operations.
bool isOperandOf(SDNode *N) const
bool isMachineOpcode() const
void dumprWithDepth(const SelectionDAG *G=0, unsigned depth=100) const
unsigned getAddrSpace() const
static const int FIRST_TARGET_MEMORY_OPCODE
static bool classof(const SDNode *N)
void print_details(raw_ostream &OS, const SelectionDAG *G) const
#define LLVM_DELETED_FUNCTION
const MDNode * getTBAAInfo() const
Returns the TBAAInfo that describes the dereference.
ISD::LoadExtType getExtensionType() const
Class for arbitrary precision integers.
const Value * getValue() const
AtomicSDNode LargestSDNode
int64_t getSExtValue() const
op_iterator op_begin() const
static use_iterator use_end()
static NodeType * getEntryNode(SDNode *N)
AtomicSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTL, EVT MemVT, SDValue Chain, SDValue Ptr, MachineMemOperand *MMO, AtomicOrdering Ordering, SynchronizationScope SynchScope)
static cl::opt< AlignMode > Align(cl::desc("Load/store alignment support"), cl::Hidden, cl::init(DefaultAlign), cl::values(clEnumValN(DefaultAlign,"arm-default-align","Generate unaligned accesses only on hardware/OS ""combinations that are known to support them"), clEnumValN(StrictAlign,"arm-strict-align","Disallow all unaligned memory accesses"), clEnumValN(NoStrictAlign,"arm-no-strict-align","Allow unaligned memory accesses"), clEnumValEnd))
const EVT * value_iterator
static SDValue getEmptyKey()
static bool classof(const SDNode *N)
AtomicSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTL, EVT MemVT, SDValue Chain, SDValue Ptr, SDValue Val, MachineMemOperand *MMO, AtomicOrdering Ordering, SynchronizationScope SynchScope)
static bool classof(const SDNode *N)
unsigned getAddressSpace() const
getAddressSpace - Return the address space for the associated pointer
SDNode * operator*() const
Retrieve a pointer to the current user node.
static bool classof(const SDNode *N)
int64_t getOffset() const
unsigned char getTargetFlags() const
bool isScalarToVector(const SDNode *N)
uint64_t getConstantOperandVal(unsigned i) const
static bool classof(const SDNode *N)
ISD::CvtCode getCvtCode() const
bool hasAnyUseOfValue(unsigned Value) const
SDValue(SDNode *node, unsigned resno)
ShuffleVectorSDNode(EVT VT, unsigned Order, DebugLoc dl, SDValue N1, SDValue N2, const int *M)
TernarySDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs, SDValue X, SDValue Y, SDValue Z)
unsigned getSizeInBits() const
getSizeInBits - Return the size of the specified value type in bits.
static SimpleType getSimplifiedValue(SDValue &Val)
void Profile(FoldingSetNodeID &ID) const
bool isIndexed() const
isIndexed - Return true if this is a pre/post inc/dec load/store.
op_iterator op_end() const
bool operator==(const SDNodeIterator &x) const
const SDValue & getOffset() const
bool reachesChainWithoutSideEffects(SDValue Dest, unsigned Depth=2) const
bool isNON_EXTLoad(const SDNode *N)
SDUse * getNext() const
getNext - Get the next SDUse in the use list.
const Value * getSrcValue() const
Returns the SrcValue and offset that describes the location of the access.
use_iterator & operator++()
SDNode * getNode() const
getNode - Convenience function for get().getNode().
const Constant * ConstVal
const MDNode * getMD() const
bool hasPredecessorHelper(const SDNode *N, SmallPtrSet< const SDNode *, 32 > &Visited, SmallVectorImpl< const SDNode * > &Worklist) const
bool atEnd() const
atEnd - return true if this iterator is at the end of uses list.
unsigned getAlignment() const
const MDNode * getRanges() const
getRanges - Return the range tag for the memory reference.
LLVM Value Representation.
AtomicSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTL, EVT MemVT, SDValue Chain, SDValue Ptr, SDValue Cmp, SDValue Swp, MachineMemOperand *MMO, AtomicOrdering Ordering, SynchronizationScope SynchScope)
static bool isEqual(const SDValue &LHS, const SDValue &RHS)
static SDNodeIterator end(const SDNode *N)
int64_t getOffset() const
SDNode(unsigned Opc, unsigned Order, const DebugLoc dl, SDVTList VTs)
bool isTruncatingStore() const
void setHasDebugValue(bool b)
setHasDebugValue - set this bit.
size_t operator-(SDNodeIterator Other) const
SDLoc(const Instruction *I, int Order)
static bool classof(const SDNode *N)
static GCMetadataPrinterRegistry::Add< OcamlGCMetadataPrinter > Y("ocaml","ocaml 3.10-compatible collector")
static ChildIteratorType child_end(NodeType *N)
SDNode * getUser()
getUser - This returns the SDNode that contains this Use.
bool isTargetMemoryOpcode() const
unsigned getAlignment() const
MVT getSimpleValueType(unsigned ResNo) const
static RegisterPass< NVPTXAllocaHoisting > X("alloca-hoisting","Hoisting alloca instructions in non-entry ""blocks to the entry block")
bool operator==(const SDValue &O) const
bool isOperandOf(SDNode *N) const
static bool isSplatMask(const int *Mask, EVT VT)
bool isOnlyUserOf(SDNode *N) const
unsigned getResNo() const
getResNo - Convenience function for get().getResNo().
bool isMachineOpcode() const
unsigned char getTargetFlags() const
unsigned getMachineOpcode() const
uint64_t getBaseAlignment() const
void refineAlignment(const MachineMemOperand *NewMMO)
uint64_t getZExtValue() const
std::string getOperationName(const SelectionDAG *G=0) const
unsigned getVectorNumElements() const