LLVM API Documentation

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