SelectionDAG.cpp revision 6c231501f80e1ff05e3cada3d051b1c826d1f478
1//===-- SelectionDAG.cpp - Implement the SelectionDAG data structures -----===//
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 implements the SelectionDAG class.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/CodeGen/SelectionDAG.h"
15#include "llvm/Constants.h"
16#include "llvm/GlobalVariable.h"
17#include "llvm/Intrinsics.h"
18#include "llvm/DerivedTypes.h"
19#include "llvm/Assembly/Writer.h"
20#include "llvm/CodeGen/MachineBasicBlock.h"
21#include "llvm/CodeGen/MachineConstantPool.h"
22#include "llvm/CodeGen/MachineFrameInfo.h"
23#include "llvm/CodeGen/MachineModuleInfo.h"
24#include "llvm/CodeGen/PseudoSourceValue.h"
25#include "llvm/Support/MathExtras.h"
26#include "llvm/Target/TargetRegisterInfo.h"
27#include "llvm/Target/TargetData.h"
28#include "llvm/Target/TargetLowering.h"
29#include "llvm/Target/TargetInstrInfo.h"
30#include "llvm/Target/TargetMachine.h"
31#include "llvm/ADT/SetVector.h"
32#include "llvm/ADT/SmallPtrSet.h"
33#include "llvm/ADT/SmallSet.h"
34#include "llvm/ADT/SmallVector.h"
35#include "llvm/ADT/StringExtras.h"
36#include <algorithm>
37#include <cmath>
38using namespace llvm;
39
40/// makeVTList - Return an instance of the SDVTList struct initialized with the
41/// specified members.
42static SDVTList makeVTList(const MVT::ValueType *VTs, unsigned NumVTs) {
43  SDVTList Res = {VTs, NumVTs};
44  return Res;
45}
46
47SelectionDAG::DAGUpdateListener::~DAGUpdateListener() {}
48
49//===----------------------------------------------------------------------===//
50//                              ConstantFPSDNode Class
51//===----------------------------------------------------------------------===//
52
53/// isExactlyValue - We don't rely on operator== working on double values, as
54/// it returns true for things that are clearly not equal, like -0.0 and 0.0.
55/// As such, this method can be used to do an exact bit-for-bit comparison of
56/// two floating point values.
57bool ConstantFPSDNode::isExactlyValue(const APFloat& V) const {
58  return Value.bitwiseIsEqual(V);
59}
60
61bool ConstantFPSDNode::isValueValidForType(MVT::ValueType VT,
62                                           const APFloat& Val) {
63  // convert modifies in place, so make a copy.
64  APFloat Val2 = APFloat(Val);
65  switch (VT) {
66  default:
67    return false;         // These can't be represented as floating point!
68
69  // FIXME rounding mode needs to be more flexible
70  case MVT::f32:
71    return &Val2.getSemantics() == &APFloat::IEEEsingle ||
72           Val2.convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven) ==
73              APFloat::opOK;
74  case MVT::f64:
75    return &Val2.getSemantics() == &APFloat::IEEEsingle ||
76           &Val2.getSemantics() == &APFloat::IEEEdouble ||
77           Val2.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven) ==
78             APFloat::opOK;
79  // TODO: Figure out how to test if we can use a shorter type instead!
80  case MVT::f80:
81  case MVT::f128:
82  case MVT::ppcf128:
83    return true;
84  }
85}
86
87//===----------------------------------------------------------------------===//
88//                              ISD Namespace
89//===----------------------------------------------------------------------===//
90
91/// isBuildVectorAllOnes - Return true if the specified node is a
92/// BUILD_VECTOR where all of the elements are ~0 or undef.
93bool ISD::isBuildVectorAllOnes(const SDNode *N) {
94  // Look through a bit convert.
95  if (N->getOpcode() == ISD::BIT_CONVERT)
96    N = N->getOperand(0).Val;
97
98  if (N->getOpcode() != ISD::BUILD_VECTOR) return false;
99
100  unsigned i = 0, e = N->getNumOperands();
101
102  // Skip over all of the undef values.
103  while (i != e && N->getOperand(i).getOpcode() == ISD::UNDEF)
104    ++i;
105
106  // Do not accept an all-undef vector.
107  if (i == e) return false;
108
109  // Do not accept build_vectors that aren't all constants or which have non-~0
110  // elements.
111  SDOperand NotZero = N->getOperand(i);
112  if (isa<ConstantSDNode>(NotZero)) {
113    if (!cast<ConstantSDNode>(NotZero)->isAllOnesValue())
114      return false;
115  } else if (isa<ConstantFPSDNode>(NotZero)) {
116    if (!cast<ConstantFPSDNode>(NotZero)->getValueAPF().
117                convertToAPInt().isAllOnesValue())
118      return false;
119  } else
120    return false;
121
122  // Okay, we have at least one ~0 value, check to see if the rest match or are
123  // undefs.
124  for (++i; i != e; ++i)
125    if (N->getOperand(i) != NotZero &&
126        N->getOperand(i).getOpcode() != ISD::UNDEF)
127      return false;
128  return true;
129}
130
131
132/// isBuildVectorAllZeros - Return true if the specified node is a
133/// BUILD_VECTOR where all of the elements are 0 or undef.
134bool ISD::isBuildVectorAllZeros(const SDNode *N) {
135  // Look through a bit convert.
136  if (N->getOpcode() == ISD::BIT_CONVERT)
137    N = N->getOperand(0).Val;
138
139  if (N->getOpcode() != ISD::BUILD_VECTOR) return false;
140
141  unsigned i = 0, e = N->getNumOperands();
142
143  // Skip over all of the undef values.
144  while (i != e && N->getOperand(i).getOpcode() == ISD::UNDEF)
145    ++i;
146
147  // Do not accept an all-undef vector.
148  if (i == e) return false;
149
150  // Do not accept build_vectors that aren't all constants or which have non-~0
151  // elements.
152  SDOperand Zero = N->getOperand(i);
153  if (isa<ConstantSDNode>(Zero)) {
154    if (!cast<ConstantSDNode>(Zero)->isNullValue())
155      return false;
156  } else if (isa<ConstantFPSDNode>(Zero)) {
157    if (!cast<ConstantFPSDNode>(Zero)->getValueAPF().isPosZero())
158      return false;
159  } else
160    return false;
161
162  // Okay, we have at least one ~0 value, check to see if the rest match or are
163  // undefs.
164  for (++i; i != e; ++i)
165    if (N->getOperand(i) != Zero &&
166        N->getOperand(i).getOpcode() != ISD::UNDEF)
167      return false;
168  return true;
169}
170
171/// isScalarToVector - Return true if the specified node is a
172/// ISD::SCALAR_TO_VECTOR node or a BUILD_VECTOR node where only the low
173/// element is not an undef.
174bool ISD::isScalarToVector(const SDNode *N) {
175  if (N->getOpcode() == ISD::SCALAR_TO_VECTOR)
176    return true;
177
178  if (N->getOpcode() != ISD::BUILD_VECTOR)
179    return false;
180  if (N->getOperand(0).getOpcode() == ISD::UNDEF)
181    return false;
182  unsigned NumElems = N->getNumOperands();
183  for (unsigned i = 1; i < NumElems; ++i) {
184    SDOperand V = N->getOperand(i);
185    if (V.getOpcode() != ISD::UNDEF)
186      return false;
187  }
188  return true;
189}
190
191
192/// isDebugLabel - Return true if the specified node represents a debug
193/// label (i.e. ISD::LABEL or TargetInstrInfo::LABEL node and third operand
194/// is 0).
195bool ISD::isDebugLabel(const SDNode *N) {
196  SDOperand Zero;
197  if (N->getOpcode() == ISD::LABEL)
198    Zero = N->getOperand(2);
199  else if (N->isTargetOpcode() &&
200           N->getTargetOpcode() == TargetInstrInfo::LABEL)
201    // Chain moved to last operand.
202    Zero = N->getOperand(1);
203  else
204    return false;
205  return isa<ConstantSDNode>(Zero) && cast<ConstantSDNode>(Zero)->isNullValue();
206}
207
208/// getSetCCSwappedOperands - Return the operation corresponding to (Y op X)
209/// when given the operation for (X op Y).
210ISD::CondCode ISD::getSetCCSwappedOperands(ISD::CondCode Operation) {
211  // To perform this operation, we just need to swap the L and G bits of the
212  // operation.
213  unsigned OldL = (Operation >> 2) & 1;
214  unsigned OldG = (Operation >> 1) & 1;
215  return ISD::CondCode((Operation & ~6) |  // Keep the N, U, E bits
216                       (OldL << 1) |       // New G bit
217                       (OldG << 2));        // New L bit.
218}
219
220/// getSetCCInverse - Return the operation corresponding to !(X op Y), where
221/// 'op' is a valid SetCC operation.
222ISD::CondCode ISD::getSetCCInverse(ISD::CondCode Op, bool isInteger) {
223  unsigned Operation = Op;
224  if (isInteger)
225    Operation ^= 7;   // Flip L, G, E bits, but not U.
226  else
227    Operation ^= 15;  // Flip all of the condition bits.
228  if (Operation > ISD::SETTRUE2)
229    Operation &= ~8;     // Don't let N and U bits get set.
230  return ISD::CondCode(Operation);
231}
232
233
234/// isSignedOp - For an integer comparison, return 1 if the comparison is a
235/// signed operation and 2 if the result is an unsigned comparison.  Return zero
236/// if the operation does not depend on the sign of the input (setne and seteq).
237static int isSignedOp(ISD::CondCode Opcode) {
238  switch (Opcode) {
239  default: assert(0 && "Illegal integer setcc operation!");
240  case ISD::SETEQ:
241  case ISD::SETNE: return 0;
242  case ISD::SETLT:
243  case ISD::SETLE:
244  case ISD::SETGT:
245  case ISD::SETGE: return 1;
246  case ISD::SETULT:
247  case ISD::SETULE:
248  case ISD::SETUGT:
249  case ISD::SETUGE: return 2;
250  }
251}
252
253/// getSetCCOrOperation - Return the result of a logical OR between different
254/// comparisons of identical values: ((X op1 Y) | (X op2 Y)).  This function
255/// returns SETCC_INVALID if it is not possible to represent the resultant
256/// comparison.
257ISD::CondCode ISD::getSetCCOrOperation(ISD::CondCode Op1, ISD::CondCode Op2,
258                                       bool isInteger) {
259  if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3)
260    // Cannot fold a signed integer setcc with an unsigned integer setcc.
261    return ISD::SETCC_INVALID;
262
263  unsigned Op = Op1 | Op2;  // Combine all of the condition bits.
264
265  // If the N and U bits get set then the resultant comparison DOES suddenly
266  // care about orderedness, and is true when ordered.
267  if (Op > ISD::SETTRUE2)
268    Op &= ~16;     // Clear the U bit if the N bit is set.
269
270  // Canonicalize illegal integer setcc's.
271  if (isInteger && Op == ISD::SETUNE)  // e.g. SETUGT | SETULT
272    Op = ISD::SETNE;
273
274  return ISD::CondCode(Op);
275}
276
277/// getSetCCAndOperation - Return the result of a logical AND between different
278/// comparisons of identical values: ((X op1 Y) & (X op2 Y)).  This
279/// function returns zero if it is not possible to represent the resultant
280/// comparison.
281ISD::CondCode ISD::getSetCCAndOperation(ISD::CondCode Op1, ISD::CondCode Op2,
282                                        bool isInteger) {
283  if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3)
284    // Cannot fold a signed setcc with an unsigned setcc.
285    return ISD::SETCC_INVALID;
286
287  // Combine all of the condition bits.
288  ISD::CondCode Result = ISD::CondCode(Op1 & Op2);
289
290  // Canonicalize illegal integer setcc's.
291  if (isInteger) {
292    switch (Result) {
293    default: break;
294    case ISD::SETUO : Result = ISD::SETFALSE; break;  // SETUGT & SETULT
295    case ISD::SETUEQ: Result = ISD::SETEQ   ; break;  // SETUGE & SETULE
296    case ISD::SETOLT: Result = ISD::SETULT  ; break;  // SETULT & SETNE
297    case ISD::SETOGT: Result = ISD::SETUGT  ; break;  // SETUGT & SETNE
298    }
299  }
300
301  return Result;
302}
303
304const TargetMachine &SelectionDAG::getTarget() const {
305  return TLI.getTargetMachine();
306}
307
308//===----------------------------------------------------------------------===//
309//                           SDNode Profile Support
310//===----------------------------------------------------------------------===//
311
312/// AddNodeIDOpcode - Add the node opcode to the NodeID data.
313///
314static void AddNodeIDOpcode(FoldingSetNodeID &ID, unsigned OpC)  {
315  ID.AddInteger(OpC);
316}
317
318/// AddNodeIDValueTypes - Value type lists are intern'd so we can represent them
319/// solely with their pointer.
320void AddNodeIDValueTypes(FoldingSetNodeID &ID, SDVTList VTList) {
321  ID.AddPointer(VTList.VTs);
322}
323
324/// AddNodeIDOperands - Various routines for adding operands to the NodeID data.
325///
326static void AddNodeIDOperands(FoldingSetNodeID &ID,
327                              const SDOperand *Ops, unsigned NumOps) {
328  for (; NumOps; --NumOps, ++Ops) {
329    ID.AddPointer(Ops->Val);
330    ID.AddInteger(Ops->ResNo);
331  }
332}
333
334static void AddNodeIDNode(FoldingSetNodeID &ID,
335                          unsigned short OpC, SDVTList VTList,
336                          const SDOperand *OpList, unsigned N) {
337  AddNodeIDOpcode(ID, OpC);
338  AddNodeIDValueTypes(ID, VTList);
339  AddNodeIDOperands(ID, OpList, N);
340}
341
342/// AddNodeIDNode - Generic routine for adding a nodes info to the NodeID
343/// data.
344static void AddNodeIDNode(FoldingSetNodeID &ID, SDNode *N) {
345  AddNodeIDOpcode(ID, N->getOpcode());
346  // Add the return value info.
347  AddNodeIDValueTypes(ID, N->getVTList());
348  // Add the operand info.
349  AddNodeIDOperands(ID, N->op_begin(), N->getNumOperands());
350
351  // Handle SDNode leafs with special info.
352  switch (N->getOpcode()) {
353  default: break;  // Normal nodes don't need extra info.
354  case ISD::TargetConstant:
355  case ISD::Constant:
356    ID.Add(cast<ConstantSDNode>(N)->getAPIntValue());
357    break;
358  case ISD::TargetConstantFP:
359  case ISD::ConstantFP: {
360    ID.Add(cast<ConstantFPSDNode>(N)->getValueAPF());
361    break;
362  }
363  case ISD::TargetGlobalAddress:
364  case ISD::GlobalAddress:
365  case ISD::TargetGlobalTLSAddress:
366  case ISD::GlobalTLSAddress: {
367    GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(N);
368    ID.AddPointer(GA->getGlobal());
369    ID.AddInteger(GA->getOffset());
370    break;
371  }
372  case ISD::BasicBlock:
373    ID.AddPointer(cast<BasicBlockSDNode>(N)->getBasicBlock());
374    break;
375  case ISD::Register:
376    ID.AddInteger(cast<RegisterSDNode>(N)->getReg());
377    break;
378  case ISD::SRCVALUE:
379    ID.AddPointer(cast<SrcValueSDNode>(N)->getValue());
380    break;
381  case ISD::MEMOPERAND: {
382    const MemOperand &MO = cast<MemOperandSDNode>(N)->MO;
383    ID.AddPointer(MO.getValue());
384    ID.AddInteger(MO.getFlags());
385    ID.AddInteger(MO.getOffset());
386    ID.AddInteger(MO.getSize());
387    ID.AddInteger(MO.getAlignment());
388    break;
389  }
390  case ISD::FrameIndex:
391  case ISD::TargetFrameIndex:
392    ID.AddInteger(cast<FrameIndexSDNode>(N)->getIndex());
393    break;
394  case ISD::JumpTable:
395  case ISD::TargetJumpTable:
396    ID.AddInteger(cast<JumpTableSDNode>(N)->getIndex());
397    break;
398  case ISD::ConstantPool:
399  case ISD::TargetConstantPool: {
400    ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(N);
401    ID.AddInteger(CP->getAlignment());
402    ID.AddInteger(CP->getOffset());
403    if (CP->isMachineConstantPoolEntry())
404      CP->getMachineCPVal()->AddSelectionDAGCSEId(ID);
405    else
406      ID.AddPointer(CP->getConstVal());
407    break;
408  }
409  case ISD::LOAD: {
410    LoadSDNode *LD = cast<LoadSDNode>(N);
411    ID.AddInteger(LD->getAddressingMode());
412    ID.AddInteger(LD->getExtensionType());
413    ID.AddInteger((unsigned int)(LD->getMemoryVT()));
414    ID.AddInteger(LD->getAlignment());
415    ID.AddInteger(LD->isVolatile());
416    break;
417  }
418  case ISD::STORE: {
419    StoreSDNode *ST = cast<StoreSDNode>(N);
420    ID.AddInteger(ST->getAddressingMode());
421    ID.AddInteger(ST->isTruncatingStore());
422    ID.AddInteger((unsigned int)(ST->getMemoryVT()));
423    ID.AddInteger(ST->getAlignment());
424    ID.AddInteger(ST->isVolatile());
425    break;
426  }
427  }
428}
429
430//===----------------------------------------------------------------------===//
431//                              SelectionDAG Class
432//===----------------------------------------------------------------------===//
433
434/// RemoveDeadNodes - This method deletes all unreachable nodes in the
435/// SelectionDAG.
436void SelectionDAG::RemoveDeadNodes() {
437  // Create a dummy node (which is not added to allnodes), that adds a reference
438  // to the root node, preventing it from being deleted.
439  HandleSDNode Dummy(getRoot());
440
441  SmallVector<SDNode*, 128> DeadNodes;
442
443  // Add all obviously-dead nodes to the DeadNodes worklist.
444  for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I)
445    if (I->use_empty())
446      DeadNodes.push_back(I);
447
448  // Process the worklist, deleting the nodes and adding their uses to the
449  // worklist.
450  while (!DeadNodes.empty()) {
451    SDNode *N = DeadNodes.back();
452    DeadNodes.pop_back();
453
454    // Take the node out of the appropriate CSE map.
455    RemoveNodeFromCSEMaps(N);
456
457    // Next, brutally remove the operand list.  This is safe to do, as there are
458    // no cycles in the graph.
459    for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
460      SDNode *Operand = I->Val;
461      Operand->removeUser(N);
462
463      // Now that we removed this operand, see if there are no uses of it left.
464      if (Operand->use_empty())
465        DeadNodes.push_back(Operand);
466    }
467    if (N->OperandsNeedDelete)
468      delete[] N->OperandList;
469    N->OperandList = 0;
470    N->NumOperands = 0;
471
472    // Finally, remove N itself.
473    AllNodes.erase(N);
474  }
475
476  // If the root changed (e.g. it was a dead load, update the root).
477  setRoot(Dummy.getValue());
478}
479
480void SelectionDAG::RemoveDeadNode(SDNode *N, DAGUpdateListener *UpdateListener){
481  SmallVector<SDNode*, 16> DeadNodes;
482  DeadNodes.push_back(N);
483
484  // Process the worklist, deleting the nodes and adding their uses to the
485  // worklist.
486  while (!DeadNodes.empty()) {
487    SDNode *N = DeadNodes.back();
488    DeadNodes.pop_back();
489
490    if (UpdateListener)
491      UpdateListener->NodeDeleted(N);
492
493    // Take the node out of the appropriate CSE map.
494    RemoveNodeFromCSEMaps(N);
495
496    // Next, brutally remove the operand list.  This is safe to do, as there are
497    // no cycles in the graph.
498    for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
499      SDNode *Operand = I->Val;
500      Operand->removeUser(N);
501
502      // Now that we removed this operand, see if there are no uses of it left.
503      if (Operand->use_empty())
504        DeadNodes.push_back(Operand);
505    }
506    if (N->OperandsNeedDelete)
507      delete[] N->OperandList;
508    N->OperandList = 0;
509    N->NumOperands = 0;
510
511    // Finally, remove N itself.
512    AllNodes.erase(N);
513  }
514}
515
516void SelectionDAG::DeleteNode(SDNode *N) {
517  assert(N->use_empty() && "Cannot delete a node that is not dead!");
518
519  // First take this out of the appropriate CSE map.
520  RemoveNodeFromCSEMaps(N);
521
522  // Finally, remove uses due to operands of this node, remove from the
523  // AllNodes list, and delete the node.
524  DeleteNodeNotInCSEMaps(N);
525}
526
527void SelectionDAG::DeleteNodeNotInCSEMaps(SDNode *N) {
528
529  // Remove it from the AllNodes list.
530  AllNodes.remove(N);
531
532  // Drop all of the operands and decrement used nodes use counts.
533  for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I)
534    I->Val->removeUser(N);
535  if (N->OperandsNeedDelete)
536    delete[] N->OperandList;
537  N->OperandList = 0;
538  N->NumOperands = 0;
539
540  delete N;
541}
542
543/// RemoveNodeFromCSEMaps - Take the specified node out of the CSE map that
544/// correspond to it.  This is useful when we're about to delete or repurpose
545/// the node.  We don't want future request for structurally identical nodes
546/// to return N anymore.
547void SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
548  bool Erased = false;
549  switch (N->getOpcode()) {
550  case ISD::HANDLENODE: return;  // noop.
551  case ISD::STRING:
552    Erased = StringNodes.erase(cast<StringSDNode>(N)->getValue());
553    break;
554  case ISD::CONDCODE:
555    assert(CondCodeNodes[cast<CondCodeSDNode>(N)->get()] &&
556           "Cond code doesn't exist!");
557    Erased = CondCodeNodes[cast<CondCodeSDNode>(N)->get()] != 0;
558    CondCodeNodes[cast<CondCodeSDNode>(N)->get()] = 0;
559    break;
560  case ISD::ExternalSymbol:
561    Erased = ExternalSymbols.erase(cast<ExternalSymbolSDNode>(N)->getSymbol());
562    break;
563  case ISD::TargetExternalSymbol:
564    Erased =
565      TargetExternalSymbols.erase(cast<ExternalSymbolSDNode>(N)->getSymbol());
566    break;
567  case ISD::VALUETYPE: {
568    MVT::ValueType VT = cast<VTSDNode>(N)->getVT();
569    if (MVT::isExtendedVT(VT)) {
570      Erased = ExtendedValueTypeNodes.erase(VT);
571    } else {
572      Erased = ValueTypeNodes[VT] != 0;
573      ValueTypeNodes[VT] = 0;
574    }
575    break;
576  }
577  default:
578    // Remove it from the CSE Map.
579    Erased = CSEMap.RemoveNode(N);
580    break;
581  }
582#ifndef NDEBUG
583  // Verify that the node was actually in one of the CSE maps, unless it has a
584  // flag result (which cannot be CSE'd) or is one of the special cases that are
585  // not subject to CSE.
586  if (!Erased && N->getValueType(N->getNumValues()-1) != MVT::Flag &&
587      !N->isTargetOpcode()) {
588    N->dump(this);
589    cerr << "\n";
590    assert(0 && "Node is not in map!");
591  }
592#endif
593}
594
595/// AddNonLeafNodeToCSEMaps - Add the specified node back to the CSE maps.  It
596/// has been taken out and modified in some way.  If the specified node already
597/// exists in the CSE maps, do not modify the maps, but return the existing node
598/// instead.  If it doesn't exist, add it and return null.
599///
600SDNode *SelectionDAG::AddNonLeafNodeToCSEMaps(SDNode *N) {
601  assert(N->getNumOperands() && "This is a leaf node!");
602  if (N->getOpcode() == ISD::HANDLENODE || N->getValueType(0) == MVT::Flag)
603    return 0;    // Never add these nodes.
604
605  // Check that remaining values produced are not flags.
606  for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
607    if (N->getValueType(i) == MVT::Flag)
608      return 0;   // Never CSE anything that produces a flag.
609
610  SDNode *New = CSEMap.GetOrInsertNode(N);
611  if (New != N) return New;  // Node already existed.
612  return 0;
613}
614
615/// FindModifiedNodeSlot - Find a slot for the specified node if its operands
616/// were replaced with those specified.  If this node is never memoized,
617/// return null, otherwise return a pointer to the slot it would take.  If a
618/// node already exists with these operands, the slot will be non-null.
619SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, SDOperand Op,
620                                           void *&InsertPos) {
621  if (N->getOpcode() == ISD::HANDLENODE || N->getValueType(0) == MVT::Flag)
622    return 0;    // Never add these nodes.
623
624  // Check that remaining values produced are not flags.
625  for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
626    if (N->getValueType(i) == MVT::Flag)
627      return 0;   // Never CSE anything that produces a flag.
628
629  SDOperand Ops[] = { Op };
630  FoldingSetNodeID ID;
631  AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, 1);
632  return CSEMap.FindNodeOrInsertPos(ID, InsertPos);
633}
634
635/// FindModifiedNodeSlot - Find a slot for the specified node if its operands
636/// were replaced with those specified.  If this node is never memoized,
637/// return null, otherwise return a pointer to the slot it would take.  If a
638/// node already exists with these operands, the slot will be non-null.
639SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N,
640                                           SDOperand Op1, SDOperand Op2,
641                                           void *&InsertPos) {
642  if (N->getOpcode() == ISD::HANDLENODE || N->getValueType(0) == MVT::Flag)
643    return 0;    // Never add these nodes.
644
645  // Check that remaining values produced are not flags.
646  for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
647    if (N->getValueType(i) == MVT::Flag)
648      return 0;   // Never CSE anything that produces a flag.
649
650  SDOperand Ops[] = { Op1, Op2 };
651  FoldingSetNodeID ID;
652  AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, 2);
653  return CSEMap.FindNodeOrInsertPos(ID, InsertPos);
654}
655
656
657/// FindModifiedNodeSlot - Find a slot for the specified node if its operands
658/// were replaced with those specified.  If this node is never memoized,
659/// return null, otherwise return a pointer to the slot it would take.  If a
660/// node already exists with these operands, the slot will be non-null.
661SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N,
662                                           const SDOperand *Ops,unsigned NumOps,
663                                           void *&InsertPos) {
664  if (N->getOpcode() == ISD::HANDLENODE || N->getValueType(0) == MVT::Flag)
665    return 0;    // Never add these nodes.
666
667  // Check that remaining values produced are not flags.
668  for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
669    if (N->getValueType(i) == MVT::Flag)
670      return 0;   // Never CSE anything that produces a flag.
671
672  FoldingSetNodeID ID;
673  AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, NumOps);
674
675  if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(N)) {
676    ID.AddInteger(LD->getAddressingMode());
677    ID.AddInteger(LD->getExtensionType());
678    ID.AddInteger((unsigned int)(LD->getMemoryVT()));
679    ID.AddInteger(LD->getAlignment());
680    ID.AddInteger(LD->isVolatile());
681  } else if (const StoreSDNode *ST = dyn_cast<StoreSDNode>(N)) {
682    ID.AddInteger(ST->getAddressingMode());
683    ID.AddInteger(ST->isTruncatingStore());
684    ID.AddInteger((unsigned int)(ST->getMemoryVT()));
685    ID.AddInteger(ST->getAlignment());
686    ID.AddInteger(ST->isVolatile());
687  }
688
689  return CSEMap.FindNodeOrInsertPos(ID, InsertPos);
690}
691
692
693SelectionDAG::~SelectionDAG() {
694  while (!AllNodes.empty()) {
695    SDNode *N = AllNodes.begin();
696    N->SetNextInBucket(0);
697    if (N->OperandsNeedDelete)
698      delete [] N->OperandList;
699    N->OperandList = 0;
700    N->NumOperands = 0;
701    AllNodes.pop_front();
702  }
703}
704
705SDOperand SelectionDAG::getZeroExtendInReg(SDOperand Op, MVT::ValueType VT) {
706  if (Op.getValueType() == VT) return Op;
707  APInt Imm = APInt::getLowBitsSet(Op.getValueSizeInBits(),
708                                   MVT::getSizeInBits(VT));
709  return getNode(ISD::AND, Op.getValueType(), Op,
710                 getConstant(Imm, Op.getValueType()));
711}
712
713SDOperand SelectionDAG::getString(const std::string &Val) {
714  StringSDNode *&N = StringNodes[Val];
715  if (!N) {
716    N = new StringSDNode(Val);
717    AllNodes.push_back(N);
718  }
719  return SDOperand(N, 0);
720}
721
722SDOperand SelectionDAG::getConstant(uint64_t Val, MVT::ValueType VT, bool isT) {
723  MVT::ValueType EltVT =
724    MVT::isVector(VT) ? MVT::getVectorElementType(VT) : VT;
725
726  return getConstant(APInt(MVT::getSizeInBits(EltVT), Val), VT, isT);
727}
728
729SDOperand SelectionDAG::getConstant(const APInt &Val, MVT::ValueType VT, bool isT) {
730  assert(MVT::isInteger(VT) && "Cannot create FP integer constant!");
731
732  MVT::ValueType EltVT =
733    MVT::isVector(VT) ? MVT::getVectorElementType(VT) : VT;
734
735  assert(Val.getBitWidth() == MVT::getSizeInBits(EltVT) &&
736         "APInt size does not match type size!");
737
738  unsigned Opc = isT ? ISD::TargetConstant : ISD::Constant;
739  FoldingSetNodeID ID;
740  AddNodeIDNode(ID, Opc, getVTList(EltVT), 0, 0);
741  ID.Add(Val);
742  void *IP = 0;
743  SDNode *N = NULL;
744  if ((N = CSEMap.FindNodeOrInsertPos(ID, IP)))
745    if (!MVT::isVector(VT))
746      return SDOperand(N, 0);
747  if (!N) {
748    N = new ConstantSDNode(isT, Val, EltVT);
749    CSEMap.InsertNode(N, IP);
750    AllNodes.push_back(N);
751  }
752
753  SDOperand Result(N, 0);
754  if (MVT::isVector(VT)) {
755    SmallVector<SDOperand, 8> Ops;
756    Ops.assign(MVT::getVectorNumElements(VT), Result);
757    Result = getNode(ISD::BUILD_VECTOR, VT, &Ops[0], Ops.size());
758  }
759  return Result;
760}
761
762SDOperand SelectionDAG::getIntPtrConstant(uint64_t Val, bool isTarget) {
763  return getConstant(Val, TLI.getPointerTy(), isTarget);
764}
765
766
767SDOperand SelectionDAG::getConstantFP(const APFloat& V, MVT::ValueType VT,
768                                      bool isTarget) {
769  assert(MVT::isFloatingPoint(VT) && "Cannot create integer FP constant!");
770
771  MVT::ValueType EltVT =
772    MVT::isVector(VT) ? MVT::getVectorElementType(VT) : VT;
773
774  // Do the map lookup using the actual bit pattern for the floating point
775  // value, so that we don't have problems with 0.0 comparing equal to -0.0, and
776  // we don't have issues with SNANs.
777  unsigned Opc = isTarget ? ISD::TargetConstantFP : ISD::ConstantFP;
778  FoldingSetNodeID ID;
779  AddNodeIDNode(ID, Opc, getVTList(EltVT), 0, 0);
780  ID.Add(V);
781  void *IP = 0;
782  SDNode *N = NULL;
783  if ((N = CSEMap.FindNodeOrInsertPos(ID, IP)))
784    if (!MVT::isVector(VT))
785      return SDOperand(N, 0);
786  if (!N) {
787    N = new ConstantFPSDNode(isTarget, V, EltVT);
788    CSEMap.InsertNode(N, IP);
789    AllNodes.push_back(N);
790  }
791
792  SDOperand Result(N, 0);
793  if (MVT::isVector(VT)) {
794    SmallVector<SDOperand, 8> Ops;
795    Ops.assign(MVT::getVectorNumElements(VT), Result);
796    Result = getNode(ISD::BUILD_VECTOR, VT, &Ops[0], Ops.size());
797  }
798  return Result;
799}
800
801SDOperand SelectionDAG::getConstantFP(double Val, MVT::ValueType VT,
802                                      bool isTarget) {
803  MVT::ValueType EltVT =
804    MVT::isVector(VT) ? MVT::getVectorElementType(VT) : VT;
805  if (EltVT==MVT::f32)
806    return getConstantFP(APFloat((float)Val), VT, isTarget);
807  else
808    return getConstantFP(APFloat(Val), VT, isTarget);
809}
810
811SDOperand SelectionDAG::getGlobalAddress(const GlobalValue *GV,
812                                         MVT::ValueType VT, int Offset,
813                                         bool isTargetGA) {
814  const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV);
815  unsigned Opc;
816  if (GVar && GVar->isThreadLocal())
817    Opc = isTargetGA ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress;
818  else
819    Opc = isTargetGA ? ISD::TargetGlobalAddress : ISD::GlobalAddress;
820  FoldingSetNodeID ID;
821  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
822  ID.AddPointer(GV);
823  ID.AddInteger(Offset);
824  void *IP = 0;
825  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
826   return SDOperand(E, 0);
827  SDNode *N = new GlobalAddressSDNode(isTargetGA, GV, VT, Offset);
828  CSEMap.InsertNode(N, IP);
829  AllNodes.push_back(N);
830  return SDOperand(N, 0);
831}
832
833SDOperand SelectionDAG::getFrameIndex(int FI, MVT::ValueType VT,
834                                      bool isTarget) {
835  unsigned Opc = isTarget ? ISD::TargetFrameIndex : ISD::FrameIndex;
836  FoldingSetNodeID ID;
837  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
838  ID.AddInteger(FI);
839  void *IP = 0;
840  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
841    return SDOperand(E, 0);
842  SDNode *N = new FrameIndexSDNode(FI, VT, isTarget);
843  CSEMap.InsertNode(N, IP);
844  AllNodes.push_back(N);
845  return SDOperand(N, 0);
846}
847
848SDOperand SelectionDAG::getJumpTable(int JTI, MVT::ValueType VT, bool isTarget){
849  unsigned Opc = isTarget ? ISD::TargetJumpTable : ISD::JumpTable;
850  FoldingSetNodeID ID;
851  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
852  ID.AddInteger(JTI);
853  void *IP = 0;
854  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
855    return SDOperand(E, 0);
856  SDNode *N = new JumpTableSDNode(JTI, VT, isTarget);
857  CSEMap.InsertNode(N, IP);
858  AllNodes.push_back(N);
859  return SDOperand(N, 0);
860}
861
862SDOperand SelectionDAG::getConstantPool(Constant *C, MVT::ValueType VT,
863                                        unsigned Alignment, int Offset,
864                                        bool isTarget) {
865  unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
866  FoldingSetNodeID ID;
867  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
868  ID.AddInteger(Alignment);
869  ID.AddInteger(Offset);
870  ID.AddPointer(C);
871  void *IP = 0;
872  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
873    return SDOperand(E, 0);
874  SDNode *N = new ConstantPoolSDNode(isTarget, C, VT, Offset, Alignment);
875  CSEMap.InsertNode(N, IP);
876  AllNodes.push_back(N);
877  return SDOperand(N, 0);
878}
879
880
881SDOperand SelectionDAG::getConstantPool(MachineConstantPoolValue *C,
882                                        MVT::ValueType VT,
883                                        unsigned Alignment, int Offset,
884                                        bool isTarget) {
885  unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
886  FoldingSetNodeID ID;
887  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
888  ID.AddInteger(Alignment);
889  ID.AddInteger(Offset);
890  C->AddSelectionDAGCSEId(ID);
891  void *IP = 0;
892  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
893    return SDOperand(E, 0);
894  SDNode *N = new ConstantPoolSDNode(isTarget, C, VT, Offset, Alignment);
895  CSEMap.InsertNode(N, IP);
896  AllNodes.push_back(N);
897  return SDOperand(N, 0);
898}
899
900
901SDOperand SelectionDAG::getBasicBlock(MachineBasicBlock *MBB) {
902  FoldingSetNodeID ID;
903  AddNodeIDNode(ID, ISD::BasicBlock, getVTList(MVT::Other), 0, 0);
904  ID.AddPointer(MBB);
905  void *IP = 0;
906  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
907    return SDOperand(E, 0);
908  SDNode *N = new BasicBlockSDNode(MBB);
909  CSEMap.InsertNode(N, IP);
910  AllNodes.push_back(N);
911  return SDOperand(N, 0);
912}
913
914SDOperand SelectionDAG::getValueType(MVT::ValueType VT) {
915  if (!MVT::isExtendedVT(VT) && (unsigned)VT >= ValueTypeNodes.size())
916    ValueTypeNodes.resize(VT+1);
917
918  SDNode *&N = MVT::isExtendedVT(VT) ?
919    ExtendedValueTypeNodes[VT] : ValueTypeNodes[VT];
920
921  if (N) return SDOperand(N, 0);
922  N = new VTSDNode(VT);
923  AllNodes.push_back(N);
924  return SDOperand(N, 0);
925}
926
927SDOperand SelectionDAG::getExternalSymbol(const char *Sym, MVT::ValueType VT) {
928  SDNode *&N = ExternalSymbols[Sym];
929  if (N) return SDOperand(N, 0);
930  N = new ExternalSymbolSDNode(false, Sym, VT);
931  AllNodes.push_back(N);
932  return SDOperand(N, 0);
933}
934
935SDOperand SelectionDAG::getTargetExternalSymbol(const char *Sym,
936                                                MVT::ValueType VT) {
937  SDNode *&N = TargetExternalSymbols[Sym];
938  if (N) return SDOperand(N, 0);
939  N = new ExternalSymbolSDNode(true, Sym, VT);
940  AllNodes.push_back(N);
941  return SDOperand(N, 0);
942}
943
944SDOperand SelectionDAG::getCondCode(ISD::CondCode Cond) {
945  if ((unsigned)Cond >= CondCodeNodes.size())
946    CondCodeNodes.resize(Cond+1);
947
948  if (CondCodeNodes[Cond] == 0) {
949    CondCodeNodes[Cond] = new CondCodeSDNode(Cond);
950    AllNodes.push_back(CondCodeNodes[Cond]);
951  }
952  return SDOperand(CondCodeNodes[Cond], 0);
953}
954
955SDOperand SelectionDAG::getRegister(unsigned RegNo, MVT::ValueType VT) {
956  FoldingSetNodeID ID;
957  AddNodeIDNode(ID, ISD::Register, getVTList(VT), 0, 0);
958  ID.AddInteger(RegNo);
959  void *IP = 0;
960  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
961    return SDOperand(E, 0);
962  SDNode *N = new RegisterSDNode(RegNo, VT);
963  CSEMap.InsertNode(N, IP);
964  AllNodes.push_back(N);
965  return SDOperand(N, 0);
966}
967
968SDOperand SelectionDAG::getSrcValue(const Value *V) {
969  assert((!V || isa<PointerType>(V->getType())) &&
970         "SrcValue is not a pointer?");
971
972  FoldingSetNodeID ID;
973  AddNodeIDNode(ID, ISD::SRCVALUE, getVTList(MVT::Other), 0, 0);
974  ID.AddPointer(V);
975
976  void *IP = 0;
977  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
978    return SDOperand(E, 0);
979
980  SDNode *N = new SrcValueSDNode(V);
981  CSEMap.InsertNode(N, IP);
982  AllNodes.push_back(N);
983  return SDOperand(N, 0);
984}
985
986SDOperand SelectionDAG::getMemOperand(const MemOperand &MO) {
987  const Value *v = MO.getValue();
988  assert((!v || isa<PointerType>(v->getType())) &&
989         "SrcValue is not a pointer?");
990
991  FoldingSetNodeID ID;
992  AddNodeIDNode(ID, ISD::MEMOPERAND, getVTList(MVT::Other), 0, 0);
993  ID.AddPointer(v);
994  ID.AddInteger(MO.getFlags());
995  ID.AddInteger(MO.getOffset());
996  ID.AddInteger(MO.getSize());
997  ID.AddInteger(MO.getAlignment());
998
999  void *IP = 0;
1000  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1001    return SDOperand(E, 0);
1002
1003  SDNode *N = new MemOperandSDNode(MO);
1004  CSEMap.InsertNode(N, IP);
1005  AllNodes.push_back(N);
1006  return SDOperand(N, 0);
1007}
1008
1009/// CreateStackTemporary - Create a stack temporary, suitable for holding the
1010/// specified value type.
1011SDOperand SelectionDAG::CreateStackTemporary(MVT::ValueType VT) {
1012  MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo();
1013  unsigned ByteSize = MVT::getSizeInBits(VT)/8;
1014  const Type *Ty = MVT::getTypeForValueType(VT);
1015  unsigned StackAlign = (unsigned)TLI.getTargetData()->getPrefTypeAlignment(Ty);
1016  int FrameIdx = FrameInfo->CreateStackObject(ByteSize, StackAlign);
1017  return getFrameIndex(FrameIdx, TLI.getPointerTy());
1018}
1019
1020
1021SDOperand SelectionDAG::FoldSetCC(MVT::ValueType VT, SDOperand N1,
1022                                  SDOperand N2, ISD::CondCode Cond) {
1023  // These setcc operations always fold.
1024  switch (Cond) {
1025  default: break;
1026  case ISD::SETFALSE:
1027  case ISD::SETFALSE2: return getConstant(0, VT);
1028  case ISD::SETTRUE:
1029  case ISD::SETTRUE2:  return getConstant(1, VT);
1030
1031  case ISD::SETOEQ:
1032  case ISD::SETOGT:
1033  case ISD::SETOGE:
1034  case ISD::SETOLT:
1035  case ISD::SETOLE:
1036  case ISD::SETONE:
1037  case ISD::SETO:
1038  case ISD::SETUO:
1039  case ISD::SETUEQ:
1040  case ISD::SETUNE:
1041    assert(!MVT::isInteger(N1.getValueType()) && "Illegal setcc for integer!");
1042    break;
1043  }
1044
1045  if (ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val)) {
1046    const APInt &C2 = N2C->getAPIntValue();
1047    if (ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val)) {
1048      const APInt &C1 = N1C->getAPIntValue();
1049
1050      switch (Cond) {
1051      default: assert(0 && "Unknown integer setcc!");
1052      case ISD::SETEQ:  return getConstant(C1 == C2, VT);
1053      case ISD::SETNE:  return getConstant(C1 != C2, VT);
1054      case ISD::SETULT: return getConstant(C1.ult(C2), VT);
1055      case ISD::SETUGT: return getConstant(C1.ugt(C2), VT);
1056      case ISD::SETULE: return getConstant(C1.ule(C2), VT);
1057      case ISD::SETUGE: return getConstant(C1.uge(C2), VT);
1058      case ISD::SETLT:  return getConstant(C1.slt(C2), VT);
1059      case ISD::SETGT:  return getConstant(C1.sgt(C2), VT);
1060      case ISD::SETLE:  return getConstant(C1.sle(C2), VT);
1061      case ISD::SETGE:  return getConstant(C1.sge(C2), VT);
1062      }
1063    }
1064  }
1065  if (ConstantFPSDNode *N1C = dyn_cast<ConstantFPSDNode>(N1.Val)) {
1066    if (ConstantFPSDNode *N2C = dyn_cast<ConstantFPSDNode>(N2.Val)) {
1067      // No compile time operations on this type yet.
1068      if (N1C->getValueType(0) == MVT::ppcf128)
1069        return SDOperand();
1070
1071      APFloat::cmpResult R = N1C->getValueAPF().compare(N2C->getValueAPF());
1072      switch (Cond) {
1073      default: break;
1074      case ISD::SETEQ:  if (R==APFloat::cmpUnordered)
1075                          return getNode(ISD::UNDEF, VT);
1076                        // fall through
1077      case ISD::SETOEQ: return getConstant(R==APFloat::cmpEqual, VT);
1078      case ISD::SETNE:  if (R==APFloat::cmpUnordered)
1079                          return getNode(ISD::UNDEF, VT);
1080                        // fall through
1081      case ISD::SETONE: return getConstant(R==APFloat::cmpGreaterThan ||
1082                                           R==APFloat::cmpLessThan, VT);
1083      case ISD::SETLT:  if (R==APFloat::cmpUnordered)
1084                          return getNode(ISD::UNDEF, VT);
1085                        // fall through
1086      case ISD::SETOLT: return getConstant(R==APFloat::cmpLessThan, VT);
1087      case ISD::SETGT:  if (R==APFloat::cmpUnordered)
1088                          return getNode(ISD::UNDEF, VT);
1089                        // fall through
1090      case ISD::SETOGT: return getConstant(R==APFloat::cmpGreaterThan, VT);
1091      case ISD::SETLE:  if (R==APFloat::cmpUnordered)
1092                          return getNode(ISD::UNDEF, VT);
1093                        // fall through
1094      case ISD::SETOLE: return getConstant(R==APFloat::cmpLessThan ||
1095                                           R==APFloat::cmpEqual, VT);
1096      case ISD::SETGE:  if (R==APFloat::cmpUnordered)
1097                          return getNode(ISD::UNDEF, VT);
1098                        // fall through
1099      case ISD::SETOGE: return getConstant(R==APFloat::cmpGreaterThan ||
1100                                           R==APFloat::cmpEqual, VT);
1101      case ISD::SETO:   return getConstant(R!=APFloat::cmpUnordered, VT);
1102      case ISD::SETUO:  return getConstant(R==APFloat::cmpUnordered, VT);
1103      case ISD::SETUEQ: return getConstant(R==APFloat::cmpUnordered ||
1104                                           R==APFloat::cmpEqual, VT);
1105      case ISD::SETUNE: return getConstant(R!=APFloat::cmpEqual, VT);
1106      case ISD::SETULT: return getConstant(R==APFloat::cmpUnordered ||
1107                                           R==APFloat::cmpLessThan, VT);
1108      case ISD::SETUGT: return getConstant(R==APFloat::cmpGreaterThan ||
1109                                           R==APFloat::cmpUnordered, VT);
1110      case ISD::SETULE: return getConstant(R!=APFloat::cmpGreaterThan, VT);
1111      case ISD::SETUGE: return getConstant(R!=APFloat::cmpLessThan, VT);
1112      }
1113    } else {
1114      // Ensure that the constant occurs on the RHS.
1115      return getSetCC(VT, N2, N1, ISD::getSetCCSwappedOperands(Cond));
1116    }
1117  }
1118
1119  // Could not fold it.
1120  return SDOperand();
1121}
1122
1123/// SignBitIsZero - Return true if the sign bit of Op is known to be zero.  We
1124/// use this predicate to simplify operations downstream.
1125bool SelectionDAG::SignBitIsZero(SDOperand Op, unsigned Depth) const {
1126  unsigned BitWidth = Op.getValueSizeInBits();
1127  return MaskedValueIsZero(Op, APInt::getSignBit(BitWidth), Depth);
1128}
1129
1130/// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero.  We use
1131/// this predicate to simplify operations downstream.  Mask is known to be zero
1132/// for bits that V cannot have.
1133bool SelectionDAG::MaskedValueIsZero(SDOperand Op, const APInt &Mask,
1134                                     unsigned Depth) const {
1135  APInt KnownZero, KnownOne;
1136  ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
1137  assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1138  return (KnownZero & Mask) == Mask;
1139}
1140
1141/// ComputeMaskedBits - Determine which of the bits specified in Mask are
1142/// known to be either zero or one and return them in the KnownZero/KnownOne
1143/// bitsets.  This code only analyzes bits in Mask, in order to short-circuit
1144/// processing.
1145void SelectionDAG::ComputeMaskedBits(SDOperand Op, const APInt &Mask,
1146                                     APInt &KnownZero, APInt &KnownOne,
1147                                     unsigned Depth) const {
1148  unsigned BitWidth = Mask.getBitWidth();
1149  assert(BitWidth == MVT::getSizeInBits(Op.getValueType()) &&
1150         "Mask size mismatches value type size!");
1151
1152  KnownZero = KnownOne = APInt(BitWidth, 0);   // Don't know anything.
1153  if (Depth == 6 || Mask == 0)
1154    return;  // Limit search depth.
1155
1156  APInt KnownZero2, KnownOne2;
1157
1158  switch (Op.getOpcode()) {
1159  case ISD::Constant:
1160    // We know all of the bits for a constant!
1161    KnownOne = cast<ConstantSDNode>(Op)->getAPIntValue() & Mask;
1162    KnownZero = ~KnownOne & Mask;
1163    return;
1164  case ISD::AND:
1165    // If either the LHS or the RHS are Zero, the result is zero.
1166    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1167    ComputeMaskedBits(Op.getOperand(0), Mask & ~KnownZero,
1168                      KnownZero2, KnownOne2, Depth+1);
1169    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1170    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1171
1172    // Output known-1 bits are only known if set in both the LHS & RHS.
1173    KnownOne &= KnownOne2;
1174    // Output known-0 are known to be clear if zero in either the LHS | RHS.
1175    KnownZero |= KnownZero2;
1176    return;
1177  case ISD::OR:
1178    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1179    ComputeMaskedBits(Op.getOperand(0), Mask & ~KnownOne,
1180                      KnownZero2, KnownOne2, Depth+1);
1181    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1182    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1183
1184    // Output known-0 bits are only known if clear in both the LHS & RHS.
1185    KnownZero &= KnownZero2;
1186    // Output known-1 are known to be set if set in either the LHS | RHS.
1187    KnownOne |= KnownOne2;
1188    return;
1189  case ISD::XOR: {
1190    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1191    ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
1192    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1193    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1194
1195    // Output known-0 bits are known if clear or set in both the LHS & RHS.
1196    APInt KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
1197    // Output known-1 are known to be set if set in only one of the LHS, RHS.
1198    KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
1199    KnownZero = KnownZeroOut;
1200    return;
1201  }
1202  case ISD::SELECT:
1203    ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero, KnownOne, Depth+1);
1204    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero2, KnownOne2, Depth+1);
1205    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1206    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1207
1208    // Only known if known in both the LHS and RHS.
1209    KnownOne &= KnownOne2;
1210    KnownZero &= KnownZero2;
1211    return;
1212  case ISD::SELECT_CC:
1213    ComputeMaskedBits(Op.getOperand(3), Mask, KnownZero, KnownOne, Depth+1);
1214    ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero2, KnownOne2, Depth+1);
1215    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1216    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1217
1218    // Only known if known in both the LHS and RHS.
1219    KnownOne &= KnownOne2;
1220    KnownZero &= KnownZero2;
1221    return;
1222  case ISD::SETCC:
1223    // If we know the result of a setcc has the top bits zero, use this info.
1224    if (TLI.getSetCCResultContents() == TargetLowering::ZeroOrOneSetCCResult &&
1225        BitWidth > 1)
1226      KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1);
1227    return;
1228  case ISD::SHL:
1229    // (shl X, C1) & C2 == 0   iff   (X & C2 >>u C1) == 0
1230    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1231      unsigned ShAmt = SA->getValue();
1232
1233      // If the shift count is an invalid immediate, don't do anything.
1234      if (ShAmt >= BitWidth)
1235        return;
1236
1237      ComputeMaskedBits(Op.getOperand(0), Mask.lshr(ShAmt),
1238                        KnownZero, KnownOne, Depth+1);
1239      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1240      KnownZero <<= ShAmt;
1241      KnownOne  <<= ShAmt;
1242      // low bits known zero.
1243      KnownZero |= APInt::getLowBitsSet(BitWidth, ShAmt);
1244    }
1245    return;
1246  case ISD::SRL:
1247    // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
1248    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1249      unsigned ShAmt = SA->getValue();
1250
1251      // If the shift count is an invalid immediate, don't do anything.
1252      if (ShAmt >= BitWidth)
1253        return;
1254
1255      ComputeMaskedBits(Op.getOperand(0), (Mask << ShAmt),
1256                        KnownZero, KnownOne, Depth+1);
1257      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1258      KnownZero = KnownZero.lshr(ShAmt);
1259      KnownOne  = KnownOne.lshr(ShAmt);
1260
1261      APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt) & Mask;
1262      KnownZero |= HighBits;  // High bits known zero.
1263    }
1264    return;
1265  case ISD::SRA:
1266    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1267      unsigned ShAmt = SA->getValue();
1268
1269      // If the shift count is an invalid immediate, don't do anything.
1270      if (ShAmt >= BitWidth)
1271        return;
1272
1273      APInt InDemandedMask = (Mask << ShAmt);
1274      // If any of the demanded bits are produced by the sign extension, we also
1275      // demand the input sign bit.
1276      APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt) & Mask;
1277      if (HighBits.getBoolValue())
1278        InDemandedMask |= APInt::getSignBit(BitWidth);
1279
1280      ComputeMaskedBits(Op.getOperand(0), InDemandedMask, KnownZero, KnownOne,
1281                        Depth+1);
1282      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1283      KnownZero = KnownZero.lshr(ShAmt);
1284      KnownOne  = KnownOne.lshr(ShAmt);
1285
1286      // Handle the sign bits.
1287      APInt SignBit = APInt::getSignBit(BitWidth);
1288      SignBit = SignBit.lshr(ShAmt);  // Adjust to where it is now in the mask.
1289
1290      if (KnownZero.intersects(SignBit)) {
1291        KnownZero |= HighBits;  // New bits are known zero.
1292      } else if (KnownOne.intersects(SignBit)) {
1293        KnownOne  |= HighBits;  // New bits are known one.
1294      }
1295    }
1296    return;
1297  case ISD::SIGN_EXTEND_INREG: {
1298    MVT::ValueType EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
1299    unsigned EBits = MVT::getSizeInBits(EVT);
1300
1301    // Sign extension.  Compute the demanded bits in the result that are not
1302    // present in the input.
1303    APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - EBits) & Mask;
1304
1305    APInt InSignBit = APInt::getSignBit(EBits);
1306    APInt InputDemandedBits = Mask & APInt::getLowBitsSet(BitWidth, EBits);
1307
1308    // If the sign extended bits are demanded, we know that the sign
1309    // bit is demanded.
1310    InSignBit.zext(BitWidth);
1311    if (NewBits.getBoolValue())
1312      InputDemandedBits |= InSignBit;
1313
1314    ComputeMaskedBits(Op.getOperand(0), InputDemandedBits,
1315                      KnownZero, KnownOne, Depth+1);
1316    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1317
1318    // If the sign bit of the input is known set or clear, then we know the
1319    // top bits of the result.
1320    if (KnownZero.intersects(InSignBit)) {         // Input sign bit known clear
1321      KnownZero |= NewBits;
1322      KnownOne  &= ~NewBits;
1323    } else if (KnownOne.intersects(InSignBit)) {   // Input sign bit known set
1324      KnownOne  |= NewBits;
1325      KnownZero &= ~NewBits;
1326    } else {                              // Input sign bit unknown
1327      KnownZero &= ~NewBits;
1328      KnownOne  &= ~NewBits;
1329    }
1330    return;
1331  }
1332  case ISD::CTTZ:
1333  case ISD::CTLZ:
1334  case ISD::CTPOP: {
1335    unsigned LowBits = Log2_32(BitWidth)+1;
1336    KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - LowBits);
1337    KnownOne  = APInt(BitWidth, 0);
1338    return;
1339  }
1340  case ISD::LOAD: {
1341    if (ISD::isZEXTLoad(Op.Val)) {
1342      LoadSDNode *LD = cast<LoadSDNode>(Op);
1343      MVT::ValueType VT = LD->getMemoryVT();
1344      unsigned MemBits = MVT::getSizeInBits(VT);
1345      KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - MemBits) & Mask;
1346    }
1347    return;
1348  }
1349  case ISD::ZERO_EXTEND: {
1350    MVT::ValueType InVT = Op.getOperand(0).getValueType();
1351    unsigned InBits = MVT::getSizeInBits(InVT);
1352    APInt NewBits   = APInt::getHighBitsSet(BitWidth, BitWidth - InBits) & Mask;
1353    APInt InMask    = Mask;
1354    InMask.trunc(InBits);
1355    KnownZero.trunc(InBits);
1356    KnownOne.trunc(InBits);
1357    ComputeMaskedBits(Op.getOperand(0), InMask, KnownZero, KnownOne, Depth+1);
1358    KnownZero.zext(BitWidth);
1359    KnownOne.zext(BitWidth);
1360    KnownZero |= NewBits;
1361    return;
1362  }
1363  case ISD::SIGN_EXTEND: {
1364    MVT::ValueType InVT = Op.getOperand(0).getValueType();
1365    unsigned InBits = MVT::getSizeInBits(InVT);
1366    APInt InSignBit = APInt::getSignBit(InBits);
1367    APInt NewBits   = APInt::getHighBitsSet(BitWidth, BitWidth - InBits) & Mask;
1368    APInt InMask = Mask;
1369    InMask.trunc(InBits);
1370
1371    // If any of the sign extended bits are demanded, we know that the sign
1372    // bit is demanded. Temporarily set this bit in the mask for our callee.
1373    if (NewBits.getBoolValue())
1374      InMask |= InSignBit;
1375
1376    KnownZero.trunc(InBits);
1377    KnownOne.trunc(InBits);
1378    ComputeMaskedBits(Op.getOperand(0), InMask, KnownZero, KnownOne, Depth+1);
1379
1380    // Note if the sign bit is known to be zero or one.
1381    bool SignBitKnownZero = KnownZero.isNegative();
1382    bool SignBitKnownOne  = KnownOne.isNegative();
1383    assert(!(SignBitKnownZero && SignBitKnownOne) &&
1384           "Sign bit can't be known to be both zero and one!");
1385
1386    // If the sign bit wasn't actually demanded by our caller, we don't
1387    // want it set in the KnownZero and KnownOne result values. Reset the
1388    // mask and reapply it to the result values.
1389    InMask = Mask;
1390    InMask.trunc(InBits);
1391    KnownZero &= InMask;
1392    KnownOne  &= InMask;
1393
1394    KnownZero.zext(BitWidth);
1395    KnownOne.zext(BitWidth);
1396
1397    // If the sign bit is known zero or one, the top bits match.
1398    if (SignBitKnownZero)
1399      KnownZero |= NewBits;
1400    else if (SignBitKnownOne)
1401      KnownOne  |= NewBits;
1402    return;
1403  }
1404  case ISD::ANY_EXTEND: {
1405    MVT::ValueType InVT = Op.getOperand(0).getValueType();
1406    unsigned InBits = MVT::getSizeInBits(InVT);
1407    APInt InMask = Mask;
1408    InMask.trunc(InBits);
1409    KnownZero.trunc(InBits);
1410    KnownOne.trunc(InBits);
1411    ComputeMaskedBits(Op.getOperand(0), InMask, KnownZero, KnownOne, Depth+1);
1412    KnownZero.zext(BitWidth);
1413    KnownOne.zext(BitWidth);
1414    return;
1415  }
1416  case ISD::TRUNCATE: {
1417    MVT::ValueType InVT = Op.getOperand(0).getValueType();
1418    unsigned InBits = MVT::getSizeInBits(InVT);
1419    APInt InMask = Mask;
1420    InMask.zext(InBits);
1421    KnownZero.zext(InBits);
1422    KnownOne.zext(InBits);
1423    ComputeMaskedBits(Op.getOperand(0), InMask, KnownZero, KnownOne, Depth+1);
1424    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1425    KnownZero.trunc(BitWidth);
1426    KnownOne.trunc(BitWidth);
1427    break;
1428  }
1429  case ISD::AssertZext: {
1430    MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
1431    APInt InMask = APInt::getLowBitsSet(BitWidth, MVT::getSizeInBits(VT));
1432    ComputeMaskedBits(Op.getOperand(0), Mask & InMask, KnownZero,
1433                      KnownOne, Depth+1);
1434    KnownZero |= (~InMask) & Mask;
1435    return;
1436  }
1437  case ISD::FGETSIGN:
1438    // All bits are zero except the low bit.
1439    KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - 1);
1440    return;
1441
1442  case ISD::ADD: {
1443    // If either the LHS or the RHS are Zero, the result is zero.
1444    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1445    ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
1446    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1447    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1448
1449    // Output known-0 bits are known if clear or set in both the low clear bits
1450    // common to both LHS & RHS.  For example, 8+(X<<3) is known to have the
1451    // low 3 bits clear.
1452    unsigned KnownZeroOut = std::min(KnownZero.countTrailingOnes(),
1453                                     KnownZero2.countTrailingOnes());
1454
1455    KnownZero = APInt::getLowBitsSet(BitWidth, KnownZeroOut);
1456    KnownOne = APInt(BitWidth, 0);
1457    return;
1458  }
1459  case ISD::SUB: {
1460    ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0));
1461    if (!CLHS) return;
1462
1463    // We know that the top bits of C-X are clear if X contains less bits
1464    // than C (i.e. no wrap-around can happen).  For example, 20-X is
1465    // positive if we can prove that X is >= 0 and < 16.
1466    if (CLHS->getAPIntValue().isNonNegative()) {
1467      unsigned NLZ = (CLHS->getAPIntValue()+1).countLeadingZeros();
1468      // NLZ can't be BitWidth with no sign bit
1469      APInt MaskV = APInt::getHighBitsSet(BitWidth, NLZ+1);
1470      ComputeMaskedBits(Op.getOperand(1), MaskV, KnownZero, KnownOne, Depth+1);
1471
1472      // If all of the MaskV bits are known to be zero, then we know the output
1473      // top bits are zero, because we now know that the output is from [0-C].
1474      if ((KnownZero & MaskV) == MaskV) {
1475        unsigned NLZ2 = CLHS->getAPIntValue().countLeadingZeros();
1476        // Top bits known zero.
1477        KnownZero = APInt::getHighBitsSet(BitWidth, NLZ2) & Mask;
1478        KnownOne = APInt(BitWidth, 0);   // No one bits known.
1479      } else {
1480        KnownZero = KnownOne = APInt(BitWidth, 0);  // Otherwise, nothing known.
1481      }
1482    }
1483    return;
1484  }
1485  default:
1486    // Allow the target to implement this method for its nodes.
1487    if (Op.getOpcode() >= ISD::BUILTIN_OP_END) {
1488  case ISD::INTRINSIC_WO_CHAIN:
1489  case ISD::INTRINSIC_W_CHAIN:
1490  case ISD::INTRINSIC_VOID:
1491      TLI.computeMaskedBitsForTargetNode(Op, Mask, KnownZero, KnownOne, *this);
1492    }
1493    return;
1494  }
1495}
1496
1497/// ComputeNumSignBits - Return the number of times the sign bit of the
1498/// register is replicated into the other bits.  We know that at least 1 bit
1499/// is always equal to the sign bit (itself), but other cases can give us
1500/// information.  For example, immediately after an "SRA X, 2", we know that
1501/// the top 3 bits are all equal to each other, so we return 3.
1502unsigned SelectionDAG::ComputeNumSignBits(SDOperand Op, unsigned Depth) const{
1503  MVT::ValueType VT = Op.getValueType();
1504  assert(MVT::isInteger(VT) && "Invalid VT!");
1505  unsigned VTBits = MVT::getSizeInBits(VT);
1506  unsigned Tmp, Tmp2;
1507
1508  if (Depth == 6)
1509    return 1;  // Limit search depth.
1510
1511  switch (Op.getOpcode()) {
1512  default: break;
1513  case ISD::AssertSext:
1514    Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1515    return VTBits-Tmp+1;
1516  case ISD::AssertZext:
1517    Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1518    return VTBits-Tmp;
1519
1520  case ISD::Constant: {
1521    uint64_t Val = cast<ConstantSDNode>(Op)->getValue();
1522    // If negative, invert the bits, then look at it.
1523    if (Val & MVT::getIntVTSignBit(VT))
1524      Val = ~Val;
1525
1526    // Shift the bits so they are the leading bits in the int64_t.
1527    Val <<= 64-VTBits;
1528
1529    // Return # leading zeros.  We use 'min' here in case Val was zero before
1530    // shifting.  We don't want to return '64' as for an i32 "0".
1531    return std::min(VTBits, CountLeadingZeros_64(Val));
1532  }
1533
1534  case ISD::SIGN_EXTEND:
1535    Tmp = VTBits-MVT::getSizeInBits(Op.getOperand(0).getValueType());
1536    return ComputeNumSignBits(Op.getOperand(0), Depth+1) + Tmp;
1537
1538  case ISD::SIGN_EXTEND_INREG:
1539    // Max of the input and what this extends.
1540    Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1541    Tmp = VTBits-Tmp+1;
1542
1543    Tmp2 = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1544    return std::max(Tmp, Tmp2);
1545
1546  case ISD::SRA:
1547    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1548    // SRA X, C   -> adds C sign bits.
1549    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1550      Tmp += C->getValue();
1551      if (Tmp > VTBits) Tmp = VTBits;
1552    }
1553    return Tmp;
1554  case ISD::SHL:
1555    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1556      // shl destroys sign bits.
1557      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1558      if (C->getValue() >= VTBits ||      // Bad shift.
1559          C->getValue() >= Tmp) break;    // Shifted all sign bits out.
1560      return Tmp - C->getValue();
1561    }
1562    break;
1563  case ISD::AND:
1564  case ISD::OR:
1565  case ISD::XOR:    // NOT is handled here.
1566    // Logical binary ops preserve the number of sign bits.
1567    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1568    if (Tmp == 1) return 1;  // Early out.
1569    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1570    return std::min(Tmp, Tmp2);
1571
1572  case ISD::SELECT:
1573    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1574    if (Tmp == 1) return 1;  // Early out.
1575    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1576    return std::min(Tmp, Tmp2);
1577
1578  case ISD::SETCC:
1579    // If setcc returns 0/-1, all bits are sign bits.
1580    if (TLI.getSetCCResultContents() ==
1581        TargetLowering::ZeroOrNegativeOneSetCCResult)
1582      return VTBits;
1583    break;
1584  case ISD::ROTL:
1585  case ISD::ROTR:
1586    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1587      unsigned RotAmt = C->getValue() & (VTBits-1);
1588
1589      // Handle rotate right by N like a rotate left by 32-N.
1590      if (Op.getOpcode() == ISD::ROTR)
1591        RotAmt = (VTBits-RotAmt) & (VTBits-1);
1592
1593      // If we aren't rotating out all of the known-in sign bits, return the
1594      // number that are left.  This handles rotl(sext(x), 1) for example.
1595      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1596      if (Tmp > RotAmt+1) return Tmp-RotAmt;
1597    }
1598    break;
1599  case ISD::ADD:
1600    // Add can have at most one carry bit.  Thus we know that the output
1601    // is, at worst, one more bit than the inputs.
1602    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1603    if (Tmp == 1) return 1;  // Early out.
1604
1605    // Special case decrementing a value (ADD X, -1):
1606    if (ConstantSDNode *CRHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
1607      if (CRHS->isAllOnesValue()) {
1608        APInt KnownZero, KnownOne;
1609        APInt Mask = APInt::getAllOnesValue(VTBits);
1610        ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
1611
1612        // If the input is known to be 0 or 1, the output is 0/-1, which is all
1613        // sign bits set.
1614        if ((KnownZero | APInt(VTBits, 1)) == Mask)
1615          return VTBits;
1616
1617        // If we are subtracting one from a positive number, there is no carry
1618        // out of the result.
1619        if (KnownZero.isNegative())
1620          return Tmp;
1621      }
1622
1623    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1624    if (Tmp2 == 1) return 1;
1625      return std::min(Tmp, Tmp2)-1;
1626    break;
1627
1628  case ISD::SUB:
1629    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1630    if (Tmp2 == 1) return 1;
1631
1632    // Handle NEG.
1633    if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
1634      if (CLHS->getValue() == 0) {
1635        APInt KnownZero, KnownOne;
1636        APInt Mask = APInt::getAllOnesValue(VTBits);
1637        ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1638        // If the input is known to be 0 or 1, the output is 0/-1, which is all
1639        // sign bits set.
1640        if ((KnownZero | APInt(VTBits, 1)) == Mask)
1641          return VTBits;
1642
1643        // If the input is known to be positive (the sign bit is known clear),
1644        // the output of the NEG has the same number of sign bits as the input.
1645        if (KnownZero.isNegative())
1646          return Tmp2;
1647
1648        // Otherwise, we treat this like a SUB.
1649      }
1650
1651    // Sub can have at most one carry bit.  Thus we know that the output
1652    // is, at worst, one more bit than the inputs.
1653    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1654    if (Tmp == 1) return 1;  // Early out.
1655      return std::min(Tmp, Tmp2)-1;
1656    break;
1657  case ISD::TRUNCATE:
1658    // FIXME: it's tricky to do anything useful for this, but it is an important
1659    // case for targets like X86.
1660    break;
1661  }
1662
1663  // Handle LOADX separately here. EXTLOAD case will fallthrough.
1664  if (Op.getOpcode() == ISD::LOAD) {
1665    LoadSDNode *LD = cast<LoadSDNode>(Op);
1666    unsigned ExtType = LD->getExtensionType();
1667    switch (ExtType) {
1668    default: break;
1669    case ISD::SEXTLOAD:    // '17' bits known
1670      Tmp = MVT::getSizeInBits(LD->getMemoryVT());
1671      return VTBits-Tmp+1;
1672    case ISD::ZEXTLOAD:    // '16' bits known
1673      Tmp = MVT::getSizeInBits(LD->getMemoryVT());
1674      return VTBits-Tmp;
1675    }
1676  }
1677
1678  // Allow the target to implement this method for its nodes.
1679  if (Op.getOpcode() >= ISD::BUILTIN_OP_END ||
1680      Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
1681      Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
1682      Op.getOpcode() == ISD::INTRINSIC_VOID) {
1683    unsigned NumBits = TLI.ComputeNumSignBitsForTargetNode(Op, Depth);
1684    if (NumBits > 1) return NumBits;
1685  }
1686
1687  // Finally, if we can prove that the top bits of the result are 0's or 1's,
1688  // use this information.
1689  APInt KnownZero, KnownOne;
1690  APInt Mask = APInt::getAllOnesValue(VTBits);
1691  ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
1692
1693  if (KnownZero.isNegative()) {        // sign bit is 0
1694    Mask = KnownZero;
1695  } else if (KnownOne.isNegative()) {  // sign bit is 1;
1696    Mask = KnownOne;
1697  } else {
1698    // Nothing known.
1699    return 1;
1700  }
1701
1702  // Okay, we know that the sign bit in Mask is set.  Use CLZ to determine
1703  // the number of identical bits in the top of the input value.
1704  Mask = ~Mask;
1705  Mask <<= Mask.getBitWidth()-VTBits;
1706  // Return # leading zeros.  We use 'min' here in case Val was zero before
1707  // shifting.  We don't want to return '64' as for an i32 "0".
1708  return std::min(VTBits, Mask.countLeadingZeros());
1709}
1710
1711
1712bool SelectionDAG::isVerifiedDebugInfoDesc(SDOperand Op) const {
1713  GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(Op);
1714  if (!GA) return false;
1715  GlobalVariable *GV = dyn_cast<GlobalVariable>(GA->getGlobal());
1716  if (!GV) return false;
1717  MachineModuleInfo *MMI = getMachineModuleInfo();
1718  return MMI && MMI->hasDebugInfo() && MMI->isVerified(GV);
1719}
1720
1721
1722/// getNode - Gets or creates the specified node.
1723///
1724SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT) {
1725  FoldingSetNodeID ID;
1726  AddNodeIDNode(ID, Opcode, getVTList(VT), 0, 0);
1727  void *IP = 0;
1728  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1729    return SDOperand(E, 0);
1730  SDNode *N = new SDNode(Opcode, SDNode::getSDVTList(VT));
1731  CSEMap.InsertNode(N, IP);
1732
1733  AllNodes.push_back(N);
1734  return SDOperand(N, 0);
1735}
1736
1737SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1738                                SDOperand Operand) {
1739  // Constant fold unary operations with an integer constant operand.
1740  if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Operand.Val)) {
1741    const APInt &Val = C->getAPIntValue();
1742    unsigned BitWidth = MVT::getSizeInBits(VT);
1743    switch (Opcode) {
1744    default: break;
1745    case ISD::SIGN_EXTEND: return getConstant(APInt(Val).sextOrTrunc(BitWidth), VT);
1746    case ISD::ANY_EXTEND:
1747    case ISD::ZERO_EXTEND:
1748    case ISD::TRUNCATE:    return getConstant(APInt(Val).zextOrTrunc(BitWidth), VT);
1749    case ISD::UINT_TO_FP:
1750    case ISD::SINT_TO_FP: {
1751      const uint64_t zero[] = {0, 0};
1752      // No compile time operations on this type.
1753      if (VT==MVT::ppcf128)
1754        break;
1755      APFloat apf = APFloat(APInt(BitWidth, 2, zero));
1756      (void)apf.convertFromAPInt(Val,
1757                                 Opcode==ISD::SINT_TO_FP,
1758                                 APFloat::rmNearestTiesToEven);
1759      return getConstantFP(apf, VT);
1760    }
1761    case ISD::BIT_CONVERT:
1762      if (VT == MVT::f32 && C->getValueType(0) == MVT::i32)
1763        return getConstantFP(Val.bitsToFloat(), VT);
1764      else if (VT == MVT::f64 && C->getValueType(0) == MVT::i64)
1765        return getConstantFP(Val.bitsToDouble(), VT);
1766      break;
1767    case ISD::BSWAP:
1768      return getConstant(Val.byteSwap(), VT);
1769    case ISD::CTPOP:
1770      return getConstant(Val.countPopulation(), VT);
1771    case ISD::CTLZ:
1772      return getConstant(Val.countLeadingZeros(), VT);
1773    case ISD::CTTZ:
1774      return getConstant(Val.countTrailingZeros(), VT);
1775    }
1776  }
1777
1778  // Constant fold unary operations with a floating point constant operand.
1779  if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Operand.Val)) {
1780    APFloat V = C->getValueAPF();    // make copy
1781    if (VT != MVT::ppcf128 && Operand.getValueType() != MVT::ppcf128) {
1782      switch (Opcode) {
1783      case ISD::FNEG:
1784        V.changeSign();
1785        return getConstantFP(V, VT);
1786      case ISD::FABS:
1787        V.clearSign();
1788        return getConstantFP(V, VT);
1789      case ISD::FP_ROUND:
1790      case ISD::FP_EXTEND:
1791        // This can return overflow, underflow, or inexact; we don't care.
1792        // FIXME need to be more flexible about rounding mode.
1793        (void) V.convert(VT==MVT::f32 ? APFloat::IEEEsingle :
1794                         VT==MVT::f64 ? APFloat::IEEEdouble :
1795                         VT==MVT::f80 ? APFloat::x87DoubleExtended :
1796                         VT==MVT::f128 ? APFloat::IEEEquad :
1797                         APFloat::Bogus,
1798                         APFloat::rmNearestTiesToEven);
1799        return getConstantFP(V, VT);
1800      case ISD::FP_TO_SINT:
1801      case ISD::FP_TO_UINT: {
1802        integerPart x;
1803        assert(integerPartWidth >= 64);
1804        // FIXME need to be more flexible about rounding mode.
1805        APFloat::opStatus s = V.convertToInteger(&x, 64U,
1806                              Opcode==ISD::FP_TO_SINT,
1807                              APFloat::rmTowardZero);
1808        if (s==APFloat::opInvalidOp)     // inexact is OK, in fact usual
1809          break;
1810        return getConstant(x, VT);
1811      }
1812      case ISD::BIT_CONVERT:
1813        if (VT == MVT::i32 && C->getValueType(0) == MVT::f32)
1814          return getConstant((uint32_t)V.convertToAPInt().getZExtValue(), VT);
1815        else if (VT == MVT::i64 && C->getValueType(0) == MVT::f64)
1816          return getConstant(V.convertToAPInt().getZExtValue(), VT);
1817        break;
1818      }
1819    }
1820  }
1821
1822  unsigned OpOpcode = Operand.Val->getOpcode();
1823  switch (Opcode) {
1824  case ISD::TokenFactor:
1825    return Operand;         // Factor of one node?  No factor.
1826  case ISD::FP_ROUND: assert(0 && "Invalid method to make FP_ROUND node");
1827  case ISD::FP_EXTEND:
1828    assert(MVT::isFloatingPoint(VT) &&
1829           MVT::isFloatingPoint(Operand.getValueType()) && "Invalid FP cast!");
1830    if (Operand.getValueType() == VT) return Operand;  // noop conversion.
1831    break;
1832    case ISD::SIGN_EXTEND:
1833    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1834           "Invalid SIGN_EXTEND!");
1835    if (Operand.getValueType() == VT) return Operand;   // noop extension
1836    assert(MVT::getSizeInBits(Operand.getValueType()) < MVT::getSizeInBits(VT)
1837           && "Invalid sext node, dst < src!");
1838    if (OpOpcode == ISD::SIGN_EXTEND || OpOpcode == ISD::ZERO_EXTEND)
1839      return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1840    break;
1841  case ISD::ZERO_EXTEND:
1842    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1843           "Invalid ZERO_EXTEND!");
1844    if (Operand.getValueType() == VT) return Operand;   // noop extension
1845    assert(MVT::getSizeInBits(Operand.getValueType()) < MVT::getSizeInBits(VT)
1846           && "Invalid zext node, dst < src!");
1847    if (OpOpcode == ISD::ZERO_EXTEND)   // (zext (zext x)) -> (zext x)
1848      return getNode(ISD::ZERO_EXTEND, VT, Operand.Val->getOperand(0));
1849    break;
1850  case ISD::ANY_EXTEND:
1851    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1852           "Invalid ANY_EXTEND!");
1853    if (Operand.getValueType() == VT) return Operand;   // noop extension
1854    assert(MVT::getSizeInBits(Operand.getValueType()) < MVT::getSizeInBits(VT)
1855           && "Invalid anyext node, dst < src!");
1856    if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND)
1857      // (ext (zext x)) -> (zext x)  and  (ext (sext x)) -> (sext x)
1858      return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1859    break;
1860  case ISD::TRUNCATE:
1861    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1862           "Invalid TRUNCATE!");
1863    if (Operand.getValueType() == VT) return Operand;   // noop truncate
1864    assert(MVT::getSizeInBits(Operand.getValueType()) > MVT::getSizeInBits(VT)
1865           && "Invalid truncate node, src < dst!");
1866    if (OpOpcode == ISD::TRUNCATE)
1867      return getNode(ISD::TRUNCATE, VT, Operand.Val->getOperand(0));
1868    else if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND ||
1869             OpOpcode == ISD::ANY_EXTEND) {
1870      // If the source is smaller than the dest, we still need an extend.
1871      if (MVT::getSizeInBits(Operand.Val->getOperand(0).getValueType())
1872          < MVT::getSizeInBits(VT))
1873        return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1874      else if (MVT::getSizeInBits(Operand.Val->getOperand(0).getValueType())
1875               > MVT::getSizeInBits(VT))
1876        return getNode(ISD::TRUNCATE, VT, Operand.Val->getOperand(0));
1877      else
1878        return Operand.Val->getOperand(0);
1879    }
1880    break;
1881  case ISD::BIT_CONVERT:
1882    // Basic sanity checking.
1883    assert(MVT::getSizeInBits(VT) == MVT::getSizeInBits(Operand.getValueType())
1884           && "Cannot BIT_CONVERT between types of different sizes!");
1885    if (VT == Operand.getValueType()) return Operand;  // noop conversion.
1886    if (OpOpcode == ISD::BIT_CONVERT)  // bitconv(bitconv(x)) -> bitconv(x)
1887      return getNode(ISD::BIT_CONVERT, VT, Operand.getOperand(0));
1888    if (OpOpcode == ISD::UNDEF)
1889      return getNode(ISD::UNDEF, VT);
1890    break;
1891  case ISD::SCALAR_TO_VECTOR:
1892    assert(MVT::isVector(VT) && !MVT::isVector(Operand.getValueType()) &&
1893           MVT::getVectorElementType(VT) == Operand.getValueType() &&
1894           "Illegal SCALAR_TO_VECTOR node!");
1895    break;
1896  case ISD::FNEG:
1897    if (OpOpcode == ISD::FSUB)   // -(X-Y) -> (Y-X)
1898      return getNode(ISD::FSUB, VT, Operand.Val->getOperand(1),
1899                     Operand.Val->getOperand(0));
1900    if (OpOpcode == ISD::FNEG)  // --X -> X
1901      return Operand.Val->getOperand(0);
1902    break;
1903  case ISD::FABS:
1904    if (OpOpcode == ISD::FNEG)  // abs(-X) -> abs(X)
1905      return getNode(ISD::FABS, VT, Operand.Val->getOperand(0));
1906    break;
1907  }
1908
1909  SDNode *N;
1910  SDVTList VTs = getVTList(VT);
1911  if (VT != MVT::Flag) { // Don't CSE flag producing nodes
1912    FoldingSetNodeID ID;
1913    SDOperand Ops[1] = { Operand };
1914    AddNodeIDNode(ID, Opcode, VTs, Ops, 1);
1915    void *IP = 0;
1916    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1917      return SDOperand(E, 0);
1918    N = new UnarySDNode(Opcode, VTs, Operand);
1919    CSEMap.InsertNode(N, IP);
1920  } else {
1921    N = new UnarySDNode(Opcode, VTs, Operand);
1922  }
1923  AllNodes.push_back(N);
1924  return SDOperand(N, 0);
1925}
1926
1927
1928
1929SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1930                                SDOperand N1, SDOperand N2) {
1931  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val);
1932  ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val);
1933  switch (Opcode) {
1934  default: break;
1935  case ISD::TokenFactor:
1936    assert(VT == MVT::Other && N1.getValueType() == MVT::Other &&
1937           N2.getValueType() == MVT::Other && "Invalid token factor!");
1938    // Fold trivial token factors.
1939    if (N1.getOpcode() == ISD::EntryToken) return N2;
1940    if (N2.getOpcode() == ISD::EntryToken) return N1;
1941    break;
1942  case ISD::AND:
1943    assert(MVT::isInteger(VT) && N1.getValueType() == N2.getValueType() &&
1944           N1.getValueType() == VT && "Binary operator types must match!");
1945    // (X & 0) -> 0.  This commonly occurs when legalizing i64 values, so it's
1946    // worth handling here.
1947    if (N2C && N2C->getValue() == 0)
1948      return N2;
1949    if (N2C && N2C->isAllOnesValue())  // X & -1 -> X
1950      return N1;
1951    break;
1952  case ISD::OR:
1953  case ISD::XOR:
1954    assert(MVT::isInteger(VT) && N1.getValueType() == N2.getValueType() &&
1955           N1.getValueType() == VT && "Binary operator types must match!");
1956    // (X ^| 0) -> X.  This commonly occurs when legalizing i64 values, so it's
1957    // worth handling here.
1958    if (N2C && N2C->getValue() == 0)
1959      return N1;
1960    break;
1961  case ISD::UDIV:
1962  case ISD::UREM:
1963  case ISD::MULHU:
1964  case ISD::MULHS:
1965    assert(MVT::isInteger(VT) && "This operator does not apply to FP types!");
1966    // fall through
1967  case ISD::ADD:
1968  case ISD::SUB:
1969  case ISD::MUL:
1970  case ISD::SDIV:
1971  case ISD::SREM:
1972  case ISD::FADD:
1973  case ISD::FSUB:
1974  case ISD::FMUL:
1975  case ISD::FDIV:
1976  case ISD::FREM:
1977    assert(N1.getValueType() == N2.getValueType() &&
1978           N1.getValueType() == VT && "Binary operator types must match!");
1979    break;
1980  case ISD::FCOPYSIGN:   // N1 and result must match.  N1/N2 need not match.
1981    assert(N1.getValueType() == VT &&
1982           MVT::isFloatingPoint(N1.getValueType()) &&
1983           MVT::isFloatingPoint(N2.getValueType()) &&
1984           "Invalid FCOPYSIGN!");
1985    break;
1986  case ISD::SHL:
1987  case ISD::SRA:
1988  case ISD::SRL:
1989  case ISD::ROTL:
1990  case ISD::ROTR:
1991    assert(VT == N1.getValueType() &&
1992           "Shift operators return type must be the same as their first arg");
1993    assert(MVT::isInteger(VT) && MVT::isInteger(N2.getValueType()) &&
1994           VT != MVT::i1 && "Shifts only work on integers");
1995    break;
1996  case ISD::FP_ROUND_INREG: {
1997    MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
1998    assert(VT == N1.getValueType() && "Not an inreg round!");
1999    assert(MVT::isFloatingPoint(VT) && MVT::isFloatingPoint(EVT) &&
2000           "Cannot FP_ROUND_INREG integer types");
2001    assert(MVT::getSizeInBits(EVT) <= MVT::getSizeInBits(VT) &&
2002           "Not rounding down!");
2003    if (cast<VTSDNode>(N2)->getVT() == VT) return N1;  // Not actually rounding.
2004    break;
2005  }
2006  case ISD::FP_ROUND:
2007    assert(MVT::isFloatingPoint(VT) &&
2008           MVT::isFloatingPoint(N1.getValueType()) &&
2009           MVT::getSizeInBits(VT) <= MVT::getSizeInBits(N1.getValueType()) &&
2010           isa<ConstantSDNode>(N2) && "Invalid FP_ROUND!");
2011    if (N1.getValueType() == VT) return N1;  // noop conversion.
2012    break;
2013  case ISD::AssertSext:
2014  case ISD::AssertZext: {
2015    MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
2016    assert(VT == N1.getValueType() && "Not an inreg extend!");
2017    assert(MVT::isInteger(VT) && MVT::isInteger(EVT) &&
2018           "Cannot *_EXTEND_INREG FP types");
2019    assert(MVT::getSizeInBits(EVT) <= MVT::getSizeInBits(VT) &&
2020           "Not extending!");
2021    if (VT == EVT) return N1; // noop assertion.
2022    break;
2023  }
2024  case ISD::SIGN_EXTEND_INREG: {
2025    MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
2026    assert(VT == N1.getValueType() && "Not an inreg extend!");
2027    assert(MVT::isInteger(VT) && MVT::isInteger(EVT) &&
2028           "Cannot *_EXTEND_INREG FP types");
2029    assert(MVT::getSizeInBits(EVT) <= MVT::getSizeInBits(VT) &&
2030           "Not extending!");
2031    if (EVT == VT) return N1;  // Not actually extending
2032
2033    if (N1C) {
2034      APInt Val = N1C->getAPIntValue();
2035      unsigned FromBits = MVT::getSizeInBits(cast<VTSDNode>(N2)->getVT());
2036      Val <<= Val.getBitWidth()-FromBits;
2037      Val = Val.lshr(Val.getBitWidth()-FromBits);
2038      return getConstant(Val, VT);
2039    }
2040    break;
2041  }
2042  case ISD::EXTRACT_VECTOR_ELT:
2043    assert(N2C && "Bad EXTRACT_VECTOR_ELT!");
2044
2045    // EXTRACT_VECTOR_ELT of CONCAT_VECTORS is often formed while lowering is
2046    // expanding copies of large vectors from registers.
2047    if (N1.getOpcode() == ISD::CONCAT_VECTORS &&
2048        N1.getNumOperands() > 0) {
2049      unsigned Factor =
2050        MVT::getVectorNumElements(N1.getOperand(0).getValueType());
2051      return getNode(ISD::EXTRACT_VECTOR_ELT, VT,
2052                     N1.getOperand(N2C->getValue() / Factor),
2053                     getConstant(N2C->getValue() % Factor, N2.getValueType()));
2054    }
2055
2056    // EXTRACT_VECTOR_ELT of BUILD_VECTOR is often formed while lowering is
2057    // expanding large vector constants.
2058    if (N1.getOpcode() == ISD::BUILD_VECTOR)
2059      return N1.getOperand(N2C->getValue());
2060
2061    // EXTRACT_VECTOR_ELT of INSERT_VECTOR_ELT is often formed when vector
2062    // operations are lowered to scalars.
2063    if (N1.getOpcode() == ISD::INSERT_VECTOR_ELT)
2064      if (ConstantSDNode *IEC = dyn_cast<ConstantSDNode>(N1.getOperand(2))) {
2065        if (IEC == N2C)
2066          return N1.getOperand(1);
2067        else
2068          return getNode(ISD::EXTRACT_VECTOR_ELT, VT, N1.getOperand(0), N2);
2069      }
2070    break;
2071  case ISD::EXTRACT_ELEMENT:
2072    assert(N2C && (unsigned)N2C->getValue() < 2 && "Bad EXTRACT_ELEMENT!");
2073
2074    // EXTRACT_ELEMENT of BUILD_PAIR is often formed while legalize is expanding
2075    // 64-bit integers into 32-bit parts.  Instead of building the extract of
2076    // the BUILD_PAIR, only to have legalize rip it apart, just do it now.
2077    if (N1.getOpcode() == ISD::BUILD_PAIR)
2078      return N1.getOperand(N2C->getValue());
2079
2080    // EXTRACT_ELEMENT of a constant int is also very common.
2081    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) {
2082      unsigned Shift = MVT::getSizeInBits(VT) * N2C->getValue();
2083      return getConstant(C->getValue() >> Shift, VT);
2084    }
2085    break;
2086  case ISD::EXTRACT_SUBVECTOR:
2087    if (N1.getValueType() == VT) // Trivial extraction.
2088      return N1;
2089    break;
2090  }
2091
2092  if (N1C) {
2093    if (N2C) {
2094      APInt C1 = N1C->getAPIntValue(), C2 = N2C->getAPIntValue();
2095      switch (Opcode) {
2096      case ISD::ADD: return getConstant(C1 + C2, VT);
2097      case ISD::SUB: return getConstant(C1 - C2, VT);
2098      case ISD::MUL: return getConstant(C1 * C2, VT);
2099      case ISD::UDIV:
2100        if (C2.getBoolValue()) return getConstant(C1.udiv(C2), VT);
2101        break;
2102      case ISD::UREM :
2103        if (C2.getBoolValue()) return getConstant(C1.urem(C2), VT);
2104        break;
2105      case ISD::SDIV :
2106        if (C2.getBoolValue()) return getConstant(C1.sdiv(C2), VT);
2107        break;
2108      case ISD::SREM :
2109        if (C2.getBoolValue()) return getConstant(C1.srem(C2), VT);
2110        break;
2111      case ISD::AND  : return getConstant(C1 & C2, VT);
2112      case ISD::OR   : return getConstant(C1 | C2, VT);
2113      case ISD::XOR  : return getConstant(C1 ^ C2, VT);
2114      case ISD::SHL  : return getConstant(C1 << C2, VT);
2115      case ISD::SRL  : return getConstant(C1.lshr(C2), VT);
2116      case ISD::SRA  : return getConstant(C1.ashr(C2), VT);
2117      case ISD::ROTL : return getConstant(C1.rotl(C2), VT);
2118      case ISD::ROTR : return getConstant(C1.rotr(C2), VT);
2119      default: break;
2120      }
2121    } else {      // Cannonicalize constant to RHS if commutative
2122      if (isCommutativeBinOp(Opcode)) {
2123        std::swap(N1C, N2C);
2124        std::swap(N1, N2);
2125      }
2126    }
2127  }
2128
2129  // Constant fold FP operations.
2130  ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1.Val);
2131  ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2.Val);
2132  if (N1CFP) {
2133    if (!N2CFP && isCommutativeBinOp(Opcode)) {
2134      // Cannonicalize constant to RHS if commutative
2135      std::swap(N1CFP, N2CFP);
2136      std::swap(N1, N2);
2137    } else if (N2CFP && VT != MVT::ppcf128) {
2138      APFloat V1 = N1CFP->getValueAPF(), V2 = N2CFP->getValueAPF();
2139      APFloat::opStatus s;
2140      switch (Opcode) {
2141      case ISD::FADD:
2142        s = V1.add(V2, APFloat::rmNearestTiesToEven);
2143        if (s != APFloat::opInvalidOp)
2144          return getConstantFP(V1, VT);
2145        break;
2146      case ISD::FSUB:
2147        s = V1.subtract(V2, APFloat::rmNearestTiesToEven);
2148        if (s!=APFloat::opInvalidOp)
2149          return getConstantFP(V1, VT);
2150        break;
2151      case ISD::FMUL:
2152        s = V1.multiply(V2, APFloat::rmNearestTiesToEven);
2153        if (s!=APFloat::opInvalidOp)
2154          return getConstantFP(V1, VT);
2155        break;
2156      case ISD::FDIV:
2157        s = V1.divide(V2, APFloat::rmNearestTiesToEven);
2158        if (s!=APFloat::opInvalidOp && s!=APFloat::opDivByZero)
2159          return getConstantFP(V1, VT);
2160        break;
2161      case ISD::FREM :
2162        s = V1.mod(V2, APFloat::rmNearestTiesToEven);
2163        if (s!=APFloat::opInvalidOp && s!=APFloat::opDivByZero)
2164          return getConstantFP(V1, VT);
2165        break;
2166      case ISD::FCOPYSIGN:
2167        V1.copySign(V2);
2168        return getConstantFP(V1, VT);
2169      default: break;
2170      }
2171    }
2172  }
2173
2174  // Canonicalize an UNDEF to the RHS, even over a constant.
2175  if (N1.getOpcode() == ISD::UNDEF) {
2176    if (isCommutativeBinOp(Opcode)) {
2177      std::swap(N1, N2);
2178    } else {
2179      switch (Opcode) {
2180      case ISD::FP_ROUND_INREG:
2181      case ISD::SIGN_EXTEND_INREG:
2182      case ISD::SUB:
2183      case ISD::FSUB:
2184      case ISD::FDIV:
2185      case ISD::FREM:
2186      case ISD::SRA:
2187        return N1;     // fold op(undef, arg2) -> undef
2188      case ISD::UDIV:
2189      case ISD::SDIV:
2190      case ISD::UREM:
2191      case ISD::SREM:
2192      case ISD::SRL:
2193      case ISD::SHL:
2194        if (!MVT::isVector(VT))
2195          return getConstant(0, VT);    // fold op(undef, arg2) -> 0
2196        // For vectors, we can't easily build an all zero vector, just return
2197        // the LHS.
2198        return N2;
2199      }
2200    }
2201  }
2202
2203  // Fold a bunch of operators when the RHS is undef.
2204  if (N2.getOpcode() == ISD::UNDEF) {
2205    switch (Opcode) {
2206    case ISD::ADD:
2207    case ISD::ADDC:
2208    case ISD::ADDE:
2209    case ISD::SUB:
2210    case ISD::FADD:
2211    case ISD::FSUB:
2212    case ISD::FMUL:
2213    case ISD::FDIV:
2214    case ISD::FREM:
2215    case ISD::UDIV:
2216    case ISD::SDIV:
2217    case ISD::UREM:
2218    case ISD::SREM:
2219    case ISD::XOR:
2220      return N2;       // fold op(arg1, undef) -> undef
2221    case ISD::MUL:
2222    case ISD::AND:
2223    case ISD::SRL:
2224    case ISD::SHL:
2225      if (!MVT::isVector(VT))
2226        return getConstant(0, VT);  // fold op(arg1, undef) -> 0
2227      // For vectors, we can't easily build an all zero vector, just return
2228      // the LHS.
2229      return N1;
2230    case ISD::OR:
2231      if (!MVT::isVector(VT))
2232        return getConstant(MVT::getIntVTBitMask(VT), VT);
2233      // For vectors, we can't easily build an all one vector, just return
2234      // the LHS.
2235      return N1;
2236    case ISD::SRA:
2237      return N1;
2238    }
2239  }
2240
2241  // Memoize this node if possible.
2242  SDNode *N;
2243  SDVTList VTs = getVTList(VT);
2244  if (VT != MVT::Flag) {
2245    SDOperand Ops[] = { N1, N2 };
2246    FoldingSetNodeID ID;
2247    AddNodeIDNode(ID, Opcode, VTs, Ops, 2);
2248    void *IP = 0;
2249    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2250      return SDOperand(E, 0);
2251    N = new BinarySDNode(Opcode, VTs, N1, N2);
2252    CSEMap.InsertNode(N, IP);
2253  } else {
2254    N = new BinarySDNode(Opcode, VTs, N1, N2);
2255  }
2256
2257  AllNodes.push_back(N);
2258  return SDOperand(N, 0);
2259}
2260
2261SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2262                                SDOperand N1, SDOperand N2, SDOperand N3) {
2263  // Perform various simplifications.
2264  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val);
2265  ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val);
2266  switch (Opcode) {
2267  case ISD::SETCC: {
2268    // Use FoldSetCC to simplify SETCC's.
2269    SDOperand Simp = FoldSetCC(VT, N1, N2, cast<CondCodeSDNode>(N3)->get());
2270    if (Simp.Val) return Simp;
2271    break;
2272  }
2273  case ISD::SELECT:
2274    if (N1C) {
2275     if (N1C->getValue())
2276        return N2;             // select true, X, Y -> X
2277      else
2278        return N3;             // select false, X, Y -> Y
2279    }
2280
2281    if (N2 == N3) return N2;   // select C, X, X -> X
2282    break;
2283  case ISD::BRCOND:
2284    if (N2C) {
2285      if (N2C->getValue()) // Unconditional branch
2286        return getNode(ISD::BR, MVT::Other, N1, N3);
2287      else
2288        return N1;         // Never-taken branch
2289    }
2290    break;
2291  case ISD::VECTOR_SHUFFLE:
2292    assert(VT == N1.getValueType() && VT == N2.getValueType() &&
2293           MVT::isVector(VT) && MVT::isVector(N3.getValueType()) &&
2294           N3.getOpcode() == ISD::BUILD_VECTOR &&
2295           MVT::getVectorNumElements(VT) == N3.getNumOperands() &&
2296           "Illegal VECTOR_SHUFFLE node!");
2297    break;
2298  case ISD::BIT_CONVERT:
2299    // Fold bit_convert nodes from a type to themselves.
2300    if (N1.getValueType() == VT)
2301      return N1;
2302    break;
2303  }
2304
2305  // Memoize node if it doesn't produce a flag.
2306  SDNode *N;
2307  SDVTList VTs = getVTList(VT);
2308  if (VT != MVT::Flag) {
2309    SDOperand Ops[] = { N1, N2, N3 };
2310    FoldingSetNodeID ID;
2311    AddNodeIDNode(ID, Opcode, VTs, Ops, 3);
2312    void *IP = 0;
2313    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2314      return SDOperand(E, 0);
2315    N = new TernarySDNode(Opcode, VTs, N1, N2, N3);
2316    CSEMap.InsertNode(N, IP);
2317  } else {
2318    N = new TernarySDNode(Opcode, VTs, N1, N2, N3);
2319  }
2320  AllNodes.push_back(N);
2321  return SDOperand(N, 0);
2322}
2323
2324SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2325                                SDOperand N1, SDOperand N2, SDOperand N3,
2326                                SDOperand N4) {
2327  SDOperand Ops[] = { N1, N2, N3, N4 };
2328  return getNode(Opcode, VT, Ops, 4);
2329}
2330
2331SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2332                                SDOperand N1, SDOperand N2, SDOperand N3,
2333                                SDOperand N4, SDOperand N5) {
2334  SDOperand Ops[] = { N1, N2, N3, N4, N5 };
2335  return getNode(Opcode, VT, Ops, 5);
2336}
2337
2338SDOperand SelectionDAG::getMemcpy(SDOperand Chain, SDOperand Dest,
2339                                  SDOperand Src, SDOperand Size,
2340                                  SDOperand Align,
2341                                  SDOperand AlwaysInline) {
2342  SDOperand Ops[] = { Chain, Dest, Src, Size, Align, AlwaysInline };
2343  return getNode(ISD::MEMCPY, MVT::Other, Ops, 6);
2344}
2345
2346SDOperand SelectionDAG::getMemmove(SDOperand Chain, SDOperand Dest,
2347                                  SDOperand Src, SDOperand Size,
2348                                  SDOperand Align,
2349                                  SDOperand AlwaysInline) {
2350  SDOperand Ops[] = { Chain, Dest, Src, Size, Align, AlwaysInline };
2351  return getNode(ISD::MEMMOVE, MVT::Other, Ops, 6);
2352}
2353
2354SDOperand SelectionDAG::getMemset(SDOperand Chain, SDOperand Dest,
2355                                  SDOperand Src, SDOperand Size,
2356                                  SDOperand Align,
2357                                  SDOperand AlwaysInline) {
2358  SDOperand Ops[] = { Chain, Dest, Src, Size, Align, AlwaysInline };
2359  return getNode(ISD::MEMSET, MVT::Other, Ops, 6);
2360}
2361
2362SDOperand SelectionDAG::getAtomic(unsigned Opcode, SDOperand Chain,
2363                                  SDOperand Ptr, SDOperand Cmp,
2364                                  SDOperand Swp, MVT::ValueType VT) {
2365  assert(Opcode == ISD::ATOMIC_LCS && "Invalid Atomic Op");
2366  assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types");
2367  SDVTList VTs = getVTList(Cmp.getValueType(), MVT::Other);
2368  FoldingSetNodeID ID;
2369  SDOperand Ops[] = {Chain, Ptr, Cmp, Swp};
2370  AddNodeIDNode(ID, Opcode, VTs, Ops, 4);
2371  ID.AddInteger((unsigned int)VT);
2372  void* IP = 0;
2373  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2374    return SDOperand(E, 0);
2375  SDNode* N = new AtomicSDNode(Opcode, VTs, Chain, Ptr, Cmp, Swp, VT);
2376  CSEMap.InsertNode(N, IP);
2377  AllNodes.push_back(N);
2378  return SDOperand(N, 0);
2379}
2380
2381SDOperand SelectionDAG::getAtomic(unsigned Opcode, SDOperand Chain,
2382                                  SDOperand Ptr, SDOperand Val,
2383                                  MVT::ValueType VT) {
2384  assert((Opcode == ISD::ATOMIC_LAS || Opcode == ISD::ATOMIC_SWAP)
2385         && "Invalid Atomic Op");
2386  SDVTList VTs = getVTList(Val.getValueType(), MVT::Other);
2387  FoldingSetNodeID ID;
2388  SDOperand Ops[] = {Chain, Ptr, Val};
2389  AddNodeIDNode(ID, Opcode, VTs, Ops, 3);
2390  ID.AddInteger((unsigned int)VT);
2391  void* IP = 0;
2392  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2393    return SDOperand(E, 0);
2394  SDNode* N = new AtomicSDNode(Opcode, VTs, Chain, Ptr, Val, VT);
2395  CSEMap.InsertNode(N, IP);
2396  AllNodes.push_back(N);
2397  return SDOperand(N, 0);
2398}
2399
2400SDOperand SelectionDAG::getLoad(MVT::ValueType VT,
2401                                SDOperand Chain, SDOperand Ptr,
2402                                const Value *SV, int SVOffset,
2403                                bool isVolatile, unsigned Alignment) {
2404  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2405    const Type *Ty = 0;
2406    if (VT != MVT::iPTR) {
2407      Ty = MVT::getTypeForValueType(VT);
2408    } else if (SV) {
2409      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2410      assert(PT && "Value for load must be a pointer");
2411      Ty = PT->getElementType();
2412    }
2413    assert(Ty && "Could not get type information for load");
2414    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2415  }
2416  SDVTList VTs = getVTList(VT, MVT::Other);
2417  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2418  SDOperand Ops[] = { Chain, Ptr, Undef };
2419  FoldingSetNodeID ID;
2420  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
2421  ID.AddInteger(ISD::UNINDEXED);
2422  ID.AddInteger(ISD::NON_EXTLOAD);
2423  ID.AddInteger((unsigned int)VT);
2424  ID.AddInteger(Alignment);
2425  ID.AddInteger(isVolatile);
2426  void *IP = 0;
2427  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2428    return SDOperand(E, 0);
2429  SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED,
2430                             ISD::NON_EXTLOAD, VT, SV, SVOffset, Alignment,
2431                             isVolatile);
2432  CSEMap.InsertNode(N, IP);
2433  AllNodes.push_back(N);
2434  return SDOperand(N, 0);
2435}
2436
2437SDOperand SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, MVT::ValueType VT,
2438                                   SDOperand Chain, SDOperand Ptr,
2439                                   const Value *SV,
2440                                   int SVOffset, MVT::ValueType EVT,
2441                                   bool isVolatile, unsigned Alignment) {
2442  // If they are asking for an extending load from/to the same thing, return a
2443  // normal load.
2444  if (VT == EVT)
2445    return getLoad(VT, Chain, Ptr, SV, SVOffset, isVolatile, Alignment);
2446
2447  if (MVT::isVector(VT))
2448    assert(EVT == MVT::getVectorElementType(VT) && "Invalid vector extload!");
2449  else
2450    assert(MVT::getSizeInBits(EVT) < MVT::getSizeInBits(VT) &&
2451           "Should only be an extending load, not truncating!");
2452  assert((ExtType == ISD::EXTLOAD || MVT::isInteger(VT)) &&
2453         "Cannot sign/zero extend a FP/Vector load!");
2454  assert(MVT::isInteger(VT) == MVT::isInteger(EVT) &&
2455         "Cannot convert from FP to Int or Int -> FP!");
2456
2457  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2458    const Type *Ty = 0;
2459    if (VT != MVT::iPTR) {
2460      Ty = MVT::getTypeForValueType(VT);
2461    } else if (SV) {
2462      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2463      assert(PT && "Value for load must be a pointer");
2464      Ty = PT->getElementType();
2465    }
2466    assert(Ty && "Could not get type information for load");
2467    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2468  }
2469  SDVTList VTs = getVTList(VT, MVT::Other);
2470  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2471  SDOperand Ops[] = { Chain, Ptr, Undef };
2472  FoldingSetNodeID ID;
2473  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
2474  ID.AddInteger(ISD::UNINDEXED);
2475  ID.AddInteger(ExtType);
2476  ID.AddInteger((unsigned int)EVT);
2477  ID.AddInteger(Alignment);
2478  ID.AddInteger(isVolatile);
2479  void *IP = 0;
2480  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2481    return SDOperand(E, 0);
2482  SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED, ExtType, EVT,
2483                             SV, SVOffset, Alignment, isVolatile);
2484  CSEMap.InsertNode(N, IP);
2485  AllNodes.push_back(N);
2486  return SDOperand(N, 0);
2487}
2488
2489SDOperand
2490SelectionDAG::getIndexedLoad(SDOperand OrigLoad, SDOperand Base,
2491                             SDOperand Offset, ISD::MemIndexedMode AM) {
2492  LoadSDNode *LD = cast<LoadSDNode>(OrigLoad);
2493  assert(LD->getOffset().getOpcode() == ISD::UNDEF &&
2494         "Load is already a indexed load!");
2495  MVT::ValueType VT = OrigLoad.getValueType();
2496  SDVTList VTs = getVTList(VT, Base.getValueType(), MVT::Other);
2497  SDOperand Ops[] = { LD->getChain(), Base, Offset };
2498  FoldingSetNodeID ID;
2499  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
2500  ID.AddInteger(AM);
2501  ID.AddInteger(LD->getExtensionType());
2502  ID.AddInteger((unsigned int)(LD->getMemoryVT()));
2503  ID.AddInteger(LD->getAlignment());
2504  ID.AddInteger(LD->isVolatile());
2505  void *IP = 0;
2506  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2507    return SDOperand(E, 0);
2508  SDNode *N = new LoadSDNode(Ops, VTs, AM,
2509                             LD->getExtensionType(), LD->getMemoryVT(),
2510                             LD->getSrcValue(), LD->getSrcValueOffset(),
2511                             LD->getAlignment(), LD->isVolatile());
2512  CSEMap.InsertNode(N, IP);
2513  AllNodes.push_back(N);
2514  return SDOperand(N, 0);
2515}
2516
2517SDOperand SelectionDAG::getStore(SDOperand Chain, SDOperand Val,
2518                                 SDOperand Ptr, const Value *SV, int SVOffset,
2519                                 bool isVolatile, unsigned Alignment) {
2520  MVT::ValueType VT = Val.getValueType();
2521
2522  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2523    const Type *Ty = 0;
2524    if (VT != MVT::iPTR) {
2525      Ty = MVT::getTypeForValueType(VT);
2526    } else if (SV) {
2527      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2528      assert(PT && "Value for store must be a pointer");
2529      Ty = PT->getElementType();
2530    }
2531    assert(Ty && "Could not get type information for store");
2532    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2533  }
2534  SDVTList VTs = getVTList(MVT::Other);
2535  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2536  SDOperand Ops[] = { Chain, Val, Ptr, Undef };
2537  FoldingSetNodeID ID;
2538  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
2539  ID.AddInteger(ISD::UNINDEXED);
2540  ID.AddInteger(false);
2541  ID.AddInteger((unsigned int)VT);
2542  ID.AddInteger(Alignment);
2543  ID.AddInteger(isVolatile);
2544  void *IP = 0;
2545  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2546    return SDOperand(E, 0);
2547  SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, false,
2548                              VT, SV, SVOffset, Alignment, isVolatile);
2549  CSEMap.InsertNode(N, IP);
2550  AllNodes.push_back(N);
2551  return SDOperand(N, 0);
2552}
2553
2554SDOperand SelectionDAG::getTruncStore(SDOperand Chain, SDOperand Val,
2555                                      SDOperand Ptr, const Value *SV,
2556                                      int SVOffset, MVT::ValueType SVT,
2557                                      bool isVolatile, unsigned Alignment) {
2558  MVT::ValueType VT = Val.getValueType();
2559
2560  if (VT == SVT)
2561    return getStore(Chain, Val, Ptr, SV, SVOffset, isVolatile, Alignment);
2562
2563  assert(MVT::getSizeInBits(VT) > MVT::getSizeInBits(SVT) &&
2564         "Not a truncation?");
2565  assert(MVT::isInteger(VT) == MVT::isInteger(SVT) &&
2566         "Can't do FP-INT conversion!");
2567
2568  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2569    const Type *Ty = 0;
2570    if (VT != MVT::iPTR) {
2571      Ty = MVT::getTypeForValueType(VT);
2572    } else if (SV) {
2573      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2574      assert(PT && "Value for store must be a pointer");
2575      Ty = PT->getElementType();
2576    }
2577    assert(Ty && "Could not get type information for store");
2578    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2579  }
2580  SDVTList VTs = getVTList(MVT::Other);
2581  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2582  SDOperand Ops[] = { Chain, Val, Ptr, Undef };
2583  FoldingSetNodeID ID;
2584  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
2585  ID.AddInteger(ISD::UNINDEXED);
2586  ID.AddInteger(1);
2587  ID.AddInteger((unsigned int)SVT);
2588  ID.AddInteger(Alignment);
2589  ID.AddInteger(isVolatile);
2590  void *IP = 0;
2591  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2592    return SDOperand(E, 0);
2593  SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, true,
2594                              SVT, SV, SVOffset, Alignment, isVolatile);
2595  CSEMap.InsertNode(N, IP);
2596  AllNodes.push_back(N);
2597  return SDOperand(N, 0);
2598}
2599
2600SDOperand
2601SelectionDAG::getIndexedStore(SDOperand OrigStore, SDOperand Base,
2602                              SDOperand Offset, ISD::MemIndexedMode AM) {
2603  StoreSDNode *ST = cast<StoreSDNode>(OrigStore);
2604  assert(ST->getOffset().getOpcode() == ISD::UNDEF &&
2605         "Store is already a indexed store!");
2606  SDVTList VTs = getVTList(Base.getValueType(), MVT::Other);
2607  SDOperand Ops[] = { ST->getChain(), ST->getValue(), Base, Offset };
2608  FoldingSetNodeID ID;
2609  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
2610  ID.AddInteger(AM);
2611  ID.AddInteger(ST->isTruncatingStore());
2612  ID.AddInteger((unsigned int)(ST->getMemoryVT()));
2613  ID.AddInteger(ST->getAlignment());
2614  ID.AddInteger(ST->isVolatile());
2615  void *IP = 0;
2616  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2617    return SDOperand(E, 0);
2618  SDNode *N = new StoreSDNode(Ops, VTs, AM,
2619                              ST->isTruncatingStore(), ST->getMemoryVT(),
2620                              ST->getSrcValue(), ST->getSrcValueOffset(),
2621                              ST->getAlignment(), ST->isVolatile());
2622  CSEMap.InsertNode(N, IP);
2623  AllNodes.push_back(N);
2624  return SDOperand(N, 0);
2625}
2626
2627SDOperand SelectionDAG::getVAArg(MVT::ValueType VT,
2628                                 SDOperand Chain, SDOperand Ptr,
2629                                 SDOperand SV) {
2630  SDOperand Ops[] = { Chain, Ptr, SV };
2631  return getNode(ISD::VAARG, getVTList(VT, MVT::Other), Ops, 3);
2632}
2633
2634SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2635                                const SDOperand *Ops, unsigned NumOps) {
2636  switch (NumOps) {
2637  case 0: return getNode(Opcode, VT);
2638  case 1: return getNode(Opcode, VT, Ops[0]);
2639  case 2: return getNode(Opcode, VT, Ops[0], Ops[1]);
2640  case 3: return getNode(Opcode, VT, Ops[0], Ops[1], Ops[2]);
2641  default: break;
2642  }
2643
2644  switch (Opcode) {
2645  default: break;
2646  case ISD::SELECT_CC: {
2647    assert(NumOps == 5 && "SELECT_CC takes 5 operands!");
2648    assert(Ops[0].getValueType() == Ops[1].getValueType() &&
2649           "LHS and RHS of condition must have same type!");
2650    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
2651           "True and False arms of SelectCC must have same type!");
2652    assert(Ops[2].getValueType() == VT &&
2653           "select_cc node must be of same type as true and false value!");
2654    break;
2655  }
2656  case ISD::BR_CC: {
2657    assert(NumOps == 5 && "BR_CC takes 5 operands!");
2658    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
2659           "LHS/RHS of comparison should match types!");
2660    break;
2661  }
2662  }
2663
2664  // Memoize nodes.
2665  SDNode *N;
2666  SDVTList VTs = getVTList(VT);
2667  if (VT != MVT::Flag) {
2668    FoldingSetNodeID ID;
2669    AddNodeIDNode(ID, Opcode, VTs, Ops, NumOps);
2670    void *IP = 0;
2671    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2672      return SDOperand(E, 0);
2673    N = new SDNode(Opcode, VTs, Ops, NumOps);
2674    CSEMap.InsertNode(N, IP);
2675  } else {
2676    N = new SDNode(Opcode, VTs, Ops, NumOps);
2677  }
2678  AllNodes.push_back(N);
2679  return SDOperand(N, 0);
2680}
2681
2682SDOperand SelectionDAG::getNode(unsigned Opcode,
2683                                std::vector<MVT::ValueType> &ResultTys,
2684                                const SDOperand *Ops, unsigned NumOps) {
2685  return getNode(Opcode, getNodeValueTypes(ResultTys), ResultTys.size(),
2686                 Ops, NumOps);
2687}
2688
2689SDOperand SelectionDAG::getNode(unsigned Opcode,
2690                                const MVT::ValueType *VTs, unsigned NumVTs,
2691                                const SDOperand *Ops, unsigned NumOps) {
2692  if (NumVTs == 1)
2693    return getNode(Opcode, VTs[0], Ops, NumOps);
2694  return getNode(Opcode, makeVTList(VTs, NumVTs), Ops, NumOps);
2695}
2696
2697SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2698                                const SDOperand *Ops, unsigned NumOps) {
2699  if (VTList.NumVTs == 1)
2700    return getNode(Opcode, VTList.VTs[0], Ops, NumOps);
2701
2702  switch (Opcode) {
2703  // FIXME: figure out how to safely handle things like
2704  // int foo(int x) { return 1 << (x & 255); }
2705  // int bar() { return foo(256); }
2706#if 0
2707  case ISD::SRA_PARTS:
2708  case ISD::SRL_PARTS:
2709  case ISD::SHL_PARTS:
2710    if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG &&
2711        cast<VTSDNode>(N3.getOperand(1))->getVT() != MVT::i1)
2712      return getNode(Opcode, VT, N1, N2, N3.getOperand(0));
2713    else if (N3.getOpcode() == ISD::AND)
2714      if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N3.getOperand(1))) {
2715        // If the and is only masking out bits that cannot effect the shift,
2716        // eliminate the and.
2717        unsigned NumBits = MVT::getSizeInBits(VT)*2;
2718        if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1)
2719          return getNode(Opcode, VT, N1, N2, N3.getOperand(0));
2720      }
2721    break;
2722#endif
2723  }
2724
2725  // Memoize the node unless it returns a flag.
2726  SDNode *N;
2727  if (VTList.VTs[VTList.NumVTs-1] != MVT::Flag) {
2728    FoldingSetNodeID ID;
2729    AddNodeIDNode(ID, Opcode, VTList, Ops, NumOps);
2730    void *IP = 0;
2731    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2732      return SDOperand(E, 0);
2733    if (NumOps == 1)
2734      N = new UnarySDNode(Opcode, VTList, Ops[0]);
2735    else if (NumOps == 2)
2736      N = new BinarySDNode(Opcode, VTList, Ops[0], Ops[1]);
2737    else if (NumOps == 3)
2738      N = new TernarySDNode(Opcode, VTList, Ops[0], Ops[1], Ops[2]);
2739    else
2740      N = new SDNode(Opcode, VTList, Ops, NumOps);
2741    CSEMap.InsertNode(N, IP);
2742  } else {
2743    if (NumOps == 1)
2744      N = new UnarySDNode(Opcode, VTList, Ops[0]);
2745    else if (NumOps == 2)
2746      N = new BinarySDNode(Opcode, VTList, Ops[0], Ops[1]);
2747    else if (NumOps == 3)
2748      N = new TernarySDNode(Opcode, VTList, Ops[0], Ops[1], Ops[2]);
2749    else
2750      N = new SDNode(Opcode, VTList, Ops, NumOps);
2751  }
2752  AllNodes.push_back(N);
2753  return SDOperand(N, 0);
2754}
2755
2756SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList) {
2757  return getNode(Opcode, VTList, 0, 0);
2758}
2759
2760SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2761                                SDOperand N1) {
2762  SDOperand Ops[] = { N1 };
2763  return getNode(Opcode, VTList, Ops, 1);
2764}
2765
2766SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2767                                SDOperand N1, SDOperand N2) {
2768  SDOperand Ops[] = { N1, N2 };
2769  return getNode(Opcode, VTList, Ops, 2);
2770}
2771
2772SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2773                                SDOperand N1, SDOperand N2, SDOperand N3) {
2774  SDOperand Ops[] = { N1, N2, N3 };
2775  return getNode(Opcode, VTList, Ops, 3);
2776}
2777
2778SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2779                                SDOperand N1, SDOperand N2, SDOperand N3,
2780                                SDOperand N4) {
2781  SDOperand Ops[] = { N1, N2, N3, N4 };
2782  return getNode(Opcode, VTList, Ops, 4);
2783}
2784
2785SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2786                                SDOperand N1, SDOperand N2, SDOperand N3,
2787                                SDOperand N4, SDOperand N5) {
2788  SDOperand Ops[] = { N1, N2, N3, N4, N5 };
2789  return getNode(Opcode, VTList, Ops, 5);
2790}
2791
2792SDVTList SelectionDAG::getVTList(MVT::ValueType VT) {
2793  return makeVTList(SDNode::getValueTypeList(VT), 1);
2794}
2795
2796SDVTList SelectionDAG::getVTList(MVT::ValueType VT1, MVT::ValueType VT2) {
2797  for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
2798       E = VTList.end(); I != E; ++I) {
2799    if (I->size() == 2 && (*I)[0] == VT1 && (*I)[1] == VT2)
2800      return makeVTList(&(*I)[0], 2);
2801  }
2802  std::vector<MVT::ValueType> V;
2803  V.push_back(VT1);
2804  V.push_back(VT2);
2805  VTList.push_front(V);
2806  return makeVTList(&(*VTList.begin())[0], 2);
2807}
2808SDVTList SelectionDAG::getVTList(MVT::ValueType VT1, MVT::ValueType VT2,
2809                                 MVT::ValueType VT3) {
2810  for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
2811       E = VTList.end(); I != E; ++I) {
2812    if (I->size() == 3 && (*I)[0] == VT1 && (*I)[1] == VT2 &&
2813        (*I)[2] == VT3)
2814      return makeVTList(&(*I)[0], 3);
2815  }
2816  std::vector<MVT::ValueType> V;
2817  V.push_back(VT1);
2818  V.push_back(VT2);
2819  V.push_back(VT3);
2820  VTList.push_front(V);
2821  return makeVTList(&(*VTList.begin())[0], 3);
2822}
2823
2824SDVTList SelectionDAG::getVTList(const MVT::ValueType *VTs, unsigned NumVTs) {
2825  switch (NumVTs) {
2826    case 0: assert(0 && "Cannot have nodes without results!");
2827    case 1: return getVTList(VTs[0]);
2828    case 2: return getVTList(VTs[0], VTs[1]);
2829    case 3: return getVTList(VTs[0], VTs[1], VTs[2]);
2830    default: break;
2831  }
2832
2833  for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
2834       E = VTList.end(); I != E; ++I) {
2835    if (I->size() != NumVTs || VTs[0] != (*I)[0] || VTs[1] != (*I)[1]) continue;
2836
2837    bool NoMatch = false;
2838    for (unsigned i = 2; i != NumVTs; ++i)
2839      if (VTs[i] != (*I)[i]) {
2840        NoMatch = true;
2841        break;
2842      }
2843    if (!NoMatch)
2844      return makeVTList(&*I->begin(), NumVTs);
2845  }
2846
2847  VTList.push_front(std::vector<MVT::ValueType>(VTs, VTs+NumVTs));
2848  return makeVTList(&*VTList.begin()->begin(), NumVTs);
2849}
2850
2851
2852/// UpdateNodeOperands - *Mutate* the specified node in-place to have the
2853/// specified operands.  If the resultant node already exists in the DAG,
2854/// this does not modify the specified node, instead it returns the node that
2855/// already exists.  If the resultant node does not exist in the DAG, the
2856/// input node is returned.  As a degenerate case, if you specify the same
2857/// input operands as the node already has, the input node is returned.
2858SDOperand SelectionDAG::
2859UpdateNodeOperands(SDOperand InN, SDOperand Op) {
2860  SDNode *N = InN.Val;
2861  assert(N->getNumOperands() == 1 && "Update with wrong number of operands");
2862
2863  // Check to see if there is no change.
2864  if (Op == N->getOperand(0)) return InN;
2865
2866  // See if the modified node already exists.
2867  void *InsertPos = 0;
2868  if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos))
2869    return SDOperand(Existing, InN.ResNo);
2870
2871  // Nope it doesn't.  Remove the node from it's current place in the maps.
2872  if (InsertPos)
2873    RemoveNodeFromCSEMaps(N);
2874
2875  // Now we update the operands.
2876  N->OperandList[0].Val->removeUser(N);
2877  Op.Val->addUser(N);
2878  N->OperandList[0] = Op;
2879
2880  // If this gets put into a CSE map, add it.
2881  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2882  return InN;
2883}
2884
2885SDOperand SelectionDAG::
2886UpdateNodeOperands(SDOperand InN, SDOperand Op1, SDOperand Op2) {
2887  SDNode *N = InN.Val;
2888  assert(N->getNumOperands() == 2 && "Update with wrong number of operands");
2889
2890  // Check to see if there is no change.
2891  if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1))
2892    return InN;   // No operands changed, just return the input node.
2893
2894  // See if the modified node already exists.
2895  void *InsertPos = 0;
2896  if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos))
2897    return SDOperand(Existing, InN.ResNo);
2898
2899  // Nope it doesn't.  Remove the node from it's current place in the maps.
2900  if (InsertPos)
2901    RemoveNodeFromCSEMaps(N);
2902
2903  // Now we update the operands.
2904  if (N->OperandList[0] != Op1) {
2905    N->OperandList[0].Val->removeUser(N);
2906    Op1.Val->addUser(N);
2907    N->OperandList[0] = Op1;
2908  }
2909  if (N->OperandList[1] != Op2) {
2910    N->OperandList[1].Val->removeUser(N);
2911    Op2.Val->addUser(N);
2912    N->OperandList[1] = Op2;
2913  }
2914
2915  // If this gets put into a CSE map, add it.
2916  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2917  return InN;
2918}
2919
2920SDOperand SelectionDAG::
2921UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2, SDOperand Op3) {
2922  SDOperand Ops[] = { Op1, Op2, Op3 };
2923  return UpdateNodeOperands(N, Ops, 3);
2924}
2925
2926SDOperand SelectionDAG::
2927UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2,
2928                   SDOperand Op3, SDOperand Op4) {
2929  SDOperand Ops[] = { Op1, Op2, Op3, Op4 };
2930  return UpdateNodeOperands(N, Ops, 4);
2931}
2932
2933SDOperand SelectionDAG::
2934UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2,
2935                   SDOperand Op3, SDOperand Op4, SDOperand Op5) {
2936  SDOperand Ops[] = { Op1, Op2, Op3, Op4, Op5 };
2937  return UpdateNodeOperands(N, Ops, 5);
2938}
2939
2940
2941SDOperand SelectionDAG::
2942UpdateNodeOperands(SDOperand InN, SDOperand *Ops, unsigned NumOps) {
2943  SDNode *N = InN.Val;
2944  assert(N->getNumOperands() == NumOps &&
2945         "Update with wrong number of operands");
2946
2947  // Check to see if there is no change.
2948  bool AnyChange = false;
2949  for (unsigned i = 0; i != NumOps; ++i) {
2950    if (Ops[i] != N->getOperand(i)) {
2951      AnyChange = true;
2952      break;
2953    }
2954  }
2955
2956  // No operands changed, just return the input node.
2957  if (!AnyChange) return InN;
2958
2959  // See if the modified node already exists.
2960  void *InsertPos = 0;
2961  if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, NumOps, InsertPos))
2962    return SDOperand(Existing, InN.ResNo);
2963
2964  // Nope it doesn't.  Remove the node from it's current place in the maps.
2965  if (InsertPos)
2966    RemoveNodeFromCSEMaps(N);
2967
2968  // Now we update the operands.
2969  for (unsigned i = 0; i != NumOps; ++i) {
2970    if (N->OperandList[i] != Ops[i]) {
2971      N->OperandList[i].Val->removeUser(N);
2972      Ops[i].Val->addUser(N);
2973      N->OperandList[i] = Ops[i];
2974    }
2975  }
2976
2977  // If this gets put into a CSE map, add it.
2978  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2979  return InN;
2980}
2981
2982
2983/// MorphNodeTo - This frees the operands of the current node, resets the
2984/// opcode, types, and operands to the specified value.  This should only be
2985/// used by the SelectionDAG class.
2986void SDNode::MorphNodeTo(unsigned Opc, SDVTList L,
2987                         const SDOperand *Ops, unsigned NumOps) {
2988  NodeType = Opc;
2989  ValueList = L.VTs;
2990  NumValues = L.NumVTs;
2991
2992  // Clear the operands list, updating used nodes to remove this from their
2993  // use list.
2994  for (op_iterator I = op_begin(), E = op_end(); I != E; ++I)
2995    I->Val->removeUser(this);
2996
2997  // If NumOps is larger than the # of operands we currently have, reallocate
2998  // the operand list.
2999  if (NumOps > NumOperands) {
3000    if (OperandsNeedDelete)
3001      delete [] OperandList;
3002    OperandList = new SDOperand[NumOps];
3003    OperandsNeedDelete = true;
3004  }
3005
3006  // Assign the new operands.
3007  NumOperands = NumOps;
3008
3009  for (unsigned i = 0, e = NumOps; i != e; ++i) {
3010    OperandList[i] = Ops[i];
3011    SDNode *N = OperandList[i].Val;
3012    N->Uses.push_back(this);
3013  }
3014}
3015
3016/// SelectNodeTo - These are used for target selectors to *mutate* the
3017/// specified node to have the specified return type, Target opcode, and
3018/// operands.  Note that target opcodes are stored as
3019/// ISD::BUILTIN_OP_END+TargetOpcode in the node opcode field.
3020///
3021/// Note that SelectNodeTo returns the resultant node.  If there is already a
3022/// node of the specified opcode and operands, it returns that node instead of
3023/// the current one.
3024SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3025                                   MVT::ValueType VT) {
3026  SDVTList VTs = getVTList(VT);
3027  FoldingSetNodeID ID;
3028  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, 0, 0);
3029  void *IP = 0;
3030  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3031    return ON;
3032
3033  RemoveNodeFromCSEMaps(N);
3034
3035  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, 0, 0);
3036
3037  CSEMap.InsertNode(N, IP);
3038  return N;
3039}
3040
3041SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3042                                   MVT::ValueType VT, SDOperand Op1) {
3043  // If an identical node already exists, use it.
3044  SDVTList VTs = getVTList(VT);
3045  SDOperand Ops[] = { Op1 };
3046
3047  FoldingSetNodeID ID;
3048  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 1);
3049  void *IP = 0;
3050  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3051    return ON;
3052
3053  RemoveNodeFromCSEMaps(N);
3054  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 1);
3055  CSEMap.InsertNode(N, IP);
3056  return N;
3057}
3058
3059SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3060                                   MVT::ValueType VT, SDOperand Op1,
3061                                   SDOperand Op2) {
3062  // If an identical node already exists, use it.
3063  SDVTList VTs = getVTList(VT);
3064  SDOperand Ops[] = { Op1, Op2 };
3065
3066  FoldingSetNodeID ID;
3067  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
3068  void *IP = 0;
3069  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3070    return ON;
3071
3072  RemoveNodeFromCSEMaps(N);
3073
3074  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
3075
3076  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3077  return N;
3078}
3079
3080SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3081                                   MVT::ValueType VT, SDOperand Op1,
3082                                   SDOperand Op2, SDOperand Op3) {
3083  // If an identical node already exists, use it.
3084  SDVTList VTs = getVTList(VT);
3085  SDOperand Ops[] = { Op1, Op2, Op3 };
3086  FoldingSetNodeID ID;
3087  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
3088  void *IP = 0;
3089  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3090    return ON;
3091
3092  RemoveNodeFromCSEMaps(N);
3093
3094  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
3095
3096  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3097  return N;
3098}
3099
3100SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3101                                   MVT::ValueType VT, const SDOperand *Ops,
3102                                   unsigned NumOps) {
3103  // If an identical node already exists, use it.
3104  SDVTList VTs = getVTList(VT);
3105  FoldingSetNodeID ID;
3106  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, NumOps);
3107  void *IP = 0;
3108  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3109    return ON;
3110
3111  RemoveNodeFromCSEMaps(N);
3112  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, NumOps);
3113
3114  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3115  return N;
3116}
3117
3118SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3119                                   MVT::ValueType VT1, MVT::ValueType VT2,
3120                                   SDOperand Op1, SDOperand Op2) {
3121  SDVTList VTs = getVTList(VT1, VT2);
3122  FoldingSetNodeID ID;
3123  SDOperand Ops[] = { Op1, Op2 };
3124  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
3125  void *IP = 0;
3126  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3127    return ON;
3128
3129  RemoveNodeFromCSEMaps(N);
3130  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
3131  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3132  return N;
3133}
3134
3135SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3136                                   MVT::ValueType VT1, MVT::ValueType VT2,
3137                                   SDOperand Op1, SDOperand Op2,
3138                                   SDOperand Op3) {
3139  // If an identical node already exists, use it.
3140  SDVTList VTs = getVTList(VT1, VT2);
3141  SDOperand Ops[] = { Op1, Op2, Op3 };
3142  FoldingSetNodeID ID;
3143  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
3144  void *IP = 0;
3145  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3146    return ON;
3147
3148  RemoveNodeFromCSEMaps(N);
3149
3150  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
3151  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3152  return N;
3153}
3154
3155
3156/// getTargetNode - These are used for target selectors to create a new node
3157/// with specified return type(s), target opcode, and operands.
3158///
3159/// Note that getTargetNode returns the resultant node.  If there is already a
3160/// node of the specified opcode and operands, it returns that node instead of
3161/// the current one.
3162SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT) {
3163  return getNode(ISD::BUILTIN_OP_END+Opcode, VT).Val;
3164}
3165SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
3166                                    SDOperand Op1) {
3167  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1).Val;
3168}
3169SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
3170                                    SDOperand Op1, SDOperand Op2) {
3171  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1, Op2).Val;
3172}
3173SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
3174                                    SDOperand Op1, SDOperand Op2,
3175                                    SDOperand Op3) {
3176  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1, Op2, Op3).Val;
3177}
3178SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
3179                                    const SDOperand *Ops, unsigned NumOps) {
3180  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Ops, NumOps).Val;
3181}
3182SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3183                                    MVT::ValueType VT2) {
3184  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3185  SDOperand Op;
3186  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, &Op, 0).Val;
3187}
3188SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3189                                    MVT::ValueType VT2, SDOperand Op1) {
3190  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3191  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, &Op1, 1).Val;
3192}
3193SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3194                                    MVT::ValueType VT2, SDOperand Op1,
3195                                    SDOperand Op2) {
3196  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3197  SDOperand Ops[] = { Op1, Op2 };
3198  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, 2).Val;
3199}
3200SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3201                                    MVT::ValueType VT2, SDOperand Op1,
3202                                    SDOperand Op2, SDOperand Op3) {
3203  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3204  SDOperand Ops[] = { Op1, Op2, Op3 };
3205  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, 3).Val;
3206}
3207SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3208                                    MVT::ValueType VT2,
3209                                    const SDOperand *Ops, unsigned NumOps) {
3210  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3211  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, NumOps).Val;
3212}
3213SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3214                                    MVT::ValueType VT2, MVT::ValueType VT3,
3215                                    SDOperand Op1, SDOperand Op2) {
3216  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
3217  SDOperand Ops[] = { Op1, Op2 };
3218  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 2).Val;
3219}
3220SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3221                                    MVT::ValueType VT2, MVT::ValueType VT3,
3222                                    SDOperand Op1, SDOperand Op2,
3223                                    SDOperand Op3) {
3224  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
3225  SDOperand Ops[] = { Op1, Op2, Op3 };
3226  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 3).Val;
3227}
3228SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3229                                    MVT::ValueType VT2, MVT::ValueType VT3,
3230                                    const SDOperand *Ops, unsigned NumOps) {
3231  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
3232  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, NumOps).Val;
3233}
3234SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3235                                    MVT::ValueType VT2, MVT::ValueType VT3,
3236                                    MVT::ValueType VT4,
3237                                    const SDOperand *Ops, unsigned NumOps) {
3238  std::vector<MVT::ValueType> VTList;
3239  VTList.push_back(VT1);
3240  VTList.push_back(VT2);
3241  VTList.push_back(VT3);
3242  VTList.push_back(VT4);
3243  const MVT::ValueType *VTs = getNodeValueTypes(VTList);
3244  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 4, Ops, NumOps).Val;
3245}
3246SDNode *SelectionDAG::getTargetNode(unsigned Opcode,
3247                                    std::vector<MVT::ValueType> &ResultTys,
3248                                    const SDOperand *Ops, unsigned NumOps) {
3249  const MVT::ValueType *VTs = getNodeValueTypes(ResultTys);
3250  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, ResultTys.size(),
3251                 Ops, NumOps).Val;
3252}
3253
3254
3255/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
3256/// This can cause recursive merging of nodes in the DAG.
3257///
3258/// This version assumes From has a single result value.
3259///
3260void SelectionDAG::ReplaceAllUsesWith(SDOperand FromN, SDOperand To,
3261                                      DAGUpdateListener *UpdateListener) {
3262  SDNode *From = FromN.Val;
3263  assert(From->getNumValues() == 1 && FromN.ResNo == 0 &&
3264         "Cannot replace with this method!");
3265  assert(From != To.Val && "Cannot replace uses of with self");
3266
3267  while (!From->use_empty()) {
3268    // Process users until they are all gone.
3269    SDNode *U = *From->use_begin();
3270
3271    // This node is about to morph, remove its old self from the CSE maps.
3272    RemoveNodeFromCSEMaps(U);
3273
3274    for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
3275         I != E; ++I)
3276      if (I->Val == From) {
3277        From->removeUser(U);
3278        *I = To;
3279        To.Val->addUser(U);
3280      }
3281
3282    // Now that we have modified U, add it back to the CSE maps.  If it already
3283    // exists there, recursively merge the results together.
3284    if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
3285      ReplaceAllUsesWith(U, Existing, UpdateListener);
3286      // U is now dead.  Inform the listener if it exists and delete it.
3287      if (UpdateListener)
3288        UpdateListener->NodeDeleted(U);
3289      DeleteNodeNotInCSEMaps(U);
3290    } else {
3291      // If the node doesn't already exist, we updated it.  Inform a listener if
3292      // it exists.
3293      if (UpdateListener)
3294        UpdateListener->NodeUpdated(U);
3295    }
3296  }
3297}
3298
3299/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
3300/// This can cause recursive merging of nodes in the DAG.
3301///
3302/// This version assumes From/To have matching types and numbers of result
3303/// values.
3304///
3305void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To,
3306                                      DAGUpdateListener *UpdateListener) {
3307  assert(From != To && "Cannot replace uses of with self");
3308  assert(From->getNumValues() == To->getNumValues() &&
3309         "Cannot use this version of ReplaceAllUsesWith!");
3310  if (From->getNumValues() == 1)   // If possible, use the faster version.
3311    return ReplaceAllUsesWith(SDOperand(From, 0), SDOperand(To, 0),
3312                              UpdateListener);
3313
3314  while (!From->use_empty()) {
3315    // Process users until they are all gone.
3316    SDNode *U = *From->use_begin();
3317
3318    // This node is about to morph, remove its old self from the CSE maps.
3319    RemoveNodeFromCSEMaps(U);
3320
3321    for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
3322         I != E; ++I)
3323      if (I->Val == From) {
3324        From->removeUser(U);
3325        I->Val = To;
3326        To->addUser(U);
3327      }
3328
3329    // Now that we have modified U, add it back to the CSE maps.  If it already
3330    // exists there, recursively merge the results together.
3331    if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
3332      ReplaceAllUsesWith(U, Existing, UpdateListener);
3333      // U is now dead.  Inform the listener if it exists and delete it.
3334      if (UpdateListener)
3335        UpdateListener->NodeDeleted(U);
3336      DeleteNodeNotInCSEMaps(U);
3337    } else {
3338      // If the node doesn't already exist, we updated it.  Inform a listener if
3339      // it exists.
3340      if (UpdateListener)
3341        UpdateListener->NodeUpdated(U);
3342    }
3343  }
3344}
3345
3346/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
3347/// This can cause recursive merging of nodes in the DAG.
3348///
3349/// This version can replace From with any result values.  To must match the
3350/// number and types of values returned by From.
3351void SelectionDAG::ReplaceAllUsesWith(SDNode *From,
3352                                      const SDOperand *To,
3353                                      DAGUpdateListener *UpdateListener) {
3354  if (From->getNumValues() == 1)  // Handle the simple case efficiently.
3355    return ReplaceAllUsesWith(SDOperand(From, 0), To[0], UpdateListener);
3356
3357  while (!From->use_empty()) {
3358    // Process users until they are all gone.
3359    SDNode *U = *From->use_begin();
3360
3361    // This node is about to morph, remove its old self from the CSE maps.
3362    RemoveNodeFromCSEMaps(U);
3363
3364    for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
3365         I != E; ++I)
3366      if (I->Val == From) {
3367        const SDOperand &ToOp = To[I->ResNo];
3368        From->removeUser(U);
3369        *I = ToOp;
3370        ToOp.Val->addUser(U);
3371      }
3372
3373    // Now that we have modified U, add it back to the CSE maps.  If it already
3374    // exists there, recursively merge the results together.
3375    if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
3376      ReplaceAllUsesWith(U, Existing, UpdateListener);
3377      // U is now dead.  Inform the listener if it exists and delete it.
3378      if (UpdateListener)
3379        UpdateListener->NodeDeleted(U);
3380      DeleteNodeNotInCSEMaps(U);
3381    } else {
3382      // If the node doesn't already exist, we updated it.  Inform a listener if
3383      // it exists.
3384      if (UpdateListener)
3385        UpdateListener->NodeUpdated(U);
3386    }
3387  }
3388}
3389
3390namespace {
3391  /// ChainedSetUpdaterListener - This class is a DAGUpdateListener that removes
3392  /// any deleted nodes from the set passed into its constructor and recursively
3393  /// notifies another update listener if specified.
3394  class ChainedSetUpdaterListener :
3395  public SelectionDAG::DAGUpdateListener {
3396    SmallSetVector<SDNode*, 16> &Set;
3397    SelectionDAG::DAGUpdateListener *Chain;
3398  public:
3399    ChainedSetUpdaterListener(SmallSetVector<SDNode*, 16> &set,
3400                              SelectionDAG::DAGUpdateListener *chain)
3401      : Set(set), Chain(chain) {}
3402
3403    virtual void NodeDeleted(SDNode *N) {
3404      Set.remove(N);
3405      if (Chain) Chain->NodeDeleted(N);
3406    }
3407    virtual void NodeUpdated(SDNode *N) {
3408      if (Chain) Chain->NodeUpdated(N);
3409    }
3410  };
3411}
3412
3413/// ReplaceAllUsesOfValueWith - Replace any uses of From with To, leaving
3414/// uses of other values produced by From.Val alone.  The Deleted vector is
3415/// handled the same way as for ReplaceAllUsesWith.
3416void SelectionDAG::ReplaceAllUsesOfValueWith(SDOperand From, SDOperand To,
3417                                             DAGUpdateListener *UpdateListener){
3418  assert(From != To && "Cannot replace a value with itself");
3419
3420  // Handle the simple, trivial, case efficiently.
3421  if (From.Val->getNumValues() == 1) {
3422    ReplaceAllUsesWith(From, To, UpdateListener);
3423    return;
3424  }
3425
3426  if (From.use_empty()) return;
3427
3428  // Get all of the users of From.Val.  We want these in a nice,
3429  // deterministically ordered and uniqued set, so we use a SmallSetVector.
3430  SmallSetVector<SDNode*, 16> Users(From.Val->use_begin(), From.Val->use_end());
3431
3432  // When one of the recursive merges deletes nodes from the graph, we need to
3433  // make sure that UpdateListener is notified *and* that the node is removed
3434  // from Users if present.  CSUL does this.
3435  ChainedSetUpdaterListener CSUL(Users, UpdateListener);
3436
3437  while (!Users.empty()) {
3438    // We know that this user uses some value of From.  If it is the right
3439    // value, update it.
3440    SDNode *User = Users.back();
3441    Users.pop_back();
3442
3443    // Scan for an operand that matches From.
3444    SDOperand *Op = User->OperandList, *E = User->OperandList+User->NumOperands;
3445    for (; Op != E; ++Op)
3446      if (*Op == From) break;
3447
3448    // If there are no matches, the user must use some other result of From.
3449    if (Op == E) continue;
3450
3451    // Okay, we know this user needs to be updated.  Remove its old self
3452    // from the CSE maps.
3453    RemoveNodeFromCSEMaps(User);
3454
3455    // Update all operands that match "From" in case there are multiple uses.
3456    for (; Op != E; ++Op) {
3457      if (*Op == From) {
3458        From.Val->removeUser(User);
3459        *Op = To;
3460        To.Val->addUser(User);
3461      }
3462    }
3463
3464    // Now that we have modified User, add it back to the CSE maps.  If it
3465    // already exists there, recursively merge the results together.
3466    SDNode *Existing = AddNonLeafNodeToCSEMaps(User);
3467    if (!Existing) {
3468      if (UpdateListener) UpdateListener->NodeUpdated(User);
3469      continue;  // Continue on to next user.
3470    }
3471
3472    // If there was already an existing matching node, use ReplaceAllUsesWith
3473    // to replace the dead one with the existing one.  This can cause
3474    // recursive merging of other unrelated nodes down the line.  The merging
3475    // can cause deletion of nodes that used the old value.  To handle this, we
3476    // use CSUL to remove them from the Users set.
3477    ReplaceAllUsesWith(User, Existing, &CSUL);
3478
3479    // User is now dead.  Notify a listener if present.
3480    if (UpdateListener) UpdateListener->NodeDeleted(User);
3481    DeleteNodeNotInCSEMaps(User);
3482  }
3483}
3484
3485
3486/// AssignNodeIds - Assign a unique node id for each node in the DAG based on
3487/// their allnodes order. It returns the maximum id.
3488unsigned SelectionDAG::AssignNodeIds() {
3489  unsigned Id = 0;
3490  for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I){
3491    SDNode *N = I;
3492    N->setNodeId(Id++);
3493  }
3494  return Id;
3495}
3496
3497/// AssignTopologicalOrder - Assign a unique node id for each node in the DAG
3498/// based on their topological order. It returns the maximum id and a vector
3499/// of the SDNodes* in assigned order by reference.
3500unsigned SelectionDAG::AssignTopologicalOrder(std::vector<SDNode*> &TopOrder) {
3501  unsigned DAGSize = AllNodes.size();
3502  std::vector<unsigned> InDegree(DAGSize);
3503  std::vector<SDNode*> Sources;
3504
3505  // Use a two pass approach to avoid using a std::map which is slow.
3506  unsigned Id = 0;
3507  for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ++I){
3508    SDNode *N = I;
3509    N->setNodeId(Id++);
3510    unsigned Degree = N->use_size();
3511    InDegree[N->getNodeId()] = Degree;
3512    if (Degree == 0)
3513      Sources.push_back(N);
3514  }
3515
3516  TopOrder.clear();
3517  while (!Sources.empty()) {
3518    SDNode *N = Sources.back();
3519    Sources.pop_back();
3520    TopOrder.push_back(N);
3521    for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
3522      SDNode *P = I->Val;
3523      unsigned Degree = --InDegree[P->getNodeId()];
3524      if (Degree == 0)
3525        Sources.push_back(P);
3526    }
3527  }
3528
3529  // Second pass, assign the actual topological order as node ids.
3530  Id = 0;
3531  for (std::vector<SDNode*>::iterator TI = TopOrder.begin(),TE = TopOrder.end();
3532       TI != TE; ++TI)
3533    (*TI)->setNodeId(Id++);
3534
3535  return Id;
3536}
3537
3538
3539
3540//===----------------------------------------------------------------------===//
3541//                              SDNode Class
3542//===----------------------------------------------------------------------===//
3543
3544// Out-of-line virtual method to give class a home.
3545void SDNode::ANCHOR() {}
3546void UnarySDNode::ANCHOR() {}
3547void BinarySDNode::ANCHOR() {}
3548void TernarySDNode::ANCHOR() {}
3549void HandleSDNode::ANCHOR() {}
3550void StringSDNode::ANCHOR() {}
3551void ConstantSDNode::ANCHOR() {}
3552void ConstantFPSDNode::ANCHOR() {}
3553void GlobalAddressSDNode::ANCHOR() {}
3554void FrameIndexSDNode::ANCHOR() {}
3555void JumpTableSDNode::ANCHOR() {}
3556void ConstantPoolSDNode::ANCHOR() {}
3557void BasicBlockSDNode::ANCHOR() {}
3558void SrcValueSDNode::ANCHOR() {}
3559void MemOperandSDNode::ANCHOR() {}
3560void RegisterSDNode::ANCHOR() {}
3561void ExternalSymbolSDNode::ANCHOR() {}
3562void CondCodeSDNode::ANCHOR() {}
3563void VTSDNode::ANCHOR() {}
3564void LoadSDNode::ANCHOR() {}
3565void StoreSDNode::ANCHOR() {}
3566void AtomicSDNode::ANCHOR() {}
3567
3568HandleSDNode::~HandleSDNode() {
3569  SDVTList VTs = { 0, 0 };
3570  MorphNodeTo(ISD::HANDLENODE, VTs, 0, 0);  // Drops operand uses.
3571}
3572
3573GlobalAddressSDNode::GlobalAddressSDNode(bool isTarget, const GlobalValue *GA,
3574                                         MVT::ValueType VT, int o)
3575  : SDNode(isa<GlobalVariable>(GA) &&
3576           cast<GlobalVariable>(GA)->isThreadLocal() ?
3577           // Thread Local
3578           (isTarget ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress) :
3579           // Non Thread Local
3580           (isTarget ? ISD::TargetGlobalAddress : ISD::GlobalAddress),
3581           getSDVTList(VT)), Offset(o) {
3582  TheGlobal = const_cast<GlobalValue*>(GA);
3583}
3584
3585/// getMemOperand - Return a MemOperand object describing the memory
3586/// reference performed by this load or store.
3587MemOperand LSBaseSDNode::getMemOperand() const {
3588  int Size = (MVT::getSizeInBits(getMemoryVT()) + 7) >> 3;
3589  int Flags =
3590    getOpcode() == ISD::LOAD ? MemOperand::MOLoad : MemOperand::MOStore;
3591  if (IsVolatile) Flags |= MemOperand::MOVolatile;
3592
3593  // Check if the load references a frame index, and does not have
3594  // an SV attached.
3595  const FrameIndexSDNode *FI =
3596    dyn_cast<const FrameIndexSDNode>(getBasePtr().Val);
3597  if (!getSrcValue() && FI)
3598    return MemOperand(PseudoSourceValue::getFixedStack(), Flags,
3599                      FI->getIndex(), Size, Alignment);
3600  else
3601    return MemOperand(getSrcValue(), Flags,
3602                      getSrcValueOffset(), Size, Alignment);
3603}
3604
3605/// Profile - Gather unique data for the node.
3606///
3607void SDNode::Profile(FoldingSetNodeID &ID) {
3608  AddNodeIDNode(ID, this);
3609}
3610
3611/// getValueTypeList - Return a pointer to the specified value type.
3612///
3613const MVT::ValueType *SDNode::getValueTypeList(MVT::ValueType VT) {
3614  if (MVT::isExtendedVT(VT)) {
3615    static std::set<MVT::ValueType> EVTs;
3616    return &(*EVTs.insert(VT).first);
3617  } else {
3618    static MVT::ValueType VTs[MVT::LAST_VALUETYPE];
3619    VTs[VT] = VT;
3620    return &VTs[VT];
3621  }
3622}
3623
3624/// hasNUsesOfValue - Return true if there are exactly NUSES uses of the
3625/// indicated value.  This method ignores uses of other values defined by this
3626/// operation.
3627bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const {
3628  assert(Value < getNumValues() && "Bad value!");
3629
3630  // If there is only one value, this is easy.
3631  if (getNumValues() == 1)
3632    return use_size() == NUses;
3633  if (use_size() < NUses) return false;
3634
3635  SDOperand TheValue(const_cast<SDNode *>(this), Value);
3636
3637  SmallPtrSet<SDNode*, 32> UsersHandled;
3638
3639  for (SDNode::use_iterator UI = Uses.begin(), E = Uses.end(); UI != E; ++UI) {
3640    SDNode *User = *UI;
3641    if (User->getNumOperands() == 1 ||
3642        UsersHandled.insert(User))     // First time we've seen this?
3643      for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i)
3644        if (User->getOperand(i) == TheValue) {
3645          if (NUses == 0)
3646            return false;   // too many uses
3647          --NUses;
3648        }
3649  }
3650
3651  // Found exactly the right number of uses?
3652  return NUses == 0;
3653}
3654
3655
3656/// hasAnyUseOfValue - Return true if there are any use of the indicated
3657/// value. This method ignores uses of other values defined by this operation.
3658bool SDNode::hasAnyUseOfValue(unsigned Value) const {
3659  assert(Value < getNumValues() && "Bad value!");
3660
3661  if (use_empty()) return false;
3662
3663  SDOperand TheValue(const_cast<SDNode *>(this), Value);
3664
3665  SmallPtrSet<SDNode*, 32> UsersHandled;
3666
3667  for (SDNode::use_iterator UI = Uses.begin(), E = Uses.end(); UI != E; ++UI) {
3668    SDNode *User = *UI;
3669    if (User->getNumOperands() == 1 ||
3670        UsersHandled.insert(User))     // First time we've seen this?
3671      for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i)
3672        if (User->getOperand(i) == TheValue) {
3673          return true;
3674        }
3675  }
3676
3677  return false;
3678}
3679
3680
3681/// isOnlyUse - Return true if this node is the only use of N.
3682///
3683bool SDNode::isOnlyUse(SDNode *N) const {
3684  bool Seen = false;
3685  for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {
3686    SDNode *User = *I;
3687    if (User == this)
3688      Seen = true;
3689    else
3690      return false;
3691  }
3692
3693  return Seen;
3694}
3695
3696/// isOperand - Return true if this node is an operand of N.
3697///
3698bool SDOperand::isOperand(SDNode *N) const {
3699  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
3700    if (*this == N->getOperand(i))
3701      return true;
3702  return false;
3703}
3704
3705bool SDNode::isOperand(SDNode *N) const {
3706  for (unsigned i = 0, e = N->NumOperands; i != e; ++i)
3707    if (this == N->OperandList[i].Val)
3708      return true;
3709  return false;
3710}
3711
3712/// reachesChainWithoutSideEffects - Return true if this operand (which must
3713/// be a chain) reaches the specified operand without crossing any
3714/// side-effecting instructions.  In practice, this looks through token
3715/// factors and non-volatile loads.  In order to remain efficient, this only
3716/// looks a couple of nodes in, it does not do an exhaustive search.
3717bool SDOperand::reachesChainWithoutSideEffects(SDOperand Dest,
3718                                               unsigned Depth) const {
3719  if (*this == Dest) return true;
3720
3721  // Don't search too deeply, we just want to be able to see through
3722  // TokenFactor's etc.
3723  if (Depth == 0) return false;
3724
3725  // If this is a token factor, all inputs to the TF happen in parallel.  If any
3726  // of the operands of the TF reach dest, then we can do the xform.
3727  if (getOpcode() == ISD::TokenFactor) {
3728    for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
3729      if (getOperand(i).reachesChainWithoutSideEffects(Dest, Depth-1))
3730        return true;
3731    return false;
3732  }
3733
3734  // Loads don't have side effects, look through them.
3735  if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(*this)) {
3736    if (!Ld->isVolatile())
3737      return Ld->getChain().reachesChainWithoutSideEffects(Dest, Depth-1);
3738  }
3739  return false;
3740}
3741
3742
3743static void findPredecessor(SDNode *N, const SDNode *P, bool &found,
3744                            SmallPtrSet<SDNode *, 32> &Visited) {
3745  if (found || !Visited.insert(N))
3746    return;
3747
3748  for (unsigned i = 0, e = N->getNumOperands(); !found && i != e; ++i) {
3749    SDNode *Op = N->getOperand(i).Val;
3750    if (Op == P) {
3751      found = true;
3752      return;
3753    }
3754    findPredecessor(Op, P, found, Visited);
3755  }
3756}
3757
3758/// isPredecessor - Return true if this node is a predecessor of N. This node
3759/// is either an operand of N or it can be reached by recursively traversing
3760/// up the operands.
3761/// NOTE: this is an expensive method. Use it carefully.
3762bool SDNode::isPredecessor(SDNode *N) const {
3763  SmallPtrSet<SDNode *, 32> Visited;
3764  bool found = false;
3765  findPredecessor(N, this, found, Visited);
3766  return found;
3767}
3768
3769uint64_t SDNode::getConstantOperandVal(unsigned Num) const {
3770  assert(Num < NumOperands && "Invalid child # of SDNode!");
3771  return cast<ConstantSDNode>(OperandList[Num])->getValue();
3772}
3773
3774std::string SDNode::getOperationName(const SelectionDAG *G) const {
3775  switch (getOpcode()) {
3776  default:
3777    if (getOpcode() < ISD::BUILTIN_OP_END)
3778      return "<<Unknown DAG Node>>";
3779    else {
3780      if (G) {
3781        if (const TargetInstrInfo *TII = G->getTarget().getInstrInfo())
3782          if (getOpcode()-ISD::BUILTIN_OP_END < TII->getNumOpcodes())
3783            return TII->get(getOpcode()-ISD::BUILTIN_OP_END).getName();
3784
3785        TargetLowering &TLI = G->getTargetLoweringInfo();
3786        const char *Name =
3787          TLI.getTargetNodeName(getOpcode());
3788        if (Name) return Name;
3789      }
3790
3791      return "<<Unknown Target Node>>";
3792    }
3793
3794  case ISD::MEMBARRIER:    return "MemBarrier";
3795  case ISD::ATOMIC_LCS:    return "AtomicLCS";
3796  case ISD::ATOMIC_LAS:    return "AtomicLAS";
3797  case ISD::ATOMIC_SWAP:    return "AtomicSWAP";
3798  case ISD::PCMARKER:      return "PCMarker";
3799  case ISD::READCYCLECOUNTER: return "ReadCycleCounter";
3800  case ISD::SRCVALUE:      return "SrcValue";
3801  case ISD::MEMOPERAND:    return "MemOperand";
3802  case ISD::EntryToken:    return "EntryToken";
3803  case ISD::TokenFactor:   return "TokenFactor";
3804  case ISD::AssertSext:    return "AssertSext";
3805  case ISD::AssertZext:    return "AssertZext";
3806
3807  case ISD::STRING:        return "String";
3808  case ISD::BasicBlock:    return "BasicBlock";
3809  case ISD::VALUETYPE:     return "ValueType";
3810  case ISD::Register:      return "Register";
3811
3812  case ISD::Constant:      return "Constant";
3813  case ISD::ConstantFP:    return "ConstantFP";
3814  case ISD::GlobalAddress: return "GlobalAddress";
3815  case ISD::GlobalTLSAddress: return "GlobalTLSAddress";
3816  case ISD::FrameIndex:    return "FrameIndex";
3817  case ISD::JumpTable:     return "JumpTable";
3818  case ISD::GLOBAL_OFFSET_TABLE: return "GLOBAL_OFFSET_TABLE";
3819  case ISD::RETURNADDR: return "RETURNADDR";
3820  case ISD::FRAMEADDR: return "FRAMEADDR";
3821  case ISD::FRAME_TO_ARGS_OFFSET: return "FRAME_TO_ARGS_OFFSET";
3822  case ISD::EXCEPTIONADDR: return "EXCEPTIONADDR";
3823  case ISD::EHSELECTION: return "EHSELECTION";
3824  case ISD::EH_RETURN: return "EH_RETURN";
3825  case ISD::ConstantPool:  return "ConstantPool";
3826  case ISD::ExternalSymbol: return "ExternalSymbol";
3827  case ISD::INTRINSIC_WO_CHAIN: {
3828    unsigned IID = cast<ConstantSDNode>(getOperand(0))->getValue();
3829    return Intrinsic::getName((Intrinsic::ID)IID);
3830  }
3831  case ISD::INTRINSIC_VOID:
3832  case ISD::INTRINSIC_W_CHAIN: {
3833    unsigned IID = cast<ConstantSDNode>(getOperand(1))->getValue();
3834    return Intrinsic::getName((Intrinsic::ID)IID);
3835  }
3836
3837  case ISD::BUILD_VECTOR:   return "BUILD_VECTOR";
3838  case ISD::TargetConstant: return "TargetConstant";
3839  case ISD::TargetConstantFP:return "TargetConstantFP";
3840  case ISD::TargetGlobalAddress: return "TargetGlobalAddress";
3841  case ISD::TargetGlobalTLSAddress: return "TargetGlobalTLSAddress";
3842  case ISD::TargetFrameIndex: return "TargetFrameIndex";
3843  case ISD::TargetJumpTable:  return "TargetJumpTable";
3844  case ISD::TargetConstantPool:  return "TargetConstantPool";
3845  case ISD::TargetExternalSymbol: return "TargetExternalSymbol";
3846
3847  case ISD::CopyToReg:     return "CopyToReg";
3848  case ISD::CopyFromReg:   return "CopyFromReg";
3849  case ISD::UNDEF:         return "undef";
3850  case ISD::MERGE_VALUES:  return "merge_values";
3851  case ISD::INLINEASM:     return "inlineasm";
3852  case ISD::LABEL:         return "label";
3853  case ISD::DECLARE:       return "declare";
3854  case ISD::HANDLENODE:    return "handlenode";
3855  case ISD::FORMAL_ARGUMENTS: return "formal_arguments";
3856  case ISD::CALL:          return "call";
3857
3858  // Unary operators
3859  case ISD::FABS:   return "fabs";
3860  case ISD::FNEG:   return "fneg";
3861  case ISD::FSQRT:  return "fsqrt";
3862  case ISD::FSIN:   return "fsin";
3863  case ISD::FCOS:   return "fcos";
3864  case ISD::FPOWI:  return "fpowi";
3865  case ISD::FPOW:   return "fpow";
3866
3867  // Binary operators
3868  case ISD::ADD:    return "add";
3869  case ISD::SUB:    return "sub";
3870  case ISD::MUL:    return "mul";
3871  case ISD::MULHU:  return "mulhu";
3872  case ISD::MULHS:  return "mulhs";
3873  case ISD::SDIV:   return "sdiv";
3874  case ISD::UDIV:   return "udiv";
3875  case ISD::SREM:   return "srem";
3876  case ISD::UREM:   return "urem";
3877  case ISD::SMUL_LOHI:  return "smul_lohi";
3878  case ISD::UMUL_LOHI:  return "umul_lohi";
3879  case ISD::SDIVREM:    return "sdivrem";
3880  case ISD::UDIVREM:    return "divrem";
3881  case ISD::AND:    return "and";
3882  case ISD::OR:     return "or";
3883  case ISD::XOR:    return "xor";
3884  case ISD::SHL:    return "shl";
3885  case ISD::SRA:    return "sra";
3886  case ISD::SRL:    return "srl";
3887  case ISD::ROTL:   return "rotl";
3888  case ISD::ROTR:   return "rotr";
3889  case ISD::FADD:   return "fadd";
3890  case ISD::FSUB:   return "fsub";
3891  case ISD::FMUL:   return "fmul";
3892  case ISD::FDIV:   return "fdiv";
3893  case ISD::FREM:   return "frem";
3894  case ISD::FCOPYSIGN: return "fcopysign";
3895  case ISD::FGETSIGN:  return "fgetsign";
3896
3897  case ISD::SETCC:       return "setcc";
3898  case ISD::SELECT:      return "select";
3899  case ISD::SELECT_CC:   return "select_cc";
3900  case ISD::INSERT_VECTOR_ELT:   return "insert_vector_elt";
3901  case ISD::EXTRACT_VECTOR_ELT:  return "extract_vector_elt";
3902  case ISD::CONCAT_VECTORS:      return "concat_vectors";
3903  case ISD::EXTRACT_SUBVECTOR:   return "extract_subvector";
3904  case ISD::SCALAR_TO_VECTOR:    return "scalar_to_vector";
3905  case ISD::VECTOR_SHUFFLE:      return "vector_shuffle";
3906  case ISD::CARRY_FALSE:         return "carry_false";
3907  case ISD::ADDC:        return "addc";
3908  case ISD::ADDE:        return "adde";
3909  case ISD::SUBC:        return "subc";
3910  case ISD::SUBE:        return "sube";
3911  case ISD::SHL_PARTS:   return "shl_parts";
3912  case ISD::SRA_PARTS:   return "sra_parts";
3913  case ISD::SRL_PARTS:   return "srl_parts";
3914
3915  case ISD::EXTRACT_SUBREG:     return "extract_subreg";
3916  case ISD::INSERT_SUBREG:      return "insert_subreg";
3917
3918  // Conversion operators.
3919  case ISD::SIGN_EXTEND: return "sign_extend";
3920  case ISD::ZERO_EXTEND: return "zero_extend";
3921  case ISD::ANY_EXTEND:  return "any_extend";
3922  case ISD::SIGN_EXTEND_INREG: return "sign_extend_inreg";
3923  case ISD::TRUNCATE:    return "truncate";
3924  case ISD::FP_ROUND:    return "fp_round";
3925  case ISD::FLT_ROUNDS_: return "flt_rounds";
3926  case ISD::FP_ROUND_INREG: return "fp_round_inreg";
3927  case ISD::FP_EXTEND:   return "fp_extend";
3928
3929  case ISD::SINT_TO_FP:  return "sint_to_fp";
3930  case ISD::UINT_TO_FP:  return "uint_to_fp";
3931  case ISD::FP_TO_SINT:  return "fp_to_sint";
3932  case ISD::FP_TO_UINT:  return "fp_to_uint";
3933  case ISD::BIT_CONVERT: return "bit_convert";
3934
3935    // Control flow instructions
3936  case ISD::BR:      return "br";
3937  case ISD::BRIND:   return "brind";
3938  case ISD::BR_JT:   return "br_jt";
3939  case ISD::BRCOND:  return "brcond";
3940  case ISD::BR_CC:   return "br_cc";
3941  case ISD::RET:     return "ret";
3942  case ISD::CALLSEQ_START:  return "callseq_start";
3943  case ISD::CALLSEQ_END:    return "callseq_end";
3944
3945    // Other operators
3946  case ISD::LOAD:               return "load";
3947  case ISD::STORE:              return "store";
3948  case ISD::VAARG:              return "vaarg";
3949  case ISD::VACOPY:             return "vacopy";
3950  case ISD::VAEND:              return "vaend";
3951  case ISD::VASTART:            return "vastart";
3952  case ISD::DYNAMIC_STACKALLOC: return "dynamic_stackalloc";
3953  case ISD::EXTRACT_ELEMENT:    return "extract_element";
3954  case ISD::BUILD_PAIR:         return "build_pair";
3955  case ISD::STACKSAVE:          return "stacksave";
3956  case ISD::STACKRESTORE:       return "stackrestore";
3957  case ISD::TRAP:               return "trap";
3958
3959  // Block memory operations.
3960  case ISD::MEMSET:  return "memset";
3961  case ISD::MEMCPY:  return "memcpy";
3962  case ISD::MEMMOVE: return "memmove";
3963
3964  // Bit manipulation
3965  case ISD::BSWAP:   return "bswap";
3966  case ISD::CTPOP:   return "ctpop";
3967  case ISD::CTTZ:    return "cttz";
3968  case ISD::CTLZ:    return "ctlz";
3969
3970  // Debug info
3971  case ISD::LOCATION: return "location";
3972  case ISD::DEBUG_LOC: return "debug_loc";
3973
3974  // Trampolines
3975  case ISD::TRAMPOLINE: return "trampoline";
3976
3977  case ISD::CONDCODE:
3978    switch (cast<CondCodeSDNode>(this)->get()) {
3979    default: assert(0 && "Unknown setcc condition!");
3980    case ISD::SETOEQ:  return "setoeq";
3981    case ISD::SETOGT:  return "setogt";
3982    case ISD::SETOGE:  return "setoge";
3983    case ISD::SETOLT:  return "setolt";
3984    case ISD::SETOLE:  return "setole";
3985    case ISD::SETONE:  return "setone";
3986
3987    case ISD::SETO:    return "seto";
3988    case ISD::SETUO:   return "setuo";
3989    case ISD::SETUEQ:  return "setue";
3990    case ISD::SETUGT:  return "setugt";
3991    case ISD::SETUGE:  return "setuge";
3992    case ISD::SETULT:  return "setult";
3993    case ISD::SETULE:  return "setule";
3994    case ISD::SETUNE:  return "setune";
3995
3996    case ISD::SETEQ:   return "seteq";
3997    case ISD::SETGT:   return "setgt";
3998    case ISD::SETGE:   return "setge";
3999    case ISD::SETLT:   return "setlt";
4000    case ISD::SETLE:   return "setle";
4001    case ISD::SETNE:   return "setne";
4002    }
4003  }
4004}
4005
4006const char *SDNode::getIndexedModeName(ISD::MemIndexedMode AM) {
4007  switch (AM) {
4008  default:
4009    return "";
4010  case ISD::PRE_INC:
4011    return "<pre-inc>";
4012  case ISD::PRE_DEC:
4013    return "<pre-dec>";
4014  case ISD::POST_INC:
4015    return "<post-inc>";
4016  case ISD::POST_DEC:
4017    return "<post-dec>";
4018  }
4019}
4020
4021void SDNode::dump() const { dump(0); }
4022void SDNode::dump(const SelectionDAG *G) const {
4023  cerr << (void*)this << ": ";
4024
4025  for (unsigned i = 0, e = getNumValues(); i != e; ++i) {
4026    if (i) cerr << ",";
4027    if (getValueType(i) == MVT::Other)
4028      cerr << "ch";
4029    else
4030      cerr << MVT::getValueTypeString(getValueType(i));
4031  }
4032  cerr << " = " << getOperationName(G);
4033
4034  cerr << " ";
4035  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
4036    if (i) cerr << ", ";
4037    cerr << (void*)getOperand(i).Val;
4038    if (unsigned RN = getOperand(i).ResNo)
4039      cerr << ":" << RN;
4040  }
4041
4042  if (!isTargetOpcode() && getOpcode() == ISD::VECTOR_SHUFFLE) {
4043    SDNode *Mask = getOperand(2).Val;
4044    cerr << "<";
4045    for (unsigned i = 0, e = Mask->getNumOperands(); i != e; ++i) {
4046      if (i) cerr << ",";
4047      if (Mask->getOperand(i).getOpcode() == ISD::UNDEF)
4048        cerr << "u";
4049      else
4050        cerr << cast<ConstantSDNode>(Mask->getOperand(i))->getValue();
4051    }
4052    cerr << ">";
4053  }
4054
4055  if (const ConstantSDNode *CSDN = dyn_cast<ConstantSDNode>(this)) {
4056    cerr << "<" << CSDN->getValue() << ">";
4057  } else if (const ConstantFPSDNode *CSDN = dyn_cast<ConstantFPSDNode>(this)) {
4058    if (&CSDN->getValueAPF().getSemantics()==&APFloat::IEEEsingle)
4059      cerr << "<" << CSDN->getValueAPF().convertToFloat() << ">";
4060    else if (&CSDN->getValueAPF().getSemantics()==&APFloat::IEEEdouble)
4061      cerr << "<" << CSDN->getValueAPF().convertToDouble() << ">";
4062    else {
4063      cerr << "<APFloat(";
4064      CSDN->getValueAPF().convertToAPInt().dump();
4065      cerr << ")>";
4066    }
4067  } else if (const GlobalAddressSDNode *GADN =
4068             dyn_cast<GlobalAddressSDNode>(this)) {
4069    int offset = GADN->getOffset();
4070    cerr << "<";
4071    WriteAsOperand(*cerr.stream(), GADN->getGlobal()) << ">";
4072    if (offset > 0)
4073      cerr << " + " << offset;
4074    else
4075      cerr << " " << offset;
4076  } else if (const FrameIndexSDNode *FIDN = dyn_cast<FrameIndexSDNode>(this)) {
4077    cerr << "<" << FIDN->getIndex() << ">";
4078  } else if (const JumpTableSDNode *JTDN = dyn_cast<JumpTableSDNode>(this)) {
4079    cerr << "<" << JTDN->getIndex() << ">";
4080  } else if (const ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(this)){
4081    int offset = CP->getOffset();
4082    if (CP->isMachineConstantPoolEntry())
4083      cerr << "<" << *CP->getMachineCPVal() << ">";
4084    else
4085      cerr << "<" << *CP->getConstVal() << ">";
4086    if (offset > 0)
4087      cerr << " + " << offset;
4088    else
4089      cerr << " " << offset;
4090  } else if (const BasicBlockSDNode *BBDN = dyn_cast<BasicBlockSDNode>(this)) {
4091    cerr << "<";
4092    const Value *LBB = (const Value*)BBDN->getBasicBlock()->getBasicBlock();
4093    if (LBB)
4094      cerr << LBB->getName() << " ";
4095    cerr << (const void*)BBDN->getBasicBlock() << ">";
4096  } else if (const RegisterSDNode *R = dyn_cast<RegisterSDNode>(this)) {
4097    if (G && R->getReg() &&
4098        TargetRegisterInfo::isPhysicalRegister(R->getReg())) {
4099      cerr << " " << G->getTarget().getRegisterInfo()->getName(R->getReg());
4100    } else {
4101      cerr << " #" << R->getReg();
4102    }
4103  } else if (const ExternalSymbolSDNode *ES =
4104             dyn_cast<ExternalSymbolSDNode>(this)) {
4105    cerr << "'" << ES->getSymbol() << "'";
4106  } else if (const SrcValueSDNode *M = dyn_cast<SrcValueSDNode>(this)) {
4107    if (M->getValue())
4108      cerr << "<" << M->getValue() << ">";
4109    else
4110      cerr << "<null>";
4111  } else if (const MemOperandSDNode *M = dyn_cast<MemOperandSDNode>(this)) {
4112    if (M->MO.getValue())
4113      cerr << "<" << M->MO.getValue() << ":" << M->MO.getOffset() << ">";
4114    else
4115      cerr << "<null:" << M->MO.getOffset() << ">";
4116  } else if (const VTSDNode *N = dyn_cast<VTSDNode>(this)) {
4117    cerr << ":" << MVT::getValueTypeString(N->getVT());
4118  } else if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(this)) {
4119    const Value *SrcValue = LD->getSrcValue();
4120    int SrcOffset = LD->getSrcValueOffset();
4121    cerr << " <";
4122    if (SrcValue)
4123      cerr << SrcValue;
4124    else
4125      cerr << "null";
4126    cerr << ":" << SrcOffset << ">";
4127
4128    bool doExt = true;
4129    switch (LD->getExtensionType()) {
4130    default: doExt = false; break;
4131    case ISD::EXTLOAD:
4132      cerr << " <anyext ";
4133      break;
4134    case ISD::SEXTLOAD:
4135      cerr << " <sext ";
4136      break;
4137    case ISD::ZEXTLOAD:
4138      cerr << " <zext ";
4139      break;
4140    }
4141    if (doExt)
4142      cerr << MVT::getValueTypeString(LD->getMemoryVT()) << ">";
4143
4144    const char *AM = getIndexedModeName(LD->getAddressingMode());
4145    if (*AM)
4146      cerr << " " << AM;
4147    if (LD->isVolatile())
4148      cerr << " <volatile>";
4149    cerr << " alignment=" << LD->getAlignment();
4150  } else if (const StoreSDNode *ST = dyn_cast<StoreSDNode>(this)) {
4151    const Value *SrcValue = ST->getSrcValue();
4152    int SrcOffset = ST->getSrcValueOffset();
4153    cerr << " <";
4154    if (SrcValue)
4155      cerr << SrcValue;
4156    else
4157      cerr << "null";
4158    cerr << ":" << SrcOffset << ">";
4159
4160    if (ST->isTruncatingStore())
4161      cerr << " <trunc "
4162           << MVT::getValueTypeString(ST->getMemoryVT()) << ">";
4163
4164    const char *AM = getIndexedModeName(ST->getAddressingMode());
4165    if (*AM)
4166      cerr << " " << AM;
4167    if (ST->isVolatile())
4168      cerr << " <volatile>";
4169    cerr << " alignment=" << ST->getAlignment();
4170  }
4171}
4172
4173static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {
4174  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
4175    if (N->getOperand(i).Val->hasOneUse())
4176      DumpNodes(N->getOperand(i).Val, indent+2, G);
4177    else
4178      cerr << "\n" << std::string(indent+2, ' ')
4179           << (void*)N->getOperand(i).Val << ": <multiple use>";
4180
4181
4182  cerr << "\n" << std::string(indent, ' ');
4183  N->dump(G);
4184}
4185
4186void SelectionDAG::dump() const {
4187  cerr << "SelectionDAG has " << AllNodes.size() << " nodes:";
4188  std::vector<const SDNode*> Nodes;
4189  for (allnodes_const_iterator I = allnodes_begin(), E = allnodes_end();
4190       I != E; ++I)
4191    Nodes.push_back(I);
4192
4193  std::sort(Nodes.begin(), Nodes.end());
4194
4195  for (unsigned i = 0, e = Nodes.size(); i != e; ++i) {
4196    if (!Nodes[i]->hasOneUse() && Nodes[i] != getRoot().Val)
4197      DumpNodes(Nodes[i], 2, this);
4198  }
4199
4200  if (getRoot().Val) DumpNodes(getRoot().Val, 2, this);
4201
4202  cerr << "\n\n";
4203}
4204
4205const Type *ConstantPoolSDNode::getType() const {
4206  if (isMachineConstantPoolEntry())
4207    return Val.MachineCPVal->getType();
4208  return Val.ConstVal->getType();
4209}
4210