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