LLVM API Documentation

ISDOpcodes.h
Go to the documentation of this file.
00001 //===-- llvm/CodeGen/ISDOpcodes.h - CodeGen opcodes -------------*- C++ -*-===//
00002 //
00003 //                     The LLVM Compiler Infrastructure
00004 //
00005 // This file is distributed under the University of Illinois Open Source
00006 // License. See LICENSE.TXT for details.
00007 //
00008 //===----------------------------------------------------------------------===//
00009 //
00010 // This file declares codegen opcodes and related utilities.
00011 //
00012 //===----------------------------------------------------------------------===//
00013 
00014 #ifndef LLVM_CODEGEN_ISDOPCODES_H
00015 #define LLVM_CODEGEN_ISDOPCODES_H
00016 
00017 namespace llvm {
00018 
00019 /// ISD namespace - This namespace contains an enum which represents all of the
00020 /// SelectionDAG node types and value types.
00021 ///
00022 namespace ISD {
00023 
00024   //===--------------------------------------------------------------------===//
00025   /// ISD::NodeType enum - This enum defines the target-independent operators
00026   /// for a SelectionDAG.
00027   ///
00028   /// Targets may also define target-dependent operator codes for SDNodes. For
00029   /// example, on x86, these are the enum values in the X86ISD namespace.
00030   /// Targets should aim to use target-independent operators to model their
00031   /// instruction sets as much as possible, and only use target-dependent
00032   /// operators when they have special requirements.
00033   ///
00034   /// Finally, during and after selection proper, SNodes may use special
00035   /// operator codes that correspond directly with MachineInstr opcodes. These
00036   /// are used to represent selected instructions. See the isMachineOpcode()
00037   /// and getMachineOpcode() member functions of SDNode.
00038   ///
00039   enum NodeType {
00040     /// DELETED_NODE - This is an illegal value that is used to catch
00041     /// errors.  This opcode is not a legal opcode for any node.
00042     DELETED_NODE,
00043 
00044     /// EntryToken - This is the marker used to indicate the start of a region.
00045     EntryToken,
00046 
00047     /// TokenFactor - This node takes multiple tokens as input and produces a
00048     /// single token result. This is used to represent the fact that the operand
00049     /// operators are independent of each other.
00050     TokenFactor,
00051 
00052     /// AssertSext, AssertZext - These nodes record if a register contains a
00053     /// value that has already been zero or sign extended from a narrower type.
00054     /// These nodes take two operands.  The first is the node that has already
00055     /// been extended, and the second is a value type node indicating the width
00056     /// of the extension
00057     AssertSext, AssertZext,
00058 
00059     /// Various leaf nodes.
00060     BasicBlock, VALUETYPE, CONDCODE, Register, RegisterMask,
00061     Constant, ConstantFP,
00062     GlobalAddress, GlobalTLSAddress, FrameIndex,
00063     JumpTable, ConstantPool, ExternalSymbol, BlockAddress,
00064 
00065     /// The address of the GOT
00066     GLOBAL_OFFSET_TABLE,
00067 
00068     /// FRAMEADDR, RETURNADDR - These nodes represent llvm.frameaddress and
00069     /// llvm.returnaddress on the DAG.  These nodes take one operand, the index
00070     /// of the frame or return address to return.  An index of zero corresponds
00071     /// to the current function's frame or return address, an index of one to
00072     /// the parent's frame or return address, and so on.
00073     FRAMEADDR, RETURNADDR,
00074 
00075     /// READ_REGISTER, WRITE_REGISTER - This node represents llvm.register on
00076     /// the DAG, which implements the named register global variables extension.
00077     READ_REGISTER,
00078     WRITE_REGISTER,
00079 
00080     /// FRAME_TO_ARGS_OFFSET - This node represents offset from frame pointer to
00081     /// first (possible) on-stack argument. This is needed for correct stack
00082     /// adjustment during unwind.
00083     FRAME_TO_ARGS_OFFSET,
00084 
00085     /// OUTCHAIN = EH_RETURN(INCHAIN, OFFSET, HANDLER) - This node represents
00086     /// 'eh_return' gcc dwarf builtin, which is used to return from
00087     /// exception. The general meaning is: adjust stack by OFFSET and pass
00088     /// execution to HANDLER. Many platform-related details also :)
00089     EH_RETURN,
00090 
00091     /// RESULT, OUTCHAIN = EH_SJLJ_SETJMP(INCHAIN, buffer)
00092     /// This corresponds to the eh.sjlj.setjmp intrinsic.
00093     /// It takes an input chain and a pointer to the jump buffer as inputs
00094     /// and returns an outchain.
00095     EH_SJLJ_SETJMP,
00096 
00097     /// OUTCHAIN = EH_SJLJ_LONGJMP(INCHAIN, buffer)
00098     /// This corresponds to the eh.sjlj.longjmp intrinsic.
00099     /// It takes an input chain and a pointer to the jump buffer as inputs
00100     /// and returns an outchain.
00101     EH_SJLJ_LONGJMP,
00102 
00103     /// TargetConstant* - Like Constant*, but the DAG does not do any folding,
00104     /// simplification, or lowering of the constant. They are used for constants
00105     /// which are known to fit in the immediate fields of their users, or for
00106     /// carrying magic numbers which are not values which need to be
00107     /// materialized in registers.
00108     TargetConstant,
00109     TargetConstantFP,
00110 
00111     /// TargetGlobalAddress - Like GlobalAddress, but the DAG does no folding or
00112     /// anything else with this node, and this is valid in the target-specific
00113     /// dag, turning into a GlobalAddress operand.
00114     TargetGlobalAddress,
00115     TargetGlobalTLSAddress,
00116     TargetFrameIndex,
00117     TargetJumpTable,
00118     TargetConstantPool,
00119     TargetExternalSymbol,
00120     TargetBlockAddress,
00121 
00122     /// TargetIndex - Like a constant pool entry, but with completely
00123     /// target-dependent semantics. Holds target flags, a 32-bit index, and a
00124     /// 64-bit index. Targets can use this however they like.
00125     TargetIndex,
00126 
00127     /// RESULT = INTRINSIC_WO_CHAIN(INTRINSICID, arg1, arg2, ...)
00128     /// This node represents a target intrinsic function with no side effects.
00129     /// The first operand is the ID number of the intrinsic from the
00130     /// llvm::Intrinsic namespace.  The operands to the intrinsic follow.  The
00131     /// node returns the result of the intrinsic.
00132     INTRINSIC_WO_CHAIN,
00133 
00134     /// RESULT,OUTCHAIN = INTRINSIC_W_CHAIN(INCHAIN, INTRINSICID, arg1, ...)
00135     /// This node represents a target intrinsic function with side effects that
00136     /// returns a result.  The first operand is a chain pointer.  The second is
00137     /// the ID number of the intrinsic from the llvm::Intrinsic namespace.  The
00138     /// operands to the intrinsic follow.  The node has two results, the result
00139     /// of the intrinsic and an output chain.
00140     INTRINSIC_W_CHAIN,
00141 
00142     /// OUTCHAIN = INTRINSIC_VOID(INCHAIN, INTRINSICID, arg1, arg2, ...)
00143     /// This node represents a target intrinsic function with side effects that
00144     /// does not return a result.  The first operand is a chain pointer.  The
00145     /// second is the ID number of the intrinsic from the llvm::Intrinsic
00146     /// namespace.  The operands to the intrinsic follow.
00147     INTRINSIC_VOID,
00148 
00149     /// CopyToReg - This node has three operands: a chain, a register number to
00150     /// set to this value, and a value.
00151     CopyToReg,
00152 
00153     /// CopyFromReg - This node indicates that the input value is a virtual or
00154     /// physical register that is defined outside of the scope of this
00155     /// SelectionDAG.  The register is available from the RegisterSDNode object.
00156     CopyFromReg,
00157 
00158     /// UNDEF - An undefined node.
00159     UNDEF,
00160 
00161     /// EXTRACT_ELEMENT - This is used to get the lower or upper (determined by
00162     /// a Constant, which is required to be operand #1) half of the integer or
00163     /// float value specified as operand #0.  This is only for use before
00164     /// legalization, for values that will be broken into multiple registers.
00165     EXTRACT_ELEMENT,
00166 
00167     /// BUILD_PAIR - This is the opposite of EXTRACT_ELEMENT in some ways.
00168     /// Given two values of the same integer value type, this produces a value
00169     /// twice as big.  Like EXTRACT_ELEMENT, this can only be used before
00170     /// legalization.
00171     BUILD_PAIR,
00172 
00173     /// MERGE_VALUES - This node takes multiple discrete operands and returns
00174     /// them all as its individual results.  This nodes has exactly the same
00175     /// number of inputs and outputs. This node is useful for some pieces of the
00176     /// code generator that want to think about a single node with multiple
00177     /// results, not multiple nodes.
00178     MERGE_VALUES,
00179 
00180     /// Simple integer binary arithmetic operators.
00181     ADD, SUB, MUL, SDIV, UDIV, SREM, UREM,
00182 
00183     /// SMUL_LOHI/UMUL_LOHI - Multiply two integers of type iN, producing
00184     /// a signed/unsigned value of type i[2*N], and return the full value as
00185     /// two results, each of type iN.
00186     SMUL_LOHI, UMUL_LOHI,
00187 
00188     /// SDIVREM/UDIVREM - Divide two integers and produce both a quotient and
00189     /// remainder result.
00190     SDIVREM, UDIVREM,
00191 
00192     /// CARRY_FALSE - This node is used when folding other nodes,
00193     /// like ADDC/SUBC, which indicate the carry result is always false.
00194     CARRY_FALSE,
00195 
00196     /// Carry-setting nodes for multiple precision addition and subtraction.
00197     /// These nodes take two operands of the same value type, and produce two
00198     /// results.  The first result is the normal add or sub result, the second
00199     /// result is the carry flag result.
00200     ADDC, SUBC,
00201 
00202     /// Carry-using nodes for multiple precision addition and subtraction. These
00203     /// nodes take three operands: The first two are the normal lhs and rhs to
00204     /// the add or sub, and the third is the input carry flag.  These nodes
00205     /// produce two results; the normal result of the add or sub, and the output
00206     /// carry flag.  These nodes both read and write a carry flag to allow them
00207     /// to them to be chained together for add and sub of arbitrarily large
00208     /// values.
00209     ADDE, SUBE,
00210 
00211     /// RESULT, BOOL = [SU]ADDO(LHS, RHS) - Overflow-aware nodes for addition.
00212     /// These nodes take two operands: the normal LHS and RHS to the add. They
00213     /// produce two results: the normal result of the add, and a boolean that
00214     /// indicates if an overflow occurred (*not* a flag, because it may be store
00215     /// to memory, etc.).  If the type of the boolean is not i1 then the high
00216     /// bits conform to getBooleanContents.
00217     /// These nodes are generated from llvm.[su]add.with.overflow intrinsics.
00218     SADDO, UADDO,
00219 
00220     /// Same for subtraction.
00221     SSUBO, USUBO,
00222 
00223     /// Same for multiplication.
00224     SMULO, UMULO,
00225 
00226     /// Simple binary floating point operators.
00227     FADD, FSUB, FMUL, FMA, FDIV, FREM,
00228 
00229     /// FCOPYSIGN(X, Y) - Return the value of X with the sign of Y.  NOTE: This
00230     /// DAG node does not require that X and Y have the same type, just that the
00231     /// are both floating point.  X and the result must have the same type.
00232     /// FCOPYSIGN(f32, f64) is allowed.
00233     FCOPYSIGN,
00234 
00235     /// INT = FGETSIGN(FP) - Return the sign bit of the specified floating point
00236     /// value as an integer 0/1 value.
00237     FGETSIGN,
00238 
00239     /// BUILD_VECTOR(ELT0, ELT1, ELT2, ELT3,...) - Return a vector with the
00240     /// specified, possibly variable, elements.  The number of elements is
00241     /// required to be a power of two.  The types of the operands must all be
00242     /// the same and must match the vector element type, except that integer
00243     /// types are allowed to be larger than the element type, in which case
00244     /// the operands are implicitly truncated.
00245     BUILD_VECTOR,
00246 
00247     /// INSERT_VECTOR_ELT(VECTOR, VAL, IDX) - Returns VECTOR with the element
00248     /// at IDX replaced with VAL.  If the type of VAL is larger than the vector
00249     /// element type then VAL is truncated before replacement.
00250     INSERT_VECTOR_ELT,
00251 
00252     /// EXTRACT_VECTOR_ELT(VECTOR, IDX) - Returns a single element from VECTOR
00253     /// identified by the (potentially variable) element number IDX.  If the
00254     /// return type is an integer type larger than the element type of the
00255     /// vector, the result is extended to the width of the return type.
00256     EXTRACT_VECTOR_ELT,
00257 
00258     /// CONCAT_VECTORS(VECTOR0, VECTOR1, ...) - Given a number of values of
00259     /// vector type with the same length and element type, this produces a
00260     /// concatenated vector result value, with length equal to the sum of the
00261     /// lengths of the input vectors.
00262     CONCAT_VECTORS,
00263 
00264     /// INSERT_SUBVECTOR(VECTOR1, VECTOR2, IDX) - Returns a vector
00265     /// with VECTOR2 inserted into VECTOR1 at the (potentially
00266     /// variable) element number IDX, which must be a multiple of the
00267     /// VECTOR2 vector length.  The elements of VECTOR1 starting at
00268     /// IDX are overwritten with VECTOR2.  Elements IDX through
00269     /// vector_length(VECTOR2) must be valid VECTOR1 indices.
00270     INSERT_SUBVECTOR,
00271 
00272     /// EXTRACT_SUBVECTOR(VECTOR, IDX) - Returns a subvector from VECTOR (an
00273     /// vector value) starting with the element number IDX, which must be a
00274     /// constant multiple of the result vector length.
00275     EXTRACT_SUBVECTOR,
00276 
00277     /// VECTOR_SHUFFLE(VEC1, VEC2) - Returns a vector, of the same type as
00278     /// VEC1/VEC2.  A VECTOR_SHUFFLE node also contains an array of constant int
00279     /// values that indicate which value (or undef) each result element will
00280     /// get.  These constant ints are accessible through the
00281     /// ShuffleVectorSDNode class.  This is quite similar to the Altivec
00282     /// 'vperm' instruction, except that the indices must be constants and are
00283     /// in terms of the element size of VEC1/VEC2, not in terms of bytes.
00284     VECTOR_SHUFFLE,
00285 
00286     /// SCALAR_TO_VECTOR(VAL) - This represents the operation of loading a
00287     /// scalar value into element 0 of the resultant vector type.  The top
00288     /// elements 1 to N-1 of the N-element vector are undefined.  The type
00289     /// of the operand must match the vector element type, except when they
00290     /// are integer types.  In this case the operand is allowed to be wider
00291     /// than the vector element type, and is implicitly truncated to it.
00292     SCALAR_TO_VECTOR,
00293 
00294     /// MULHU/MULHS - Multiply high - Multiply two integers of type iN,
00295     /// producing an unsigned/signed value of type i[2*N], then return the top
00296     /// part.
00297     MULHU, MULHS,
00298 
00299     /// Bitwise operators - logical and, logical or, logical xor.
00300     AND, OR, XOR,
00301 
00302     /// Shift and rotation operations.  After legalization, the type of the
00303     /// shift amount is known to be TLI.getShiftAmountTy().  Before legalization
00304     /// the shift amount can be any type, but care must be taken to ensure it is
00305     /// large enough.  TLI.getShiftAmountTy() is i8 on some targets, but before
00306     /// legalization, types like i1024 can occur and i8 doesn't have enough bits
00307     /// to represent the shift amount.
00308     /// When the 1st operand is a vector, the shift amount must be in the same
00309     /// type. (TLI.getShiftAmountTy() will return the same type when the input
00310     /// type is a vector.)
00311     SHL, SRA, SRL, ROTL, ROTR,
00312 
00313     /// Byte Swap and Counting operators.
00314     BSWAP, CTTZ, CTLZ, CTPOP,
00315 
00316     /// Bit counting operators with an undefined result for zero inputs.
00317     CTTZ_ZERO_UNDEF, CTLZ_ZERO_UNDEF,
00318 
00319     /// Select(COND, TRUEVAL, FALSEVAL).  If the type of the boolean COND is not
00320     /// i1 then the high bits must conform to getBooleanContents.
00321     SELECT,
00322 
00323     /// Select with a vector condition (op #0) and two vector operands (ops #1
00324     /// and #2), returning a vector result.  All vectors have the same length.
00325     /// Much like the scalar select and setcc, each bit in the condition selects
00326     /// whether the corresponding result element is taken from op #1 or op #2.
00327     /// At first, the VSELECT condition is of vXi1 type. Later, targets may
00328     /// change the condition type in order to match the VSELECT node using a
00329     /// pattern. The condition follows the BooleanContent format of the target.
00330     VSELECT,
00331 
00332     /// Select with condition operator - This selects between a true value and
00333     /// a false value (ops #2 and #3) based on the boolean result of comparing
00334     /// the lhs and rhs (ops #0 and #1) of a conditional expression with the
00335     /// condition code in op #4, a CondCodeSDNode.
00336     SELECT_CC,
00337 
00338     /// SetCC operator - This evaluates to a true value iff the condition is
00339     /// true.  If the result value type is not i1 then the high bits conform
00340     /// to getBooleanContents.  The operands to this are the left and right
00341     /// operands to compare (ops #0, and #1) and the condition code to compare
00342     /// them with (op #2) as a CondCodeSDNode. If the operands are vector types
00343     /// then the result type must also be a vector type.
00344     SETCC,
00345 
00346     /// SHL_PARTS/SRA_PARTS/SRL_PARTS - These operators are used for expanded
00347     /// integer shift operations, just like ADD/SUB_PARTS.  The operation
00348     /// ordering is:
00349     ///       [Lo,Hi] = op [LoLHS,HiLHS], Amt
00350     SHL_PARTS, SRA_PARTS, SRL_PARTS,
00351 
00352     /// Conversion operators.  These are all single input single output
00353     /// operations.  For all of these, the result type must be strictly
00354     /// wider or narrower (depending on the operation) than the source
00355     /// type.
00356 
00357     /// SIGN_EXTEND - Used for integer types, replicating the sign bit
00358     /// into new bits.
00359     SIGN_EXTEND,
00360 
00361     /// ZERO_EXTEND - Used for integer types, zeroing the new bits.
00362     ZERO_EXTEND,
00363 
00364     /// ANY_EXTEND - Used for integer types.  The high bits are undefined.
00365     ANY_EXTEND,
00366 
00367     /// TRUNCATE - Completely drop the high bits.
00368     TRUNCATE,
00369 
00370     /// [SU]INT_TO_FP - These operators convert integers (whose interpreted sign
00371     /// depends on the first letter) to floating point.
00372     SINT_TO_FP,
00373     UINT_TO_FP,
00374 
00375     /// SIGN_EXTEND_INREG - This operator atomically performs a SHL/SRA pair to
00376     /// sign extend a small value in a large integer register (e.g. sign
00377     /// extending the low 8 bits of a 32-bit register to fill the top 24 bits
00378     /// with the 7th bit).  The size of the smaller type is indicated by the 1th
00379     /// operand, a ValueType node.
00380     SIGN_EXTEND_INREG,
00381 
00382     /// ANY_EXTEND_VECTOR_INREG(Vector) - This operator represents an
00383     /// in-register any-extension of the low lanes of an integer vector. The
00384     /// result type must have fewer elements than the operand type, and those
00385     /// elements must be larger integer types such that the total size of the
00386     /// operand type and the result type match. Each of the low operand
00387     /// elements is any-extended into the corresponding, wider result
00388     /// elements with the high bits becoming undef.
00389     ANY_EXTEND_VECTOR_INREG,
00390 
00391     /// SIGN_EXTEND_VECTOR_INREG(Vector) - This operator represents an
00392     /// in-register sign-extension of the low lanes of an integer vector. The
00393     /// result type must have fewer elements than the operand type, and those
00394     /// elements must be larger integer types such that the total size of the
00395     /// operand type and the result type match. Each of the low operand
00396     /// elements is sign-extended into the corresponding, wider result
00397     /// elements.
00398     // FIXME: The SIGN_EXTEND_INREG node isn't specifically limited to
00399     // scalars, but it also doesn't handle vectors well. Either it should be
00400     // restricted to scalars or this node (and its handling) should be merged
00401     // into it.
00402     SIGN_EXTEND_VECTOR_INREG,
00403 
00404     /// ZERO_EXTEND_VECTOR_INREG(Vector) - This operator represents an
00405     /// in-register zero-extension of the low lanes of an integer vector. The
00406     /// result type must have fewer elements than the operand type, and those
00407     /// elements must be larger integer types such that the total size of the
00408     /// operand type and the result type match. Each of the low operand
00409     /// elements is zero-extended into the corresponding, wider result
00410     /// elements.
00411     ZERO_EXTEND_VECTOR_INREG,
00412 
00413     /// FP_TO_[US]INT - Convert a floating point value to a signed or unsigned
00414     /// integer.
00415     FP_TO_SINT,
00416     FP_TO_UINT,
00417 
00418     /// X = FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating point type
00419     /// down to the precision of the destination VT.  TRUNC is a flag, which is
00420     /// always an integer that is zero or one.  If TRUNC is 0, this is a
00421     /// normal rounding, if it is 1, this FP_ROUND is known to not change the
00422     /// value of Y.
00423     ///
00424     /// The TRUNC = 1 case is used in cases where we know that the value will
00425     /// not be modified by the node, because Y is not using any of the extra
00426     /// precision of source type.  This allows certain transformations like
00427     /// FP_EXTEND(FP_ROUND(X,1)) -> X which are not safe for
00428     /// FP_EXTEND(FP_ROUND(X,0)) because the extra bits aren't removed.
00429     FP_ROUND,
00430 
00431     /// FLT_ROUNDS_ - Returns current rounding mode:
00432     /// -1 Undefined
00433     ///  0 Round to 0
00434     ///  1 Round to nearest
00435     ///  2 Round to +inf
00436     ///  3 Round to -inf
00437     FLT_ROUNDS_,
00438 
00439     /// X = FP_ROUND_INREG(Y, VT) - This operator takes an FP register, and
00440     /// rounds it to a floating point value.  It then promotes it and returns it
00441     /// in a register of the same size.  This operation effectively just
00442     /// discards excess precision.  The type to round down to is specified by
00443     /// the VT operand, a VTSDNode.
00444     FP_ROUND_INREG,
00445 
00446     /// X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.
00447     FP_EXTEND,
00448 
00449     /// BITCAST - This operator converts between integer, vector and FP
00450     /// values, as if the value was stored to memory with one type and loaded
00451     /// from the same address with the other type (or equivalently for vector
00452     /// format conversions, etc).  The source and result are required to have
00453     /// the same bit size (e.g.  f32 <-> i32).  This can also be used for
00454     /// int-to-int or fp-to-fp conversions, but that is a noop, deleted by
00455     /// getNode().
00456     BITCAST,
00457 
00458     /// ADDRSPACECAST - This operator converts between pointers of different
00459     /// address spaces.
00460     ADDRSPACECAST,
00461 
00462     /// CONVERT_RNDSAT - This operator is used to support various conversions
00463     /// between various types (float, signed, unsigned and vectors of those
00464     /// types) with rounding and saturation. NOTE: Avoid using this operator as
00465     /// most target don't support it and the operator might be removed in the
00466     /// future. It takes the following arguments:
00467     ///   0) value
00468     ///   1) dest type (type to convert to)
00469     ///   2) src type (type to convert from)
00470     ///   3) rounding imm
00471     ///   4) saturation imm
00472     ///   5) ISD::CvtCode indicating the type of conversion to do
00473     CONVERT_RNDSAT,
00474 
00475     /// FP16_TO_FP, FP_TO_FP16 - These operators are used to perform promotions
00476     /// and truncation for half-precision (16 bit) floating numbers. These nodes
00477     /// form a semi-softened interface for dealing with f16 (as an i16), which
00478     /// is often a storage-only type but has native conversions.
00479     FP16_TO_FP, FP_TO_FP16,
00480 
00481     /// FNEG, FABS, FSQRT, FSIN, FCOS, FPOWI, FPOW,
00482     /// FLOG, FLOG2, FLOG10, FEXP, FEXP2,
00483     /// FCEIL, FTRUNC, FRINT, FNEARBYINT, FROUND, FFLOOR - Perform various unary
00484     /// floating point operations. These are inspired by libm.
00485     FNEG, FABS, FSQRT, FSIN, FCOS, FPOWI, FPOW,
00486     FLOG, FLOG2, FLOG10, FEXP, FEXP2,
00487     FCEIL, FTRUNC, FRINT, FNEARBYINT, FROUND, FFLOOR,
00488     
00489     /// FSINCOS - Compute both fsin and fcos as a single operation.
00490     FSINCOS,
00491 
00492     /// LOAD and STORE have token chains as their first operand, then the same
00493     /// operands as an LLVM load/store instruction, then an offset node that
00494     /// is added / subtracted from the base pointer to form the address (for
00495     /// indexed memory ops).
00496     LOAD, STORE,
00497 
00498     /// DYNAMIC_STACKALLOC - Allocate some number of bytes on the stack aligned
00499     /// to a specified boundary.  This node always has two return values: a new
00500     /// stack pointer value and a chain. The first operand is the token chain,
00501     /// the second is the number of bytes to allocate, and the third is the
00502     /// alignment boundary.  The size is guaranteed to be a multiple of the
00503     /// stack alignment, and the alignment is guaranteed to be bigger than the
00504     /// stack alignment (if required) or 0 to get standard stack alignment.
00505     DYNAMIC_STACKALLOC,
00506 
00507     /// Control flow instructions.  These all have token chains.
00508 
00509     /// BR - Unconditional branch.  The first operand is the chain
00510     /// operand, the second is the MBB to branch to.
00511     BR,
00512 
00513     /// BRIND - Indirect branch.  The first operand is the chain, the second
00514     /// is the value to branch to, which must be of the same type as the
00515     /// target's pointer type.
00516     BRIND,
00517 
00518     /// BR_JT - Jumptable branch. The first operand is the chain, the second
00519     /// is the jumptable index, the last one is the jumptable entry index.
00520     BR_JT,
00521 
00522     /// BRCOND - Conditional branch.  The first operand is the chain, the
00523     /// second is the condition, the third is the block to branch to if the
00524     /// condition is true.  If the type of the condition is not i1, then the
00525     /// high bits must conform to getBooleanContents.
00526     BRCOND,
00527 
00528     /// BR_CC - Conditional branch.  The behavior is like that of SELECT_CC, in
00529     /// that the condition is represented as condition code, and two nodes to
00530     /// compare, rather than as a combined SetCC node.  The operands in order
00531     /// are chain, cc, lhs, rhs, block to branch to if condition is true.
00532     BR_CC,
00533 
00534     /// INLINEASM - Represents an inline asm block.  This node always has two
00535     /// return values: a chain and a flag result.  The inputs are as follows:
00536     ///   Operand #0  : Input chain.
00537     ///   Operand #1  : a ExternalSymbolSDNode with a pointer to the asm string.
00538     ///   Operand #2  : a MDNodeSDNode with the !srcloc metadata.
00539     ///   Operand #3  : HasSideEffect, IsAlignStack bits.
00540     ///   After this, it is followed by a list of operands with this format:
00541     ///     ConstantSDNode: Flags that encode whether it is a mem or not, the
00542     ///                     of operands that follow, etc.  See InlineAsm.h.
00543     ///     ... however many operands ...
00544     ///   Operand #last: Optional, an incoming flag.
00545     ///
00546     /// The variable width operands are required to represent target addressing
00547     /// modes as a single "operand", even though they may have multiple
00548     /// SDOperands.
00549     INLINEASM,
00550 
00551     /// EH_LABEL - Represents a label in mid basic block used to track
00552     /// locations needed for debug and exception handling tables.  These nodes
00553     /// take a chain as input and return a chain.
00554     EH_LABEL,
00555 
00556     /// STACKSAVE - STACKSAVE has one operand, an input chain.  It produces a
00557     /// value, the same type as the pointer type for the system, and an output
00558     /// chain.
00559     STACKSAVE,
00560 
00561     /// STACKRESTORE has two operands, an input chain and a pointer to restore
00562     /// to it returns an output chain.
00563     STACKRESTORE,
00564 
00565     /// CALLSEQ_START/CALLSEQ_END - These operators mark the beginning and end
00566     /// of a call sequence, and carry arbitrary information that target might
00567     /// want to know.  The first operand is a chain, the rest are specified by
00568     /// the target and not touched by the DAG optimizers.
00569     /// CALLSEQ_START..CALLSEQ_END pairs may not be nested.
00570     CALLSEQ_START,  // Beginning of a call sequence
00571     CALLSEQ_END,    // End of a call sequence
00572 
00573     /// VAARG - VAARG has four operands: an input chain, a pointer, a SRCVALUE,
00574     /// and the alignment. It returns a pair of values: the vaarg value and a
00575     /// new chain.
00576     VAARG,
00577 
00578     /// VACOPY - VACOPY has 5 operands: an input chain, a destination pointer,
00579     /// a source pointer, a SRCVALUE for the destination, and a SRCVALUE for the
00580     /// source.
00581     VACOPY,
00582 
00583     /// VAEND, VASTART - VAEND and VASTART have three operands: an input chain,
00584     /// pointer, and a SRCVALUE.
00585     VAEND, VASTART,
00586 
00587     /// SRCVALUE - This is a node type that holds a Value* that is used to
00588     /// make reference to a value in the LLVM IR.
00589     SRCVALUE,
00590 
00591     /// MDNODE_SDNODE - This is a node that holdes an MDNode*, which is used to
00592     /// reference metadata in the IR.
00593     MDNODE_SDNODE,
00594 
00595     /// PCMARKER - This corresponds to the pcmarker intrinsic.
00596     PCMARKER,
00597 
00598     /// READCYCLECOUNTER - This corresponds to the readcyclecounter intrinsic.
00599     /// The only operand is a chain and a value and a chain are produced.  The
00600     /// value is the contents of the architecture specific cycle counter like
00601     /// register (or other high accuracy low latency clock source)
00602     READCYCLECOUNTER,
00603 
00604     /// HANDLENODE node - Used as a handle for various purposes.
00605     HANDLENODE,
00606 
00607     /// INIT_TRAMPOLINE - This corresponds to the init_trampoline intrinsic.  It
00608     /// takes as input a token chain, the pointer to the trampoline, the pointer
00609     /// to the nested function, the pointer to pass for the 'nest' parameter, a
00610     /// SRCVALUE for the trampoline and another for the nested function
00611     /// (allowing targets to access the original Function*).
00612     /// It produces a token chain as output.
00613     INIT_TRAMPOLINE,
00614 
00615     /// ADJUST_TRAMPOLINE - This corresponds to the adjust_trampoline intrinsic.
00616     /// It takes a pointer to the trampoline and produces a (possibly) new
00617     /// pointer to the same trampoline with platform-specific adjustments
00618     /// applied.  The pointer it returns points to an executable block of code.
00619     ADJUST_TRAMPOLINE,
00620 
00621     /// TRAP - Trapping instruction
00622     TRAP,
00623 
00624     /// DEBUGTRAP - Trap intended to get the attention of a debugger.
00625     DEBUGTRAP,
00626 
00627     /// PREFETCH - This corresponds to a prefetch intrinsic. The first operand
00628     /// is the chain.  The other operands are the address to prefetch,
00629     /// read / write specifier, locality specifier and instruction / data cache
00630     /// specifier.
00631     PREFETCH,
00632 
00633     /// OUTCHAIN = ATOMIC_FENCE(INCHAIN, ordering, scope)
00634     /// This corresponds to the fence instruction. It takes an input chain, and
00635     /// two integer constants: an AtomicOrdering and a SynchronizationScope.
00636     ATOMIC_FENCE,
00637 
00638     /// Val, OUTCHAIN = ATOMIC_LOAD(INCHAIN, ptr)
00639     /// This corresponds to "load atomic" instruction.
00640     ATOMIC_LOAD,
00641 
00642     /// OUTCHAIN = ATOMIC_STORE(INCHAIN, ptr, val)
00643     /// This corresponds to "store atomic" instruction.
00644     ATOMIC_STORE,
00645 
00646     /// Val, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmp, swap)
00647     /// For double-word atomic operations:
00648     /// ValLo, ValHi, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmpLo, cmpHi,
00649     ///                                          swapLo, swapHi)
00650     /// This corresponds to the cmpxchg instruction.
00651     ATOMIC_CMP_SWAP,
00652 
00653     /// Val, Success, OUTCHAIN
00654     ///     = ATOMIC_CMP_SWAP_WITH_SUCCESS(INCHAIN, ptr, cmp, swap)
00655     /// N.b. this is still a strong cmpxchg operation, so
00656     /// Success == "Val == cmp".
00657     ATOMIC_CMP_SWAP_WITH_SUCCESS,
00658 
00659     /// Val, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amt)
00660     /// Val, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amt)
00661     /// For double-word atomic operations:
00662     /// ValLo, ValHi, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amtLo, amtHi)
00663     /// ValLo, ValHi, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amtLo, amtHi)
00664     /// These correspond to the atomicrmw instruction.
00665     ATOMIC_SWAP,
00666     ATOMIC_LOAD_ADD,
00667     ATOMIC_LOAD_SUB,
00668     ATOMIC_LOAD_AND,
00669     ATOMIC_LOAD_OR,
00670     ATOMIC_LOAD_XOR,
00671     ATOMIC_LOAD_NAND,
00672     ATOMIC_LOAD_MIN,
00673     ATOMIC_LOAD_MAX,
00674     ATOMIC_LOAD_UMIN,
00675     ATOMIC_LOAD_UMAX,
00676 
00677     /// This corresponds to the llvm.lifetime.* intrinsics. The first operand
00678     /// is the chain and the second operand is the alloca pointer.
00679     LIFETIME_START, LIFETIME_END,
00680 
00681     /// BUILTIN_OP_END - This must be the last enum value in this list.
00682     /// The target-specific pre-isel opcode values start here.
00683     BUILTIN_OP_END
00684   };
00685 
00686   /// FIRST_TARGET_MEMORY_OPCODE - Target-specific pre-isel operations
00687   /// which do not reference a specific memory location should be less than
00688   /// this value. Those that do must not be less than this value, and can
00689   /// be used with SelectionDAG::getMemIntrinsicNode.
00690   static const int FIRST_TARGET_MEMORY_OPCODE = BUILTIN_OP_END+180;
00691 
00692   //===--------------------------------------------------------------------===//
00693   /// MemIndexedMode enum - This enum defines the load / store indexed
00694   /// addressing modes.
00695   ///
00696   /// UNINDEXED    "Normal" load / store. The effective address is already
00697   ///              computed and is available in the base pointer. The offset
00698   ///              operand is always undefined. In addition to producing a
00699   ///              chain, an unindexed load produces one value (result of the
00700   ///              load); an unindexed store does not produce a value.
00701   ///
00702   /// PRE_INC      Similar to the unindexed mode where the effective address is
00703   /// PRE_DEC      the value of the base pointer add / subtract the offset.
00704   ///              It considers the computation as being folded into the load /
00705   ///              store operation (i.e. the load / store does the address
00706   ///              computation as well as performing the memory transaction).
00707   ///              The base operand is always undefined. In addition to
00708   ///              producing a chain, pre-indexed load produces two values
00709   ///              (result of the load and the result of the address
00710   ///              computation); a pre-indexed store produces one value (result
00711   ///              of the address computation).
00712   ///
00713   /// POST_INC     The effective address is the value of the base pointer. The
00714   /// POST_DEC     value of the offset operand is then added to / subtracted
00715   ///              from the base after memory transaction. In addition to
00716   ///              producing a chain, post-indexed load produces two values
00717   ///              (the result of the load and the result of the base +/- offset
00718   ///              computation); a post-indexed store produces one value (the
00719   ///              the result of the base +/- offset computation).
00720   enum MemIndexedMode {
00721     UNINDEXED = 0,
00722     PRE_INC,
00723     PRE_DEC,
00724     POST_INC,
00725     POST_DEC,
00726     LAST_INDEXED_MODE
00727   };
00728 
00729   //===--------------------------------------------------------------------===//
00730   /// LoadExtType enum - This enum defines the three variants of LOADEXT
00731   /// (load with extension).
00732   ///
00733   /// SEXTLOAD loads the integer operand and sign extends it to a larger
00734   ///          integer result type.
00735   /// ZEXTLOAD loads the integer operand and zero extends it to a larger
00736   ///          integer result type.
00737   /// EXTLOAD  is used for two things: floating point extending loads and
00738   ///          integer extending loads [the top bits are undefined].
00739   enum LoadExtType {
00740     NON_EXTLOAD = 0,
00741     EXTLOAD,
00742     SEXTLOAD,
00743     ZEXTLOAD,
00744     LAST_LOADEXT_TYPE
00745   };
00746 
00747   NodeType getExtForLoadExtType(LoadExtType);
00748 
00749   //===--------------------------------------------------------------------===//
00750   /// ISD::CondCode enum - These are ordered carefully to make the bitfields
00751   /// below work out, when considering SETFALSE (something that never exists
00752   /// dynamically) as 0.  "U" -> Unsigned (for integer operands) or Unordered
00753   /// (for floating point), "L" -> Less than, "G" -> Greater than, "E" -> Equal
00754   /// to.  If the "N" column is 1, the result of the comparison is undefined if
00755   /// the input is a NAN.
00756   ///
00757   /// All of these (except for the 'always folded ops') should be handled for
00758   /// floating point.  For integer, only the SETEQ,SETNE,SETLT,SETLE,SETGT,
00759   /// SETGE,SETULT,SETULE,SETUGT, and SETUGE opcodes are used.
00760   ///
00761   /// Note that these are laid out in a specific order to allow bit-twiddling
00762   /// to transform conditions.
00763   enum CondCode {
00764     // Opcode          N U L G E       Intuitive operation
00765     SETFALSE,      //    0 0 0 0       Always false (always folded)
00766     SETOEQ,        //    0 0 0 1       True if ordered and equal
00767     SETOGT,        //    0 0 1 0       True if ordered and greater than
00768     SETOGE,        //    0 0 1 1       True if ordered and greater than or equal
00769     SETOLT,        //    0 1 0 0       True if ordered and less than
00770     SETOLE,        //    0 1 0 1       True if ordered and less than or equal
00771     SETONE,        //    0 1 1 0       True if ordered and operands are unequal
00772     SETO,          //    0 1 1 1       True if ordered (no nans)
00773     SETUO,         //    1 0 0 0       True if unordered: isnan(X) | isnan(Y)
00774     SETUEQ,        //    1 0 0 1       True if unordered or equal
00775     SETUGT,        //    1 0 1 0       True if unordered or greater than
00776     SETUGE,        //    1 0 1 1       True if unordered, greater than, or equal
00777     SETULT,        //    1 1 0 0       True if unordered or less than
00778     SETULE,        //    1 1 0 1       True if unordered, less than, or equal
00779     SETUNE,        //    1 1 1 0       True if unordered or not equal
00780     SETTRUE,       //    1 1 1 1       Always true (always folded)
00781     // Don't care operations: undefined if the input is a nan.
00782     SETFALSE2,     //  1 X 0 0 0       Always false (always folded)
00783     SETEQ,         //  1 X 0 0 1       True if equal
00784     SETGT,         //  1 X 0 1 0       True if greater than
00785     SETGE,         //  1 X 0 1 1       True if greater than or equal
00786     SETLT,         //  1 X 1 0 0       True if less than
00787     SETLE,         //  1 X 1 0 1       True if less than or equal
00788     SETNE,         //  1 X 1 1 0       True if not equal
00789     SETTRUE2,      //  1 X 1 1 1       Always true (always folded)
00790 
00791     SETCC_INVALID       // Marker value.
00792   };
00793 
00794   /// isSignedIntSetCC - Return true if this is a setcc instruction that
00795   /// performs a signed comparison when used with integer operands.
00796   inline bool isSignedIntSetCC(CondCode Code) {
00797     return Code == SETGT || Code == SETGE || Code == SETLT || Code == SETLE;
00798   }
00799 
00800   /// isUnsignedIntSetCC - Return true if this is a setcc instruction that
00801   /// performs an unsigned comparison when used with integer operands.
00802   inline bool isUnsignedIntSetCC(CondCode Code) {
00803     return Code == SETUGT || Code == SETUGE || Code == SETULT || Code == SETULE;
00804   }
00805 
00806   /// isTrueWhenEqual - Return true if the specified condition returns true if
00807   /// the two operands to the condition are equal.  Note that if one of the two
00808   /// operands is a NaN, this value is meaningless.
00809   inline bool isTrueWhenEqual(CondCode Cond) {
00810     return ((int)Cond & 1) != 0;
00811   }
00812 
00813   /// getUnorderedFlavor - This function returns 0 if the condition is always
00814   /// false if an operand is a NaN, 1 if the condition is always true if the
00815   /// operand is a NaN, and 2 if the condition is undefined if the operand is a
00816   /// NaN.
00817   inline unsigned getUnorderedFlavor(CondCode Cond) {
00818     return ((int)Cond >> 3) & 3;
00819   }
00820 
00821   /// getSetCCInverse - Return the operation corresponding to !(X op Y), where
00822   /// 'op' is a valid SetCC operation.
00823   CondCode getSetCCInverse(CondCode Operation, bool isInteger);
00824 
00825   /// getSetCCSwappedOperands - Return the operation corresponding to (Y op X)
00826   /// when given the operation for (X op Y).
00827   CondCode getSetCCSwappedOperands(CondCode Operation);
00828 
00829   /// getSetCCOrOperation - Return the result of a logical OR between different
00830   /// comparisons of identical values: ((X op1 Y) | (X op2 Y)).  This
00831   /// function returns SETCC_INVALID if it is not possible to represent the
00832   /// resultant comparison.
00833   CondCode getSetCCOrOperation(CondCode Op1, CondCode Op2, bool isInteger);
00834 
00835   /// getSetCCAndOperation - Return the result of a logical AND between
00836   /// different comparisons of identical values: ((X op1 Y) & (X op2 Y)).  This
00837   /// function returns SETCC_INVALID if it is not possible to represent the
00838   /// resultant comparison.
00839   CondCode getSetCCAndOperation(CondCode Op1, CondCode Op2, bool isInteger);
00840 
00841   //===--------------------------------------------------------------------===//
00842   /// CvtCode enum - This enum defines the various converts CONVERT_RNDSAT
00843   /// supports.
00844   enum CvtCode {
00845     CVT_FF,     /// Float from Float
00846     CVT_FS,     /// Float from Signed
00847     CVT_FU,     /// Float from Unsigned
00848     CVT_SF,     /// Signed from Float
00849     CVT_UF,     /// Unsigned from Float
00850     CVT_SS,     /// Signed from Signed
00851     CVT_SU,     /// Signed from Unsigned
00852     CVT_US,     /// Unsigned from Signed
00853     CVT_UU,     /// Unsigned from Unsigned
00854     CVT_INVALID /// Marker - Invalid opcode
00855   };
00856 
00857 } // end llvm::ISD namespace
00858 
00859 } // end llvm namespace
00860 
00861 #endif