Re-commit of the r48822, where the infinite looping problem discovered
[oota-llvm.git] / include / llvm / CodeGen / SelectionDAGNodes.h
1 //===-- llvm/CodeGen/SelectionDAGNodes.h - SelectionDAG Nodes ---*- 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 the SDNode class and derived classes, which are used to
11 // represent the nodes and operations present in a SelectionDAG.  These nodes
12 // and operations are machine code level operations, with some similarities to
13 // the GCC RTL representation.
14 //
15 // Clients should include the SelectionDAG.h file instead of this file directly.
16 //
17 //===----------------------------------------------------------------------===//
18
19 #ifndef LLVM_CODEGEN_SELECTIONDAGNODES_H
20 #define LLVM_CODEGEN_SELECTIONDAGNODES_H
21
22 #include "llvm/Value.h"
23 #include "llvm/ADT/FoldingSet.h"
24 #include "llvm/ADT/GraphTraits.h"
25 #include "llvm/ADT/iterator"
26 #include "llvm/ADT/APFloat.h"
27 #include "llvm/ADT/APInt.h"
28 #include "llvm/CodeGen/ValueTypes.h"
29 #include "llvm/CodeGen/MemOperand.h"
30 #include "llvm/Support/DataTypes.h"
31 #include <cassert>
32
33 namespace llvm {
34
35 class SelectionDAG;
36 class GlobalValue;
37 class MachineBasicBlock;
38 class MachineConstantPoolValue;
39 class SDNode;
40 template <typename T> struct DenseMapInfo;
41 template <typename T> struct simplify_type;
42 template <typename T> struct ilist_traits;
43 template<typename NodeTy, typename Traits> class iplist;
44 template<typename NodeTy> class ilist_iterator;
45
46 /// SDVTList - This represents a list of ValueType's that has been intern'd by
47 /// a SelectionDAG.  Instances of this simple value class are returned by
48 /// SelectionDAG::getVTList(...).
49 ///
50 struct SDVTList {
51   const MVT::ValueType *VTs;
52   unsigned short NumVTs;
53 };
54
55 /// ISD namespace - This namespace contains an enum which represents all of the
56 /// SelectionDAG node types and value types.
57 ///
58 namespace ISD {
59
60   //===--------------------------------------------------------------------===//
61   /// ISD::NodeType enum - This enum defines all of the operators valid in a
62   /// SelectionDAG.
63   ///
64   enum NodeType {
65     // DELETED_NODE - This is an illegal flag value that is used to catch
66     // errors.  This opcode is not a legal opcode for any node.
67     DELETED_NODE,
68     
69     // EntryToken - This is the marker used to indicate the start of the region.
70     EntryToken,
71
72     // Token factor - This node takes multiple tokens as input and produces a
73     // single token result.  This is used to represent the fact that the operand
74     // operators are independent of each other.
75     TokenFactor,
76     
77     // AssertSext, AssertZext - These nodes record if a register contains a 
78     // value that has already been zero or sign extended from a narrower type.  
79     // These nodes take two operands.  The first is the node that has already 
80     // been extended, and the second is a value type node indicating the width
81     // of the extension
82     AssertSext, AssertZext,
83
84     // Various leaf nodes.
85     STRING, BasicBlock, VALUETYPE, ARG_FLAGS, CONDCODE, Register,
86     Constant, ConstantFP,
87     GlobalAddress, GlobalTLSAddress, FrameIndex,
88     JumpTable, ConstantPool, ExternalSymbol,
89
90     // The address of the GOT
91     GLOBAL_OFFSET_TABLE,
92     
93     // FRAMEADDR, RETURNADDR - These nodes represent llvm.frameaddress and
94     // llvm.returnaddress on the DAG.  These nodes take one operand, the index
95     // of the frame or return address to return.  An index of zero corresponds
96     // to the current function's frame or return address, an index of one to the
97     // parent's frame or return address, and so on.
98     FRAMEADDR, RETURNADDR,
99
100     // FRAME_TO_ARGS_OFFSET - This node represents offset from frame pointer to
101     // first (possible) on-stack argument. This is needed for correct stack
102     // adjustment during unwind.
103     FRAME_TO_ARGS_OFFSET,
104     
105     // RESULT, OUTCHAIN = EXCEPTIONADDR(INCHAIN) - This node represents the
106     // address of the exception block on entry to an landing pad block.
107     EXCEPTIONADDR,
108     
109     // RESULT, OUTCHAIN = EHSELECTION(INCHAIN, EXCEPTION) - This node represents
110     // the selection index of the exception thrown.
111     EHSELECTION,
112
113     // OUTCHAIN = EH_RETURN(INCHAIN, OFFSET, HANDLER) - This node represents
114     // 'eh_return' gcc dwarf builtin, which is used to return from
115     // exception. The general meaning is: adjust stack by OFFSET and pass
116     // execution to HANDLER. Many platform-related details also :)
117     EH_RETURN,
118
119     // TargetConstant* - Like Constant*, but the DAG does not do any folding or
120     // simplification of the constant.
121     TargetConstant,
122     TargetConstantFP,
123     
124     // TargetGlobalAddress - Like GlobalAddress, but the DAG does no folding or
125     // anything else with this node, and this is valid in the target-specific
126     // dag, turning into a GlobalAddress operand.
127     TargetGlobalAddress,
128     TargetGlobalTLSAddress,
129     TargetFrameIndex,
130     TargetJumpTable,
131     TargetConstantPool,
132     TargetExternalSymbol,
133     
134     /// RESULT = INTRINSIC_WO_CHAIN(INTRINSICID, arg1, arg2, ...)
135     /// This node represents a target intrinsic function with no side effects.
136     /// The first operand is the ID number of the intrinsic from the
137     /// llvm::Intrinsic namespace.  The operands to the intrinsic follow.  The
138     /// node has returns the result of the intrinsic.
139     INTRINSIC_WO_CHAIN,
140     
141     /// RESULT,OUTCHAIN = INTRINSIC_W_CHAIN(INCHAIN, INTRINSICID, arg1, ...)
142     /// This node represents a target intrinsic function with side effects that
143     /// returns a result.  The first operand is a chain pointer.  The second is
144     /// the ID number of the intrinsic from the llvm::Intrinsic namespace.  The
145     /// operands to the intrinsic follow.  The node has two results, the result
146     /// of the intrinsic and an output chain.
147     INTRINSIC_W_CHAIN,
148
149     /// OUTCHAIN = INTRINSIC_VOID(INCHAIN, INTRINSICID, arg1, arg2, ...)
150     /// This node represents a target intrinsic function with side effects that
151     /// does not return a result.  The first operand is a chain pointer.  The
152     /// second is the ID number of the intrinsic from the llvm::Intrinsic
153     /// namespace.  The operands to the intrinsic follow.
154     INTRINSIC_VOID,
155     
156     // CopyToReg - This node has three operands: a chain, a register number to
157     // set to this value, and a value.  
158     CopyToReg,
159
160     // CopyFromReg - This node indicates that the input value is a virtual or
161     // physical register that is defined outside of the scope of this
162     // SelectionDAG.  The register is available from the RegisterSDNode object.
163     CopyFromReg,
164
165     // UNDEF - An undefined node
166     UNDEF,
167     
168     /// FORMAL_ARGUMENTS(CHAIN, CC#, ISVARARG, FLAG0, ..., FLAGn) - This node
169     /// represents the formal arguments for a function.  CC# is a Constant value
170     /// indicating the calling convention of the function, and ISVARARG is a
171     /// flag that indicates whether the function is varargs or not. This node
172     /// has one result value for each incoming argument, plus one for the output
173     /// chain. It must be custom legalized. See description of CALL node for
174     /// FLAG argument contents explanation.
175     /// 
176     FORMAL_ARGUMENTS,
177     
178     /// RV1, RV2...RVn, CHAIN = CALL(CHAIN, CC#, ISVARARG, ISTAILCALL, CALLEE,
179     ///                              ARG0, FLAG0, ARG1, FLAG1, ... ARGn, FLAGn)
180     /// This node represents a fully general function call, before the legalizer
181     /// runs.  This has one result value for each argument / flag pair, plus
182     /// a chain result. It must be custom legalized. Flag argument indicates
183     /// misc. argument attributes. Currently:
184     /// Bit 0 - signness
185     /// Bit 1 - 'inreg' attribute
186     /// Bit 2 - 'sret' attribute
187     /// Bit 4 - 'byval' attribute
188     /// Bit 5 - 'nest' attribute
189     /// Bit 6-9 - alignment of byval structures
190     /// Bit 10-26 - size of byval structures
191     /// Bits 31:27 - argument ABI alignment in the first argument piece and
192     /// alignment '1' in other argument pieces.
193     CALL,
194
195     // EXTRACT_ELEMENT - This is used to get the lower or upper (determined by
196     // a Constant, which is required to be operand #1) half of the integer value
197     // specified as operand #0.  This is only for use before legalization, for
198     // values that will be broken into multiple registers.
199     EXTRACT_ELEMENT,
200
201     // BUILD_PAIR - This is the opposite of EXTRACT_ELEMENT in some ways.  Given
202     // two values of the same integer value type, this produces a value twice as
203     // big.  Like EXTRACT_ELEMENT, this can only be used before legalization.
204     BUILD_PAIR,
205     
206     // MERGE_VALUES - This node takes multiple discrete operands and returns
207     // them all as its individual results.  This nodes has exactly the same
208     // number of inputs and outputs, and is only valid before legalization.
209     // This node is useful for some pieces of the code generator that want to
210     // think about a single node with multiple results, not multiple nodes.
211     MERGE_VALUES,
212
213     // Simple integer binary arithmetic operators.
214     ADD, SUB, MUL, SDIV, UDIV, SREM, UREM,
215
216     // SMUL_LOHI/UMUL_LOHI - Multiply two integers of type iN, producing
217     // a signed/unsigned value of type i[2*N], and return the full value as
218     // two results, each of type iN.
219     SMUL_LOHI, UMUL_LOHI,
220
221     // SDIVREM/UDIVREM - Divide two integers and produce both a quotient and
222     // remainder result.
223     SDIVREM, UDIVREM,
224     
225     // CARRY_FALSE - This node is used when folding other nodes,
226     // like ADDC/SUBC, which indicate the carry result is always false.
227     CARRY_FALSE,
228     
229     // Carry-setting nodes for multiple precision addition and subtraction.
230     // These nodes take two operands of the same value type, and produce two
231     // results.  The first result is the normal add or sub result, the second
232     // result is the carry flag result.
233     ADDC, SUBC,
234     
235     // Carry-using nodes for multiple precision addition and subtraction.  These
236     // nodes take three operands: The first two are the normal lhs and rhs to
237     // the add or sub, and the third is the input carry flag.  These nodes
238     // produce two results; the normal result of the add or sub, and the output
239     // carry flag.  These nodes both read and write a carry flag to allow them
240     // to them to be chained together for add and sub of arbitrarily large
241     // values.
242     ADDE, SUBE,
243     
244     // Simple binary floating point operators.
245     FADD, FSUB, FMUL, FDIV, FREM,
246
247     // FCOPYSIGN(X, Y) - Return the value of X with the sign of Y.  NOTE: This
248     // DAG node does not require that X and Y have the same type, just that they
249     // are both floating point.  X and the result must have the same type.
250     // FCOPYSIGN(f32, f64) is allowed.
251     FCOPYSIGN,
252
253     // INT = FGETSIGN(FP) - Return the sign bit of the specified floating point
254     // value as an integer 0/1 value.
255     FGETSIGN,
256     
257     /// BUILD_VECTOR(ELT0, ELT1, ELT2, ELT3,...) - Return a vector
258     /// with the specified, possibly variable, elements.  The number of elements
259     /// is required to be a power of two.
260     BUILD_VECTOR,
261     
262     /// INSERT_VECTOR_ELT(VECTOR, VAL, IDX) - Returns VECTOR with the element
263     /// at IDX replaced with VAL.  If the type of VAL is larger than the vector
264     /// element type then VAL is truncated before replacement.
265     INSERT_VECTOR_ELT,
266
267     /// EXTRACT_VECTOR_ELT(VECTOR, IDX) - Returns a single element from VECTOR
268     /// identified by the (potentially variable) element number IDX.
269     EXTRACT_VECTOR_ELT,
270     
271     /// CONCAT_VECTORS(VECTOR0, VECTOR1, ...) - Given a number of values of
272     /// vector type with the same length and element type, this produces a
273     /// concatenated vector result value, with length equal to the sum of the
274     /// lengths of the input vectors.
275     CONCAT_VECTORS,
276     
277     /// EXTRACT_SUBVECTOR(VECTOR, IDX) - Returns a subvector from VECTOR (an
278     /// vector value) starting with the (potentially variable) element number
279     /// IDX, which must be a multiple of the result vector length.
280     EXTRACT_SUBVECTOR,
281
282     /// VECTOR_SHUFFLE(VEC1, VEC2, SHUFFLEVEC) - Returns a vector, of the same
283     /// type as VEC1/VEC2.  SHUFFLEVEC is a BUILD_VECTOR of constant int values
284     /// (maybe of an illegal datatype) or undef that indicate which value each
285     /// result element will get.  The elements of VEC1/VEC2 are enumerated in
286     /// order.  This is quite similar to the Altivec 'vperm' instruction, except
287     /// that the indices must be constants and are in terms of the element size
288     /// of VEC1/VEC2, not in terms of bytes.
289     VECTOR_SHUFFLE,
290
291     /// SCALAR_TO_VECTOR(VAL) - This represents the operation of loading a
292     /// scalar value into element 0 of the resultant vector type.  The top
293     /// elements 1 to N-1 of the N-element vector are undefined.
294     SCALAR_TO_VECTOR,
295     
296     // EXTRACT_SUBREG - This node is used to extract a sub-register value. 
297     // This node takes a superreg and a constant sub-register index as operands.
298     // Note sub-register indices must be increasing. That is, if the
299     // sub-register index of a 8-bit sub-register is N, then the index for a
300     // 16-bit sub-register must be at least N+1.
301     EXTRACT_SUBREG,
302     
303     // INSERT_SUBREG - This node is used to insert a sub-register value. 
304     // This node takes a superreg, a subreg value, and a constant sub-register
305     // index as operands.
306     INSERT_SUBREG,
307     
308     // MULHU/MULHS - Multiply high - Multiply two integers of type iN, producing
309     // an unsigned/signed value of type i[2*N], then return the top part.
310     MULHU, MULHS,
311
312     // Bitwise operators - logical and, logical or, logical xor, shift left,
313     // shift right algebraic (shift in sign bits), shift right logical (shift in
314     // zeroes), rotate left, rotate right, and byteswap.
315     AND, OR, XOR, SHL, SRA, SRL, ROTL, ROTR, BSWAP,
316
317     // Counting operators
318     CTTZ, CTLZ, CTPOP,
319
320     // Select(COND, TRUEVAL, FALSEVAL)
321     SELECT, 
322     
323     // Select with condition operator - This selects between a true value and 
324     // a false value (ops #2 and #3) based on the boolean result of comparing
325     // the lhs and rhs (ops #0 and #1) of a conditional expression with the 
326     // condition code in op #4, a CondCodeSDNode.
327     SELECT_CC,
328
329     // SetCC operator - This evaluates to a boolean (i1) true value if the
330     // condition is true.  The operands to this are the left and right operands
331     // to compare (ops #0, and #1) and the condition code to compare them with
332     // (op #2) as a CondCodeSDNode.
333     SETCC,
334
335     // SHL_PARTS/SRA_PARTS/SRL_PARTS - These operators are used for expanded
336     // integer shift operations, just like ADD/SUB_PARTS.  The operation
337     // ordering is:
338     //       [Lo,Hi] = op [LoLHS,HiLHS], Amt
339     SHL_PARTS, SRA_PARTS, SRL_PARTS,
340
341     // Conversion operators.  These are all single input single output
342     // operations.  For all of these, the result type must be strictly
343     // wider or narrower (depending on the operation) than the source
344     // type.
345
346     // SIGN_EXTEND - Used for integer types, replicating the sign bit
347     // into new bits.
348     SIGN_EXTEND,
349
350     // ZERO_EXTEND - Used for integer types, zeroing the new bits.
351     ZERO_EXTEND,
352
353     // ANY_EXTEND - Used for integer types.  The high bits are undefined.
354     ANY_EXTEND,
355     
356     // TRUNCATE - Completely drop the high bits.
357     TRUNCATE,
358
359     // [SU]INT_TO_FP - These operators convert integers (whose interpreted sign
360     // depends on the first letter) to floating point.
361     SINT_TO_FP,
362     UINT_TO_FP,
363
364     // SIGN_EXTEND_INREG - This operator atomically performs a SHL/SRA pair to
365     // sign extend a small value in a large integer register (e.g. sign
366     // extending the low 8 bits of a 32-bit register to fill the top 24 bits
367     // with the 7th bit).  The size of the smaller type is indicated by the 1th
368     // operand, a ValueType node.
369     SIGN_EXTEND_INREG,
370
371     /// FP_TO_[US]INT - Convert a floating point value to a signed or unsigned
372     /// integer.
373     FP_TO_SINT,
374     FP_TO_UINT,
375
376     /// X = FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating point type
377     /// down to the precision of the destination VT.  TRUNC is a flag, which is
378     /// always an integer that is zero or one.  If TRUNC is 0, this is a
379     /// normal rounding, if it is 1, this FP_ROUND is known to not change the
380     /// value of Y.
381     ///
382     /// The TRUNC = 1 case is used in cases where we know that the value will
383     /// not be modified by the node, because Y is not using any of the extra
384     /// precision of source type.  This allows certain transformations like
385     /// FP_EXTEND(FP_ROUND(X,1)) -> X which are not safe for 
386     /// FP_EXTEND(FP_ROUND(X,0)) because the extra bits aren't removed.
387     FP_ROUND,
388     
389     // FLT_ROUNDS_ - Returns current rounding mode:
390     // -1 Undefined
391     //  0 Round to 0
392     //  1 Round to nearest
393     //  2 Round to +inf
394     //  3 Round to -inf
395     FLT_ROUNDS_,
396
397     /// X = FP_ROUND_INREG(Y, VT) - This operator takes an FP register, and
398     /// rounds it to a floating point value.  It then promotes it and returns it
399     /// in a register of the same size.  This operation effectively just
400     /// discards excess precision.  The type to round down to is specified by
401     /// the VT operand, a VTSDNode.
402     FP_ROUND_INREG,
403
404     /// X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.
405     FP_EXTEND,
406
407     // BIT_CONVERT - Theis operator converts between integer and FP values, as
408     // if one was stored to memory as integer and the other was loaded from the
409     // same address (or equivalently for vector format conversions, etc).  The 
410     // source and result are required to have the same bit size (e.g. 
411     // f32 <-> i32).  This can also be used for int-to-int or fp-to-fp 
412     // conversions, but that is a noop, deleted by getNode().
413     BIT_CONVERT,
414     
415     // FNEG, FABS, FSQRT, FSIN, FCOS, FPOWI, FPOW - Perform unary floating point
416     // negation, absolute value, square root, sine and cosine, powi, and pow
417     // operations.
418     FNEG, FABS, FSQRT, FSIN, FCOS, FPOWI, FPOW,
419     
420     // LOAD and STORE have token chains as their first operand, then the same
421     // operands as an LLVM load/store instruction, then an offset node that
422     // is added / subtracted from the base pointer to form the address (for
423     // indexed memory ops).
424     LOAD, STORE,
425
426     // DYNAMIC_STACKALLOC - Allocate some number of bytes on the stack aligned
427     // to a specified boundary.  This node always has two return values: a new
428     // stack pointer value and a chain. The first operand is the token chain,
429     // the second is the number of bytes to allocate, and the third is the
430     // alignment boundary.  The size is guaranteed to be a multiple of the stack
431     // alignment, and the alignment is guaranteed to be bigger than the stack
432     // alignment (if required) or 0 to get standard stack alignment.
433     DYNAMIC_STACKALLOC,
434
435     // Control flow instructions.  These all have token chains.
436
437     // BR - Unconditional branch.  The first operand is the chain
438     // operand, the second is the MBB to branch to.
439     BR,
440
441     // BRIND - Indirect branch.  The first operand is the chain, the second
442     // is the value to branch to, which must be of the same type as the target's
443     // pointer type.
444     BRIND,
445
446     // BR_JT - Jumptable branch. The first operand is the chain, the second
447     // is the jumptable index, the last one is the jumptable entry index.
448     BR_JT,
449     
450     // BRCOND - Conditional branch.  The first operand is the chain,
451     // the second is the condition, the third is the block to branch
452     // to if the condition is true.
453     BRCOND,
454
455     // BR_CC - Conditional branch.  The behavior is like that of SELECT_CC, in
456     // that the condition is represented as condition code, and two nodes to
457     // compare, rather than as a combined SetCC node.  The operands in order are
458     // chain, cc, lhs, rhs, block to branch to if condition is true.
459     BR_CC,
460     
461     // RET - Return from function.  The first operand is the chain,
462     // and any subsequent operands are pairs of return value and return value
463     // signness for the function.  This operation can have variable number of
464     // operands.
465     RET,
466
467     // INLINEASM - Represents an inline asm block.  This node always has two
468     // return values: a chain and a flag result.  The inputs are as follows:
469     //   Operand #0   : Input chain.
470     //   Operand #1   : a ExternalSymbolSDNode with a pointer to the asm string.
471     //   Operand #2n+2: A RegisterNode.
472     //   Operand #2n+3: A TargetConstant, indicating if the reg is a use/def
473     //   Operand #last: Optional, an incoming flag.
474     INLINEASM,
475     
476     // LABEL - Represents a label in mid basic block used to track
477     // locations needed for debug and exception handling tables.  This node
478     // returns a chain.
479     //   Operand #0 : input chain.
480     //   Operand #1 : module unique number use to identify the label.
481     //   Operand #2 : 0 indicates a debug label (e.g. stoppoint), 1 indicates
482     //                a EH label, 2 indicates unknown label type.
483     LABEL,
484
485     // DECLARE - Represents a llvm.dbg.declare intrinsic. It's used to track
486     // local variable declarations for debugging information. First operand is
487     // a chain, while the next two operands are first two arguments (address
488     // and variable) of a llvm.dbg.declare instruction.
489     DECLARE,
490     
491     // STACKSAVE - STACKSAVE has one operand, an input chain.  It produces a
492     // value, the same type as the pointer type for the system, and an output
493     // chain.
494     STACKSAVE,
495     
496     // STACKRESTORE has two operands, an input chain and a pointer to restore to
497     // it returns an output chain.
498     STACKRESTORE,
499     
500     // MEMSET/MEMCPY/MEMMOVE - The first operand is the chain. The following
501     // correspond to the operands of the LLVM intrinsic functions and the last
502     // one is AlwaysInline.  The only result is a token chain.  The alignment
503     // argument is guaranteed to be a Constant node.
504     MEMSET,
505     MEMMOVE,
506     MEMCPY,
507
508     // CALLSEQ_START/CALLSEQ_END - These operators mark the beginning and end of
509     // a call sequence, and carry arbitrary information that target might want
510     // to know.  The first operand is a chain, the rest are specified by the
511     // target and not touched by the DAG optimizers.
512     // CALLSEQ_START..CALLSEQ_END pairs may not be nested.
513     CALLSEQ_START,  // Beginning of a call sequence
514     CALLSEQ_END,    // End of a call sequence
515     
516     // VAARG - VAARG has three operands: an input chain, a pointer, and a 
517     // SRCVALUE.  It returns a pair of values: the vaarg value and a new chain.
518     VAARG,
519     
520     // VACOPY - VACOPY has five operands: an input chain, a destination pointer,
521     // a source pointer, a SRCVALUE for the destination, and a SRCVALUE for the
522     // source.
523     VACOPY,
524     
525     // VAEND, VASTART - VAEND and VASTART have three operands: an input chain, a
526     // pointer, and a SRCVALUE.
527     VAEND, VASTART,
528
529     // SRCVALUE - This is a node type that holds a Value* that is used to
530     // make reference to a value in the LLVM IR.
531     SRCVALUE,
532
533     // MEMOPERAND - This is a node that contains a MemOperand which records
534     // information about a memory reference. This is used to make AliasAnalysis
535     // queries from the backend.
536     MEMOPERAND,
537
538     // PCMARKER - This corresponds to the pcmarker intrinsic.
539     PCMARKER,
540
541     // READCYCLECOUNTER - This corresponds to the readcyclecounter intrinsic.
542     // The only operand is a chain and a value and a chain are produced.  The
543     // value is the contents of the architecture specific cycle counter like 
544     // register (or other high accuracy low latency clock source)
545     READCYCLECOUNTER,
546
547     // HANDLENODE node - Used as a handle for various purposes.
548     HANDLENODE,
549
550     // LOCATION - This node is used to represent a source location for debug
551     // info.  It takes token chain as input, then a line number, then a column
552     // number, then a filename, then a working dir.  It produces a token chain
553     // as output.
554     LOCATION,
555     
556     // DEBUG_LOC - This node is used to represent source line information
557     // embedded in the code.  It takes a token chain as input, then a line
558     // number, then a column then a file id (provided by MachineModuleInfo.) It
559     // produces a token chain as output.
560     DEBUG_LOC,
561
562     // TRAMPOLINE - This corresponds to the init_trampoline intrinsic.
563     // It takes as input a token chain, the pointer to the trampoline,
564     // the pointer to the nested function, the pointer to pass for the
565     // 'nest' parameter, a SRCVALUE for the trampoline and another for
566     // the nested function (allowing targets to access the original
567     // Function*).  It produces the result of the intrinsic and a token
568     // chain as output.
569     TRAMPOLINE,
570
571     // TRAP - Trapping instruction
572     TRAP,
573
574     // PREFETCH - This corresponds to a prefetch intrinsic. It takes chains are
575     // their first operand. The other operands are the address to prefetch,
576     // read / write specifier, and locality specifier.
577     PREFETCH,
578
579     // OUTCHAIN = MEMBARRIER(INCHAIN, load-load, load-store, store-load, 
580     //                       store-store, device)
581     // This corresponds to the memory.barrier intrinsic.
582     // it takes an input chain, 4 operands to specify the type of barrier, an
583     // operand specifying if the barrier applies to device and uncached memory
584     // and produces an output chain.
585     MEMBARRIER,
586
587     // Val, OUTCHAIN = ATOMIC_LCS(INCHAIN, ptr, cmp, swap)
588     // this corresponds to the atomic.lcs intrinsic.
589     // cmp is compared to *ptr, and if equal, swap is stored in *ptr.
590     // the return is always the original value in *ptr
591     ATOMIC_LCS,
592
593     // Val, OUTCHAIN = ATOMIC_LAS(INCHAIN, ptr, amt)
594     // this corresponds to the atomic.las intrinsic.
595     // *ptr + amt is stored to *ptr atomically.
596     // the return is always the original value in *ptr
597     ATOMIC_LAS,
598
599     // Val, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amt)
600     // this corresponds to the atomic.swap intrinsic.
601     // amt is stored to *ptr atomically.
602     // the return is always the original value in *ptr
603     ATOMIC_SWAP,
604
605     // BUILTIN_OP_END - This must be the last enum value in this list.
606     BUILTIN_OP_END
607   };
608
609   /// Node predicates
610
611   /// isBuildVectorAllOnes - Return true if the specified node is a
612   /// BUILD_VECTOR where all of the elements are ~0 or undef.
613   bool isBuildVectorAllOnes(const SDNode *N);
614
615   /// isBuildVectorAllZeros - Return true if the specified node is a
616   /// BUILD_VECTOR where all of the elements are 0 or undef.
617   bool isBuildVectorAllZeros(const SDNode *N);
618
619   /// isScalarToVector - Return true if the specified node is a
620   /// ISD::SCALAR_TO_VECTOR node or a BUILD_VECTOR node where only the low
621   /// element is not an undef.
622   bool isScalarToVector(const SDNode *N);
623
624   /// isDebugLabel - Return true if the specified node represents a debug
625   /// label (i.e. ISD::LABEL or TargetInstrInfo::LABEL node and third operand
626   /// is 0).
627   bool isDebugLabel(const SDNode *N);
628   
629   //===--------------------------------------------------------------------===//
630   /// MemIndexedMode enum - This enum defines the load / store indexed 
631   /// addressing modes.
632   ///
633   /// UNINDEXED    "Normal" load / store. The effective address is already
634   ///              computed and is available in the base pointer. The offset
635   ///              operand is always undefined. In addition to producing a
636   ///              chain, an unindexed load produces one value (result of the
637   ///              load); an unindexed store does not produce a value.
638   ///
639   /// PRE_INC      Similar to the unindexed mode where the effective address is
640   /// PRE_DEC      the value of the base pointer add / subtract the offset.
641   ///              It considers the computation as being folded into the load /
642   ///              store operation (i.e. the load / store does the address
643   ///              computation as well as performing the memory transaction).
644   ///              The base operand is always undefined. In addition to
645   ///              producing a chain, pre-indexed load produces two values
646   ///              (result of the load and the result of the address
647   ///              computation); a pre-indexed store produces one value (result
648   ///              of the address computation).
649   ///
650   /// POST_INC     The effective address is the value of the base pointer. The
651   /// POST_DEC     value of the offset operand is then added to / subtracted
652   ///              from the base after memory transaction. In addition to
653   ///              producing a chain, post-indexed load produces two values
654   ///              (the result of the load and the result of the base +/- offset
655   ///              computation); a post-indexed store produces one value (the
656   ///              the result of the base +/- offset computation).
657   ///
658   enum MemIndexedMode {
659     UNINDEXED = 0,
660     PRE_INC,
661     PRE_DEC,
662     POST_INC,
663     POST_DEC,
664     LAST_INDEXED_MODE
665   };
666
667   //===--------------------------------------------------------------------===//
668   /// LoadExtType enum - This enum defines the three variants of LOADEXT
669   /// (load with extension).
670   ///
671   /// SEXTLOAD loads the integer operand and sign extends it to a larger
672   ///          integer result type.
673   /// ZEXTLOAD loads the integer operand and zero extends it to a larger
674   ///          integer result type.
675   /// EXTLOAD  is used for three things: floating point extending loads, 
676   ///          integer extending loads [the top bits are undefined], and vector
677   ///          extending loads [load into low elt].
678   ///
679   enum LoadExtType {
680     NON_EXTLOAD = 0,
681     EXTLOAD,
682     SEXTLOAD,
683     ZEXTLOAD,
684     LAST_LOADX_TYPE
685   };
686
687   //===--------------------------------------------------------------------===//
688   /// ISD::CondCode enum - These are ordered carefully to make the bitfields
689   /// below work out, when considering SETFALSE (something that never exists
690   /// dynamically) as 0.  "U" -> Unsigned (for integer operands) or Unordered
691   /// (for floating point), "L" -> Less than, "G" -> Greater than, "E" -> Equal
692   /// to.  If the "N" column is 1, the result of the comparison is undefined if
693   /// the input is a NAN.
694   ///
695   /// All of these (except for the 'always folded ops') should be handled for
696   /// floating point.  For integer, only the SETEQ,SETNE,SETLT,SETLE,SETGT,
697   /// SETGE,SETULT,SETULE,SETUGT, and SETUGE opcodes are used.
698   ///
699   /// Note that these are laid out in a specific order to allow bit-twiddling
700   /// to transform conditions.
701   enum CondCode {
702     // Opcode          N U L G E       Intuitive operation
703     SETFALSE,      //    0 0 0 0       Always false (always folded)
704     SETOEQ,        //    0 0 0 1       True if ordered and equal
705     SETOGT,        //    0 0 1 0       True if ordered and greater than
706     SETOGE,        //    0 0 1 1       True if ordered and greater than or equal
707     SETOLT,        //    0 1 0 0       True if ordered and less than
708     SETOLE,        //    0 1 0 1       True if ordered and less than or equal
709     SETONE,        //    0 1 1 0       True if ordered and operands are unequal
710     SETO,          //    0 1 1 1       True if ordered (no nans)
711     SETUO,         //    1 0 0 0       True if unordered: isnan(X) | isnan(Y)
712     SETUEQ,        //    1 0 0 1       True if unordered or equal
713     SETUGT,        //    1 0 1 0       True if unordered or greater than
714     SETUGE,        //    1 0 1 1       True if unordered, greater than, or equal
715     SETULT,        //    1 1 0 0       True if unordered or less than
716     SETULE,        //    1 1 0 1       True if unordered, less than, or equal
717     SETUNE,        //    1 1 1 0       True if unordered or not equal
718     SETTRUE,       //    1 1 1 1       Always true (always folded)
719     // Don't care operations: undefined if the input is a nan.
720     SETFALSE2,     //  1 X 0 0 0       Always false (always folded)
721     SETEQ,         //  1 X 0 0 1       True if equal
722     SETGT,         //  1 X 0 1 0       True if greater than
723     SETGE,         //  1 X 0 1 1       True if greater than or equal
724     SETLT,         //  1 X 1 0 0       True if less than
725     SETLE,         //  1 X 1 0 1       True if less than or equal
726     SETNE,         //  1 X 1 1 0       True if not equal
727     SETTRUE2,      //  1 X 1 1 1       Always true (always folded)
728
729     SETCC_INVALID       // Marker value.
730   };
731
732   /// isSignedIntSetCC - Return true if this is a setcc instruction that
733   /// performs a signed comparison when used with integer operands.
734   inline bool isSignedIntSetCC(CondCode Code) {
735     return Code == SETGT || Code == SETGE || Code == SETLT || Code == SETLE;
736   }
737
738   /// isUnsignedIntSetCC - Return true if this is a setcc instruction that
739   /// performs an unsigned comparison when used with integer operands.
740   inline bool isUnsignedIntSetCC(CondCode Code) {
741     return Code == SETUGT || Code == SETUGE || Code == SETULT || Code == SETULE;
742   }
743
744   /// isTrueWhenEqual - Return true if the specified condition returns true if
745   /// the two operands to the condition are equal.  Note that if one of the two
746   /// operands is a NaN, this value is meaningless.
747   inline bool isTrueWhenEqual(CondCode Cond) {
748     return ((int)Cond & 1) != 0;
749   }
750
751   /// getUnorderedFlavor - This function returns 0 if the condition is always
752   /// false if an operand is a NaN, 1 if the condition is always true if the
753   /// operand is a NaN, and 2 if the condition is undefined if the operand is a
754   /// NaN.
755   inline unsigned getUnorderedFlavor(CondCode Cond) {
756     return ((int)Cond >> 3) & 3;
757   }
758
759   /// getSetCCInverse - Return the operation corresponding to !(X op Y), where
760   /// 'op' is a valid SetCC operation.
761   CondCode getSetCCInverse(CondCode Operation, bool isInteger);
762
763   /// getSetCCSwappedOperands - Return the operation corresponding to (Y op X)
764   /// when given the operation for (X op Y).
765   CondCode getSetCCSwappedOperands(CondCode Operation);
766
767   /// getSetCCOrOperation - Return the result of a logical OR between different
768   /// comparisons of identical values: ((X op1 Y) | (X op2 Y)).  This
769   /// function returns SETCC_INVALID if it is not possible to represent the
770   /// resultant comparison.
771   CondCode getSetCCOrOperation(CondCode Op1, CondCode Op2, bool isInteger);
772
773   /// getSetCCAndOperation - Return the result of a logical AND between
774   /// different comparisons of identical values: ((X op1 Y) & (X op2 Y)).  This
775   /// function returns SETCC_INVALID if it is not possible to represent the
776   /// resultant comparison.
777   CondCode getSetCCAndOperation(CondCode Op1, CondCode Op2, bool isInteger);
778 }  // end llvm::ISD namespace
779
780
781 //===----------------------------------------------------------------------===//
782 /// SDOperandImpl - Unlike LLVM values, Selection DAG nodes may return multiple
783 /// values as the result of a computation.  Many nodes return multiple values,
784 /// from loads (which define a token and a return value) to ADDC (which returns
785 /// a result and a carry value), to calls (which may return an arbitrary number
786 /// of values).
787 ///
788 /// As such, each use of a SelectionDAG computation must indicate the node that
789 /// computes it as well as which return value to use from that node.  This pair
790 /// of information is represented with the SDOperandImpl value type.
791 ///
792 class SDOperandImpl {
793 public:
794   SDNode *Val;        // The node defining the value we are using.
795   unsigned ResNo;     // Which return value of the node we are using.
796
797   SDOperandImpl() : Val(0), ResNo(0) {}
798   SDOperandImpl(SDNode *val, unsigned resno) : Val(val), ResNo(resno) {}
799
800   bool operator==(const SDOperandImpl &O) const {
801     return Val == O.Val && ResNo == O.ResNo;
802   }
803   bool operator!=(const SDOperandImpl &O) const {
804     return !operator==(O);
805   }
806   bool operator<(const SDOperandImpl &O) const {
807     return Val < O.Val || (Val == O.Val && ResNo < O.ResNo);
808   }
809
810   SDOperandImpl getValue(unsigned R) const {
811     return SDOperandImpl(Val, R);
812   }
813
814   // isOperandOf - Return true if this node is an operand of N.
815   bool isOperandOf(SDNode *N) const;
816
817   /// getValueType - Return the ValueType of the referenced return value.
818   ///
819   inline MVT::ValueType getValueType() const;
820
821   /// getValueSizeInBits - Returns MVT::getSizeInBits(getValueType()).
822   ///
823   unsigned getValueSizeInBits() const {
824     return MVT::getSizeInBits(getValueType());
825   }
826
827   // Forwarding methods - These forward to the corresponding methods in SDNode.
828   inline unsigned getOpcode() const;
829   inline unsigned getNumOperands() const;
830   inline const SDOperandImpl &getOperand(unsigned i) const;
831   inline uint64_t getConstantOperandVal(unsigned i) const;
832   inline bool isTargetOpcode() const;
833   inline unsigned getTargetOpcode() const;
834
835   
836   /// reachesChainWithoutSideEffects - Return true if this operand (which must
837   /// be a chain) reaches the specified operand without crossing any 
838   /// side-effecting instructions.  In practice, this looks through token
839   /// factors and non-volatile loads.  In order to remain efficient, this only
840   /// looks a couple of nodes in, it does not do an exhaustive search.
841   bool reachesChainWithoutSideEffects(SDOperandImpl Dest, 
842                                       unsigned Depth = 2) const;
843   
844   /// hasOneUse - Return true if there is exactly one operation using this
845   /// result value of the defining operator.
846   inline bool hasOneUse() const;
847
848   /// use_empty - Return true if there are no operations using this
849   /// result value of the defining operator.
850   inline bool use_empty() const;
851 };
852
853
854 template<> struct DenseMapInfo<SDOperandImpl> {
855   static inline SDOperandImpl getEmptyKey() { 
856     return SDOperandImpl((SDNode*)-1, -1U); 
857   }
858   static inline SDOperandImpl getTombstoneKey() { 
859     return SDOperandImpl((SDNode*)-1, 0);
860   }
861   static unsigned getHashValue(const SDOperandImpl &Val) {
862     return ((unsigned)((uintptr_t)Val.Val >> 4) ^
863             (unsigned)((uintptr_t)Val.Val >> 9)) + Val.ResNo;
864   }
865   static bool isEqual(const SDOperandImpl &LHS, const SDOperandImpl &RHS) {
866     return LHS == RHS;
867   }
868   static bool isPod() { return true; }
869 };
870
871 /// simplify_type specializations - Allow casting operators to work directly on
872 /// SDOperands as if they were SDNode*'s.
873 template<> struct simplify_type<SDOperandImpl> {
874   typedef SDNode* SimpleType;
875   static SimpleType getSimplifiedValue(const SDOperandImpl &Val) {
876     return static_cast<SimpleType>(Val.Val);
877   }
878 };
879 template<> struct simplify_type<const SDOperandImpl> {
880   typedef SDNode* SimpleType;
881   static SimpleType getSimplifiedValue(const SDOperandImpl &Val) {
882     return static_cast<SimpleType>(Val.Val);
883   }
884 };
885
886 /// SDOperand - Represents a use of the SDNode referred by
887 /// the SDOperandImpl.
888 class SDOperand: public SDOperandImpl {
889   /// parent - Parent node of this operand.
890   SDNode    *parent;
891   /// Prev, next - Pointers to the uses list of the SDNode referred by 
892   /// this operand.
893   SDOperand **Prev, *Next;
894 public:
895   friend class SDNode;
896   SDOperand(): SDOperandImpl(), parent(NULL), Prev(NULL), Next(NULL) {}
897
898   SDOperand(SDNode *val, unsigned resno) : 
899     SDOperandImpl(val,resno), parent(NULL), Prev(NULL), Next(NULL) {}
900
901   SDOperand(const SDOperandImpl& Op): SDOperandImpl(Op),parent(NULL),
902       Prev(NULL), Next(NULL)  {
903   }
904
905   SDOperand& operator= (SDOperandImpl& Op) {
906       *(SDOperandImpl*)this = Op;
907       Next = NULL;
908       Prev = NULL;
909       return *this;
910   }
911
912   SDOperand& operator= (const SDOperandImpl& Op) {
913       *(SDOperandImpl*)this = Op;
914       Next = NULL;
915       Prev = NULL;
916       return *this;
917   }
918
919   SDOperand& operator= (SDOperand& Op) {
920       *(SDOperandImpl*)this = Op;
921       Next = NULL;
922       Prev = NULL;
923       return *this;
924   }
925
926   SDOperand& operator= (const SDOperand& Op) {
927       *(SDOperandImpl*)this = Op;
928       Next = NULL;
929       Prev = NULL;
930       return *this;
931   }
932
933   SDOperand * getNext() { return Next; }
934
935   SDNode *getUser() { return parent; }
936   void setUser(SDNode *p) { parent = p; }
937
938 protected:
939   void addToList(SDOperand **List) {
940     Next = *List;
941     if (Next) Next->Prev = &Next;
942     Prev = List;
943     *List = this;
944   }
945
946   void removeFromList() {
947     *Prev = Next;
948     if (Next) Next->Prev = Prev;
949   }
950 };
951
952
953 /// simplify_type specializations - Allow casting operators to work directly on
954 /// SDOperands as if they were SDNode*'s.
955 template<> struct simplify_type<SDOperand> {
956   typedef SDNode* SimpleType;
957   static SimpleType getSimplifiedValue(const SDOperand &Val) {
958     return static_cast<SimpleType>(Val.Val);
959   }
960 };
961 template<> struct simplify_type<const SDOperand> {
962   typedef SDNode* SimpleType;
963   static SimpleType getSimplifiedValue(const SDOperand &Val) {
964     return static_cast<SimpleType>(Val.Val);
965   }
966 };
967
968
969 /// SDNode - Represents one node in the SelectionDAG.
970 ///
971 class SDNode : public FoldingSetNode {
972 private:
973   /// NodeType - The operation that this node performs.
974   ///
975   unsigned short NodeType;
976   
977   /// OperandsNeedDelete - This is true if OperandList was new[]'d.  If true,
978   /// then they will be delete[]'d when the node is destroyed.
979   bool OperandsNeedDelete : 1;
980
981   /// NodeId - Unique id per SDNode in the DAG.
982   int NodeId;
983
984   /// OperandList - The values that are used by this operation.
985   ///
986   SDOperand *OperandList;
987   
988   /// ValueList - The types of the values this node defines.  SDNode's may
989   /// define multiple values simultaneously.
990   const MVT::ValueType *ValueList;
991
992   /// NumOperands/NumValues - The number of entries in the Operand/Value list.
993   unsigned short NumOperands, NumValues;
994   
995   /// Prev/Next pointers - These pointers form the linked list of of the
996   /// AllNodes list in the current DAG.
997   SDNode *Prev, *Next;
998   friend struct ilist_traits<SDNode>;
999
1000   /// UsesSize - The size of the uses list.
1001   unsigned UsesSize;
1002
1003   /// Uses - List of uses for this SDNode.
1004   SDOperand *Uses;
1005
1006   /// addUse - add SDOperand to the list of uses.
1007   void addUse(SDOperand &U) { U.addToList(&Uses); }
1008
1009   // Out-of-line virtual method to give class a home.
1010   virtual void ANCHOR();
1011 public:
1012   virtual ~SDNode() {
1013     assert(NumOperands == 0 && "Operand list not cleared before deletion");
1014     NodeType = ISD::DELETED_NODE;
1015   }
1016   
1017   //===--------------------------------------------------------------------===//
1018   //  Accessors
1019   //
1020   unsigned getOpcode()  const { return NodeType; }
1021   bool isTargetOpcode() const { return NodeType >= ISD::BUILTIN_OP_END; }
1022   unsigned getTargetOpcode() const {
1023     assert(isTargetOpcode() && "Not a target opcode!");
1024     return NodeType - ISD::BUILTIN_OP_END;
1025   }
1026
1027   size_t use_size() const { return UsesSize; }
1028   bool use_empty() const { return Uses == NULL; }
1029   bool hasOneUse() const { return use_size() == 1; }
1030
1031   /// getNodeId - Return the unique node id.
1032   ///
1033   int getNodeId() const { return NodeId; }
1034
1035   /// setNodeId - Set unique node id.
1036   void setNodeId(int Id) { NodeId = Id; }
1037
1038   /// use_iterator - This class provides iterator support for SDOperand
1039   /// operands that use a specific SDNode. 
1040   class use_iterator
1041     : public forward_iterator<SDOperand, ptrdiff_t> {
1042     SDOperand *Op;
1043     explicit use_iterator(SDOperand *op) : Op(op) {
1044     }
1045     friend class SDNode;
1046   public:
1047     typedef forward_iterator<SDOperand, ptrdiff_t>::reference reference;
1048     typedef forward_iterator<SDOperand, ptrdiff_t>::pointer pointer;
1049
1050     use_iterator(const use_iterator &I) : Op(I.Op) {}
1051     use_iterator() : Op(0) {}
1052
1053     bool operator==(const use_iterator &x) const {
1054       return Op == x.Op;
1055     }
1056     bool operator!=(const use_iterator &x) const {
1057       return !operator==(x);
1058     }
1059  
1060     /// atEnd - return true if this iterator is at the end of uses list.
1061     bool atEnd() const { return Op == 0; }
1062
1063     // Iterator traversal: forward iteration only.
1064     use_iterator &operator++() {          // Preincrement
1065       assert(Op && "Cannot increment end iterator!");
1066       Op = Op->getNext();
1067       return *this;
1068     }
1069
1070     use_iterator operator++(int) {        // Postincrement
1071       use_iterator tmp = *this; ++*this; return tmp;
1072     }
1073
1074
1075     /// getOperandNum - Retrive a number of a current operand.
1076     unsigned getOperandNum() const {
1077       assert(Op && "Cannot dereference end iterator!");
1078       return (Op - Op->getUser()->OperandList);
1079     }
1080
1081     /// Retrieve a reference to the current operand.
1082     SDOperand &operator*() const {
1083       assert(Op && "Cannot dereference end iterator!");
1084       return *Op;
1085     }
1086
1087     /// Retrieve a pointer to the current operand.
1088     SDOperand *operator->() const {
1089       assert(Op && "Cannot dereference end iterator!");
1090       return Op;
1091     }
1092   };
1093
1094   /// use_begin/use_end - Provide iteration support to walk over all uses
1095   /// of an SDNode.
1096
1097   use_iterator use_begin(SDNode *node) const {
1098     return use_iterator(node->Uses);
1099   }
1100
1101   use_iterator use_begin() const {
1102     return use_iterator(Uses);
1103   }
1104
1105   static use_iterator use_end() { return use_iterator(0); }
1106
1107
1108   /// hasNUsesOfValue - Return true if there are exactly NUSES uses of the
1109   /// indicated value.  This method ignores uses of other values defined by this
1110   /// operation.
1111   bool hasNUsesOfValue(unsigned NUses, unsigned Value) const;
1112
1113   /// hasAnyUseOfValue - Return true if there are any use of the indicated
1114   /// value. This method ignores uses of other values defined by this operation.
1115   bool hasAnyUseOfValue(unsigned Value) const;
1116
1117   /// isOnlyUseOf - Return true if this node is the only use of N.
1118   ///
1119   bool isOnlyUseOf(SDNode *N) const;
1120
1121   /// isOperandOf - Return true if this node is an operand of N.
1122   ///
1123   bool isOperandOf(SDNode *N) const;
1124
1125   /// isPredecessorOf - Return true if this node is a predecessor of N. This
1126   /// node is either an operand of N or it can be reached by recursively
1127   /// traversing up the operands.
1128   /// NOTE: this is an expensive method. Use it carefully.
1129   bool isPredecessorOf(SDNode *N) const;
1130
1131   /// getNumOperands - Return the number of values used by this operation.
1132   ///
1133   unsigned getNumOperands() const { return NumOperands; }
1134
1135   /// getConstantOperandVal - Helper method returns the integer value of a 
1136   /// ConstantSDNode operand.
1137   uint64_t getConstantOperandVal(unsigned Num) const;
1138
1139   const SDOperand &getOperand(unsigned Num) const {
1140     assert(Num < NumOperands && "Invalid child # of SDNode!");
1141     return OperandList[Num];
1142   }
1143
1144   typedef SDOperand* op_iterator;
1145   op_iterator op_begin() const { return OperandList; }
1146   op_iterator op_end() const { return OperandList+NumOperands; }
1147
1148
1149   SDVTList getVTList() const {
1150     SDVTList X = { ValueList, NumValues };
1151     return X;
1152   };
1153   
1154   /// getNumValues - Return the number of values defined/returned by this
1155   /// operator.
1156   ///
1157   unsigned getNumValues() const { return NumValues; }
1158
1159   /// getValueType - Return the type of a specified result.
1160   ///
1161   MVT::ValueType getValueType(unsigned ResNo) const {
1162     assert(ResNo < NumValues && "Illegal result number!");
1163     return ValueList[ResNo];
1164   }
1165
1166   /// getValueSizeInBits - Returns MVT::getSizeInBits(getValueType(ResNo)).
1167   ///
1168   unsigned getValueSizeInBits(unsigned ResNo) const {
1169     return MVT::getSizeInBits(getValueType(ResNo));
1170   }
1171
1172   typedef const MVT::ValueType* value_iterator;
1173   value_iterator value_begin() const { return ValueList; }
1174   value_iterator value_end() const { return ValueList+NumValues; }
1175
1176   /// getOperationName - Return the opcode of this operation for printing.
1177   ///
1178   std::string getOperationName(const SelectionDAG *G = 0) const;
1179   static const char* getIndexedModeName(ISD::MemIndexedMode AM);
1180   void dump() const;
1181   void dump(const SelectionDAG *G) const;
1182
1183   static bool classof(const SDNode *) { return true; }
1184
1185   /// Profile - Gather unique data for the node.
1186   ///
1187   void Profile(FoldingSetNodeID &ID);
1188
1189 protected:
1190   friend class SelectionDAG;
1191   
1192   /// getValueTypeList - Return a pointer to the specified value type.
1193   ///
1194   static const MVT::ValueType *getValueTypeList(MVT::ValueType VT);
1195   static SDVTList getSDVTList(MVT::ValueType VT) {
1196     SDVTList Ret = { getValueTypeList(VT), 1 };
1197     return Ret;
1198   }
1199
1200   SDNode(unsigned Opc, SDVTList VTs, const SDOperand *Ops, unsigned NumOps)
1201     : NodeType(Opc), NodeId(-1), UsesSize(0), Uses(NULL) {
1202     OperandsNeedDelete = true;
1203     NumOperands = NumOps;
1204     OperandList = NumOps ? new SDOperand[NumOperands] : 0;
1205     
1206     for (unsigned i = 0; i != NumOps; ++i) {
1207       OperandList[i] = Ops[i];
1208       OperandList[i].setUser(this);
1209       Ops[i].Val->addUse(OperandList[i]);
1210       ++Ops[i].Val->UsesSize;
1211     }
1212     
1213     ValueList = VTs.VTs;
1214     NumValues = VTs.NumVTs;
1215     Prev = 0; Next = 0;
1216   }
1217
1218   SDNode(unsigned Opc, SDVTList VTs)
1219     : NodeType(Opc), NodeId(-1), UsesSize(0), Uses(NULL) {
1220     OperandsNeedDelete = false;  // Operands set with InitOperands.
1221     NumOperands = 0;
1222     OperandList = 0;
1223     ValueList = VTs.VTs;
1224     NumValues = VTs.NumVTs;
1225     Prev = 0; Next = 0;
1226   }
1227   
1228   /// InitOperands - Initialize the operands list of this node with the
1229   /// specified values, which are part of the node (thus they don't need to be
1230   /// copied in or allocated).
1231   void InitOperands(SDOperand *Ops, unsigned NumOps) {
1232     assert(OperandList == 0 && "Operands already set!");
1233     NumOperands = NumOps;
1234     OperandList = Ops;
1235     UsesSize = 0;
1236     Uses = NULL;
1237     
1238     for (unsigned i = 0; i != NumOps; ++i) {
1239       OperandList[i].setUser(this);
1240       Ops[i].Val->addUse(OperandList[i]);
1241       ++Ops[i].Val->UsesSize;
1242     }
1243   }
1244   
1245   /// MorphNodeTo - This frees the operands of the current node, resets the
1246   /// opcode, types, and operands to the specified value.  This should only be
1247   /// used by the SelectionDAG class.
1248   void MorphNodeTo(unsigned Opc, SDVTList L,
1249                    const SDOperand *Ops, unsigned NumOps);
1250   
1251   void addUser(unsigned i, SDNode *User) {
1252     assert(User->OperandList[i].getUser() && "Node without parent");
1253     addUse(User->OperandList[i]);
1254     ++UsesSize;
1255   }
1256
1257   void removeUser(unsigned i, SDNode *User) {
1258     assert(User->OperandList[i].getUser() && "Node without parent");
1259     SDOperand &Op = User->OperandList[i];
1260     Op.removeFromList();
1261     --UsesSize;
1262   }
1263 };
1264
1265
1266 // Define inline functions from the SDOperandImpl class.
1267
1268 inline unsigned SDOperandImpl::getOpcode() const {
1269   return Val->getOpcode();
1270 }
1271 inline MVT::ValueType SDOperandImpl::getValueType() const {
1272   return Val->getValueType(ResNo);
1273 }
1274 inline unsigned SDOperandImpl::getNumOperands() const {
1275   return Val->getNumOperands();
1276 }
1277 inline const SDOperandImpl &SDOperandImpl::getOperand(unsigned i) const {
1278   return Val->getOperand(i);
1279 }
1280 inline uint64_t SDOperandImpl::getConstantOperandVal(unsigned i) const {
1281   return Val->getConstantOperandVal(i);
1282 }
1283 inline bool SDOperandImpl::isTargetOpcode() const {
1284   return Val->isTargetOpcode();
1285 }
1286 inline unsigned SDOperandImpl::getTargetOpcode() const {
1287   return Val->getTargetOpcode();
1288 }
1289 inline bool SDOperandImpl::hasOneUse() const {
1290   return Val->hasNUsesOfValue(1, ResNo);
1291 }
1292 inline bool SDOperandImpl::use_empty() const {
1293   return !Val->hasAnyUseOfValue(ResNo);
1294 }
1295
1296 /// UnarySDNode - This class is used for single-operand SDNodes.  This is solely
1297 /// to allow co-allocation of node operands with the node itself.
1298 class UnarySDNode : public SDNode {
1299   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1300   SDOperand Op;
1301 public:
1302   UnarySDNode(unsigned Opc, SDVTList VTs, SDOperand X)
1303     : SDNode(Opc, VTs), Op(X) {
1304     InitOperands(&Op, 1);
1305   }
1306 };
1307
1308 /// BinarySDNode - This class is used for two-operand SDNodes.  This is solely
1309 /// to allow co-allocation of node operands with the node itself.
1310 class BinarySDNode : public SDNode {
1311   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1312   SDOperand Ops[2];
1313 public:
1314   BinarySDNode(unsigned Opc, SDVTList VTs, SDOperand X, SDOperand Y)
1315     : SDNode(Opc, VTs) {
1316     Ops[0] = X;
1317     Ops[1] = Y;
1318     InitOperands(Ops, 2);
1319   }
1320 };
1321
1322 /// TernarySDNode - This class is used for three-operand SDNodes. This is solely
1323 /// to allow co-allocation of node operands with the node itself.
1324 class TernarySDNode : public SDNode {
1325   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1326   SDOperand Ops[3];
1327 public:
1328   TernarySDNode(unsigned Opc, SDVTList VTs, SDOperand X, SDOperand Y,
1329                 SDOperand Z)
1330     : SDNode(Opc, VTs) {
1331     Ops[0] = X;
1332     Ops[1] = Y;
1333     Ops[2] = Z;
1334     InitOperands(Ops, 3);
1335   }
1336 };
1337
1338
1339 /// HandleSDNode - This class is used to form a handle around another node that
1340 /// is persistant and is updated across invocations of replaceAllUsesWith on its
1341 /// operand.  This node should be directly created by end-users and not added to
1342 /// the AllNodes list.
1343 class HandleSDNode : public SDNode {
1344   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1345   SDOperand Op;
1346 public:
1347   explicit HandleSDNode(SDOperand X)
1348     : SDNode(ISD::HANDLENODE, getSDVTList(MVT::Other)), Op(X) {
1349     InitOperands(&Op, 1);
1350   }
1351   ~HandleSDNode();  
1352   SDOperand getValue() const { return Op; }
1353 };
1354
1355 class AtomicSDNode : public SDNode {
1356   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1357   SDOperand Ops[4];
1358   MVT::ValueType OrigVT;
1359 public:
1360   AtomicSDNode(unsigned Opc, SDVTList VTL, SDOperand Chain, SDOperand Ptr, 
1361                SDOperand Cmp, SDOperand Swp, MVT::ValueType VT)
1362     : SDNode(Opc, VTL) {
1363     Ops[0] = Chain;
1364     Ops[1] = Ptr;
1365     Ops[2] = Swp;
1366     Ops[3] = Cmp;
1367     InitOperands(Ops, 4);
1368     OrigVT=VT;
1369   }
1370   AtomicSDNode(unsigned Opc, SDVTList VTL, SDOperand Chain, SDOperand Ptr, 
1371                SDOperand Val, MVT::ValueType VT)
1372     : SDNode(Opc, VTL) {
1373     Ops[0] = Chain;
1374     Ops[1] = Ptr;
1375     Ops[2] = Val;
1376     InitOperands(Ops, 3);
1377     OrigVT=VT;
1378   }
1379   MVT::ValueType getVT() const { return OrigVT; }
1380   bool isCompareAndSwap() const { return getOpcode() == ISD::ATOMIC_LCS; }
1381 };
1382
1383 class StringSDNode : public SDNode {
1384   std::string Value;
1385   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1386 protected:
1387   friend class SelectionDAG;
1388   explicit StringSDNode(const std::string &val)
1389     : SDNode(ISD::STRING, getSDVTList(MVT::Other)), Value(val) {
1390   }
1391 public:
1392   const std::string &getValue() const { return Value; }
1393   static bool classof(const StringSDNode *) { return true; }
1394   static bool classof(const SDNode *N) {
1395     return N->getOpcode() == ISD::STRING;
1396   }
1397 };  
1398
1399 class ConstantSDNode : public SDNode {
1400   APInt Value;
1401   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1402 protected:
1403   friend class SelectionDAG;
1404   ConstantSDNode(bool isTarget, const APInt &val, MVT::ValueType VT)
1405     : SDNode(isTarget ? ISD::TargetConstant : ISD::Constant, getSDVTList(VT)),
1406       Value(val) {
1407   }
1408 public:
1409
1410   const APInt &getAPIntValue() const { return Value; }
1411   uint64_t getValue() const { return Value.getZExtValue(); }
1412
1413   int64_t getSignExtended() const {
1414     unsigned Bits = MVT::getSizeInBits(getValueType(0));
1415     return ((int64_t)Value.getZExtValue() << (64-Bits)) >> (64-Bits);
1416   }
1417
1418   bool isNullValue() const { return Value == 0; }
1419   bool isAllOnesValue() const {
1420     return Value == MVT::getIntVTBitMask(getValueType(0));
1421   }
1422
1423   static bool classof(const ConstantSDNode *) { return true; }
1424   static bool classof(const SDNode *N) {
1425     return N->getOpcode() == ISD::Constant ||
1426            N->getOpcode() == ISD::TargetConstant;
1427   }
1428 };
1429
1430 class ConstantFPSDNode : public SDNode {
1431   APFloat Value;
1432   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1433 protected:
1434   friend class SelectionDAG;
1435   ConstantFPSDNode(bool isTarget, const APFloat& val, MVT::ValueType VT)
1436     : SDNode(isTarget ? ISD::TargetConstantFP : ISD::ConstantFP,
1437              getSDVTList(VT)), Value(val) {
1438   }
1439 public:
1440
1441   const APFloat& getValueAPF() const { return Value; }
1442
1443   /// isExactlyValue - We don't rely on operator== working on double values, as
1444   /// it returns true for things that are clearly not equal, like -0.0 and 0.0.
1445   /// As such, this method can be used to do an exact bit-for-bit comparison of
1446   /// two floating point values.
1447
1448   /// We leave the version with the double argument here because it's just so
1449   /// convenient to write "2.0" and the like.  Without this function we'd 
1450   /// have to duplicate its logic everywhere it's called.
1451   bool isExactlyValue(double V) const { 
1452     APFloat Tmp(V);
1453     Tmp.convert(Value.getSemantics(), APFloat::rmNearestTiesToEven);
1454     return isExactlyValue(Tmp);
1455   }
1456   bool isExactlyValue(const APFloat& V) const;
1457
1458   bool isValueValidForType(MVT::ValueType VT, const APFloat& Val);
1459
1460   static bool classof(const ConstantFPSDNode *) { return true; }
1461   static bool classof(const SDNode *N) {
1462     return N->getOpcode() == ISD::ConstantFP || 
1463            N->getOpcode() == ISD::TargetConstantFP;
1464   }
1465 };
1466
1467 class GlobalAddressSDNode : public SDNode {
1468   GlobalValue *TheGlobal;
1469   int Offset;
1470   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1471 protected:
1472   friend class SelectionDAG;
1473   GlobalAddressSDNode(bool isTarget, const GlobalValue *GA, MVT::ValueType VT,
1474                       int o = 0);
1475 public:
1476
1477   GlobalValue *getGlobal() const { return TheGlobal; }
1478   int getOffset() const { return Offset; }
1479
1480   static bool classof(const GlobalAddressSDNode *) { return true; }
1481   static bool classof(const SDNode *N) {
1482     return N->getOpcode() == ISD::GlobalAddress ||
1483            N->getOpcode() == ISD::TargetGlobalAddress ||
1484            N->getOpcode() == ISD::GlobalTLSAddress ||
1485            N->getOpcode() == ISD::TargetGlobalTLSAddress;
1486   }
1487 };
1488
1489 class FrameIndexSDNode : public SDNode {
1490   int FI;
1491   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1492 protected:
1493   friend class SelectionDAG;
1494   FrameIndexSDNode(int fi, MVT::ValueType VT, bool isTarg)
1495     : SDNode(isTarg ? ISD::TargetFrameIndex : ISD::FrameIndex, getSDVTList(VT)),
1496       FI(fi) {
1497   }
1498 public:
1499
1500   int getIndex() const { return FI; }
1501
1502   static bool classof(const FrameIndexSDNode *) { return true; }
1503   static bool classof(const SDNode *N) {
1504     return N->getOpcode() == ISD::FrameIndex ||
1505            N->getOpcode() == ISD::TargetFrameIndex;
1506   }
1507 };
1508
1509 class JumpTableSDNode : public SDNode {
1510   int JTI;
1511   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1512 protected:
1513   friend class SelectionDAG;
1514   JumpTableSDNode(int jti, MVT::ValueType VT, bool isTarg)
1515     : SDNode(isTarg ? ISD::TargetJumpTable : ISD::JumpTable, getSDVTList(VT)),
1516       JTI(jti) {
1517   }
1518 public:
1519     
1520   int getIndex() const { return JTI; }
1521   
1522   static bool classof(const JumpTableSDNode *) { return true; }
1523   static bool classof(const SDNode *N) {
1524     return N->getOpcode() == ISD::JumpTable ||
1525            N->getOpcode() == ISD::TargetJumpTable;
1526   }
1527 };
1528
1529 class ConstantPoolSDNode : public SDNode {
1530   union {
1531     Constant *ConstVal;
1532     MachineConstantPoolValue *MachineCPVal;
1533   } Val;
1534   int Offset;  // It's a MachineConstantPoolValue if top bit is set.
1535   unsigned Alignment;
1536   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1537 protected:
1538   friend class SelectionDAG;
1539   ConstantPoolSDNode(bool isTarget, Constant *c, MVT::ValueType VT,
1540                      int o=0)
1541     : SDNode(isTarget ? ISD::TargetConstantPool : ISD::ConstantPool,
1542              getSDVTList(VT)), Offset(o), Alignment(0) {
1543     assert((int)Offset >= 0 && "Offset is too large");
1544     Val.ConstVal = c;
1545   }
1546   ConstantPoolSDNode(bool isTarget, Constant *c, MVT::ValueType VT, int o,
1547                      unsigned Align)
1548     : SDNode(isTarget ? ISD::TargetConstantPool : ISD::ConstantPool, 
1549              getSDVTList(VT)), Offset(o), Alignment(Align) {
1550     assert((int)Offset >= 0 && "Offset is too large");
1551     Val.ConstVal = c;
1552   }
1553   ConstantPoolSDNode(bool isTarget, MachineConstantPoolValue *v,
1554                      MVT::ValueType VT, int o=0)
1555     : SDNode(isTarget ? ISD::TargetConstantPool : ISD::ConstantPool, 
1556              getSDVTList(VT)), Offset(o), Alignment(0) {
1557     assert((int)Offset >= 0 && "Offset is too large");
1558     Val.MachineCPVal = v;
1559     Offset |= 1 << (sizeof(unsigned)*8-1);
1560   }
1561   ConstantPoolSDNode(bool isTarget, MachineConstantPoolValue *v,
1562                      MVT::ValueType VT, int o, unsigned Align)
1563     : SDNode(isTarget ? ISD::TargetConstantPool : ISD::ConstantPool,
1564              getSDVTList(VT)), Offset(o), Alignment(Align) {
1565     assert((int)Offset >= 0 && "Offset is too large");
1566     Val.MachineCPVal = v;
1567     Offset |= 1 << (sizeof(unsigned)*8-1);
1568   }
1569 public:
1570
1571   bool isMachineConstantPoolEntry() const {
1572     return (int)Offset < 0;
1573   }
1574
1575   Constant *getConstVal() const {
1576     assert(!isMachineConstantPoolEntry() && "Wrong constantpool type");
1577     return Val.ConstVal;
1578   }
1579
1580   MachineConstantPoolValue *getMachineCPVal() const {
1581     assert(isMachineConstantPoolEntry() && "Wrong constantpool type");
1582     return Val.MachineCPVal;
1583   }
1584
1585   int getOffset() const {
1586     return Offset & ~(1 << (sizeof(unsigned)*8-1));
1587   }
1588   
1589   // Return the alignment of this constant pool object, which is either 0 (for
1590   // default alignment) or log2 of the desired value.
1591   unsigned getAlignment() const { return Alignment; }
1592
1593   const Type *getType() const;
1594
1595   static bool classof(const ConstantPoolSDNode *) { return true; }
1596   static bool classof(const SDNode *N) {
1597     return N->getOpcode() == ISD::ConstantPool ||
1598            N->getOpcode() == ISD::TargetConstantPool;
1599   }
1600 };
1601
1602 class BasicBlockSDNode : public SDNode {
1603   MachineBasicBlock *MBB;
1604   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1605 protected:
1606   friend class SelectionDAG;
1607   explicit BasicBlockSDNode(MachineBasicBlock *mbb)
1608     : SDNode(ISD::BasicBlock, getSDVTList(MVT::Other)), MBB(mbb) {
1609   }
1610 public:
1611
1612   MachineBasicBlock *getBasicBlock() const { return MBB; }
1613
1614   static bool classof(const BasicBlockSDNode *) { return true; }
1615   static bool classof(const SDNode *N) {
1616     return N->getOpcode() == ISD::BasicBlock;
1617   }
1618 };
1619
1620 /// SrcValueSDNode - An SDNode that holds an arbitrary LLVM IR Value. This is
1621 /// used when the SelectionDAG needs to make a simple reference to something
1622 /// in the LLVM IR representation.
1623 ///
1624 /// Note that this is not used for carrying alias information; that is done
1625 /// with MemOperandSDNode, which includes a Value which is required to be a
1626 /// pointer, and several other fields specific to memory references.
1627 ///
1628 class SrcValueSDNode : public SDNode {
1629   const Value *V;
1630   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1631 protected:
1632   friend class SelectionDAG;
1633   /// Create a SrcValue for a general value.
1634   explicit SrcValueSDNode(const Value *v)
1635     : SDNode(ISD::SRCVALUE, getSDVTList(MVT::Other)), V(v) {}
1636
1637 public:
1638   /// getValue - return the contained Value.
1639   const Value *getValue() const { return V; }
1640
1641   static bool classof(const SrcValueSDNode *) { return true; }
1642   static bool classof(const SDNode *N) {
1643     return N->getOpcode() == ISD::SRCVALUE;
1644   }
1645 };
1646
1647
1648 /// MemOperandSDNode - An SDNode that holds a MemOperand. This is
1649 /// used to represent a reference to memory after ISD::LOAD
1650 /// and ISD::STORE have been lowered.
1651 ///
1652 class MemOperandSDNode : public SDNode {
1653   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1654 protected:
1655   friend class SelectionDAG;
1656   /// Create a MemOperand node
1657   explicit MemOperandSDNode(const MemOperand &mo)
1658     : SDNode(ISD::MEMOPERAND, getSDVTList(MVT::Other)), MO(mo) {}
1659
1660 public:
1661   /// MO - The contained MemOperand.
1662   const MemOperand MO;
1663
1664   static bool classof(const MemOperandSDNode *) { return true; }
1665   static bool classof(const SDNode *N) {
1666     return N->getOpcode() == ISD::MEMOPERAND;
1667   }
1668 };
1669
1670
1671 class RegisterSDNode : public SDNode {
1672   unsigned Reg;
1673   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1674 protected:
1675   friend class SelectionDAG;
1676   RegisterSDNode(unsigned reg, MVT::ValueType VT)
1677     : SDNode(ISD::Register, getSDVTList(VT)), Reg(reg) {
1678   }
1679 public:
1680
1681   unsigned getReg() const { return Reg; }
1682
1683   static bool classof(const RegisterSDNode *) { return true; }
1684   static bool classof(const SDNode *N) {
1685     return N->getOpcode() == ISD::Register;
1686   }
1687 };
1688
1689 class ExternalSymbolSDNode : public SDNode {
1690   const char *Symbol;
1691   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1692 protected:
1693   friend class SelectionDAG;
1694   ExternalSymbolSDNode(bool isTarget, const char *Sym, MVT::ValueType VT)
1695     : SDNode(isTarget ? ISD::TargetExternalSymbol : ISD::ExternalSymbol,
1696              getSDVTList(VT)), Symbol(Sym) {
1697   }
1698 public:
1699
1700   const char *getSymbol() const { return Symbol; }
1701
1702   static bool classof(const ExternalSymbolSDNode *) { return true; }
1703   static bool classof(const SDNode *N) {
1704     return N->getOpcode() == ISD::ExternalSymbol ||
1705            N->getOpcode() == ISD::TargetExternalSymbol;
1706   }
1707 };
1708
1709 class CondCodeSDNode : public SDNode {
1710   ISD::CondCode Condition;
1711   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1712 protected:
1713   friend class SelectionDAG;
1714   explicit CondCodeSDNode(ISD::CondCode Cond)
1715     : SDNode(ISD::CONDCODE, getSDVTList(MVT::Other)), Condition(Cond) {
1716   }
1717 public:
1718
1719   ISD::CondCode get() const { return Condition; }
1720
1721   static bool classof(const CondCodeSDNode *) { return true; }
1722   static bool classof(const SDNode *N) {
1723     return N->getOpcode() == ISD::CONDCODE;
1724   }
1725 };
1726
1727 namespace ISD {
1728   struct ArgFlagsTy {
1729   private:
1730     static const uint64_t NoFlagSet      = 0ULL;
1731     static const uint64_t ZExt           = 1ULL<<0;  ///< Zero extended
1732     static const uint64_t ZExtOffs       = 0;
1733     static const uint64_t SExt           = 1ULL<<1;  ///< Sign extended
1734     static const uint64_t SExtOffs       = 1;
1735     static const uint64_t InReg          = 1ULL<<2;  ///< Passed in register
1736     static const uint64_t InRegOffs      = 2;
1737     static const uint64_t SRet           = 1ULL<<3;  ///< Hidden struct-ret ptr
1738     static const uint64_t SRetOffs       = 3;
1739     static const uint64_t ByVal          = 1ULL<<4;  ///< Struct passed by value
1740     static const uint64_t ByValOffs      = 4;
1741     static const uint64_t Nest           = 1ULL<<5;  ///< Nested fn static chain
1742     static const uint64_t NestOffs       = 5;
1743     static const uint64_t ByValAlign     = 0xFULL << 6; //< Struct alignment
1744     static const uint64_t ByValAlignOffs = 6;
1745     static const uint64_t OrigAlign      = 0x1FULL<<27;
1746     static const uint64_t OrigAlignOffs  = 27;
1747     static const uint64_t ByValSize      = 0xffffffffULL << 32; //< Struct size
1748     static const uint64_t ByValSizeOffs  = 32;
1749
1750     static const uint64_t One            = 1ULL; //< 1 of this type, for shifts
1751
1752     uint64_t Flags;
1753   public:
1754     ArgFlagsTy() : Flags(0) { }
1755
1756     bool isZExt()   const { return Flags & ZExt; }
1757     void setZExt()  { Flags |= One << ZExtOffs; }
1758
1759     bool isSExt()   const { return Flags & SExt; }
1760     void setSExt()  { Flags |= One << SExtOffs; }
1761
1762     bool isInReg()  const { return Flags & InReg; }
1763     void setInReg() { Flags |= One << InRegOffs; }
1764
1765     bool isSRet()   const { return Flags & SRet; }
1766     void setSRet()  { Flags |= One << SRetOffs; }
1767
1768     bool isByVal()  const { return Flags & ByVal; }
1769     void setByVal() { Flags |= One << ByValOffs; }
1770
1771     bool isNest()   const { return Flags & Nest; }
1772     void setNest()  { Flags |= One << NestOffs; }
1773
1774     unsigned getByValAlign() const {
1775       return (One << ((Flags & ByValAlign) >> ByValAlignOffs)) / 2;
1776     }
1777     void setByValAlign(unsigned A) {
1778       Flags = (Flags & ~ByValAlign) |
1779         (uint64_t(Log2_32(A) + 1) << ByValAlignOffs);
1780     }
1781
1782     unsigned getOrigAlign() const {
1783       return (One << ((Flags & OrigAlign) >> OrigAlignOffs)) / 2;
1784     }
1785     void setOrigAlign(unsigned A) {
1786       Flags = (Flags & ~OrigAlign) |
1787         (uint64_t(Log2_32(A) + 1) << OrigAlignOffs);
1788     }
1789
1790     unsigned getByValSize() const {
1791       return (Flags & ByValSize) >> ByValSizeOffs;
1792     }
1793     void setByValSize(unsigned S) {
1794       Flags = (Flags & ~ByValSize) | (uint64_t(S) << ByValSizeOffs);
1795     }
1796
1797     /// getArgFlagsString - Returns the flags as a string, eg: "zext align:4".
1798     std::string getArgFlagsString();
1799
1800     /// getRawBits - Represent the flags as a bunch of bits.
1801     uint64_t getRawBits() const { return Flags; }
1802   };
1803 }
1804
1805 /// ARG_FLAGSSDNode - Leaf node holding parameter flags.
1806 class ARG_FLAGSSDNode : public SDNode {
1807   ISD::ArgFlagsTy TheFlags;
1808   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1809 protected:
1810   friend class SelectionDAG;
1811   explicit ARG_FLAGSSDNode(ISD::ArgFlagsTy Flags)
1812     : SDNode(ISD::ARG_FLAGS, getSDVTList(MVT::Other)), TheFlags(Flags) {
1813   }
1814 public:
1815   ISD::ArgFlagsTy getArgFlags() const { return TheFlags; }
1816
1817   static bool classof(const ARG_FLAGSSDNode *) { return true; }
1818   static bool classof(const SDNode *N) {
1819     return N->getOpcode() == ISD::ARG_FLAGS;
1820   }
1821 };
1822
1823 /// VTSDNode - This class is used to represent MVT::ValueType's, which are used
1824 /// to parameterize some operations.
1825 class VTSDNode : public SDNode {
1826   MVT::ValueType ValueType;
1827   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1828 protected:
1829   friend class SelectionDAG;
1830   explicit VTSDNode(MVT::ValueType VT)
1831     : SDNode(ISD::VALUETYPE, getSDVTList(MVT::Other)), ValueType(VT) {
1832   }
1833 public:
1834
1835   MVT::ValueType getVT() const { return ValueType; }
1836
1837   static bool classof(const VTSDNode *) { return true; }
1838   static bool classof(const SDNode *N) {
1839     return N->getOpcode() == ISD::VALUETYPE;
1840   }
1841 };
1842
1843 /// LSBaseSDNode - Base class for LoadSDNode and StoreSDNode
1844 ///
1845 class LSBaseSDNode : public SDNode {
1846 private:
1847   // AddrMode - unindexed, pre-indexed, post-indexed.
1848   ISD::MemIndexedMode AddrMode;
1849
1850   // MemoryVT - VT of in-memory value.
1851   MVT::ValueType MemoryVT;
1852
1853   //! SrcValue - Memory location for alias analysis.
1854   const Value *SrcValue;
1855
1856   //! SVOffset - Memory location offset.
1857   int SVOffset;
1858
1859   //! Alignment - Alignment of memory location in bytes.
1860   unsigned Alignment;
1861
1862   //! IsVolatile - True if the store is volatile.
1863   bool IsVolatile;
1864 protected:
1865   //! Operand array for load and store
1866   /*!
1867     \note Moving this array to the base class captures more
1868     common functionality shared between LoadSDNode and
1869     StoreSDNode
1870    */
1871   SDOperand Ops[4];
1872 public:
1873   LSBaseSDNode(ISD::NodeType NodeTy, SDOperand *Operands, unsigned NumOperands,
1874                SDVTList VTs, ISD::MemIndexedMode AM, MVT::ValueType VT, 
1875                const Value *SV, int SVO, unsigned Align, bool Vol)
1876     : SDNode(NodeTy, VTs),
1877       AddrMode(AM), MemoryVT(VT),
1878       SrcValue(SV), SVOffset(SVO), Alignment(Align), IsVolatile(Vol) {
1879     for (unsigned i = 0; i != NumOperands; ++i)
1880       Ops[i] = Operands[i];
1881     InitOperands(Ops, NumOperands);
1882     assert(Align != 0 && "Loads and stores should have non-zero aligment");
1883     assert((getOffset().getOpcode() == ISD::UNDEF || isIndexed()) &&
1884            "Only indexed loads and stores have a non-undef offset operand");
1885   }
1886
1887   const SDOperand &getChain() const { return getOperand(0); }
1888   const SDOperand &getBasePtr() const {
1889     return getOperand(getOpcode() == ISD::LOAD ? 1 : 2);
1890   }
1891   const SDOperand &getOffset() const {
1892     return getOperand(getOpcode() == ISD::LOAD ? 2 : 3);
1893   }
1894
1895   const Value *getSrcValue() const { return SrcValue; }
1896   int getSrcValueOffset() const { return SVOffset; }
1897   unsigned getAlignment() const { return Alignment; }
1898   MVT::ValueType getMemoryVT() const { return MemoryVT; }
1899   bool isVolatile() const { return IsVolatile; }
1900
1901   ISD::MemIndexedMode getAddressingMode() const { return AddrMode; }
1902
1903   /// isIndexed - Return true if this is a pre/post inc/dec load/store.
1904   bool isIndexed() const { return AddrMode != ISD::UNINDEXED; }
1905
1906   /// isUnindexed - Return true if this is NOT a pre/post inc/dec load/store.
1907   bool isUnindexed() const { return AddrMode == ISD::UNINDEXED; }
1908
1909   /// getMemOperand - Return a MemOperand object describing the memory
1910   /// reference performed by this load or store.
1911   MemOperand getMemOperand() const;
1912
1913   static bool classof(const LSBaseSDNode *N) { return true; }
1914   static bool classof(const SDNode *N) {
1915     return N->getOpcode() == ISD::LOAD ||
1916            N->getOpcode() == ISD::STORE;
1917   }
1918 };
1919
1920 /// LoadSDNode - This class is used to represent ISD::LOAD nodes.
1921 ///
1922 class LoadSDNode : public LSBaseSDNode {
1923   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1924   
1925   // ExtType - non-ext, anyext, sext, zext.
1926   ISD::LoadExtType ExtType;
1927
1928 protected:
1929   friend class SelectionDAG;
1930   LoadSDNode(SDOperand *ChainPtrOff, SDVTList VTs,
1931              ISD::MemIndexedMode AM, ISD::LoadExtType ETy, MVT::ValueType LVT,
1932              const Value *SV, int O=0, unsigned Align=0, bool Vol=false)
1933     : LSBaseSDNode(ISD::LOAD, ChainPtrOff, 3,
1934                    VTs, AM, LVT, SV, O, Align, Vol),
1935       ExtType(ETy) {}
1936 public:
1937
1938   ISD::LoadExtType getExtensionType() const { return ExtType; }
1939   const SDOperand &getBasePtr() const { return getOperand(1); }
1940   const SDOperand &getOffset() const { return getOperand(2); }
1941   
1942   static bool classof(const LoadSDNode *) { return true; }
1943   static bool classof(const SDNode *N) {
1944     return N->getOpcode() == ISD::LOAD;
1945   }
1946 };
1947
1948 /// StoreSDNode - This class is used to represent ISD::STORE nodes.
1949 ///
1950 class StoreSDNode : public LSBaseSDNode {
1951   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
1952     
1953   // IsTruncStore - True if the op does a truncation before store.
1954   bool IsTruncStore;
1955 protected:
1956   friend class SelectionDAG;
1957   StoreSDNode(SDOperand *ChainValuePtrOff, SDVTList VTs,
1958               ISD::MemIndexedMode AM, bool isTrunc, MVT::ValueType SVT,
1959               const Value *SV, int O=0, unsigned Align=0, bool Vol=false)
1960     : LSBaseSDNode(ISD::STORE, ChainValuePtrOff, 4,
1961                    VTs, AM, SVT, SV, O, Align, Vol),
1962       IsTruncStore(isTrunc) {}
1963 public:
1964
1965   bool isTruncatingStore() const { return IsTruncStore; }
1966   const SDOperand &getValue() const { return getOperand(1); }
1967   const SDOperand &getBasePtr() const { return getOperand(2); }
1968   const SDOperand &getOffset() const { return getOperand(3); }
1969   
1970   static bool classof(const StoreSDNode *) { return true; }
1971   static bool classof(const SDNode *N) {
1972     return N->getOpcode() == ISD::STORE;
1973   }
1974 };
1975
1976
1977 class SDNodeIterator : public forward_iterator<SDNode, ptrdiff_t> {
1978   SDNode *Node;
1979   unsigned Operand;
1980
1981   SDNodeIterator(SDNode *N, unsigned Op) : Node(N), Operand(Op) {}
1982 public:
1983   bool operator==(const SDNodeIterator& x) const {
1984     return Operand == x.Operand;
1985   }
1986   bool operator!=(const SDNodeIterator& x) const { return !operator==(x); }
1987
1988   const SDNodeIterator &operator=(const SDNodeIterator &I) {
1989     assert(I.Node == Node && "Cannot assign iterators to two different nodes!");
1990     Operand = I.Operand;
1991     return *this;
1992   }
1993
1994   pointer operator*() const {
1995     return Node->getOperand(Operand).Val;
1996   }
1997   pointer operator->() const { return operator*(); }
1998
1999   SDNodeIterator& operator++() {                // Preincrement
2000     ++Operand;
2001     return *this;
2002   }
2003   SDNodeIterator operator++(int) { // Postincrement
2004     SDNodeIterator tmp = *this; ++*this; return tmp;
2005   }
2006
2007   static SDNodeIterator begin(SDNode *N) { return SDNodeIterator(N, 0); }
2008   static SDNodeIterator end  (SDNode *N) {
2009     return SDNodeIterator(N, N->getNumOperands());
2010   }
2011
2012   unsigned getOperand() const { return Operand; }
2013   const SDNode *getNode() const { return Node; }
2014 };
2015
2016 template <> struct GraphTraits<SDNode*> {
2017   typedef SDNode NodeType;
2018   typedef SDNodeIterator ChildIteratorType;
2019   static inline NodeType *getEntryNode(SDNode *N) { return N; }
2020   static inline ChildIteratorType child_begin(NodeType *N) {
2021     return SDNodeIterator::begin(N);
2022   }
2023   static inline ChildIteratorType child_end(NodeType *N) {
2024     return SDNodeIterator::end(N);
2025   }
2026 };
2027
2028 template<>
2029 struct ilist_traits<SDNode> {
2030   static SDNode *getPrev(const SDNode *N) { return N->Prev; }
2031   static SDNode *getNext(const SDNode *N) { return N->Next; }
2032   
2033   static void setPrev(SDNode *N, SDNode *Prev) { N->Prev = Prev; }
2034   static void setNext(SDNode *N, SDNode *Next) { N->Next = Next; }
2035   
2036   static SDNode *createSentinel() {
2037     return new SDNode(ISD::EntryToken, SDNode::getSDVTList(MVT::Other));
2038   }
2039   static void destroySentinel(SDNode *N) { delete N; }
2040   //static SDNode *createNode(const SDNode &V) { return new SDNode(V); }
2041   
2042   
2043   void addNodeToList(SDNode *NTy) {}
2044   void removeNodeFromList(SDNode *NTy) {}
2045   void transferNodesFromList(iplist<SDNode, ilist_traits> &L2,
2046                              const ilist_iterator<SDNode> &X,
2047                              const ilist_iterator<SDNode> &Y) {}
2048 };
2049
2050 namespace ISD {
2051   /// isNormalLoad - Returns true if the specified node is a non-extending
2052   /// and unindexed load.
2053   inline bool isNormalLoad(const SDNode *N) {
2054     if (N->getOpcode() != ISD::LOAD)
2055       return false;
2056     const LoadSDNode *Ld = cast<LoadSDNode>(N);
2057     return Ld->getExtensionType() == ISD::NON_EXTLOAD &&
2058       Ld->getAddressingMode() == ISD::UNINDEXED;
2059   }
2060
2061   /// isNON_EXTLoad - Returns true if the specified node is a non-extending
2062   /// load.
2063   inline bool isNON_EXTLoad(const SDNode *N) {
2064     return N->getOpcode() == ISD::LOAD &&
2065       cast<LoadSDNode>(N)->getExtensionType() == ISD::NON_EXTLOAD;
2066   }
2067
2068   /// isEXTLoad - Returns true if the specified node is a EXTLOAD.
2069   ///
2070   inline bool isEXTLoad(const SDNode *N) {
2071     return N->getOpcode() == ISD::LOAD &&
2072       cast<LoadSDNode>(N)->getExtensionType() == ISD::EXTLOAD;
2073   }
2074
2075   /// isSEXTLoad - Returns true if the specified node is a SEXTLOAD.
2076   ///
2077   inline bool isSEXTLoad(const SDNode *N) {
2078     return N->getOpcode() == ISD::LOAD &&
2079       cast<LoadSDNode>(N)->getExtensionType() == ISD::SEXTLOAD;
2080   }
2081
2082   /// isZEXTLoad - Returns true if the specified node is a ZEXTLOAD.
2083   ///
2084   inline bool isZEXTLoad(const SDNode *N) {
2085     return N->getOpcode() == ISD::LOAD &&
2086       cast<LoadSDNode>(N)->getExtensionType() == ISD::ZEXTLOAD;
2087   }
2088
2089   /// isUNINDEXEDLoad - Returns true if the specified node is a unindexed load.
2090   ///
2091   inline bool isUNINDEXEDLoad(const SDNode *N) {
2092     return N->getOpcode() == ISD::LOAD &&
2093       cast<LoadSDNode>(N)->getAddressingMode() == ISD::UNINDEXED;
2094   }
2095
2096   /// isNON_TRUNCStore - Returns true if the specified node is a non-truncating
2097   /// store.
2098   inline bool isNON_TRUNCStore(const SDNode *N) {
2099     return N->getOpcode() == ISD::STORE &&
2100       !cast<StoreSDNode>(N)->isTruncatingStore();
2101   }
2102
2103   /// isTRUNCStore - Returns true if the specified node is a truncating
2104   /// store.
2105   inline bool isTRUNCStore(const SDNode *N) {
2106     return N->getOpcode() == ISD::STORE &&
2107       cast<StoreSDNode>(N)->isTruncatingStore();
2108   }
2109 }
2110
2111
2112 } // end llvm namespace
2113
2114 #endif