30 #include "llvm/Config/llvm-config.h" 57 cl::desc(
"Display more information when dumping selection " 64 return "<<Unknown DAG Node>>";
75 if (Name)
return Name;
115 if (cast<ConstantSDNode>(
this)->isOpaque())
116 return "OpaqueConstant";
145 unsigned IID = cast<ConstantSDNode>(
getOperand(OpNo))->getZExtValue();
149 return TII->getName(IID);
155 if (cast<ConstantSDNode>(
this)->isOpaque())
156 return "OpaqueTargetConstant";
157 return "TargetConstant";
377 switch (cast<CondCodeSDNode>(
this)->
get()) {
440 OS << (
const void*)&Node;
454 MMO.
print(OS, MST, SSNs, Ctx, MFI, TII);
467 nullptr,
nullptr, Ctx);
471 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 509 if (
getFlags().hasAllowReciprocal())
515 if (
getFlags().hasApproximateFuncs())
518 if (
getFlags().hasAllowReassociation())
521 if (
getFlags().hasVectorReduction())
522 OS <<
" vector-reduction";
524 if (
const MachineSDNode *MN = dyn_cast<MachineSDNode>(
this)) {
525 if (!MN->memoperands_empty()) {
529 e = MN->memoperands_end(); i != e; ++i) {
531 if (std::next(i) != e)
537 dyn_cast<ShuffleVectorSDNode>(
this)) {
539 for (
unsigned i = 0, e = ValueList[0].getVectorNumElements(); i != e; ++i) {
540 int Idx = SVN->getMaskElt(i);
548 }
else if (
const ConstantSDNode *CSDN = dyn_cast<ConstantSDNode>(
this)) {
549 OS <<
'<' << CSDN->getAPIntValue() <<
'>';
550 }
else if (
const ConstantFPSDNode *CSDN = dyn_cast<ConstantFPSDNode>(
this)) {
552 OS <<
'<' << CSDN->getValueAPF().convertToFloat() <<
'>';
554 OS <<
'<' << CSDN->getValueAPF().convertToDouble() <<
'>';
557 CSDN->getValueAPF().bitcastToAPInt().print(OS,
false);
561 dyn_cast<GlobalAddressSDNode>(
this)) {
562 int64_t offset = GADN->getOffset();
564 GADN->getGlobal()->printAsOperand(OS);
567 OS << " + " << offset; 570 if (unsigned int TF = GADN->getTargetFlags()) 571 OS << " [TF=" << TF << ']
'; 572 } else if (const FrameIndexSDNode *FIDN = dyn_cast<FrameIndexSDNode>(this)) { 573 OS << "<" << FIDN->getIndex() << ">"; 574 } else if (const JumpTableSDNode *JTDN = dyn_cast<JumpTableSDNode>(this)) { 575 OS << "<" << JTDN->getIndex() << ">"; 576 if (unsigned int TF = JTDN->getTargetFlags()) 577 OS << " [TF=" << TF << ']
'; 578 } else if (const ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(this)){ 579 int offset = CP->getOffset(); 580 if (CP->isMachineConstantPoolEntry()) 581 OS << "<" << *CP->getMachineCPVal() << ">"; 583 OS << "<" << *CP->getConstVal() << ">"; 585 OS << " + " << offset; 588 if (unsigned int TF = CP->getTargetFlags()) 589 OS << " [TF=" << TF << ']
'; 590 } else if (const TargetIndexSDNode *TI = dyn_cast<TargetIndexSDNode>(this)) { 591 OS << "<" << TI->getIndex() << '+
' << TI->getOffset() << ">"; 592 if (unsigned TF = TI->getTargetFlags()) 593 OS << " [TF=" << TF << ']
'; 594 } else if (const BasicBlockSDNode *BBDN = dyn_cast<BasicBlockSDNode>(this)) { 596 const Value *LBB = (const Value*)BBDN->getBasicBlock()->getBasicBlock(); 598 OS << LBB->getName() << " "; 599 OS << (const void*)BBDN->getBasicBlock() << ">"; 600 } else if (const RegisterSDNode *R = dyn_cast<RegisterSDNode>(this)) { 601 OS << ' ' << printReg(R->getReg(), 602 G ? G->getSubtarget().getRegisterInfo() : nullptr); 603 } else if (const ExternalSymbolSDNode *ES = 604 dyn_cast<ExternalSymbolSDNode>(this)) { 605 OS << "'" << ES->getSymbol() << "'"; 606 if (unsigned int TF = ES->getTargetFlags()) 607 OS << " [TF=" << TF << ']
'; 608 } else if (const SrcValueSDNode *M = dyn_cast<SrcValueSDNode>(this)) { 610 OS << "<" << M->getValue() << ">"; 613 } else if (const MDNodeSDNode *MD = dyn_cast<MDNodeSDNode>(this)) { 615 OS << "<" << MD->getMD() << ">"; 618 } else if (const VTSDNode *N = dyn_cast<VTSDNode>(this)) { 619 OS << ":" << N->getVT().getEVTString(); 621 else if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(this)) { 624 printMemOperand(OS, *LD->getMemOperand(), G); 627 switch (LD->getExtensionType()) { 628 default: doExt = false; break; 629 case ISD::EXTLOAD: OS << ", anyext"; break; 630 case ISD::SEXTLOAD: OS << ", sext"; break; 631 case ISD::ZEXTLOAD: OS << ", zext"; break; 634 OS << " from " << LD->getMemoryVT().getEVTString(); 636 const char *AM = getIndexedModeName(LD->getAddressingMode()); 641 } else if (const StoreSDNode *ST = dyn_cast<StoreSDNode>(this)) { 643 printMemOperand(OS, *ST->getMemOperand(), G); 645 if (ST->isTruncatingStore()) 646 OS << ", trunc to " << ST->getMemoryVT().getEVTString(); 648 const char *AM = getIndexedModeName(ST->getAddressingMode()); 653 } else if (const MemSDNode* M = dyn_cast<MemSDNode>(this)) { 655 printMemOperand(OS, *M->getMemOperand(), G); 657 } else if (const BlockAddressSDNode *BA = 658 dyn_cast<BlockAddressSDNode>(this)) { 659 int64_t offset = BA->getOffset(); 661 BA->getBlockAddress()->getFunction()->printAsOperand(OS, false); 663 BA->getBlockAddress()->getBasicBlock()->printAsOperand(OS, false); 666 OS << " + " << offset; 669 if (unsigned int TF = BA->getTargetFlags()) 670 OS << " [TF=" << TF << ']
'; 671 } else if (const AddrSpaceCastSDNode *ASC = 672 dyn_cast<AddrSpaceCastSDNode>(this)) { 674 << ASC->getSrcAddressSpace() 676 << ASC->getDestAddressSpace() 680 if (VerboseDAGDumping) { 681 if (unsigned Order = getIROrder()) 682 OS << " [ORD=" << Order << ']
'; 684 if (getNodeId() != -1) 685 OS << " [ID=" << getNodeId() << ']
'; 686 if (!(isa<ConstantSDNode>(this) || (isa<ConstantFPSDNode>(this)))) 687 OS << "# D:" << isDivergent(); 692 DILocation *L = getDebugLoc(); 696 if (auto *Scope = L->getScope()) 697 OS << Scope->getFilename(); 700 OS << ':
' << L->getLine(); 701 if (unsigned C = L->getColumn()) 704 for (SDDbgValue *Dbg : G->GetDbgValues(this)) { 705 if (Dbg->getKind() != SDDbgValue::SDNODE || Dbg->isInvalidated()) 712 LLVM_DUMP_METHOD void SDDbgValue::dump(raw_ostream &OS) const { 715 OS << '(
' << u.s.ResNo << ')
'; 716 OS << ":\"" << Var->getName() << '"'; 718 if (Expr->getNumElements()) 725 static bool shouldPrintInline(const SDNode &Node) {
726 if (Node.getOpcode() == ISD::EntryToken)
728 return Node.getNumOperands() == 0;
731 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
732 static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {
733 for (const SDValue &Op : N->op_values()) {
734 if (shouldPrintInline(*Op.getNode()))
736 if (Op.getNode()->hasOneUse())
737 DumpNodes(Op.getNode(), indent+2, G);
740 dbgs().indent(indent);
744 LLVM_DUMP_METHOD void SelectionDAG::dump() const {
747 for (allnodes_const_iterator I = allnodes_begin(), E = allnodes_end(); 749 const SDNode *N = &*I; 750 if (!N->hasOneUse() && N != getRoot().getNode() && 751 (!shouldPrintInline(*N) || N->use_empty())) 752 DumpNodes(N, 2, this); 755 if (getRoot().getNode()) DumpNodes(getRoot().getNode(), 2, this); 760 void SDNode::printr(raw_ostream &OS, const SelectionDAG *G) const { 761 OS << PrintNodeId(*this) << ":
"; 763 OS << " =
" << getOperationName(G); 764 print_details(OS, G); 767 static bool printOperand(raw_ostream &OS, const SelectionDAG *G, 768 const SDValue Value) { 769 if (!Value.getNode()) { 772 } else if (shouldPrintInline(*Value.getNode())) { 773 OS << Value->getOperationName(G) << ':'; 774 Value->print_types(OS, G); 775 Value->print_details(OS, G); 778 OS << PrintNodeId(*Value.getNode()); 779 if (unsigned RN = Value.getResNo()) 785 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 786 using VisitedSDNodeSet = SmallPtrSet<const SDNode *, 32>; 788 static void DumpNodesr(raw_ostream &OS, const SDNode *N, unsigned indent, 789 const SelectionDAG *G, VisitedSDNodeSet &once) { 790 if (!once.insert(N).second) // If we've been here before, return now. 793 // Dump the current SDNode, but don't end the line yet. 797 // Having printed this SDNode, walk the children: 798 for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) { 802 const SDValue Op = N->getOperand(i); 803 bool printedInline = printOperand(OS, G, Op); 805 once.insert(Op.getNode()); 810 // Dump children that have grandchildren on their own line(s). 811 for (const SDValue &Op : N->op_values()) 812 DumpNodesr(OS, Op.getNode(), indent+2, G, once); 815 LLVM_DUMP_METHOD void SDNode::dumpr() const { 816 VisitedSDNodeSet once; 817 DumpNodesr(dbgs(), this, 0, nullptr, once); 820 LLVM_DUMP_METHOD void SDNode::dumpr(const SelectionDAG *G) const { 821 VisitedSDNodeSet once; 822 DumpNodesr(dbgs(), this, 0, G, once); 826 static void printrWithDepthHelper(raw_ostream &OS, const SDNode *N, 827 const SelectionDAG *G, unsigned depth, 839 for (const SDValue &Op : N->op_values()) { 840 // Don't follow chain operands. 841 if (Op.getValueType() == MVT::Other) 844 printrWithDepthHelper(OS, Op.getNode(), G, depth-1, indent+2); 848 void SDNode::printrWithDepth(raw_ostream &OS, const SelectionDAG *G, 849 unsigned depth) const { 850 printrWithDepthHelper(OS, this, G, depth, 0); 853 void SDNode::printrFull(raw_ostream &OS, const SelectionDAG *G) const { 854 // Don't print impossibly deep things. 855 printrWithDepth(OS, G, 10); 858 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 860 void SDNode::dumprWithDepth(const SelectionDAG *G, unsigned depth) const { 861 printrWithDepth(dbgs(), G, depth); 864 LLVM_DUMP_METHOD void SDNode::dumprFull(const SelectionDAG *G) const { 865 // Don't print impossibly deep things. 866 dumprWithDepth(G, 10); 870 void SDNode::print(raw_ostream &OS, const SelectionDAG *G) const { 872 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { 873 if (i) OS << ",
"; else OS << " "; 874 printOperand(OS, G, getOperand(i)); 876 if (DebugLoc DL = getDebugLoc()) { ADJUST_TRAMPOLINE - This corresponds to the adjust_trampoline intrinsic.
BITCAST - This operator converts between integer, vector and FP values, as if the value was stored to...
X = FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating point type down to the precision of the ...
BUILTIN_OP_END - This must be the last enum value in this list.
FMINNUM/FMAXNUM - Perform floating-point minimum or maximum on two values.
Constrained versions of libm-equivalent floating point intrinsics.
std::string getOperationName(const SelectionDAG *G=nullptr) const
Return the opcode of this operation for printing.
EXTRACT_ELEMENT - This is used to get the lower or upper (determined by a Constant, which is required to be operand #1) half of the integer or float value specified as operand #0.
unsigned getOpcode() const
Return the SelectionDAG opcode value for this node.
DELETED_NODE - This is an illegal value that is used to catch errors.
MDNODE_SDNODE - This is a node that holdes an MDNode*, which is used to reference metadata in the IR...
EXTRACT_SUBVECTOR(VECTOR, IDX) - Returns a subvector from VECTOR (an vector value) starting with the ...
BR_CC - Conditional branch.
This class represents lattice values for constants.
FMINIMUM/FMAXIMUM - NaN-propagating minimum/maximum that also treat -0.0 as less than 0...
VECTOR_SHUFFLE(VEC1, VEC2) - Returns a vector, of the same type as VEC1/VEC2.
A Module instance is used to store all the information related to an LLVM module. ...
ZERO_EXTEND_VECTOR_INREG(Vector) - This operator represents an in-register zero-extension of the low ...
Carry-setting nodes for multiple precision addition and subtraction.
EVT getValueType(unsigned ResNo) const
Return the type of a specified result.
STACKRESTORE has two operands, an input chain and a pointer to restore to it returns an output chain...
void print_details(raw_ostream &OS, const SelectionDAG *G) const
RESULT, BOOL = [SU]ADDO(LHS, RHS) - Overflow-aware nodes for addition.
TargetGlobalAddress - Like GlobalAddress, but the DAG does no folding or anything else with this node...
Val, Success, OUTCHAIN = ATOMIC_CMP_SWAP_WITH_SUCCESS(INCHAIN, ptr, cmp, swap) N.b.
virtual const char * getTargetNodeName(unsigned Opcode) const
This method returns the name of a target specific DAG node.
Constrained versions of the binary floating point operators.
SIGN_EXTEND_VECTOR_INREG(Vector) - This operator represents an in-register sign-extension of the low ...
Manage lifetime of a slot tracker for printing IR.
[US]{MIN/MAX} - Binary minimum or maximum or signed or unsigned integers.
const SDNodeFlags getFlags() const
void print(raw_ostream &OS) const
Support for operator<<.
INSERT_SUBVECTOR(VECTOR1, VECTOR2, IDX) - Returns a vector with VECTOR2 inserted into VECTOR1 at the ...
uint16_t PersistentId
Unique and persistent id per SDNode in the DAG.
EntryToken - This is the marker used to indicate the start of a region.
OUTCHAIN = ATOMIC_FENCE(INCHAIN, ordering, scope) This corresponds to the fence instruction.
Select with condition operator - This selects between a true value and a false value (ops #2 and #3) ...
INT = FGETSIGN(FP) - Return the sign bit of the specified floating point value as an integer 0/1 valu...
This SDNode is used to implement the code generator support for the llvm IR shufflevector instruction...
RESULT,OUTCHAIN = INTRINSIC_W_CHAIN(INCHAIN, INTRINSICID, arg1, ...) This node represents a target in...
OUTCHAIN = EH_SJLJ_LONGJMP(INCHAIN, buffer) This corresponds to the eh.sjlj.longjmp intrinsic...
SDIVREM/UDIVREM - Divide two integers and produce both a quotient and remainder result.
SHL_PARTS/SRA_PARTS/SRL_PARTS - These operators are used for expanded integer shift operations...
CLEANUPRET - Represents a return from a cleanup block funclet.
static Printable PrintNodeId(const SDNode &Node)
A description of a memory reference used in the backend.
amdgpu Simplify well known AMD library false Value Value const Twine & Name
PCMARKER - This corresponds to the pcmarker intrinsic.
StringRef getName(ID id)
Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx".
This file declares the MachineConstantPool class which is an abstract constant pool to keep track of ...
const HexagonInstrInfo * TII
Shift and rotation operations.
ABS - Determine the unsigned absolute value of a signed integer value of the same bitwidth...
BUILD_PAIR - This is the opposite of EXTRACT_ELEMENT in some ways.
RESULT = SMULFIX(LHS, RHS, SCALE) - Perform fixed point multiplication on 2 integers with the same wi...
CopyToReg - This node has three operands: a chain, a register number to set to this value...
FLT_ROUNDS_ - Returns current rounding mode: -1 Undefined 0 Round to 0 1 Round to nearest 2 Round to ...
CALLSEQ_START/CALLSEQ_END - These operators mark the beginning and end of a call sequence, and carry arbitrary information that target might want to know.
EH_DWARF_CFA - This node represents the pointer to the DWARF Canonical Frame Address (CFA)...
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted...
Val, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amt) Val, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amt) For double-word atomic operations: ValLo, ValHi, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amtLo, amtHi) ValLo, ValHi, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amtLo, amtHi) These correspond to the atomicrmw instruction.
FRAMEADDR, RETURNADDR - These nodes represent llvm.frameaddress and llvm.returnaddress on the DAG...
This class defines information used to lower LLVM code to legal SelectionDAG operators that the targe...
This file implements a class to represent arbitrary precision integral constant values and operations...
INLINEASM - Represents an inline asm block.
STACKSAVE - STACKSAVE has one operand, an input chain.
FRAME_TO_ARGS_OFFSET - This node represents offset from frame pointer to first (possible) on-stack ar...
MachineFunction & getMachineFunction() const
[SU]INT_TO_FP - These operators convert integers (whose interpreted sign depends on the first letter)...
OUTCHAIN = EH_SJLJ_SETUP_DISPATCH(INCHAIN) The target initializes the dispatch table here...
const TargetMachine & getTarget() const
Select with a vector condition (op #0) and two vector operands (ops #1 and #2), returning a vector re...
Simple integer binary arithmetic operators.
virtual const TargetInstrInfo * getInstrInfo() const
static const fltSemantics & IEEEdouble() LLVM_READNONE
TargetConstant* - Like Constant*, but the DAG does not do any folding, simplification, or lowering of the constant.
static const char * getIndexedModeName(ISD::MemIndexedMode AM)
READCYCLECOUNTER - This corresponds to the readcyclecounter intrinsic.
ANY_EXTEND_VECTOR_INREG(Vector) - This operator represents an in-register any-extension of the low la...
RESULT = INTRINSIC_WO_CHAIN(INTRINSICID, arg1, arg2, ...) This node represents a target intrinsic fun...
UNDEF - An undefined node.
FP_TO_[US]INT - Convert a floating point value to a signed or unsigned integer.
BUILD_VECTOR(ELT0, ELT1, ELT2, ELT3,...) - Return a vector with the specified, possibly variable...
TargetInstrInfo - Interface to description of machine instruction set.
This corresponds to the llvm.lifetime.
unsigned getNumValues() const
Return the number of values defined/returned by this operator.
OUTCHAIN = INTRINSIC_VOID(INCHAIN, INTRINSICID, arg1, arg2, ...) This node represents a target intrin...
These reductions are non-strict, and have a single vector operand.
Control flow instructions. These all have token chains.
READ_REGISTER, WRITE_REGISTER - This node represents llvm.register on the DAG, which implements the n...
GC_TRANSITION_START/GC_TRANSITION_END - These operators mark the beginning and end of GC transition s...
LOCAL_RECOVER - Represents the llvm.localrecover intrinsic.
static cl::opt< bool > VerboseDAGDumping("dag-dump-verbose", cl::Hidden, cl::desc("Display more information when dumping selection " "DAG nodes."))
This is an important class for using LLVM in a threaded context.
Simple binary floating point operators.
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
VAEND, VASTART - VAEND and VASTART have three operands: an input chain, pointer, and a SRCVALUE...
const SDValue & getOperand(unsigned Num) const
INSERT_VECTOR_ELT(VECTOR, VAL, IDX) - Returns VECTOR with the element at IDX replaced with VAL...
This file contains the declarations for the subclasses of Constant, which represent the different fla...
Carry-using nodes for multiple precision addition and subtraction.
This file declares a class to represent arbitrary precision floating point values and provide a varie...
INIT_TRAMPOLINE - This corresponds to the init_trampoline intrinsic.
TRAP - Trapping instruction.
TargetIndex - Like a constant pool entry, but with completely target-dependent semantics.
std::string getEVTString() const
This function returns value type as a string, e.g. "i32".
AssertSext, AssertZext - These nodes record if a register contains a value that has already been zero...
DEBUGTRAP - Trap intended to get the attention of a debugger.
VAARG - VAARG has four operands: an input chain, a pointer, a SRCVALUE, and the alignment.
Bit counting operators with an undefined result for zero inputs.
Val, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmp, swap) For double-word atomic operations: ValLo...
X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.
void incorporateFunction(const Function &F)
Incorporate the given function.
bool isMachineOpcode() const
Test if this node has a post-isel opcode, directly corresponding to a MachineInstr opcode...
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
HANDLENODE node - Used as a handle for various purposes.
EH_LABEL - Represents a label in mid basic block used to track locations needed for debug and excepti...
TargetIntrinsicInfo - Interface to description of machine instruction set.
RESULT = [US]ADDSAT(LHS, RHS) - Perform saturation addition on 2 integers with the same bit width (W)...
TokenFactor - This node takes multiple tokens as input and produces a single token result...
void dump() const
Dump this node, for debugging.
static const fltSemantics & IEEEsingle() LLVM_READNONE
static void printMemOperand(raw_ostream &OS, const MachineMemOperand &MMO, const MachineFunction *MF, const Module *M, const MachineFrameInfo *MFI, const TargetInstrInfo *TII, LLVMContext &Ctx)
const TargetLowering & getTargetLoweringInfo() const
Returns platform specific canonical encoding of a floating point number.
EXTRACT_VECTOR_ELT(VECTOR, IDX) - Returns a single element from VECTOR identified by the (potentially...
Like SetCC, ops #0 and #1 are the LHS and RHS operands to compare, but op #2 is a boolean indicating ...
This is used to represent a portion of an LLVM function in a low-level Data Dependence DAG representa...
X = FP_ROUND_INREG(Y, VT) - This operator takes an FP register, and rounds it to a floating point val...
ADDRSPACECAST - This operator converts between pointers of different address spaces.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small...
BRCOND - Conditional branch.
FMINNUM_IEEE/FMAXNUM_IEEE - Perform floating-point minimum or maximum on two values, following the IEEE-754 2008 definition.
An SDNode that represents everything that will be needed to construct a MachineInstr.
Byte Swap and Counting operators.
FP16_TO_FP, FP_TO_FP16 - These operators are used to perform promotions and truncation for half-preci...
Represents one node in the SelectionDAG.
std::string utostr(uint64_t X, bool isNeg=false)
const Function & getFunction() const
Return the LLVM function that this machine code represents.
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Select(COND, TRUEVAL, FALSEVAL).
ZERO_EXTEND - Used for integer types, zeroing the new bits.
ANY_EXTEND - Used for integer types. The high bits are undefined.
FCOPYSIGN(X, Y) - Return the value of X with the sign of Y.
CATCHRET - Represents a return from a catch block funclet.
GET_DYNAMIC_AREA_OFFSET - get offset from native SP to the address of the most recent dynamic alloca...
BR_JT - Jumptable branch.
VACOPY - VACOPY has 5 operands: an input chain, a destination pointer, a source pointer, a SRCVALUE for the destination, and a SRCVALUE for the source.
Bitwise operators - logical and, logical or, logical xor.
iterator_range< typename GraphTraits< GraphType >::nodes_iterator > nodes(const GraphType &G)
SMUL_LOHI/UMUL_LOHI - Multiply two integers of type iN, producing a signed/unsigned value of type i[2...
SIGN_EXTEND_INREG - This operator atomically performs a SHL/SRA pair to sign extend a small value in ...
LOAD and STORE have token chains as their first operand, then the same operands as an LLVM load/store...
virtual const TargetIntrinsicInfo * getIntrinsicInfo() const
If intrinsic information is available, return it. If not, return null.
const TargetSubtargetInfo & getSubtarget() const
RESULT = [US]SUBSAT(LHS, RHS) - Perform saturation subtraction on 2 integers with the same bit width ...
FSINCOS - Compute both fsin and fcos as a single operation.
void print_types(raw_ostream &OS, const SelectionDAG *G) const
RESULT, OUTCHAIN = EH_SJLJ_SETJMP(INCHAIN, buffer) This corresponds to the eh.sjlj.setjmp intrinsic.
CopyFromReg - This node indicates that the input value is a virtual or physical register that is defi...
OUTCHAIN = EH_RETURN(INCHAIN, OFFSET, HANDLER) - This node represents 'eh_return' gcc dwarf builtin...
CONCAT_VECTORS(VECTOR0, VECTOR1, ...) - Given a number of values of vector type with the same length ...
void print(raw_ostream &OS, const SelectionDAG *G=nullptr) const
Module * getParent()
Get the module that this global value is contained inside of...
FMA - Perform a * b + c with no intermediate rounding step.
FMIN/FMAX nodes can have flags, for NaN/NoNaN variants.
unsigned getMachineOpcode() const
This may only be called if isMachineOpcode returns true.
PREFETCH - This corresponds to a prefetch intrinsic.
This class implements an extremely fast bulk output stream that can only output to a stream...
FMAD - Perform a * b + c, while getting the same result as the separately rounded operations...
SetCC operator - This evaluates to a true value iff the condition is true.
MERGE_VALUES - This node takes multiple discrete operands and returns them all as its individual resu...
Simple wrapper around std::function<void(raw_ostream&)>.
OUTCHAIN = ATOMIC_STORE(INCHAIN, ptr, val) This corresponds to "store atomic" instruction.
TRUNCATE - Completely drop the high bits.
Perform various unary floating-point operations inspired by libm.
Val, OUTCHAIN = ATOMIC_LOAD(INCHAIN, ptr) This corresponds to "load atomic" instruction.
LLVMContext * getContext() const
SCALAR_TO_VECTOR(VAL) - This represents the operation of loading a scalar value into element 0 of the...
Carry-using nodes for multiple precision addition and subtraction.
CARRY_FALSE - This node is used when folding other nodes, like ADDC/SUBC, which indicate the carry re...
This file describes how to lower LLVM code to machine code.
MemIndexedMode
MemIndexedMode enum - This enum defines the load / store indexed addressing modes.
MULHU/MULHS - Multiply high - Multiply two integers of type iN, producing an unsigned/signed value of...
SRCVALUE - This is a node type that holds a Value* that is used to make reference to a value in the L...
DYNAMIC_STACKALLOC - Allocate some number of bytes on the stack aligned to a specified boundary...