Home | History | Annotate | Download | only in CodeGen
      1 //===-- llvm/CodeGen/ISDOpcodes.h - CodeGen opcodes -------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file declares codegen opcodes and related utilities.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_CODEGEN_ISDOPCODES_H
     15 #define LLVM_CODEGEN_ISDOPCODES_H
     16 
     17 namespace llvm {
     18 
     19 /// ISD namespace - This namespace contains an enum which represents all of the
     20 /// SelectionDAG node types and value types.
     21 ///
     22 namespace ISD {
     23 
     24   //===--------------------------------------------------------------------===//
     25   /// ISD::NodeType enum - This enum defines the target-independent operators
     26   /// for a SelectionDAG.
     27   ///
     28   /// Targets may also define target-dependent operator codes for SDNodes. For
     29   /// example, on x86, these are the enum values in the X86ISD namespace.
     30   /// Targets should aim to use target-independent operators to model their
     31   /// instruction sets as much as possible, and only use target-dependent
     32   /// operators when they have special requirements.
     33   ///
     34   /// Finally, during and after selection proper, SNodes may use special
     35   /// operator codes that correspond directly with MachineInstr opcodes. These
     36   /// are used to represent selected instructions. See the isMachineOpcode()
     37   /// and getMachineOpcode() member functions of SDNode.
     38   ///
     39   enum NodeType {
     40     /// DELETED_NODE - This is an illegal value that is used to catch
     41     /// errors.  This opcode is not a legal opcode for any node.
     42     DELETED_NODE,
     43 
     44     /// EntryToken - This is the marker used to indicate the start of a region.
     45     EntryToken,
     46 
     47     /// TokenFactor - This node takes multiple tokens as input and produces a
     48     /// single token result. This is used to represent the fact that the operand
     49     /// operators are independent of each other.
     50     TokenFactor,
     51 
     52     /// AssertSext, AssertZext - These nodes record if a register contains a
     53     /// value that has already been zero or sign extended from a narrower type.
     54     /// These nodes take two operands.  The first is the node that has already
     55     /// been extended, and the second is a value type node indicating the width
     56     /// of the extension
     57     AssertSext, AssertZext,
     58 
     59     /// Various leaf nodes.
     60     BasicBlock, VALUETYPE, CONDCODE, Register, RegisterMask,
     61     Constant, ConstantFP,
     62     GlobalAddress, GlobalTLSAddress, FrameIndex,
     63     JumpTable, ConstantPool, ExternalSymbol, BlockAddress,
     64 
     65     /// The address of the GOT
     66     GLOBAL_OFFSET_TABLE,
     67 
     68     /// FRAMEADDR, RETURNADDR - These nodes represent llvm.frameaddress and
     69     /// llvm.returnaddress on the DAG.  These nodes take one operand, the index
     70     /// of the frame or return address to return.  An index of zero corresponds
     71     /// to the current function's frame or return address, an index of one to
     72     /// the parent's frame or return address, and so on.
     73     FRAMEADDR, RETURNADDR,
     74 
     75     /// FRAME_ALLOC_RECOVER - Represents the llvm.framerecover
     76     /// intrinsic. Materializes the offset from the frame pointer of another
     77     /// function to the result of llvm.frameallocate.
     78     FRAME_ALLOC_RECOVER,
     79 
     80     /// READ_REGISTER, WRITE_REGISTER - This node represents llvm.register on
     81     /// the DAG, which implements the named register global variables extension.
     82     READ_REGISTER,
     83     WRITE_REGISTER,
     84 
     85     /// FRAME_TO_ARGS_OFFSET - This node represents offset from frame pointer to
     86     /// first (possible) on-stack argument. This is needed for correct stack
     87     /// adjustment during unwind.
     88     FRAME_TO_ARGS_OFFSET,
     89 
     90     /// OUTCHAIN = EH_RETURN(INCHAIN, OFFSET, HANDLER) - This node represents
     91     /// 'eh_return' gcc dwarf builtin, which is used to return from
     92     /// exception. The general meaning is: adjust stack by OFFSET and pass
     93     /// execution to HANDLER. Many platform-related details also :)
     94     EH_RETURN,
     95 
     96     /// RESULT, OUTCHAIN = EH_SJLJ_SETJMP(INCHAIN, buffer)
     97     /// This corresponds to the eh.sjlj.setjmp intrinsic.
     98     /// It takes an input chain and a pointer to the jump buffer as inputs
     99     /// and returns an outchain.
    100     EH_SJLJ_SETJMP,
    101 
    102     /// OUTCHAIN = EH_SJLJ_LONGJMP(INCHAIN, buffer)
    103     /// This corresponds to the eh.sjlj.longjmp intrinsic.
    104     /// It takes an input chain and a pointer to the jump buffer as inputs
    105     /// and returns an outchain.
    106     EH_SJLJ_LONGJMP,
    107 
    108     /// TargetConstant* - Like Constant*, but the DAG does not do any folding,
    109     /// simplification, or lowering of the constant. They are used for constants
    110     /// which are known to fit in the immediate fields of their users, or for
    111     /// carrying magic numbers which are not values which need to be
    112     /// materialized in registers.
    113     TargetConstant,
    114     TargetConstantFP,
    115 
    116     /// TargetGlobalAddress - Like GlobalAddress, but the DAG does no folding or
    117     /// anything else with this node, and this is valid in the target-specific
    118     /// dag, turning into a GlobalAddress operand.
    119     TargetGlobalAddress,
    120     TargetGlobalTLSAddress,
    121     TargetFrameIndex,
    122     TargetJumpTable,
    123     TargetConstantPool,
    124     TargetExternalSymbol,
    125     TargetBlockAddress,
    126 
    127     /// TargetIndex - Like a constant pool entry, but with completely
    128     /// target-dependent semantics. Holds target flags, a 32-bit index, and a
    129     /// 64-bit index. Targets can use this however they like.
    130     TargetIndex,
    131 
    132     /// RESULT = INTRINSIC_WO_CHAIN(INTRINSICID, arg1, arg2, ...)
    133     /// This node represents a target intrinsic function with no side effects.
    134     /// The first operand is the ID number of the intrinsic from the
    135     /// llvm::Intrinsic namespace.  The operands to the intrinsic follow.  The
    136     /// node returns the result of the intrinsic.
    137     INTRINSIC_WO_CHAIN,
    138 
    139     /// RESULT,OUTCHAIN = INTRINSIC_W_CHAIN(INCHAIN, INTRINSICID, arg1, ...)
    140     /// This node represents a target intrinsic function with side effects that
    141     /// returns a result.  The first operand is a chain pointer.  The second is
    142     /// the ID number of the intrinsic from the llvm::Intrinsic namespace.  The
    143     /// operands to the intrinsic follow.  The node has two results, the result
    144     /// of the intrinsic and an output chain.
    145     INTRINSIC_W_CHAIN,
    146 
    147     /// OUTCHAIN = INTRINSIC_VOID(INCHAIN, INTRINSICID, arg1, arg2, ...)
    148     /// This node represents a target intrinsic function with side effects that
    149     /// does not return a result.  The first operand is a chain pointer.  The
    150     /// second is the ID number of the intrinsic from the llvm::Intrinsic
    151     /// namespace.  The operands to the intrinsic follow.
    152     INTRINSIC_VOID,
    153 
    154     /// CopyToReg - This node has three operands: a chain, a register number to
    155     /// set to this value, and a value.
    156     CopyToReg,
    157 
    158     /// CopyFromReg - This node indicates that the input value is a virtual or
    159     /// physical register that is defined outside of the scope of this
    160     /// SelectionDAG.  The register is available from the RegisterSDNode object.
    161     CopyFromReg,
    162 
    163     /// UNDEF - An undefined node.
    164     UNDEF,
    165 
    166     /// EXTRACT_ELEMENT - This is used to get the lower or upper (determined by
    167     /// a Constant, which is required to be operand #1) half of the integer or
    168     /// float value specified as operand #0.  This is only for use before
    169     /// legalization, for values that will be broken into multiple registers.
    170     EXTRACT_ELEMENT,
    171 
    172     /// BUILD_PAIR - This is the opposite of EXTRACT_ELEMENT in some ways.
    173     /// Given two values of the same integer value type, this produces a value
    174     /// twice as big.  Like EXTRACT_ELEMENT, this can only be used before
    175     /// legalization.
    176     BUILD_PAIR,
    177 
    178     /// MERGE_VALUES - This node takes multiple discrete operands and returns
    179     /// them all as its individual results.  This nodes has exactly the same
    180     /// number of inputs and outputs. This node is useful for some pieces of the
    181     /// code generator that want to think about a single node with multiple
    182     /// results, not multiple nodes.
    183     MERGE_VALUES,
    184 
    185     /// Simple integer binary arithmetic operators.
    186     ADD, SUB, MUL, SDIV, UDIV, SREM, UREM,
    187 
    188     /// SMUL_LOHI/UMUL_LOHI - Multiply two integers of type iN, producing
    189     /// a signed/unsigned value of type i[2*N], and return the full value as
    190     /// two results, each of type iN.
    191     SMUL_LOHI, UMUL_LOHI,
    192 
    193     /// SDIVREM/UDIVREM - Divide two integers and produce both a quotient and
    194     /// remainder result.
    195     SDIVREM, UDIVREM,
    196 
    197     /// CARRY_FALSE - This node is used when folding other nodes,
    198     /// like ADDC/SUBC, which indicate the carry result is always false.
    199     CARRY_FALSE,
    200 
    201     /// Carry-setting nodes for multiple precision addition and subtraction.
    202     /// These nodes take two operands of the same value type, and produce two
    203     /// results.  The first result is the normal add or sub result, the second
    204     /// result is the carry flag result.
    205     ADDC, SUBC,
    206 
    207     /// Carry-using nodes for multiple precision addition and subtraction. These
    208     /// nodes take three operands: The first two are the normal lhs and rhs to
    209     /// the add or sub, and the third is the input carry flag.  These nodes
    210     /// produce two results; the normal result of the add or sub, and the output
    211     /// carry flag.  These nodes both read and write a carry flag to allow them
    212     /// to them to be chained together for add and sub of arbitrarily large
    213     /// values.
    214     ADDE, SUBE,
    215 
    216     /// RESULT, BOOL = [SU]ADDO(LHS, RHS) - Overflow-aware nodes for addition.
    217     /// These nodes take two operands: the normal LHS and RHS to the add. They
    218     /// produce two results: the normal result of the add, and a boolean that
    219     /// indicates if an overflow occurred (*not* a flag, because it may be store
    220     /// to memory, etc.).  If the type of the boolean is not i1 then the high
    221     /// bits conform to getBooleanContents.
    222     /// These nodes are generated from llvm.[su]add.with.overflow intrinsics.
    223     SADDO, UADDO,
    224 
    225     /// Same for subtraction.
    226     SSUBO, USUBO,
    227 
    228     /// Same for multiplication.
    229     SMULO, UMULO,
    230 
    231     /// Simple binary floating point operators.
    232     FADD, FSUB, FMUL, FDIV, FREM,
    233 
    234     /// FMA - Perform a * b + c with no intermediate rounding step.
    235     FMA,
    236 
    237     /// FMAD - Perform a * b + c, while getting the same result as the
    238     /// separately rounded operations.
    239     FMAD,
    240 
    241     /// FCOPYSIGN(X, Y) - Return the value of X with the sign of Y.  NOTE: This
    242     /// DAG node does not require that X and Y have the same type, just that the
    243     /// are both floating point.  X and the result must have the same type.
    244     /// FCOPYSIGN(f32, f64) is allowed.
    245     FCOPYSIGN,
    246 
    247     /// INT = FGETSIGN(FP) - Return the sign bit of the specified floating point
    248     /// value as an integer 0/1 value.
    249     FGETSIGN,
    250 
    251     /// BUILD_VECTOR(ELT0, ELT1, ELT2, ELT3,...) - Return a vector with the
    252     /// specified, possibly variable, elements.  The number of elements is
    253     /// required to be a power of two.  The types of the operands must all be
    254     /// the same and must match the vector element type, except that integer
    255     /// types are allowed to be larger than the element type, in which case
    256     /// the operands are implicitly truncated.
    257     BUILD_VECTOR,
    258 
    259     /// INSERT_VECTOR_ELT(VECTOR, VAL, IDX) - Returns VECTOR with the element
    260     /// at IDX replaced with VAL.  If the type of VAL is larger than the vector
    261     /// element type then VAL is truncated before replacement.
    262     INSERT_VECTOR_ELT,
    263 
    264     /// EXTRACT_VECTOR_ELT(VECTOR, IDX) - Returns a single element from VECTOR
    265     /// identified by the (potentially variable) element number IDX.  If the
    266     /// return type is an integer type larger than the element type of the
    267     /// vector, the result is extended to the width of the return type.
    268     EXTRACT_VECTOR_ELT,
    269 
    270     /// CONCAT_VECTORS(VECTOR0, VECTOR1, ...) - Given a number of values of
    271     /// vector type with the same length and element type, this produces a
    272     /// concatenated vector result value, with length equal to the sum of the
    273     /// lengths of the input vectors.
    274     CONCAT_VECTORS,
    275 
    276     /// INSERT_SUBVECTOR(VECTOR1, VECTOR2, IDX) - Returns a vector
    277     /// with VECTOR2 inserted into VECTOR1 at the (potentially
    278     /// variable) element number IDX, which must be a multiple of the
    279     /// VECTOR2 vector length.  The elements of VECTOR1 starting at
    280     /// IDX are overwritten with VECTOR2.  Elements IDX through
    281     /// vector_length(VECTOR2) must be valid VECTOR1 indices.
    282     INSERT_SUBVECTOR,
    283 
    284     /// EXTRACT_SUBVECTOR(VECTOR, IDX) - Returns a subvector from VECTOR (an
    285     /// vector value) starting with the element number IDX, which must be a
    286     /// constant multiple of the result vector length.
    287     EXTRACT_SUBVECTOR,
    288 
    289     /// VECTOR_SHUFFLE(VEC1, VEC2) - Returns a vector, of the same type as
    290     /// VEC1/VEC2.  A VECTOR_SHUFFLE node also contains an array of constant int
    291     /// values that indicate which value (or undef) each result element will
    292     /// get.  These constant ints are accessible through the
    293     /// ShuffleVectorSDNode class.  This is quite similar to the Altivec
    294     /// 'vperm' instruction, except that the indices must be constants and are
    295     /// in terms of the element size of VEC1/VEC2, not in terms of bytes.
    296     VECTOR_SHUFFLE,
    297 
    298     /// SCALAR_TO_VECTOR(VAL) - This represents the operation of loading a
    299     /// scalar value into element 0 of the resultant vector type.  The top
    300     /// elements 1 to N-1 of the N-element vector are undefined.  The type
    301     /// of the operand must match the vector element type, except when they
    302     /// are integer types.  In this case the operand is allowed to be wider
    303     /// than the vector element type, and is implicitly truncated to it.
    304     SCALAR_TO_VECTOR,
    305 
    306     /// MULHU/MULHS - Multiply high - Multiply two integers of type iN,
    307     /// producing an unsigned/signed value of type i[2*N], then return the top
    308     /// part.
    309     MULHU, MULHS,
    310 
    311     /// Bitwise operators - logical and, logical or, logical xor.
    312     AND, OR, XOR,
    313 
    314     /// Shift and rotation operations.  After legalization, the type of the
    315     /// shift amount is known to be TLI.getShiftAmountTy().  Before legalization
    316     /// the shift amount can be any type, but care must be taken to ensure it is
    317     /// large enough.  TLI.getShiftAmountTy() is i8 on some targets, but before
    318     /// legalization, types like i1024 can occur and i8 doesn't have enough bits
    319     /// to represent the shift amount.
    320     /// When the 1st operand is a vector, the shift amount must be in the same
    321     /// type. (TLI.getShiftAmountTy() will return the same type when the input
    322     /// type is a vector.)
    323     SHL, SRA, SRL, ROTL, ROTR,
    324 
    325     /// Byte Swap and Counting operators.
    326     BSWAP, CTTZ, CTLZ, CTPOP,
    327 
    328     /// Bit counting operators with an undefined result for zero inputs.
    329     CTTZ_ZERO_UNDEF, CTLZ_ZERO_UNDEF,
    330 
    331     /// Select(COND, TRUEVAL, FALSEVAL).  If the type of the boolean COND is not
    332     /// i1 then the high bits must conform to getBooleanContents.
    333     SELECT,
    334 
    335     /// Select with a vector condition (op #0) and two vector operands (ops #1
    336     /// and #2), returning a vector result.  All vectors have the same length.
    337     /// Much like the scalar select and setcc, each bit in the condition selects
    338     /// whether the corresponding result element is taken from op #1 or op #2.
    339     /// At first, the VSELECT condition is of vXi1 type. Later, targets may
    340     /// change the condition type in order to match the VSELECT node using a
    341     /// pattern. The condition follows the BooleanContent format of the target.
    342     VSELECT,
    343 
    344     /// Select with condition operator - This selects between a true value and
    345     /// a false value (ops #2 and #3) based on the boolean result of comparing
    346     /// the lhs and rhs (ops #0 and #1) of a conditional expression with the
    347     /// condition code in op #4, a CondCodeSDNode.
    348     SELECT_CC,
    349 
    350     /// SetCC operator - This evaluates to a true value iff the condition is
    351     /// true.  If the result value type is not i1 then the high bits conform
    352     /// to getBooleanContents.  The operands to this are the left and right
    353     /// operands to compare (ops #0, and #1) and the condition code to compare
    354     /// them with (op #2) as a CondCodeSDNode. If the operands are vector types
    355     /// then the result type must also be a vector type.
    356     SETCC,
    357 
    358     /// SHL_PARTS/SRA_PARTS/SRL_PARTS - These operators are used for expanded
    359     /// integer shift operations, just like ADD/SUB_PARTS.  The operation
    360     /// ordering is:
    361     ///       [Lo,Hi] = op [LoLHS,HiLHS], Amt
    362     SHL_PARTS, SRA_PARTS, SRL_PARTS,
    363 
    364     /// Conversion operators.  These are all single input single output
    365     /// operations.  For all of these, the result type must be strictly
    366     /// wider or narrower (depending on the operation) than the source
    367     /// type.
    368 
    369     /// SIGN_EXTEND - Used for integer types, replicating the sign bit
    370     /// into new bits.
    371     SIGN_EXTEND,
    372 
    373     /// ZERO_EXTEND - Used for integer types, zeroing the new bits.
    374     ZERO_EXTEND,
    375 
    376     /// ANY_EXTEND - Used for integer types.  The high bits are undefined.
    377     ANY_EXTEND,
    378 
    379     /// TRUNCATE - Completely drop the high bits.
    380     TRUNCATE,
    381 
    382     /// [SU]INT_TO_FP - These operators convert integers (whose interpreted sign
    383     /// depends on the first letter) to floating point.
    384     SINT_TO_FP,
    385     UINT_TO_FP,
    386 
    387     /// SIGN_EXTEND_INREG - This operator atomically performs a SHL/SRA pair to
    388     /// sign extend a small value in a large integer register (e.g. sign
    389     /// extending the low 8 bits of a 32-bit register to fill the top 24 bits
    390     /// with the 7th bit).  The size of the smaller type is indicated by the 1th
    391     /// operand, a ValueType node.
    392     SIGN_EXTEND_INREG,
    393 
    394     /// ANY_EXTEND_VECTOR_INREG(Vector) - This operator represents an
    395     /// in-register any-extension of the low lanes of an integer vector. The
    396     /// result type must have fewer elements than the operand type, and those
    397     /// elements must be larger integer types such that the total size of the
    398     /// operand type and the result type match. Each of the low operand
    399     /// elements is any-extended into the corresponding, wider result
    400     /// elements with the high bits becoming undef.
    401     ANY_EXTEND_VECTOR_INREG,
    402 
    403     /// SIGN_EXTEND_VECTOR_INREG(Vector) - This operator represents an
    404     /// in-register sign-extension of the low lanes of an integer vector. The
    405     /// result type must have fewer elements than the operand type, and those
    406     /// elements must be larger integer types such that the total size of the
    407     /// operand type and the result type match. Each of the low operand
    408     /// elements is sign-extended into the corresponding, wider result
    409     /// elements.
    410     // FIXME: The SIGN_EXTEND_INREG node isn't specifically limited to
    411     // scalars, but it also doesn't handle vectors well. Either it should be
    412     // restricted to scalars or this node (and its handling) should be merged
    413     // into it.
    414     SIGN_EXTEND_VECTOR_INREG,
    415 
    416     /// ZERO_EXTEND_VECTOR_INREG(Vector) - This operator represents an
    417     /// in-register zero-extension of the low lanes of an integer vector. The
    418     /// result type must have fewer elements than the operand type, and those
    419     /// elements must be larger integer types such that the total size of the
    420     /// operand type and the result type match. Each of the low operand
    421     /// elements is zero-extended into the corresponding, wider result
    422     /// elements.
    423     ZERO_EXTEND_VECTOR_INREG,
    424 
    425     /// FP_TO_[US]INT - Convert a floating point value to a signed or unsigned
    426     /// integer.
    427     FP_TO_SINT,
    428     FP_TO_UINT,
    429 
    430     /// X = FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating point type
    431     /// down to the precision of the destination VT.  TRUNC is a flag, which is
    432     /// always an integer that is zero or one.  If TRUNC is 0, this is a
    433     /// normal rounding, if it is 1, this FP_ROUND is known to not change the
    434     /// value of Y.
    435     ///
    436     /// The TRUNC = 1 case is used in cases where we know that the value will
    437     /// not be modified by the node, because Y is not using any of the extra
    438     /// precision of source type.  This allows certain transformations like
    439     /// FP_EXTEND(FP_ROUND(X,1)) -> X which are not safe for
    440     /// FP_EXTEND(FP_ROUND(X,0)) because the extra bits aren't removed.
    441     FP_ROUND,
    442 
    443     /// FLT_ROUNDS_ - Returns current rounding mode:
    444     /// -1 Undefined
    445     ///  0 Round to 0
    446     ///  1 Round to nearest
    447     ///  2 Round to +inf
    448     ///  3 Round to -inf
    449     FLT_ROUNDS_,
    450 
    451     /// X = FP_ROUND_INREG(Y, VT) - This operator takes an FP register, and
    452     /// rounds it to a floating point value.  It then promotes it and returns it
    453     /// in a register of the same size.  This operation effectively just
    454     /// discards excess precision.  The type to round down to is specified by
    455     /// the VT operand, a VTSDNode.
    456     FP_ROUND_INREG,
    457 
    458     /// X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.
    459     FP_EXTEND,
    460 
    461     /// BITCAST - This operator converts between integer, vector and FP
    462     /// values, as if the value was stored to memory with one type and loaded
    463     /// from the same address with the other type (or equivalently for vector
    464     /// format conversions, etc).  The source and result are required to have
    465     /// the same bit size (e.g.  f32 <-> i32).  This can also be used for
    466     /// int-to-int or fp-to-fp conversions, but that is a noop, deleted by
    467     /// getNode().
    468     BITCAST,
    469 
    470     /// ADDRSPACECAST - This operator converts between pointers of different
    471     /// address spaces.
    472     ADDRSPACECAST,
    473 
    474     /// CONVERT_RNDSAT - This operator is used to support various conversions
    475     /// between various types (float, signed, unsigned and vectors of those
    476     /// types) with rounding and saturation. NOTE: Avoid using this operator as
    477     /// most target don't support it and the operator might be removed in the
    478     /// future. It takes the following arguments:
    479     ///   0) value
    480     ///   1) dest type (type to convert to)
    481     ///   2) src type (type to convert from)
    482     ///   3) rounding imm
    483     ///   4) saturation imm
    484     ///   5) ISD::CvtCode indicating the type of conversion to do
    485     CONVERT_RNDSAT,
    486 
    487     /// FP16_TO_FP, FP_TO_FP16 - These operators are used to perform promotions
    488     /// and truncation for half-precision (16 bit) floating numbers. These nodes
    489     /// form a semi-softened interface for dealing with f16 (as an i16), which
    490     /// is often a storage-only type but has native conversions.
    491     FP16_TO_FP, FP_TO_FP16,
    492 
    493     /// FNEG, FABS, FSQRT, FSIN, FCOS, FPOWI, FPOW,
    494     /// FLOG, FLOG2, FLOG10, FEXP, FEXP2,
    495     /// FCEIL, FTRUNC, FRINT, FNEARBYINT, FROUND, FFLOOR - Perform various unary
    496     /// floating point operations. These are inspired by libm.
    497     FNEG, FABS, FSQRT, FSIN, FCOS, FPOWI, FPOW,
    498     FLOG, FLOG2, FLOG10, FEXP, FEXP2,
    499     FCEIL, FTRUNC, FRINT, FNEARBYINT, FROUND, FFLOOR,
    500     FMINNUM, FMAXNUM,
    501 
    502     /// FSINCOS - Compute both fsin and fcos as a single operation.
    503     FSINCOS,
    504 
    505     /// LOAD and STORE have token chains as their first operand, then the same
    506     /// operands as an LLVM load/store instruction, then an offset node that
    507     /// is added / subtracted from the base pointer to form the address (for
    508     /// indexed memory ops).
    509     LOAD, STORE,
    510 
    511     /// DYNAMIC_STACKALLOC - Allocate some number of bytes on the stack aligned
    512     /// to a specified boundary.  This node always has two return values: a new
    513     /// stack pointer value and a chain. The first operand is the token chain,
    514     /// the second is the number of bytes to allocate, and the third is the
    515     /// alignment boundary.  The size is guaranteed to be a multiple of the
    516     /// stack alignment, and the alignment is guaranteed to be bigger than the
    517     /// stack alignment (if required) or 0 to get standard stack alignment.
    518     DYNAMIC_STACKALLOC,
    519 
    520     /// Control flow instructions.  These all have token chains.
    521 
    522     /// BR - Unconditional branch.  The first operand is the chain
    523     /// operand, the second is the MBB to branch to.
    524     BR,
    525 
    526     /// BRIND - Indirect branch.  The first operand is the chain, the second
    527     /// is the value to branch to, which must be of the same type as the
    528     /// target's pointer type.
    529     BRIND,
    530 
    531     /// BR_JT - Jumptable branch. The first operand is the chain, the second
    532     /// is the jumptable index, the last one is the jumptable entry index.
    533     BR_JT,
    534 
    535     /// BRCOND - Conditional branch.  The first operand is the chain, the
    536     /// second is the condition, the third is the block to branch to if the
    537     /// condition is true.  If the type of the condition is not i1, then the
    538     /// high bits must conform to getBooleanContents.
    539     BRCOND,
    540 
    541     /// BR_CC - Conditional branch.  The behavior is like that of SELECT_CC, in
    542     /// that the condition is represented as condition code, and two nodes to
    543     /// compare, rather than as a combined SetCC node.  The operands in order
    544     /// are chain, cc, lhs, rhs, block to branch to if condition is true.
    545     BR_CC,
    546 
    547     /// INLINEASM - Represents an inline asm block.  This node always has two
    548     /// return values: a chain and a flag result.  The inputs are as follows:
    549     ///   Operand #0  : Input chain.
    550     ///   Operand #1  : a ExternalSymbolSDNode with a pointer to the asm string.
    551     ///   Operand #2  : a MDNodeSDNode with the !srcloc metadata.
    552     ///   Operand #3  : HasSideEffect, IsAlignStack bits.
    553     ///   After this, it is followed by a list of operands with this format:
    554     ///     ConstantSDNode: Flags that encode whether it is a mem or not, the
    555     ///                     of operands that follow, etc.  See InlineAsm.h.
    556     ///     ... however many operands ...
    557     ///   Operand #last: Optional, an incoming flag.
    558     ///
    559     /// The variable width operands are required to represent target addressing
    560     /// modes as a single "operand", even though they may have multiple
    561     /// SDOperands.
    562     INLINEASM,
    563 
    564     /// EH_LABEL - Represents a label in mid basic block used to track
    565     /// locations needed for debug and exception handling tables.  These nodes
    566     /// take a chain as input and return a chain.
    567     EH_LABEL,
    568 
    569     /// STACKSAVE - STACKSAVE has one operand, an input chain.  It produces a
    570     /// value, the same type as the pointer type for the system, and an output
    571     /// chain.
    572     STACKSAVE,
    573 
    574     /// STACKRESTORE has two operands, an input chain and a pointer to restore
    575     /// to it returns an output chain.
    576     STACKRESTORE,
    577 
    578     /// CALLSEQ_START/CALLSEQ_END - These operators mark the beginning and end
    579     /// of a call sequence, and carry arbitrary information that target might
    580     /// want to know.  The first operand is a chain, the rest are specified by
    581     /// the target and not touched by the DAG optimizers.
    582     /// CALLSEQ_START..CALLSEQ_END pairs may not be nested.
    583     CALLSEQ_START,  // Beginning of a call sequence
    584     CALLSEQ_END,    // End of a call sequence
    585 
    586     /// VAARG - VAARG has four operands: an input chain, a pointer, a SRCVALUE,
    587     /// and the alignment. It returns a pair of values: the vaarg value and a
    588     /// new chain.
    589     VAARG,
    590 
    591     /// VACOPY - VACOPY has 5 operands: an input chain, a destination pointer,
    592     /// a source pointer, a SRCVALUE for the destination, and a SRCVALUE for the
    593     /// source.
    594     VACOPY,
    595 
    596     /// VAEND, VASTART - VAEND and VASTART have three operands: an input chain,
    597     /// pointer, and a SRCVALUE.
    598     VAEND, VASTART,
    599 
    600     /// SRCVALUE - This is a node type that holds a Value* that is used to
    601     /// make reference to a value in the LLVM IR.
    602     SRCVALUE,
    603 
    604     /// MDNODE_SDNODE - This is a node that holdes an MDNode*, which is used to
    605     /// reference metadata in the IR.
    606     MDNODE_SDNODE,
    607 
    608     /// PCMARKER - This corresponds to the pcmarker intrinsic.
    609     PCMARKER,
    610 
    611     /// READCYCLECOUNTER - This corresponds to the readcyclecounter intrinsic.
    612     /// The only operand is a chain and a value and a chain are produced.  The
    613     /// value is the contents of the architecture specific cycle counter like
    614     /// register (or other high accuracy low latency clock source)
    615     READCYCLECOUNTER,
    616 
    617     /// HANDLENODE node - Used as a handle for various purposes.
    618     HANDLENODE,
    619 
    620     /// INIT_TRAMPOLINE - This corresponds to the init_trampoline intrinsic.  It
    621     /// takes as input a token chain, the pointer to the trampoline, the pointer
    622     /// to the nested function, the pointer to pass for the 'nest' parameter, a
    623     /// SRCVALUE for the trampoline and another for the nested function
    624     /// (allowing targets to access the original Function*).
    625     /// It produces a token chain as output.
    626     INIT_TRAMPOLINE,
    627 
    628     /// ADJUST_TRAMPOLINE - This corresponds to the adjust_trampoline intrinsic.
    629     /// It takes a pointer to the trampoline and produces a (possibly) new
    630     /// pointer to the same trampoline with platform-specific adjustments
    631     /// applied.  The pointer it returns points to an executable block of code.
    632     ADJUST_TRAMPOLINE,
    633 
    634     /// TRAP - Trapping instruction
    635     TRAP,
    636 
    637     /// DEBUGTRAP - Trap intended to get the attention of a debugger.
    638     DEBUGTRAP,
    639 
    640     /// PREFETCH - This corresponds to a prefetch intrinsic. The first operand
    641     /// is the chain.  The other operands are the address to prefetch,
    642     /// read / write specifier, locality specifier and instruction / data cache
    643     /// specifier.
    644     PREFETCH,
    645 
    646     /// OUTCHAIN = ATOMIC_FENCE(INCHAIN, ordering, scope)
    647     /// This corresponds to the fence instruction. It takes an input chain, and
    648     /// two integer constants: an AtomicOrdering and a SynchronizationScope.
    649     ATOMIC_FENCE,
    650 
    651     /// Val, OUTCHAIN = ATOMIC_LOAD(INCHAIN, ptr)
    652     /// This corresponds to "load atomic" instruction.
    653     ATOMIC_LOAD,
    654 
    655     /// OUTCHAIN = ATOMIC_STORE(INCHAIN, ptr, val)
    656     /// This corresponds to "store atomic" instruction.
    657     ATOMIC_STORE,
    658 
    659     /// Val, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmp, swap)
    660     /// For double-word atomic operations:
    661     /// ValLo, ValHi, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmpLo, cmpHi,
    662     ///                                          swapLo, swapHi)
    663     /// This corresponds to the cmpxchg instruction.
    664     ATOMIC_CMP_SWAP,
    665 
    666     /// Val, Success, OUTCHAIN
    667     ///     = ATOMIC_CMP_SWAP_WITH_SUCCESS(INCHAIN, ptr, cmp, swap)
    668     /// N.b. this is still a strong cmpxchg operation, so
    669     /// Success == "Val == cmp".
    670     ATOMIC_CMP_SWAP_WITH_SUCCESS,
    671 
    672     /// Val, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amt)
    673     /// Val, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amt)
    674     /// For double-word atomic operations:
    675     /// ValLo, ValHi, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amtLo, amtHi)
    676     /// ValLo, ValHi, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amtLo, amtHi)
    677     /// These correspond to the atomicrmw instruction.
    678     ATOMIC_SWAP,
    679     ATOMIC_LOAD_ADD,
    680     ATOMIC_LOAD_SUB,
    681     ATOMIC_LOAD_AND,
    682     ATOMIC_LOAD_OR,
    683     ATOMIC_LOAD_XOR,
    684     ATOMIC_LOAD_NAND,
    685     ATOMIC_LOAD_MIN,
    686     ATOMIC_LOAD_MAX,
    687     ATOMIC_LOAD_UMIN,
    688     ATOMIC_LOAD_UMAX,
    689 
    690     // Masked load and store
    691     MLOAD, MSTORE,
    692 
    693     /// This corresponds to the llvm.lifetime.* intrinsics. The first operand
    694     /// is the chain and the second operand is the alloca pointer.
    695     LIFETIME_START, LIFETIME_END,
    696 
    697     /// BUILTIN_OP_END - This must be the last enum value in this list.
    698     /// The target-specific pre-isel opcode values start here.
    699     BUILTIN_OP_END
    700   };
    701 
    702   /// FIRST_TARGET_MEMORY_OPCODE - Target-specific pre-isel operations
    703   /// which do not reference a specific memory location should be less than
    704   /// this value. Those that do must not be less than this value, and can
    705   /// be used with SelectionDAG::getMemIntrinsicNode.
    706   static const int FIRST_TARGET_MEMORY_OPCODE = BUILTIN_OP_END+200;
    707 
    708   //===--------------------------------------------------------------------===//
    709   /// MemIndexedMode enum - This enum defines the load / store indexed
    710   /// addressing modes.
    711   ///
    712   /// UNINDEXED    "Normal" load / store. The effective address is already
    713   ///              computed and is available in the base pointer. The offset
    714   ///              operand is always undefined. In addition to producing a
    715   ///              chain, an unindexed load produces one value (result of the
    716   ///              load); an unindexed store does not produce a value.
    717   ///
    718   /// PRE_INC      Similar to the unindexed mode where the effective address is
    719   /// PRE_DEC      the value of the base pointer add / subtract the offset.
    720   ///              It considers the computation as being folded into the load /
    721   ///              store operation (i.e. the load / store does the address
    722   ///              computation as well as performing the memory transaction).
    723   ///              The base operand is always undefined. In addition to
    724   ///              producing a chain, pre-indexed load produces two values
    725   ///              (result of the load and the result of the address
    726   ///              computation); a pre-indexed store produces one value (result
    727   ///              of the address computation).
    728   ///
    729   /// POST_INC     The effective address is the value of the base pointer. The
    730   /// POST_DEC     value of the offset operand is then added to / subtracted
    731   ///              from the base after memory transaction. In addition to
    732   ///              producing a chain, post-indexed load produces two values
    733   ///              (the result of the load and the result of the base +/- offset
    734   ///              computation); a post-indexed store produces one value (the
    735   ///              the result of the base +/- offset computation).
    736   enum MemIndexedMode {
    737     UNINDEXED = 0,
    738     PRE_INC,
    739     PRE_DEC,
    740     POST_INC,
    741     POST_DEC,
    742     LAST_INDEXED_MODE
    743   };
    744 
    745   //===--------------------------------------------------------------------===//
    746   /// LoadExtType enum - This enum defines the three variants of LOADEXT
    747   /// (load with extension).
    748   ///
    749   /// SEXTLOAD loads the integer operand and sign extends it to a larger
    750   ///          integer result type.
    751   /// ZEXTLOAD loads the integer operand and zero extends it to a larger
    752   ///          integer result type.
    753   /// EXTLOAD  is used for two things: floating point extending loads and
    754   ///          integer extending loads [the top bits are undefined].
    755   enum LoadExtType {
    756     NON_EXTLOAD = 0,
    757     EXTLOAD,
    758     SEXTLOAD,
    759     ZEXTLOAD,
    760     LAST_LOADEXT_TYPE
    761   };
    762 
    763   NodeType getExtForLoadExtType(bool IsFP, LoadExtType);
    764 
    765   //===--------------------------------------------------------------------===//
    766   /// ISD::CondCode enum - These are ordered carefully to make the bitfields
    767   /// below work out, when considering SETFALSE (something that never exists
    768   /// dynamically) as 0.  "U" -> Unsigned (for integer operands) or Unordered
    769   /// (for floating point), "L" -> Less than, "G" -> Greater than, "E" -> Equal
    770   /// to.  If the "N" column is 1, the result of the comparison is undefined if
    771   /// the input is a NAN.
    772   ///
    773   /// All of these (except for the 'always folded ops') should be handled for
    774   /// floating point.  For integer, only the SETEQ,SETNE,SETLT,SETLE,SETGT,
    775   /// SETGE,SETULT,SETULE,SETUGT, and SETUGE opcodes are used.
    776   ///
    777   /// Note that these are laid out in a specific order to allow bit-twiddling
    778   /// to transform conditions.
    779   enum CondCode {
    780     // Opcode          N U L G E       Intuitive operation
    781     SETFALSE,      //    0 0 0 0       Always false (always folded)
    782     SETOEQ,        //    0 0 0 1       True if ordered and equal
    783     SETOGT,        //    0 0 1 0       True if ordered and greater than
    784     SETOGE,        //    0 0 1 1       True if ordered and greater than or equal
    785     SETOLT,        //    0 1 0 0       True if ordered and less than
    786     SETOLE,        //    0 1 0 1       True if ordered and less than or equal
    787     SETONE,        //    0 1 1 0       True if ordered and operands are unequal
    788     SETO,          //    0 1 1 1       True if ordered (no nans)
    789     SETUO,         //    1 0 0 0       True if unordered: isnan(X) | isnan(Y)
    790     SETUEQ,        //    1 0 0 1       True if unordered or equal
    791     SETUGT,        //    1 0 1 0       True if unordered or greater than
    792     SETUGE,        //    1 0 1 1       True if unordered, greater than, or equal
    793     SETULT,        //    1 1 0 0       True if unordered or less than
    794     SETULE,        //    1 1 0 1       True if unordered, less than, or equal
    795     SETUNE,        //    1 1 1 0       True if unordered or not equal
    796     SETTRUE,       //    1 1 1 1       Always true (always folded)
    797     // Don't care operations: undefined if the input is a nan.
    798     SETFALSE2,     //  1 X 0 0 0       Always false (always folded)
    799     SETEQ,         //  1 X 0 0 1       True if equal
    800     SETGT,         //  1 X 0 1 0       True if greater than
    801     SETGE,         //  1 X 0 1 1       True if greater than or equal
    802     SETLT,         //  1 X 1 0 0       True if less than
    803     SETLE,         //  1 X 1 0 1       True if less than or equal
    804     SETNE,         //  1 X 1 1 0       True if not equal
    805     SETTRUE2,      //  1 X 1 1 1       Always true (always folded)
    806 
    807     SETCC_INVALID       // Marker value.
    808   };
    809 
    810   /// isSignedIntSetCC - Return true if this is a setcc instruction that
    811   /// performs a signed comparison when used with integer operands.
    812   inline bool isSignedIntSetCC(CondCode Code) {
    813     return Code == SETGT || Code == SETGE || Code == SETLT || Code == SETLE;
    814   }
    815 
    816   /// isUnsignedIntSetCC - Return true if this is a setcc instruction that
    817   /// performs an unsigned comparison when used with integer operands.
    818   inline bool isUnsignedIntSetCC(CondCode Code) {
    819     return Code == SETUGT || Code == SETUGE || Code == SETULT || Code == SETULE;
    820   }
    821 
    822   /// isTrueWhenEqual - Return true if the specified condition returns true if
    823   /// the two operands to the condition are equal.  Note that if one of the two
    824   /// operands is a NaN, this value is meaningless.
    825   inline bool isTrueWhenEqual(CondCode Cond) {
    826     return ((int)Cond & 1) != 0;
    827   }
    828 
    829   /// getUnorderedFlavor - This function returns 0 if the condition is always
    830   /// false if an operand is a NaN, 1 if the condition is always true if the
    831   /// operand is a NaN, and 2 if the condition is undefined if the operand is a
    832   /// NaN.
    833   inline unsigned getUnorderedFlavor(CondCode Cond) {
    834     return ((int)Cond >> 3) & 3;
    835   }
    836 
    837   /// getSetCCInverse - Return the operation corresponding to !(X op Y), where
    838   /// 'op' is a valid SetCC operation.
    839   CondCode getSetCCInverse(CondCode Operation, bool isInteger);
    840 
    841   /// getSetCCSwappedOperands - Return the operation corresponding to (Y op X)
    842   /// when given the operation for (X op Y).
    843   CondCode getSetCCSwappedOperands(CondCode Operation);
    844 
    845   /// getSetCCOrOperation - Return the result of a logical OR between different
    846   /// comparisons of identical values: ((X op1 Y) | (X op2 Y)).  This
    847   /// function returns SETCC_INVALID if it is not possible to represent the
    848   /// resultant comparison.
    849   CondCode getSetCCOrOperation(CondCode Op1, CondCode Op2, bool isInteger);
    850 
    851   /// getSetCCAndOperation - Return the result of a logical AND between
    852   /// different comparisons of identical values: ((X op1 Y) & (X op2 Y)).  This
    853   /// function returns SETCC_INVALID if it is not possible to represent the
    854   /// resultant comparison.
    855   CondCode getSetCCAndOperation(CondCode Op1, CondCode Op2, bool isInteger);
    856 
    857   //===--------------------------------------------------------------------===//
    858   /// CvtCode enum - This enum defines the various converts CONVERT_RNDSAT
    859   /// supports.
    860   enum CvtCode {
    861     CVT_FF,     /// Float from Float
    862     CVT_FS,     /// Float from Signed
    863     CVT_FU,     /// Float from Unsigned
    864     CVT_SF,     /// Signed from Float
    865     CVT_UF,     /// Unsigned from Float
    866     CVT_SS,     /// Signed from Signed
    867     CVT_SU,     /// Signed from Unsigned
    868     CVT_US,     /// Unsigned from Signed
    869     CVT_UU,     /// Unsigned from Unsigned
    870     CVT_INVALID /// Marker - Invalid opcode
    871   };
    872 
    873 } // end llvm::ISD namespace
    874 
    875 } // end llvm namespace
    876 
    877 #endif
    878