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