SelectionDAG.cpp revision 463db8ccdd26cf466e1cd122691ebaa623c0609a
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    const APInt &Val = cast<ConstantSDNode>(Op)->getAPIntValue();
1522    // If negative, return # leading ones.
1523    if (Val.isNegative())
1524      return Val.countLeadingOnes();
1525
1526    // Return # leading zeros.
1527    return Val.countLeadingZeros();
1528  }
1529
1530  case ISD::SIGN_EXTEND:
1531    Tmp = VTBits-MVT::getSizeInBits(Op.getOperand(0).getValueType());
1532    return ComputeNumSignBits(Op.getOperand(0), Depth+1) + Tmp;
1533
1534  case ISD::SIGN_EXTEND_INREG:
1535    // Max of the input and what this extends.
1536    Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1537    Tmp = VTBits-Tmp+1;
1538
1539    Tmp2 = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1540    return std::max(Tmp, Tmp2);
1541
1542  case ISD::SRA:
1543    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1544    // SRA X, C   -> adds C sign bits.
1545    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1546      Tmp += C->getValue();
1547      if (Tmp > VTBits) Tmp = VTBits;
1548    }
1549    return Tmp;
1550  case ISD::SHL:
1551    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1552      // shl destroys sign bits.
1553      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1554      if (C->getValue() >= VTBits ||      // Bad shift.
1555          C->getValue() >= Tmp) break;    // Shifted all sign bits out.
1556      return Tmp - C->getValue();
1557    }
1558    break;
1559  case ISD::AND:
1560  case ISD::OR:
1561  case ISD::XOR:    // NOT is handled here.
1562    // Logical binary ops preserve the number of sign bits.
1563    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1564    if (Tmp == 1) return 1;  // Early out.
1565    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1566    return std::min(Tmp, Tmp2);
1567
1568  case ISD::SELECT:
1569    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1570    if (Tmp == 1) return 1;  // Early out.
1571    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1572    return std::min(Tmp, Tmp2);
1573
1574  case ISD::SETCC:
1575    // If setcc returns 0/-1, all bits are sign bits.
1576    if (TLI.getSetCCResultContents() ==
1577        TargetLowering::ZeroOrNegativeOneSetCCResult)
1578      return VTBits;
1579    break;
1580  case ISD::ROTL:
1581  case ISD::ROTR:
1582    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1583      unsigned RotAmt = C->getValue() & (VTBits-1);
1584
1585      // Handle rotate right by N like a rotate left by 32-N.
1586      if (Op.getOpcode() == ISD::ROTR)
1587        RotAmt = (VTBits-RotAmt) & (VTBits-1);
1588
1589      // If we aren't rotating out all of the known-in sign bits, return the
1590      // number that are left.  This handles rotl(sext(x), 1) for example.
1591      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1592      if (Tmp > RotAmt+1) return Tmp-RotAmt;
1593    }
1594    break;
1595  case ISD::ADD:
1596    // Add can have at most one carry bit.  Thus we know that the output
1597    // is, at worst, one more bit than the inputs.
1598    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1599    if (Tmp == 1) return 1;  // Early out.
1600
1601    // Special case decrementing a value (ADD X, -1):
1602    if (ConstantSDNode *CRHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
1603      if (CRHS->isAllOnesValue()) {
1604        APInt KnownZero, KnownOne;
1605        APInt Mask = APInt::getAllOnesValue(VTBits);
1606        ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
1607
1608        // If the input is known to be 0 or 1, the output is 0/-1, which is all
1609        // sign bits set.
1610        if ((KnownZero | APInt(VTBits, 1)) == Mask)
1611          return VTBits;
1612
1613        // If we are subtracting one from a positive number, there is no carry
1614        // out of the result.
1615        if (KnownZero.isNegative())
1616          return Tmp;
1617      }
1618
1619    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1620    if (Tmp2 == 1) return 1;
1621      return std::min(Tmp, Tmp2)-1;
1622    break;
1623
1624  case ISD::SUB:
1625    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1626    if (Tmp2 == 1) return 1;
1627
1628    // Handle NEG.
1629    if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
1630      if (CLHS->getValue() == 0) {
1631        APInt KnownZero, KnownOne;
1632        APInt Mask = APInt::getAllOnesValue(VTBits);
1633        ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1634        // If the input is known to be 0 or 1, the output is 0/-1, which is all
1635        // sign bits set.
1636        if ((KnownZero | APInt(VTBits, 1)) == Mask)
1637          return VTBits;
1638
1639        // If the input is known to be positive (the sign bit is known clear),
1640        // the output of the NEG has the same number of sign bits as the input.
1641        if (KnownZero.isNegative())
1642          return Tmp2;
1643
1644        // Otherwise, we treat this like a SUB.
1645      }
1646
1647    // Sub can have at most one carry bit.  Thus we know that the output
1648    // is, at worst, one more bit than the inputs.
1649    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1650    if (Tmp == 1) return 1;  // Early out.
1651      return std::min(Tmp, Tmp2)-1;
1652    break;
1653  case ISD::TRUNCATE:
1654    // FIXME: it's tricky to do anything useful for this, but it is an important
1655    // case for targets like X86.
1656    break;
1657  }
1658
1659  // Handle LOADX separately here. EXTLOAD case will fallthrough.
1660  if (Op.getOpcode() == ISD::LOAD) {
1661    LoadSDNode *LD = cast<LoadSDNode>(Op);
1662    unsigned ExtType = LD->getExtensionType();
1663    switch (ExtType) {
1664    default: break;
1665    case ISD::SEXTLOAD:    // '17' bits known
1666      Tmp = MVT::getSizeInBits(LD->getMemoryVT());
1667      return VTBits-Tmp+1;
1668    case ISD::ZEXTLOAD:    // '16' bits known
1669      Tmp = MVT::getSizeInBits(LD->getMemoryVT());
1670      return VTBits-Tmp;
1671    }
1672  }
1673
1674  // Allow the target to implement this method for its nodes.
1675  if (Op.getOpcode() >= ISD::BUILTIN_OP_END ||
1676      Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
1677      Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
1678      Op.getOpcode() == ISD::INTRINSIC_VOID) {
1679    unsigned NumBits = TLI.ComputeNumSignBitsForTargetNode(Op, Depth);
1680    if (NumBits > 1) return NumBits;
1681  }
1682
1683  // Finally, if we can prove that the top bits of the result are 0's or 1's,
1684  // use this information.
1685  APInt KnownZero, KnownOne;
1686  APInt Mask = APInt::getAllOnesValue(VTBits);
1687  ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
1688
1689  if (KnownZero.isNegative()) {        // sign bit is 0
1690    Mask = KnownZero;
1691  } else if (KnownOne.isNegative()) {  // sign bit is 1;
1692    Mask = KnownOne;
1693  } else {
1694    // Nothing known.
1695    return 1;
1696  }
1697
1698  // Okay, we know that the sign bit in Mask is set.  Use CLZ to determine
1699  // the number of identical bits in the top of the input value.
1700  Mask = ~Mask;
1701  Mask <<= Mask.getBitWidth()-VTBits;
1702  // Return # leading zeros.  We use 'min' here in case Val was zero before
1703  // shifting.  We don't want to return '64' as for an i32 "0".
1704  return std::min(VTBits, Mask.countLeadingZeros());
1705}
1706
1707
1708bool SelectionDAG::isVerifiedDebugInfoDesc(SDOperand Op) const {
1709  GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(Op);
1710  if (!GA) return false;
1711  GlobalVariable *GV = dyn_cast<GlobalVariable>(GA->getGlobal());
1712  if (!GV) return false;
1713  MachineModuleInfo *MMI = getMachineModuleInfo();
1714  return MMI && MMI->hasDebugInfo() && MMI->isVerified(GV);
1715}
1716
1717
1718/// getNode - Gets or creates the specified node.
1719///
1720SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT) {
1721  FoldingSetNodeID ID;
1722  AddNodeIDNode(ID, Opcode, getVTList(VT), 0, 0);
1723  void *IP = 0;
1724  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1725    return SDOperand(E, 0);
1726  SDNode *N = new SDNode(Opcode, SDNode::getSDVTList(VT));
1727  CSEMap.InsertNode(N, IP);
1728
1729  AllNodes.push_back(N);
1730  return SDOperand(N, 0);
1731}
1732
1733SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1734                                SDOperand Operand) {
1735  // Constant fold unary operations with an integer constant operand.
1736  if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Operand.Val)) {
1737    const APInt &Val = C->getAPIntValue();
1738    unsigned BitWidth = MVT::getSizeInBits(VT);
1739    switch (Opcode) {
1740    default: break;
1741    case ISD::SIGN_EXTEND: return getConstant(APInt(Val).sextOrTrunc(BitWidth), VT);
1742    case ISD::ANY_EXTEND:
1743    case ISD::ZERO_EXTEND:
1744    case ISD::TRUNCATE:    return getConstant(APInt(Val).zextOrTrunc(BitWidth), VT);
1745    case ISD::UINT_TO_FP:
1746    case ISD::SINT_TO_FP: {
1747      const uint64_t zero[] = {0, 0};
1748      // No compile time operations on this type.
1749      if (VT==MVT::ppcf128)
1750        break;
1751      APFloat apf = APFloat(APInt(BitWidth, 2, zero));
1752      (void)apf.convertFromAPInt(Val,
1753                                 Opcode==ISD::SINT_TO_FP,
1754                                 APFloat::rmNearestTiesToEven);
1755      return getConstantFP(apf, VT);
1756    }
1757    case ISD::BIT_CONVERT:
1758      if (VT == MVT::f32 && C->getValueType(0) == MVT::i32)
1759        return getConstantFP(Val.bitsToFloat(), VT);
1760      else if (VT == MVT::f64 && C->getValueType(0) == MVT::i64)
1761        return getConstantFP(Val.bitsToDouble(), VT);
1762      break;
1763    case ISD::BSWAP:
1764      return getConstant(Val.byteSwap(), VT);
1765    case ISD::CTPOP:
1766      return getConstant(Val.countPopulation(), VT);
1767    case ISD::CTLZ:
1768      return getConstant(Val.countLeadingZeros(), VT);
1769    case ISD::CTTZ:
1770      return getConstant(Val.countTrailingZeros(), VT);
1771    }
1772  }
1773
1774  // Constant fold unary operations with a floating point constant operand.
1775  if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Operand.Val)) {
1776    APFloat V = C->getValueAPF();    // make copy
1777    if (VT != MVT::ppcf128 && Operand.getValueType() != MVT::ppcf128) {
1778      switch (Opcode) {
1779      case ISD::FNEG:
1780        V.changeSign();
1781        return getConstantFP(V, VT);
1782      case ISD::FABS:
1783        V.clearSign();
1784        return getConstantFP(V, VT);
1785      case ISD::FP_ROUND:
1786      case ISD::FP_EXTEND:
1787        // This can return overflow, underflow, or inexact; we don't care.
1788        // FIXME need to be more flexible about rounding mode.
1789        (void) V.convert(VT==MVT::f32 ? APFloat::IEEEsingle :
1790                         VT==MVT::f64 ? APFloat::IEEEdouble :
1791                         VT==MVT::f80 ? APFloat::x87DoubleExtended :
1792                         VT==MVT::f128 ? APFloat::IEEEquad :
1793                         APFloat::Bogus,
1794                         APFloat::rmNearestTiesToEven);
1795        return getConstantFP(V, VT);
1796      case ISD::FP_TO_SINT:
1797      case ISD::FP_TO_UINT: {
1798        integerPart x;
1799        assert(integerPartWidth >= 64);
1800        // FIXME need to be more flexible about rounding mode.
1801        APFloat::opStatus s = V.convertToInteger(&x, 64U,
1802                              Opcode==ISD::FP_TO_SINT,
1803                              APFloat::rmTowardZero);
1804        if (s==APFloat::opInvalidOp)     // inexact is OK, in fact usual
1805          break;
1806        return getConstant(x, VT);
1807      }
1808      case ISD::BIT_CONVERT:
1809        if (VT == MVT::i32 && C->getValueType(0) == MVT::f32)
1810          return getConstant((uint32_t)V.convertToAPInt().getZExtValue(), VT);
1811        else if (VT == MVT::i64 && C->getValueType(0) == MVT::f64)
1812          return getConstant(V.convertToAPInt().getZExtValue(), VT);
1813        break;
1814      }
1815    }
1816  }
1817
1818  unsigned OpOpcode = Operand.Val->getOpcode();
1819  switch (Opcode) {
1820  case ISD::TokenFactor:
1821    return Operand;         // Factor of one node?  No factor.
1822  case ISD::FP_ROUND: assert(0 && "Invalid method to make FP_ROUND node");
1823  case ISD::FP_EXTEND:
1824    assert(MVT::isFloatingPoint(VT) &&
1825           MVT::isFloatingPoint(Operand.getValueType()) && "Invalid FP cast!");
1826    if (Operand.getValueType() == VT) return Operand;  // noop conversion.
1827    break;
1828    case ISD::SIGN_EXTEND:
1829    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1830           "Invalid SIGN_EXTEND!");
1831    if (Operand.getValueType() == VT) return Operand;   // noop extension
1832    assert(MVT::getSizeInBits(Operand.getValueType()) < MVT::getSizeInBits(VT)
1833           && "Invalid sext node, dst < src!");
1834    if (OpOpcode == ISD::SIGN_EXTEND || OpOpcode == ISD::ZERO_EXTEND)
1835      return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1836    break;
1837  case ISD::ZERO_EXTEND:
1838    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1839           "Invalid ZERO_EXTEND!");
1840    if (Operand.getValueType() == VT) return Operand;   // noop extension
1841    assert(MVT::getSizeInBits(Operand.getValueType()) < MVT::getSizeInBits(VT)
1842           && "Invalid zext node, dst < src!");
1843    if (OpOpcode == ISD::ZERO_EXTEND)   // (zext (zext x)) -> (zext x)
1844      return getNode(ISD::ZERO_EXTEND, VT, Operand.Val->getOperand(0));
1845    break;
1846  case ISD::ANY_EXTEND:
1847    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1848           "Invalid ANY_EXTEND!");
1849    if (Operand.getValueType() == VT) return Operand;   // noop extension
1850    assert(MVT::getSizeInBits(Operand.getValueType()) < MVT::getSizeInBits(VT)
1851           && "Invalid anyext node, dst < src!");
1852    if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND)
1853      // (ext (zext x)) -> (zext x)  and  (ext (sext x)) -> (sext x)
1854      return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1855    break;
1856  case ISD::TRUNCATE:
1857    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1858           "Invalid TRUNCATE!");
1859    if (Operand.getValueType() == VT) return Operand;   // noop truncate
1860    assert(MVT::getSizeInBits(Operand.getValueType()) > MVT::getSizeInBits(VT)
1861           && "Invalid truncate node, src < dst!");
1862    if (OpOpcode == ISD::TRUNCATE)
1863      return getNode(ISD::TRUNCATE, VT, Operand.Val->getOperand(0));
1864    else if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND ||
1865             OpOpcode == ISD::ANY_EXTEND) {
1866      // If the source is smaller than the dest, we still need an extend.
1867      if (MVT::getSizeInBits(Operand.Val->getOperand(0).getValueType())
1868          < MVT::getSizeInBits(VT))
1869        return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1870      else if (MVT::getSizeInBits(Operand.Val->getOperand(0).getValueType())
1871               > MVT::getSizeInBits(VT))
1872        return getNode(ISD::TRUNCATE, VT, Operand.Val->getOperand(0));
1873      else
1874        return Operand.Val->getOperand(0);
1875    }
1876    break;
1877  case ISD::BIT_CONVERT:
1878    // Basic sanity checking.
1879    assert(MVT::getSizeInBits(VT) == MVT::getSizeInBits(Operand.getValueType())
1880           && "Cannot BIT_CONVERT between types of different sizes!");
1881    if (VT == Operand.getValueType()) return Operand;  // noop conversion.
1882    if (OpOpcode == ISD::BIT_CONVERT)  // bitconv(bitconv(x)) -> bitconv(x)
1883      return getNode(ISD::BIT_CONVERT, VT, Operand.getOperand(0));
1884    if (OpOpcode == ISD::UNDEF)
1885      return getNode(ISD::UNDEF, VT);
1886    break;
1887  case ISD::SCALAR_TO_VECTOR:
1888    assert(MVT::isVector(VT) && !MVT::isVector(Operand.getValueType()) &&
1889           MVT::getVectorElementType(VT) == Operand.getValueType() &&
1890           "Illegal SCALAR_TO_VECTOR node!");
1891    break;
1892  case ISD::FNEG:
1893    if (OpOpcode == ISD::FSUB)   // -(X-Y) -> (Y-X)
1894      return getNode(ISD::FSUB, VT, Operand.Val->getOperand(1),
1895                     Operand.Val->getOperand(0));
1896    if (OpOpcode == ISD::FNEG)  // --X -> X
1897      return Operand.Val->getOperand(0);
1898    break;
1899  case ISD::FABS:
1900    if (OpOpcode == ISD::FNEG)  // abs(-X) -> abs(X)
1901      return getNode(ISD::FABS, VT, Operand.Val->getOperand(0));
1902    break;
1903  }
1904
1905  SDNode *N;
1906  SDVTList VTs = getVTList(VT);
1907  if (VT != MVT::Flag) { // Don't CSE flag producing nodes
1908    FoldingSetNodeID ID;
1909    SDOperand Ops[1] = { Operand };
1910    AddNodeIDNode(ID, Opcode, VTs, Ops, 1);
1911    void *IP = 0;
1912    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1913      return SDOperand(E, 0);
1914    N = new UnarySDNode(Opcode, VTs, Operand);
1915    CSEMap.InsertNode(N, IP);
1916  } else {
1917    N = new UnarySDNode(Opcode, VTs, Operand);
1918  }
1919  AllNodes.push_back(N);
1920  return SDOperand(N, 0);
1921}
1922
1923
1924
1925SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1926                                SDOperand N1, SDOperand N2) {
1927  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val);
1928  ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val);
1929  switch (Opcode) {
1930  default: break;
1931  case ISD::TokenFactor:
1932    assert(VT == MVT::Other && N1.getValueType() == MVT::Other &&
1933           N2.getValueType() == MVT::Other && "Invalid token factor!");
1934    // Fold trivial token factors.
1935    if (N1.getOpcode() == ISD::EntryToken) return N2;
1936    if (N2.getOpcode() == ISD::EntryToken) return N1;
1937    break;
1938  case ISD::AND:
1939    assert(MVT::isInteger(VT) && N1.getValueType() == N2.getValueType() &&
1940           N1.getValueType() == VT && "Binary operator types must match!");
1941    // (X & 0) -> 0.  This commonly occurs when legalizing i64 values, so it's
1942    // worth handling here.
1943    if (N2C && N2C->getValue() == 0)
1944      return N2;
1945    if (N2C && N2C->isAllOnesValue())  // X & -1 -> X
1946      return N1;
1947    break;
1948  case ISD::OR:
1949  case ISD::XOR:
1950    assert(MVT::isInteger(VT) && N1.getValueType() == N2.getValueType() &&
1951           N1.getValueType() == VT && "Binary operator types must match!");
1952    // (X ^| 0) -> X.  This commonly occurs when legalizing i64 values, so it's
1953    // worth handling here.
1954    if (N2C && N2C->getValue() == 0)
1955      return N1;
1956    break;
1957  case ISD::UDIV:
1958  case ISD::UREM:
1959  case ISD::MULHU:
1960  case ISD::MULHS:
1961    assert(MVT::isInteger(VT) && "This operator does not apply to FP types!");
1962    // fall through
1963  case ISD::ADD:
1964  case ISD::SUB:
1965  case ISD::MUL:
1966  case ISD::SDIV:
1967  case ISD::SREM:
1968  case ISD::FADD:
1969  case ISD::FSUB:
1970  case ISD::FMUL:
1971  case ISD::FDIV:
1972  case ISD::FREM:
1973    assert(N1.getValueType() == N2.getValueType() &&
1974           N1.getValueType() == VT && "Binary operator types must match!");
1975    break;
1976  case ISD::FCOPYSIGN:   // N1 and result must match.  N1/N2 need not match.
1977    assert(N1.getValueType() == VT &&
1978           MVT::isFloatingPoint(N1.getValueType()) &&
1979           MVT::isFloatingPoint(N2.getValueType()) &&
1980           "Invalid FCOPYSIGN!");
1981    break;
1982  case ISD::SHL:
1983  case ISD::SRA:
1984  case ISD::SRL:
1985  case ISD::ROTL:
1986  case ISD::ROTR:
1987    assert(VT == N1.getValueType() &&
1988           "Shift operators return type must be the same as their first arg");
1989    assert(MVT::isInteger(VT) && MVT::isInteger(N2.getValueType()) &&
1990           VT != MVT::i1 && "Shifts only work on integers");
1991    break;
1992  case ISD::FP_ROUND_INREG: {
1993    MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
1994    assert(VT == N1.getValueType() && "Not an inreg round!");
1995    assert(MVT::isFloatingPoint(VT) && MVT::isFloatingPoint(EVT) &&
1996           "Cannot FP_ROUND_INREG integer types");
1997    assert(MVT::getSizeInBits(EVT) <= MVT::getSizeInBits(VT) &&
1998           "Not rounding down!");
1999    if (cast<VTSDNode>(N2)->getVT() == VT) return N1;  // Not actually rounding.
2000    break;
2001  }
2002  case ISD::FP_ROUND:
2003    assert(MVT::isFloatingPoint(VT) &&
2004           MVT::isFloatingPoint(N1.getValueType()) &&
2005           MVT::getSizeInBits(VT) <= MVT::getSizeInBits(N1.getValueType()) &&
2006           isa<ConstantSDNode>(N2) && "Invalid FP_ROUND!");
2007    if (N1.getValueType() == VT) return N1;  // noop conversion.
2008    break;
2009  case ISD::AssertSext:
2010  case ISD::AssertZext: {
2011    MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
2012    assert(VT == N1.getValueType() && "Not an inreg extend!");
2013    assert(MVT::isInteger(VT) && MVT::isInteger(EVT) &&
2014           "Cannot *_EXTEND_INREG FP types");
2015    assert(MVT::getSizeInBits(EVT) <= MVT::getSizeInBits(VT) &&
2016           "Not extending!");
2017    if (VT == EVT) return N1; // noop assertion.
2018    break;
2019  }
2020  case ISD::SIGN_EXTEND_INREG: {
2021    MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
2022    assert(VT == N1.getValueType() && "Not an inreg extend!");
2023    assert(MVT::isInteger(VT) && MVT::isInteger(EVT) &&
2024           "Cannot *_EXTEND_INREG FP types");
2025    assert(MVT::getSizeInBits(EVT) <= MVT::getSizeInBits(VT) &&
2026           "Not extending!");
2027    if (EVT == VT) return N1;  // Not actually extending
2028
2029    if (N1C) {
2030      APInt Val = N1C->getAPIntValue();
2031      unsigned FromBits = MVT::getSizeInBits(cast<VTSDNode>(N2)->getVT());
2032      Val <<= Val.getBitWidth()-FromBits;
2033      Val = Val.lshr(Val.getBitWidth()-FromBits);
2034      return getConstant(Val, VT);
2035    }
2036    break;
2037  }
2038  case ISD::EXTRACT_VECTOR_ELT:
2039    assert(N2C && "Bad EXTRACT_VECTOR_ELT!");
2040
2041    // EXTRACT_VECTOR_ELT of CONCAT_VECTORS is often formed while lowering is
2042    // expanding copies of large vectors from registers.
2043    if (N1.getOpcode() == ISD::CONCAT_VECTORS &&
2044        N1.getNumOperands() > 0) {
2045      unsigned Factor =
2046        MVT::getVectorNumElements(N1.getOperand(0).getValueType());
2047      return getNode(ISD::EXTRACT_VECTOR_ELT, VT,
2048                     N1.getOperand(N2C->getValue() / Factor),
2049                     getConstant(N2C->getValue() % Factor, N2.getValueType()));
2050    }
2051
2052    // EXTRACT_VECTOR_ELT of BUILD_VECTOR is often formed while lowering is
2053    // expanding large vector constants.
2054    if (N1.getOpcode() == ISD::BUILD_VECTOR)
2055      return N1.getOperand(N2C->getValue());
2056
2057    // EXTRACT_VECTOR_ELT of INSERT_VECTOR_ELT is often formed when vector
2058    // operations are lowered to scalars.
2059    if (N1.getOpcode() == ISD::INSERT_VECTOR_ELT)
2060      if (ConstantSDNode *IEC = dyn_cast<ConstantSDNode>(N1.getOperand(2))) {
2061        if (IEC == N2C)
2062          return N1.getOperand(1);
2063        else
2064          return getNode(ISD::EXTRACT_VECTOR_ELT, VT, N1.getOperand(0), N2);
2065      }
2066    break;
2067  case ISD::EXTRACT_ELEMENT:
2068    assert(N2C && (unsigned)N2C->getValue() < 2 && "Bad EXTRACT_ELEMENT!");
2069
2070    // EXTRACT_ELEMENT of BUILD_PAIR is often formed while legalize is expanding
2071    // 64-bit integers into 32-bit parts.  Instead of building the extract of
2072    // the BUILD_PAIR, only to have legalize rip it apart, just do it now.
2073    if (N1.getOpcode() == ISD::BUILD_PAIR)
2074      return N1.getOperand(N2C->getValue());
2075
2076    // EXTRACT_ELEMENT of a constant int is also very common.
2077    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) {
2078      unsigned Shift = MVT::getSizeInBits(VT) * N2C->getValue();
2079      return getConstant(C->getValue() >> Shift, VT);
2080    }
2081    break;
2082  case ISD::EXTRACT_SUBVECTOR:
2083    if (N1.getValueType() == VT) // Trivial extraction.
2084      return N1;
2085    break;
2086  }
2087
2088  if (N1C) {
2089    if (N2C) {
2090      APInt C1 = N1C->getAPIntValue(), C2 = N2C->getAPIntValue();
2091      switch (Opcode) {
2092      case ISD::ADD: return getConstant(C1 + C2, VT);
2093      case ISD::SUB: return getConstant(C1 - C2, VT);
2094      case ISD::MUL: return getConstant(C1 * C2, VT);
2095      case ISD::UDIV:
2096        if (C2.getBoolValue()) return getConstant(C1.udiv(C2), VT);
2097        break;
2098      case ISD::UREM :
2099        if (C2.getBoolValue()) return getConstant(C1.urem(C2), VT);
2100        break;
2101      case ISD::SDIV :
2102        if (C2.getBoolValue()) return getConstant(C1.sdiv(C2), VT);
2103        break;
2104      case ISD::SREM :
2105        if (C2.getBoolValue()) return getConstant(C1.srem(C2), VT);
2106        break;
2107      case ISD::AND  : return getConstant(C1 & C2, VT);
2108      case ISD::OR   : return getConstant(C1 | C2, VT);
2109      case ISD::XOR  : return getConstant(C1 ^ C2, VT);
2110      case ISD::SHL  : return getConstant(C1 << C2, VT);
2111      case ISD::SRL  : return getConstant(C1.lshr(C2), VT);
2112      case ISD::SRA  : return getConstant(C1.ashr(C2), VT);
2113      case ISD::ROTL : return getConstant(C1.rotl(C2), VT);
2114      case ISD::ROTR : return getConstant(C1.rotr(C2), VT);
2115      default: break;
2116      }
2117    } else {      // Cannonicalize constant to RHS if commutative
2118      if (isCommutativeBinOp(Opcode)) {
2119        std::swap(N1C, N2C);
2120        std::swap(N1, N2);
2121      }
2122    }
2123  }
2124
2125  // Constant fold FP operations.
2126  ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1.Val);
2127  ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2.Val);
2128  if (N1CFP) {
2129    if (!N2CFP && isCommutativeBinOp(Opcode)) {
2130      // Cannonicalize constant to RHS if commutative
2131      std::swap(N1CFP, N2CFP);
2132      std::swap(N1, N2);
2133    } else if (N2CFP && VT != MVT::ppcf128) {
2134      APFloat V1 = N1CFP->getValueAPF(), V2 = N2CFP->getValueAPF();
2135      APFloat::opStatus s;
2136      switch (Opcode) {
2137      case ISD::FADD:
2138        s = V1.add(V2, APFloat::rmNearestTiesToEven);
2139        if (s != APFloat::opInvalidOp)
2140          return getConstantFP(V1, VT);
2141        break;
2142      case ISD::FSUB:
2143        s = V1.subtract(V2, APFloat::rmNearestTiesToEven);
2144        if (s!=APFloat::opInvalidOp)
2145          return getConstantFP(V1, VT);
2146        break;
2147      case ISD::FMUL:
2148        s = V1.multiply(V2, APFloat::rmNearestTiesToEven);
2149        if (s!=APFloat::opInvalidOp)
2150          return getConstantFP(V1, VT);
2151        break;
2152      case ISD::FDIV:
2153        s = V1.divide(V2, APFloat::rmNearestTiesToEven);
2154        if (s!=APFloat::opInvalidOp && s!=APFloat::opDivByZero)
2155          return getConstantFP(V1, VT);
2156        break;
2157      case ISD::FREM :
2158        s = V1.mod(V2, APFloat::rmNearestTiesToEven);
2159        if (s!=APFloat::opInvalidOp && s!=APFloat::opDivByZero)
2160          return getConstantFP(V1, VT);
2161        break;
2162      case ISD::FCOPYSIGN:
2163        V1.copySign(V2);
2164        return getConstantFP(V1, VT);
2165      default: break;
2166      }
2167    }
2168  }
2169
2170  // Canonicalize an UNDEF to the RHS, even over a constant.
2171  if (N1.getOpcode() == ISD::UNDEF) {
2172    if (isCommutativeBinOp(Opcode)) {
2173      std::swap(N1, N2);
2174    } else {
2175      switch (Opcode) {
2176      case ISD::FP_ROUND_INREG:
2177      case ISD::SIGN_EXTEND_INREG:
2178      case ISD::SUB:
2179      case ISD::FSUB:
2180      case ISD::FDIV:
2181      case ISD::FREM:
2182      case ISD::SRA:
2183        return N1;     // fold op(undef, arg2) -> undef
2184      case ISD::UDIV:
2185      case ISD::SDIV:
2186      case ISD::UREM:
2187      case ISD::SREM:
2188      case ISD::SRL:
2189      case ISD::SHL:
2190        if (!MVT::isVector(VT))
2191          return getConstant(0, VT);    // fold op(undef, arg2) -> 0
2192        // For vectors, we can't easily build an all zero vector, just return
2193        // the LHS.
2194        return N2;
2195      }
2196    }
2197  }
2198
2199  // Fold a bunch of operators when the RHS is undef.
2200  if (N2.getOpcode() == ISD::UNDEF) {
2201    switch (Opcode) {
2202    case ISD::ADD:
2203    case ISD::ADDC:
2204    case ISD::ADDE:
2205    case ISD::SUB:
2206    case ISD::FADD:
2207    case ISD::FSUB:
2208    case ISD::FMUL:
2209    case ISD::FDIV:
2210    case ISD::FREM:
2211    case ISD::UDIV:
2212    case ISD::SDIV:
2213    case ISD::UREM:
2214    case ISD::SREM:
2215    case ISD::XOR:
2216      return N2;       // fold op(arg1, undef) -> undef
2217    case ISD::MUL:
2218    case ISD::AND:
2219    case ISD::SRL:
2220    case ISD::SHL:
2221      if (!MVT::isVector(VT))
2222        return getConstant(0, VT);  // fold op(arg1, undef) -> 0
2223      // For vectors, we can't easily build an all zero vector, just return
2224      // the LHS.
2225      return N1;
2226    case ISD::OR:
2227      if (!MVT::isVector(VT))
2228        return getConstant(MVT::getIntVTBitMask(VT), VT);
2229      // For vectors, we can't easily build an all one vector, just return
2230      // the LHS.
2231      return N1;
2232    case ISD::SRA:
2233      return N1;
2234    }
2235  }
2236
2237  // Memoize this node if possible.
2238  SDNode *N;
2239  SDVTList VTs = getVTList(VT);
2240  if (VT != MVT::Flag) {
2241    SDOperand Ops[] = { N1, N2 };
2242    FoldingSetNodeID ID;
2243    AddNodeIDNode(ID, Opcode, VTs, Ops, 2);
2244    void *IP = 0;
2245    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2246      return SDOperand(E, 0);
2247    N = new BinarySDNode(Opcode, VTs, N1, N2);
2248    CSEMap.InsertNode(N, IP);
2249  } else {
2250    N = new BinarySDNode(Opcode, VTs, N1, N2);
2251  }
2252
2253  AllNodes.push_back(N);
2254  return SDOperand(N, 0);
2255}
2256
2257SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2258                                SDOperand N1, SDOperand N2, SDOperand N3) {
2259  // Perform various simplifications.
2260  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val);
2261  ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val);
2262  switch (Opcode) {
2263  case ISD::SETCC: {
2264    // Use FoldSetCC to simplify SETCC's.
2265    SDOperand Simp = FoldSetCC(VT, N1, N2, cast<CondCodeSDNode>(N3)->get());
2266    if (Simp.Val) return Simp;
2267    break;
2268  }
2269  case ISD::SELECT:
2270    if (N1C) {
2271     if (N1C->getValue())
2272        return N2;             // select true, X, Y -> X
2273      else
2274        return N3;             // select false, X, Y -> Y
2275    }
2276
2277    if (N2 == N3) return N2;   // select C, X, X -> X
2278    break;
2279  case ISD::BRCOND:
2280    if (N2C) {
2281      if (N2C->getValue()) // Unconditional branch
2282        return getNode(ISD::BR, MVT::Other, N1, N3);
2283      else
2284        return N1;         // Never-taken branch
2285    }
2286    break;
2287  case ISD::VECTOR_SHUFFLE:
2288    assert(VT == N1.getValueType() && VT == N2.getValueType() &&
2289           MVT::isVector(VT) && MVT::isVector(N3.getValueType()) &&
2290           N3.getOpcode() == ISD::BUILD_VECTOR &&
2291           MVT::getVectorNumElements(VT) == N3.getNumOperands() &&
2292           "Illegal VECTOR_SHUFFLE node!");
2293    break;
2294  case ISD::BIT_CONVERT:
2295    // Fold bit_convert nodes from a type to themselves.
2296    if (N1.getValueType() == VT)
2297      return N1;
2298    break;
2299  }
2300
2301  // Memoize node if it doesn't produce a flag.
2302  SDNode *N;
2303  SDVTList VTs = getVTList(VT);
2304  if (VT != MVT::Flag) {
2305    SDOperand Ops[] = { N1, N2, N3 };
2306    FoldingSetNodeID ID;
2307    AddNodeIDNode(ID, Opcode, VTs, Ops, 3);
2308    void *IP = 0;
2309    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2310      return SDOperand(E, 0);
2311    N = new TernarySDNode(Opcode, VTs, N1, N2, N3);
2312    CSEMap.InsertNode(N, IP);
2313  } else {
2314    N = new TernarySDNode(Opcode, VTs, N1, N2, N3);
2315  }
2316  AllNodes.push_back(N);
2317  return SDOperand(N, 0);
2318}
2319
2320SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2321                                SDOperand N1, SDOperand N2, SDOperand N3,
2322                                SDOperand N4) {
2323  SDOperand Ops[] = { N1, N2, N3, N4 };
2324  return getNode(Opcode, VT, Ops, 4);
2325}
2326
2327SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2328                                SDOperand N1, SDOperand N2, SDOperand N3,
2329                                SDOperand N4, SDOperand N5) {
2330  SDOperand Ops[] = { N1, N2, N3, N4, N5 };
2331  return getNode(Opcode, VT, Ops, 5);
2332}
2333
2334SDOperand SelectionDAG::getMemcpy(SDOperand Chain, SDOperand Dest,
2335                                  SDOperand Src, SDOperand Size,
2336                                  SDOperand Align,
2337                                  SDOperand AlwaysInline) {
2338  SDOperand Ops[] = { Chain, Dest, Src, Size, Align, AlwaysInline };
2339  return getNode(ISD::MEMCPY, MVT::Other, Ops, 6);
2340}
2341
2342SDOperand SelectionDAG::getMemmove(SDOperand Chain, SDOperand Dest,
2343                                  SDOperand Src, SDOperand Size,
2344                                  SDOperand Align,
2345                                  SDOperand AlwaysInline) {
2346  SDOperand Ops[] = { Chain, Dest, Src, Size, Align, AlwaysInline };
2347  return getNode(ISD::MEMMOVE, MVT::Other, Ops, 6);
2348}
2349
2350SDOperand SelectionDAG::getMemset(SDOperand Chain, SDOperand Dest,
2351                                  SDOperand Src, SDOperand Size,
2352                                  SDOperand Align,
2353                                  SDOperand AlwaysInline) {
2354  SDOperand Ops[] = { Chain, Dest, Src, Size, Align, AlwaysInline };
2355  return getNode(ISD::MEMSET, MVT::Other, Ops, 6);
2356}
2357
2358SDOperand SelectionDAG::getAtomic(unsigned Opcode, SDOperand Chain,
2359                                  SDOperand Ptr, SDOperand Cmp,
2360                                  SDOperand Swp, MVT::ValueType VT) {
2361  assert(Opcode == ISD::ATOMIC_LCS && "Invalid Atomic Op");
2362  assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types");
2363  SDVTList VTs = getVTList(Cmp.getValueType(), MVT::Other);
2364  FoldingSetNodeID ID;
2365  SDOperand Ops[] = {Chain, Ptr, Cmp, Swp};
2366  AddNodeIDNode(ID, Opcode, VTs, Ops, 4);
2367  ID.AddInteger((unsigned int)VT);
2368  void* IP = 0;
2369  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2370    return SDOperand(E, 0);
2371  SDNode* N = new AtomicSDNode(Opcode, VTs, Chain, Ptr, Cmp, Swp, VT);
2372  CSEMap.InsertNode(N, IP);
2373  AllNodes.push_back(N);
2374  return SDOperand(N, 0);
2375}
2376
2377SDOperand SelectionDAG::getAtomic(unsigned Opcode, SDOperand Chain,
2378                                  SDOperand Ptr, SDOperand Val,
2379                                  MVT::ValueType VT) {
2380  assert((Opcode == ISD::ATOMIC_LAS || Opcode == ISD::ATOMIC_SWAP)
2381         && "Invalid Atomic Op");
2382  SDVTList VTs = getVTList(Val.getValueType(), MVT::Other);
2383  FoldingSetNodeID ID;
2384  SDOperand Ops[] = {Chain, Ptr, Val};
2385  AddNodeIDNode(ID, Opcode, VTs, Ops, 3);
2386  ID.AddInteger((unsigned int)VT);
2387  void* IP = 0;
2388  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2389    return SDOperand(E, 0);
2390  SDNode* N = new AtomicSDNode(Opcode, VTs, Chain, Ptr, Val, VT);
2391  CSEMap.InsertNode(N, IP);
2392  AllNodes.push_back(N);
2393  return SDOperand(N, 0);
2394}
2395
2396SDOperand SelectionDAG::getLoad(MVT::ValueType VT,
2397                                SDOperand Chain, SDOperand Ptr,
2398                                const Value *SV, int SVOffset,
2399                                bool isVolatile, unsigned Alignment) {
2400  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2401    const Type *Ty = 0;
2402    if (VT != MVT::iPTR) {
2403      Ty = MVT::getTypeForValueType(VT);
2404    } else if (SV) {
2405      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2406      assert(PT && "Value for load must be a pointer");
2407      Ty = PT->getElementType();
2408    }
2409    assert(Ty && "Could not get type information for load");
2410    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2411  }
2412  SDVTList VTs = getVTList(VT, MVT::Other);
2413  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2414  SDOperand Ops[] = { Chain, Ptr, Undef };
2415  FoldingSetNodeID ID;
2416  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
2417  ID.AddInteger(ISD::UNINDEXED);
2418  ID.AddInteger(ISD::NON_EXTLOAD);
2419  ID.AddInteger((unsigned int)VT);
2420  ID.AddInteger(Alignment);
2421  ID.AddInteger(isVolatile);
2422  void *IP = 0;
2423  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2424    return SDOperand(E, 0);
2425  SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED,
2426                             ISD::NON_EXTLOAD, VT, SV, SVOffset, Alignment,
2427                             isVolatile);
2428  CSEMap.InsertNode(N, IP);
2429  AllNodes.push_back(N);
2430  return SDOperand(N, 0);
2431}
2432
2433SDOperand SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, MVT::ValueType VT,
2434                                   SDOperand Chain, SDOperand Ptr,
2435                                   const Value *SV,
2436                                   int SVOffset, MVT::ValueType EVT,
2437                                   bool isVolatile, unsigned Alignment) {
2438  // If they are asking for an extending load from/to the same thing, return a
2439  // normal load.
2440  if (VT == EVT)
2441    return getLoad(VT, Chain, Ptr, SV, SVOffset, isVolatile, Alignment);
2442
2443  if (MVT::isVector(VT))
2444    assert(EVT == MVT::getVectorElementType(VT) && "Invalid vector extload!");
2445  else
2446    assert(MVT::getSizeInBits(EVT) < MVT::getSizeInBits(VT) &&
2447           "Should only be an extending load, not truncating!");
2448  assert((ExtType == ISD::EXTLOAD || MVT::isInteger(VT)) &&
2449         "Cannot sign/zero extend a FP/Vector load!");
2450  assert(MVT::isInteger(VT) == MVT::isInteger(EVT) &&
2451         "Cannot convert from FP to Int or Int -> FP!");
2452
2453  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2454    const Type *Ty = 0;
2455    if (VT != MVT::iPTR) {
2456      Ty = MVT::getTypeForValueType(VT);
2457    } else if (SV) {
2458      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2459      assert(PT && "Value for load must be a pointer");
2460      Ty = PT->getElementType();
2461    }
2462    assert(Ty && "Could not get type information for load");
2463    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2464  }
2465  SDVTList VTs = getVTList(VT, MVT::Other);
2466  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2467  SDOperand Ops[] = { Chain, Ptr, Undef };
2468  FoldingSetNodeID ID;
2469  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
2470  ID.AddInteger(ISD::UNINDEXED);
2471  ID.AddInteger(ExtType);
2472  ID.AddInteger((unsigned int)EVT);
2473  ID.AddInteger(Alignment);
2474  ID.AddInteger(isVolatile);
2475  void *IP = 0;
2476  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2477    return SDOperand(E, 0);
2478  SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED, ExtType, EVT,
2479                             SV, SVOffset, Alignment, isVolatile);
2480  CSEMap.InsertNode(N, IP);
2481  AllNodes.push_back(N);
2482  return SDOperand(N, 0);
2483}
2484
2485SDOperand
2486SelectionDAG::getIndexedLoad(SDOperand OrigLoad, SDOperand Base,
2487                             SDOperand Offset, ISD::MemIndexedMode AM) {
2488  LoadSDNode *LD = cast<LoadSDNode>(OrigLoad);
2489  assert(LD->getOffset().getOpcode() == ISD::UNDEF &&
2490         "Load is already a indexed load!");
2491  MVT::ValueType VT = OrigLoad.getValueType();
2492  SDVTList VTs = getVTList(VT, Base.getValueType(), MVT::Other);
2493  SDOperand Ops[] = { LD->getChain(), Base, Offset };
2494  FoldingSetNodeID ID;
2495  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
2496  ID.AddInteger(AM);
2497  ID.AddInteger(LD->getExtensionType());
2498  ID.AddInteger((unsigned int)(LD->getMemoryVT()));
2499  ID.AddInteger(LD->getAlignment());
2500  ID.AddInteger(LD->isVolatile());
2501  void *IP = 0;
2502  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2503    return SDOperand(E, 0);
2504  SDNode *N = new LoadSDNode(Ops, VTs, AM,
2505                             LD->getExtensionType(), LD->getMemoryVT(),
2506                             LD->getSrcValue(), LD->getSrcValueOffset(),
2507                             LD->getAlignment(), LD->isVolatile());
2508  CSEMap.InsertNode(N, IP);
2509  AllNodes.push_back(N);
2510  return SDOperand(N, 0);
2511}
2512
2513SDOperand SelectionDAG::getStore(SDOperand Chain, SDOperand Val,
2514                                 SDOperand Ptr, const Value *SV, int SVOffset,
2515                                 bool isVolatile, unsigned Alignment) {
2516  MVT::ValueType VT = Val.getValueType();
2517
2518  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2519    const Type *Ty = 0;
2520    if (VT != MVT::iPTR) {
2521      Ty = MVT::getTypeForValueType(VT);
2522    } else if (SV) {
2523      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2524      assert(PT && "Value for store must be a pointer");
2525      Ty = PT->getElementType();
2526    }
2527    assert(Ty && "Could not get type information for store");
2528    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2529  }
2530  SDVTList VTs = getVTList(MVT::Other);
2531  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2532  SDOperand Ops[] = { Chain, Val, Ptr, Undef };
2533  FoldingSetNodeID ID;
2534  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
2535  ID.AddInteger(ISD::UNINDEXED);
2536  ID.AddInteger(false);
2537  ID.AddInteger((unsigned int)VT);
2538  ID.AddInteger(Alignment);
2539  ID.AddInteger(isVolatile);
2540  void *IP = 0;
2541  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2542    return SDOperand(E, 0);
2543  SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, false,
2544                              VT, SV, SVOffset, Alignment, isVolatile);
2545  CSEMap.InsertNode(N, IP);
2546  AllNodes.push_back(N);
2547  return SDOperand(N, 0);
2548}
2549
2550SDOperand SelectionDAG::getTruncStore(SDOperand Chain, SDOperand Val,
2551                                      SDOperand Ptr, const Value *SV,
2552                                      int SVOffset, MVT::ValueType SVT,
2553                                      bool isVolatile, unsigned Alignment) {
2554  MVT::ValueType VT = Val.getValueType();
2555
2556  if (VT == SVT)
2557    return getStore(Chain, Val, Ptr, SV, SVOffset, isVolatile, Alignment);
2558
2559  assert(MVT::getSizeInBits(VT) > MVT::getSizeInBits(SVT) &&
2560         "Not a truncation?");
2561  assert(MVT::isInteger(VT) == MVT::isInteger(SVT) &&
2562         "Can't do FP-INT conversion!");
2563
2564  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2565    const Type *Ty = 0;
2566    if (VT != MVT::iPTR) {
2567      Ty = MVT::getTypeForValueType(VT);
2568    } else if (SV) {
2569      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2570      assert(PT && "Value for store must be a pointer");
2571      Ty = PT->getElementType();
2572    }
2573    assert(Ty && "Could not get type information for store");
2574    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2575  }
2576  SDVTList VTs = getVTList(MVT::Other);
2577  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2578  SDOperand Ops[] = { Chain, Val, Ptr, Undef };
2579  FoldingSetNodeID ID;
2580  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
2581  ID.AddInteger(ISD::UNINDEXED);
2582  ID.AddInteger(1);
2583  ID.AddInteger((unsigned int)SVT);
2584  ID.AddInteger(Alignment);
2585  ID.AddInteger(isVolatile);
2586  void *IP = 0;
2587  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2588    return SDOperand(E, 0);
2589  SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, true,
2590                              SVT, SV, SVOffset, Alignment, isVolatile);
2591  CSEMap.InsertNode(N, IP);
2592  AllNodes.push_back(N);
2593  return SDOperand(N, 0);
2594}
2595
2596SDOperand
2597SelectionDAG::getIndexedStore(SDOperand OrigStore, SDOperand Base,
2598                              SDOperand Offset, ISD::MemIndexedMode AM) {
2599  StoreSDNode *ST = cast<StoreSDNode>(OrigStore);
2600  assert(ST->getOffset().getOpcode() == ISD::UNDEF &&
2601         "Store is already a indexed store!");
2602  SDVTList VTs = getVTList(Base.getValueType(), MVT::Other);
2603  SDOperand Ops[] = { ST->getChain(), ST->getValue(), Base, Offset };
2604  FoldingSetNodeID ID;
2605  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
2606  ID.AddInteger(AM);
2607  ID.AddInteger(ST->isTruncatingStore());
2608  ID.AddInteger((unsigned int)(ST->getMemoryVT()));
2609  ID.AddInteger(ST->getAlignment());
2610  ID.AddInteger(ST->isVolatile());
2611  void *IP = 0;
2612  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2613    return SDOperand(E, 0);
2614  SDNode *N = new StoreSDNode(Ops, VTs, AM,
2615                              ST->isTruncatingStore(), ST->getMemoryVT(),
2616                              ST->getSrcValue(), ST->getSrcValueOffset(),
2617                              ST->getAlignment(), ST->isVolatile());
2618  CSEMap.InsertNode(N, IP);
2619  AllNodes.push_back(N);
2620  return SDOperand(N, 0);
2621}
2622
2623SDOperand SelectionDAG::getVAArg(MVT::ValueType VT,
2624                                 SDOperand Chain, SDOperand Ptr,
2625                                 SDOperand SV) {
2626  SDOperand Ops[] = { Chain, Ptr, SV };
2627  return getNode(ISD::VAARG, getVTList(VT, MVT::Other), Ops, 3);
2628}
2629
2630SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2631                                const SDOperand *Ops, unsigned NumOps) {
2632  switch (NumOps) {
2633  case 0: return getNode(Opcode, VT);
2634  case 1: return getNode(Opcode, VT, Ops[0]);
2635  case 2: return getNode(Opcode, VT, Ops[0], Ops[1]);
2636  case 3: return getNode(Opcode, VT, Ops[0], Ops[1], Ops[2]);
2637  default: break;
2638  }
2639
2640  switch (Opcode) {
2641  default: break;
2642  case ISD::SELECT_CC: {
2643    assert(NumOps == 5 && "SELECT_CC takes 5 operands!");
2644    assert(Ops[0].getValueType() == Ops[1].getValueType() &&
2645           "LHS and RHS of condition must have same type!");
2646    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
2647           "True and False arms of SelectCC must have same type!");
2648    assert(Ops[2].getValueType() == VT &&
2649           "select_cc node must be of same type as true and false value!");
2650    break;
2651  }
2652  case ISD::BR_CC: {
2653    assert(NumOps == 5 && "BR_CC takes 5 operands!");
2654    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
2655           "LHS/RHS of comparison should match types!");
2656    break;
2657  }
2658  }
2659
2660  // Memoize nodes.
2661  SDNode *N;
2662  SDVTList VTs = getVTList(VT);
2663  if (VT != MVT::Flag) {
2664    FoldingSetNodeID ID;
2665    AddNodeIDNode(ID, Opcode, VTs, Ops, NumOps);
2666    void *IP = 0;
2667    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2668      return SDOperand(E, 0);
2669    N = new SDNode(Opcode, VTs, Ops, NumOps);
2670    CSEMap.InsertNode(N, IP);
2671  } else {
2672    N = new SDNode(Opcode, VTs, Ops, NumOps);
2673  }
2674  AllNodes.push_back(N);
2675  return SDOperand(N, 0);
2676}
2677
2678SDOperand SelectionDAG::getNode(unsigned Opcode,
2679                                std::vector<MVT::ValueType> &ResultTys,
2680                                const SDOperand *Ops, unsigned NumOps) {
2681  return getNode(Opcode, getNodeValueTypes(ResultTys), ResultTys.size(),
2682                 Ops, NumOps);
2683}
2684
2685SDOperand SelectionDAG::getNode(unsigned Opcode,
2686                                const MVT::ValueType *VTs, unsigned NumVTs,
2687                                const SDOperand *Ops, unsigned NumOps) {
2688  if (NumVTs == 1)
2689    return getNode(Opcode, VTs[0], Ops, NumOps);
2690  return getNode(Opcode, makeVTList(VTs, NumVTs), Ops, NumOps);
2691}
2692
2693SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2694                                const SDOperand *Ops, unsigned NumOps) {
2695  if (VTList.NumVTs == 1)
2696    return getNode(Opcode, VTList.VTs[0], Ops, NumOps);
2697
2698  switch (Opcode) {
2699  // FIXME: figure out how to safely handle things like
2700  // int foo(int x) { return 1 << (x & 255); }
2701  // int bar() { return foo(256); }
2702#if 0
2703  case ISD::SRA_PARTS:
2704  case ISD::SRL_PARTS:
2705  case ISD::SHL_PARTS:
2706    if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG &&
2707        cast<VTSDNode>(N3.getOperand(1))->getVT() != MVT::i1)
2708      return getNode(Opcode, VT, N1, N2, N3.getOperand(0));
2709    else if (N3.getOpcode() == ISD::AND)
2710      if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N3.getOperand(1))) {
2711        // If the and is only masking out bits that cannot effect the shift,
2712        // eliminate the and.
2713        unsigned NumBits = MVT::getSizeInBits(VT)*2;
2714        if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1)
2715          return getNode(Opcode, VT, N1, N2, N3.getOperand(0));
2716      }
2717    break;
2718#endif
2719  }
2720
2721  // Memoize the node unless it returns a flag.
2722  SDNode *N;
2723  if (VTList.VTs[VTList.NumVTs-1] != MVT::Flag) {
2724    FoldingSetNodeID ID;
2725    AddNodeIDNode(ID, Opcode, VTList, Ops, NumOps);
2726    void *IP = 0;
2727    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2728      return SDOperand(E, 0);
2729    if (NumOps == 1)
2730      N = new UnarySDNode(Opcode, VTList, Ops[0]);
2731    else if (NumOps == 2)
2732      N = new BinarySDNode(Opcode, VTList, Ops[0], Ops[1]);
2733    else if (NumOps == 3)
2734      N = new TernarySDNode(Opcode, VTList, Ops[0], Ops[1], Ops[2]);
2735    else
2736      N = new SDNode(Opcode, VTList, Ops, NumOps);
2737    CSEMap.InsertNode(N, IP);
2738  } else {
2739    if (NumOps == 1)
2740      N = new UnarySDNode(Opcode, VTList, Ops[0]);
2741    else if (NumOps == 2)
2742      N = new BinarySDNode(Opcode, VTList, Ops[0], Ops[1]);
2743    else if (NumOps == 3)
2744      N = new TernarySDNode(Opcode, VTList, Ops[0], Ops[1], Ops[2]);
2745    else
2746      N = new SDNode(Opcode, VTList, Ops, NumOps);
2747  }
2748  AllNodes.push_back(N);
2749  return SDOperand(N, 0);
2750}
2751
2752SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList) {
2753  return getNode(Opcode, VTList, 0, 0);
2754}
2755
2756SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2757                                SDOperand N1) {
2758  SDOperand Ops[] = { N1 };
2759  return getNode(Opcode, VTList, Ops, 1);
2760}
2761
2762SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2763                                SDOperand N1, SDOperand N2) {
2764  SDOperand Ops[] = { N1, N2 };
2765  return getNode(Opcode, VTList, Ops, 2);
2766}
2767
2768SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2769                                SDOperand N1, SDOperand N2, SDOperand N3) {
2770  SDOperand Ops[] = { N1, N2, N3 };
2771  return getNode(Opcode, VTList, Ops, 3);
2772}
2773
2774SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2775                                SDOperand N1, SDOperand N2, SDOperand N3,
2776                                SDOperand N4) {
2777  SDOperand Ops[] = { N1, N2, N3, N4 };
2778  return getNode(Opcode, VTList, Ops, 4);
2779}
2780
2781SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2782                                SDOperand N1, SDOperand N2, SDOperand N3,
2783                                SDOperand N4, SDOperand N5) {
2784  SDOperand Ops[] = { N1, N2, N3, N4, N5 };
2785  return getNode(Opcode, VTList, Ops, 5);
2786}
2787
2788SDVTList SelectionDAG::getVTList(MVT::ValueType VT) {
2789  return makeVTList(SDNode::getValueTypeList(VT), 1);
2790}
2791
2792SDVTList SelectionDAG::getVTList(MVT::ValueType VT1, MVT::ValueType VT2) {
2793  for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
2794       E = VTList.end(); I != E; ++I) {
2795    if (I->size() == 2 && (*I)[0] == VT1 && (*I)[1] == VT2)
2796      return makeVTList(&(*I)[0], 2);
2797  }
2798  std::vector<MVT::ValueType> V;
2799  V.push_back(VT1);
2800  V.push_back(VT2);
2801  VTList.push_front(V);
2802  return makeVTList(&(*VTList.begin())[0], 2);
2803}
2804SDVTList SelectionDAG::getVTList(MVT::ValueType VT1, MVT::ValueType VT2,
2805                                 MVT::ValueType VT3) {
2806  for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
2807       E = VTList.end(); I != E; ++I) {
2808    if (I->size() == 3 && (*I)[0] == VT1 && (*I)[1] == VT2 &&
2809        (*I)[2] == VT3)
2810      return makeVTList(&(*I)[0], 3);
2811  }
2812  std::vector<MVT::ValueType> V;
2813  V.push_back(VT1);
2814  V.push_back(VT2);
2815  V.push_back(VT3);
2816  VTList.push_front(V);
2817  return makeVTList(&(*VTList.begin())[0], 3);
2818}
2819
2820SDVTList SelectionDAG::getVTList(const MVT::ValueType *VTs, unsigned NumVTs) {
2821  switch (NumVTs) {
2822    case 0: assert(0 && "Cannot have nodes without results!");
2823    case 1: return getVTList(VTs[0]);
2824    case 2: return getVTList(VTs[0], VTs[1]);
2825    case 3: return getVTList(VTs[0], VTs[1], VTs[2]);
2826    default: break;
2827  }
2828
2829  for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
2830       E = VTList.end(); I != E; ++I) {
2831    if (I->size() != NumVTs || VTs[0] != (*I)[0] || VTs[1] != (*I)[1]) continue;
2832
2833    bool NoMatch = false;
2834    for (unsigned i = 2; i != NumVTs; ++i)
2835      if (VTs[i] != (*I)[i]) {
2836        NoMatch = true;
2837        break;
2838      }
2839    if (!NoMatch)
2840      return makeVTList(&*I->begin(), NumVTs);
2841  }
2842
2843  VTList.push_front(std::vector<MVT::ValueType>(VTs, VTs+NumVTs));
2844  return makeVTList(&*VTList.begin()->begin(), NumVTs);
2845}
2846
2847
2848/// UpdateNodeOperands - *Mutate* the specified node in-place to have the
2849/// specified operands.  If the resultant node already exists in the DAG,
2850/// this does not modify the specified node, instead it returns the node that
2851/// already exists.  If the resultant node does not exist in the DAG, the
2852/// input node is returned.  As a degenerate case, if you specify the same
2853/// input operands as the node already has, the input node is returned.
2854SDOperand SelectionDAG::
2855UpdateNodeOperands(SDOperand InN, SDOperand Op) {
2856  SDNode *N = InN.Val;
2857  assert(N->getNumOperands() == 1 && "Update with wrong number of operands");
2858
2859  // Check to see if there is no change.
2860  if (Op == N->getOperand(0)) return InN;
2861
2862  // See if the modified node already exists.
2863  void *InsertPos = 0;
2864  if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos))
2865    return SDOperand(Existing, InN.ResNo);
2866
2867  // Nope it doesn't.  Remove the node from it's current place in the maps.
2868  if (InsertPos)
2869    RemoveNodeFromCSEMaps(N);
2870
2871  // Now we update the operands.
2872  N->OperandList[0].Val->removeUser(N);
2873  Op.Val->addUser(N);
2874  N->OperandList[0] = Op;
2875
2876  // If this gets put into a CSE map, add it.
2877  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2878  return InN;
2879}
2880
2881SDOperand SelectionDAG::
2882UpdateNodeOperands(SDOperand InN, SDOperand Op1, SDOperand Op2) {
2883  SDNode *N = InN.Val;
2884  assert(N->getNumOperands() == 2 && "Update with wrong number of operands");
2885
2886  // Check to see if there is no change.
2887  if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1))
2888    return InN;   // No operands changed, just return the input node.
2889
2890  // See if the modified node already exists.
2891  void *InsertPos = 0;
2892  if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos))
2893    return SDOperand(Existing, InN.ResNo);
2894
2895  // Nope it doesn't.  Remove the node from it's current place in the maps.
2896  if (InsertPos)
2897    RemoveNodeFromCSEMaps(N);
2898
2899  // Now we update the operands.
2900  if (N->OperandList[0] != Op1) {
2901    N->OperandList[0].Val->removeUser(N);
2902    Op1.Val->addUser(N);
2903    N->OperandList[0] = Op1;
2904  }
2905  if (N->OperandList[1] != Op2) {
2906    N->OperandList[1].Val->removeUser(N);
2907    Op2.Val->addUser(N);
2908    N->OperandList[1] = Op2;
2909  }
2910
2911  // If this gets put into a CSE map, add it.
2912  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2913  return InN;
2914}
2915
2916SDOperand SelectionDAG::
2917UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2, SDOperand Op3) {
2918  SDOperand Ops[] = { Op1, Op2, Op3 };
2919  return UpdateNodeOperands(N, Ops, 3);
2920}
2921
2922SDOperand SelectionDAG::
2923UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2,
2924                   SDOperand Op3, SDOperand Op4) {
2925  SDOperand Ops[] = { Op1, Op2, Op3, Op4 };
2926  return UpdateNodeOperands(N, Ops, 4);
2927}
2928
2929SDOperand SelectionDAG::
2930UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2,
2931                   SDOperand Op3, SDOperand Op4, SDOperand Op5) {
2932  SDOperand Ops[] = { Op1, Op2, Op3, Op4, Op5 };
2933  return UpdateNodeOperands(N, Ops, 5);
2934}
2935
2936
2937SDOperand SelectionDAG::
2938UpdateNodeOperands(SDOperand InN, SDOperand *Ops, unsigned NumOps) {
2939  SDNode *N = InN.Val;
2940  assert(N->getNumOperands() == NumOps &&
2941         "Update with wrong number of operands");
2942
2943  // Check to see if there is no change.
2944  bool AnyChange = false;
2945  for (unsigned i = 0; i != NumOps; ++i) {
2946    if (Ops[i] != N->getOperand(i)) {
2947      AnyChange = true;
2948      break;
2949    }
2950  }
2951
2952  // No operands changed, just return the input node.
2953  if (!AnyChange) return InN;
2954
2955  // See if the modified node already exists.
2956  void *InsertPos = 0;
2957  if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, NumOps, InsertPos))
2958    return SDOperand(Existing, InN.ResNo);
2959
2960  // Nope it doesn't.  Remove the node from it's current place in the maps.
2961  if (InsertPos)
2962    RemoveNodeFromCSEMaps(N);
2963
2964  // Now we update the operands.
2965  for (unsigned i = 0; i != NumOps; ++i) {
2966    if (N->OperandList[i] != Ops[i]) {
2967      N->OperandList[i].Val->removeUser(N);
2968      Ops[i].Val->addUser(N);
2969      N->OperandList[i] = Ops[i];
2970    }
2971  }
2972
2973  // If this gets put into a CSE map, add it.
2974  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2975  return InN;
2976}
2977
2978
2979/// MorphNodeTo - This frees the operands of the current node, resets the
2980/// opcode, types, and operands to the specified value.  This should only be
2981/// used by the SelectionDAG class.
2982void SDNode::MorphNodeTo(unsigned Opc, SDVTList L,
2983                         const SDOperand *Ops, unsigned NumOps) {
2984  NodeType = Opc;
2985  ValueList = L.VTs;
2986  NumValues = L.NumVTs;
2987
2988  // Clear the operands list, updating used nodes to remove this from their
2989  // use list.
2990  for (op_iterator I = op_begin(), E = op_end(); I != E; ++I)
2991    I->Val->removeUser(this);
2992
2993  // If NumOps is larger than the # of operands we currently have, reallocate
2994  // the operand list.
2995  if (NumOps > NumOperands) {
2996    if (OperandsNeedDelete)
2997      delete [] OperandList;
2998    OperandList = new SDOperand[NumOps];
2999    OperandsNeedDelete = true;
3000  }
3001
3002  // Assign the new operands.
3003  NumOperands = NumOps;
3004
3005  for (unsigned i = 0, e = NumOps; i != e; ++i) {
3006    OperandList[i] = Ops[i];
3007    SDNode *N = OperandList[i].Val;
3008    N->Uses.push_back(this);
3009  }
3010}
3011
3012/// SelectNodeTo - These are used for target selectors to *mutate* the
3013/// specified node to have the specified return type, Target opcode, and
3014/// operands.  Note that target opcodes are stored as
3015/// ISD::BUILTIN_OP_END+TargetOpcode in the node opcode field.
3016///
3017/// Note that SelectNodeTo returns the resultant node.  If there is already a
3018/// node of the specified opcode and operands, it returns that node instead of
3019/// the current one.
3020SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3021                                   MVT::ValueType VT) {
3022  SDVTList VTs = getVTList(VT);
3023  FoldingSetNodeID ID;
3024  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, 0, 0);
3025  void *IP = 0;
3026  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3027    return ON;
3028
3029  RemoveNodeFromCSEMaps(N);
3030
3031  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, 0, 0);
3032
3033  CSEMap.InsertNode(N, IP);
3034  return N;
3035}
3036
3037SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3038                                   MVT::ValueType VT, SDOperand Op1) {
3039  // If an identical node already exists, use it.
3040  SDVTList VTs = getVTList(VT);
3041  SDOperand Ops[] = { Op1 };
3042
3043  FoldingSetNodeID ID;
3044  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 1);
3045  void *IP = 0;
3046  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3047    return ON;
3048
3049  RemoveNodeFromCSEMaps(N);
3050  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 1);
3051  CSEMap.InsertNode(N, IP);
3052  return N;
3053}
3054
3055SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3056                                   MVT::ValueType VT, SDOperand Op1,
3057                                   SDOperand Op2) {
3058  // If an identical node already exists, use it.
3059  SDVTList VTs = getVTList(VT);
3060  SDOperand Ops[] = { Op1, Op2 };
3061
3062  FoldingSetNodeID ID;
3063  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
3064  void *IP = 0;
3065  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3066    return ON;
3067
3068  RemoveNodeFromCSEMaps(N);
3069
3070  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
3071
3072  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3073  return N;
3074}
3075
3076SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3077                                   MVT::ValueType VT, SDOperand Op1,
3078                                   SDOperand Op2, SDOperand Op3) {
3079  // If an identical node already exists, use it.
3080  SDVTList VTs = getVTList(VT);
3081  SDOperand Ops[] = { Op1, Op2, Op3 };
3082  FoldingSetNodeID ID;
3083  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
3084  void *IP = 0;
3085  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3086    return ON;
3087
3088  RemoveNodeFromCSEMaps(N);
3089
3090  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
3091
3092  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3093  return N;
3094}
3095
3096SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3097                                   MVT::ValueType VT, const SDOperand *Ops,
3098                                   unsigned NumOps) {
3099  // If an identical node already exists, use it.
3100  SDVTList VTs = getVTList(VT);
3101  FoldingSetNodeID ID;
3102  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, NumOps);
3103  void *IP = 0;
3104  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3105    return ON;
3106
3107  RemoveNodeFromCSEMaps(N);
3108  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, NumOps);
3109
3110  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3111  return N;
3112}
3113
3114SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3115                                   MVT::ValueType VT1, MVT::ValueType VT2,
3116                                   SDOperand Op1, SDOperand Op2) {
3117  SDVTList VTs = getVTList(VT1, VT2);
3118  FoldingSetNodeID ID;
3119  SDOperand Ops[] = { Op1, Op2 };
3120  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
3121  void *IP = 0;
3122  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3123    return ON;
3124
3125  RemoveNodeFromCSEMaps(N);
3126  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
3127  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3128  return N;
3129}
3130
3131SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
3132                                   MVT::ValueType VT1, MVT::ValueType VT2,
3133                                   SDOperand Op1, SDOperand Op2,
3134                                   SDOperand Op3) {
3135  // If an identical node already exists, use it.
3136  SDVTList VTs = getVTList(VT1, VT2);
3137  SDOperand Ops[] = { Op1, Op2, Op3 };
3138  FoldingSetNodeID ID;
3139  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
3140  void *IP = 0;
3141  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
3142    return ON;
3143
3144  RemoveNodeFromCSEMaps(N);
3145
3146  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
3147  CSEMap.InsertNode(N, IP);   // Memoize the new node.
3148  return N;
3149}
3150
3151
3152/// getTargetNode - These are used for target selectors to create a new node
3153/// with specified return type(s), target opcode, and operands.
3154///
3155/// Note that getTargetNode returns the resultant node.  If there is already a
3156/// node of the specified opcode and operands, it returns that node instead of
3157/// the current one.
3158SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT) {
3159  return getNode(ISD::BUILTIN_OP_END+Opcode, VT).Val;
3160}
3161SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
3162                                    SDOperand Op1) {
3163  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1).Val;
3164}
3165SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
3166                                    SDOperand Op1, SDOperand Op2) {
3167  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1, Op2).Val;
3168}
3169SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
3170                                    SDOperand Op1, SDOperand Op2,
3171                                    SDOperand Op3) {
3172  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1, Op2, Op3).Val;
3173}
3174SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
3175                                    const SDOperand *Ops, unsigned NumOps) {
3176  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Ops, NumOps).Val;
3177}
3178SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3179                                    MVT::ValueType VT2) {
3180  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3181  SDOperand Op;
3182  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, &Op, 0).Val;
3183}
3184SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3185                                    MVT::ValueType VT2, SDOperand Op1) {
3186  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3187  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, &Op1, 1).Val;
3188}
3189SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3190                                    MVT::ValueType VT2, SDOperand Op1,
3191                                    SDOperand Op2) {
3192  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3193  SDOperand Ops[] = { Op1, Op2 };
3194  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, 2).Val;
3195}
3196SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3197                                    MVT::ValueType VT2, SDOperand Op1,
3198                                    SDOperand Op2, SDOperand Op3) {
3199  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3200  SDOperand Ops[] = { Op1, Op2, Op3 };
3201  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, 3).Val;
3202}
3203SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3204                                    MVT::ValueType VT2,
3205                                    const SDOperand *Ops, unsigned NumOps) {
3206  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
3207  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, NumOps).Val;
3208}
3209SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3210                                    MVT::ValueType VT2, MVT::ValueType VT3,
3211                                    SDOperand Op1, SDOperand Op2) {
3212  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
3213  SDOperand Ops[] = { Op1, Op2 };
3214  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 2).Val;
3215}
3216SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3217                                    MVT::ValueType VT2, MVT::ValueType VT3,
3218                                    SDOperand Op1, SDOperand Op2,
3219                                    SDOperand Op3) {
3220  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
3221  SDOperand Ops[] = { Op1, Op2, Op3 };
3222  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 3).Val;
3223}
3224SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3225                                    MVT::ValueType VT2, MVT::ValueType VT3,
3226                                    const SDOperand *Ops, unsigned NumOps) {
3227  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
3228  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, NumOps).Val;
3229}
3230SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
3231                                    MVT::ValueType VT2, MVT::ValueType VT3,
3232                                    MVT::ValueType VT4,
3233                                    const SDOperand *Ops, unsigned NumOps) {
3234  std::vector<MVT::ValueType> VTList;
3235  VTList.push_back(VT1);
3236  VTList.push_back(VT2);
3237  VTList.push_back(VT3);
3238  VTList.push_back(VT4);
3239  const MVT::ValueType *VTs = getNodeValueTypes(VTList);
3240  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 4, Ops, NumOps).Val;
3241}
3242SDNode *SelectionDAG::getTargetNode(unsigned Opcode,
3243                                    std::vector<MVT::ValueType> &ResultTys,
3244                                    const SDOperand *Ops, unsigned NumOps) {
3245  const MVT::ValueType *VTs = getNodeValueTypes(ResultTys);
3246  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, ResultTys.size(),
3247                 Ops, NumOps).Val;
3248}
3249
3250
3251/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
3252/// This can cause recursive merging of nodes in the DAG.
3253///
3254/// This version assumes From has a single result value.
3255///
3256void SelectionDAG::ReplaceAllUsesWith(SDOperand FromN, SDOperand To,
3257                                      DAGUpdateListener *UpdateListener) {
3258  SDNode *From = FromN.Val;
3259  assert(From->getNumValues() == 1 && FromN.ResNo == 0 &&
3260         "Cannot replace with this method!");
3261  assert(From != To.Val && "Cannot replace uses of with self");
3262
3263  while (!From->use_empty()) {
3264    // Process users until they are all gone.
3265    SDNode *U = *From->use_begin();
3266
3267    // This node is about to morph, remove its old self from the CSE maps.
3268    RemoveNodeFromCSEMaps(U);
3269
3270    for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
3271         I != E; ++I)
3272      if (I->Val == From) {
3273        From->removeUser(U);
3274        *I = To;
3275        To.Val->addUser(U);
3276      }
3277
3278    // Now that we have modified U, add it back to the CSE maps.  If it already
3279    // exists there, recursively merge the results together.
3280    if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
3281      ReplaceAllUsesWith(U, Existing, UpdateListener);
3282      // U is now dead.  Inform the listener if it exists and delete it.
3283      if (UpdateListener)
3284        UpdateListener->NodeDeleted(U);
3285      DeleteNodeNotInCSEMaps(U);
3286    } else {
3287      // If the node doesn't already exist, we updated it.  Inform a listener if
3288      // it exists.
3289      if (UpdateListener)
3290        UpdateListener->NodeUpdated(U);
3291    }
3292  }
3293}
3294
3295/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
3296/// This can cause recursive merging of nodes in the DAG.
3297///
3298/// This version assumes From/To have matching types and numbers of result
3299/// values.
3300///
3301void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To,
3302                                      DAGUpdateListener *UpdateListener) {
3303  assert(From != To && "Cannot replace uses of with self");
3304  assert(From->getNumValues() == To->getNumValues() &&
3305         "Cannot use this version of ReplaceAllUsesWith!");
3306  if (From->getNumValues() == 1)   // If possible, use the faster version.
3307    return ReplaceAllUsesWith(SDOperand(From, 0), SDOperand(To, 0),
3308                              UpdateListener);
3309
3310  while (!From->use_empty()) {
3311    // Process users until they are all gone.
3312    SDNode *U = *From->use_begin();
3313
3314    // This node is about to morph, remove its old self from the CSE maps.
3315    RemoveNodeFromCSEMaps(U);
3316
3317    for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
3318         I != E; ++I)
3319      if (I->Val == From) {
3320        From->removeUser(U);
3321        I->Val = To;
3322        To->addUser(U);
3323      }
3324
3325    // Now that we have modified U, add it back to the CSE maps.  If it already
3326    // exists there, recursively merge the results together.
3327    if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
3328      ReplaceAllUsesWith(U, Existing, UpdateListener);
3329      // U is now dead.  Inform the listener if it exists and delete it.
3330      if (UpdateListener)
3331        UpdateListener->NodeDeleted(U);
3332      DeleteNodeNotInCSEMaps(U);
3333    } else {
3334      // If the node doesn't already exist, we updated it.  Inform a listener if
3335      // it exists.
3336      if (UpdateListener)
3337        UpdateListener->NodeUpdated(U);
3338    }
3339  }
3340}
3341
3342/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
3343/// This can cause recursive merging of nodes in the DAG.
3344///
3345/// This version can replace From with any result values.  To must match the
3346/// number and types of values returned by From.
3347void SelectionDAG::ReplaceAllUsesWith(SDNode *From,
3348                                      const SDOperand *To,
3349                                      DAGUpdateListener *UpdateListener) {
3350  if (From->getNumValues() == 1)  // Handle the simple case efficiently.
3351    return ReplaceAllUsesWith(SDOperand(From, 0), To[0], UpdateListener);
3352
3353  while (!From->use_empty()) {
3354    // Process users until they are all gone.
3355    SDNode *U = *From->use_begin();
3356
3357    // This node is about to morph, remove its old self from the CSE maps.
3358    RemoveNodeFromCSEMaps(U);
3359
3360    for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
3361         I != E; ++I)
3362      if (I->Val == From) {
3363        const SDOperand &ToOp = To[I->ResNo];
3364        From->removeUser(U);
3365        *I = ToOp;
3366        ToOp.Val->addUser(U);
3367      }
3368
3369    // Now that we have modified U, add it back to the CSE maps.  If it already
3370    // exists there, recursively merge the results together.
3371    if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
3372      ReplaceAllUsesWith(U, Existing, UpdateListener);
3373      // U is now dead.  Inform the listener if it exists and delete it.
3374      if (UpdateListener)
3375        UpdateListener->NodeDeleted(U);
3376      DeleteNodeNotInCSEMaps(U);
3377    } else {
3378      // If the node doesn't already exist, we updated it.  Inform a listener if
3379      // it exists.
3380      if (UpdateListener)
3381        UpdateListener->NodeUpdated(U);
3382    }
3383  }
3384}
3385
3386namespace {
3387  /// ChainedSetUpdaterListener - This class is a DAGUpdateListener that removes
3388  /// any deleted nodes from the set passed into its constructor and recursively
3389  /// notifies another update listener if specified.
3390  class ChainedSetUpdaterListener :
3391  public SelectionDAG::DAGUpdateListener {
3392    SmallSetVector<SDNode*, 16> &Set;
3393    SelectionDAG::DAGUpdateListener *Chain;
3394  public:
3395    ChainedSetUpdaterListener(SmallSetVector<SDNode*, 16> &set,
3396                              SelectionDAG::DAGUpdateListener *chain)
3397      : Set(set), Chain(chain) {}
3398
3399    virtual void NodeDeleted(SDNode *N) {
3400      Set.remove(N);
3401      if (Chain) Chain->NodeDeleted(N);
3402    }
3403    virtual void NodeUpdated(SDNode *N) {
3404      if (Chain) Chain->NodeUpdated(N);
3405    }
3406  };
3407}
3408
3409/// ReplaceAllUsesOfValueWith - Replace any uses of From with To, leaving
3410/// uses of other values produced by From.Val alone.  The Deleted vector is
3411/// handled the same way as for ReplaceAllUsesWith.
3412void SelectionDAG::ReplaceAllUsesOfValueWith(SDOperand From, SDOperand To,
3413                                             DAGUpdateListener *UpdateListener){
3414  assert(From != To && "Cannot replace a value with itself");
3415
3416  // Handle the simple, trivial, case efficiently.
3417  if (From.Val->getNumValues() == 1) {
3418    ReplaceAllUsesWith(From, To, UpdateListener);
3419    return;
3420  }
3421
3422  if (From.use_empty()) return;
3423
3424  // Get all of the users of From.Val.  We want these in a nice,
3425  // deterministically ordered and uniqued set, so we use a SmallSetVector.
3426  SmallSetVector<SDNode*, 16> Users(From.Val->use_begin(), From.Val->use_end());
3427
3428  // When one of the recursive merges deletes nodes from the graph, we need to
3429  // make sure that UpdateListener is notified *and* that the node is removed
3430  // from Users if present.  CSUL does this.
3431  ChainedSetUpdaterListener CSUL(Users, UpdateListener);
3432
3433  while (!Users.empty()) {
3434    // We know that this user uses some value of From.  If it is the right
3435    // value, update it.
3436    SDNode *User = Users.back();
3437    Users.pop_back();
3438
3439    // Scan for an operand that matches From.
3440    SDOperand *Op = User->OperandList, *E = User->OperandList+User->NumOperands;
3441    for (; Op != E; ++Op)
3442      if (*Op == From) break;
3443
3444    // If there are no matches, the user must use some other result of From.
3445    if (Op == E) continue;
3446
3447    // Okay, we know this user needs to be updated.  Remove its old self
3448    // from the CSE maps.
3449    RemoveNodeFromCSEMaps(User);
3450
3451    // Update all operands that match "From" in case there are multiple uses.
3452    for (; Op != E; ++Op) {
3453      if (*Op == From) {
3454        From.Val->removeUser(User);
3455        *Op = To;
3456        To.Val->addUser(User);
3457      }
3458    }
3459
3460    // Now that we have modified User, add it back to the CSE maps.  If it
3461    // already exists there, recursively merge the results together.
3462    SDNode *Existing = AddNonLeafNodeToCSEMaps(User);
3463    if (!Existing) {
3464      if (UpdateListener) UpdateListener->NodeUpdated(User);
3465      continue;  // Continue on to next user.
3466    }
3467
3468    // If there was already an existing matching node, use ReplaceAllUsesWith
3469    // to replace the dead one with the existing one.  This can cause
3470    // recursive merging of other unrelated nodes down the line.  The merging
3471    // can cause deletion of nodes that used the old value.  To handle this, we
3472    // use CSUL to remove them from the Users set.
3473    ReplaceAllUsesWith(User, Existing, &CSUL);
3474
3475    // User is now dead.  Notify a listener if present.
3476    if (UpdateListener) UpdateListener->NodeDeleted(User);
3477    DeleteNodeNotInCSEMaps(User);
3478  }
3479}
3480
3481
3482/// AssignNodeIds - Assign a unique node id for each node in the DAG based on
3483/// their allnodes order. It returns the maximum id.
3484unsigned SelectionDAG::AssignNodeIds() {
3485  unsigned Id = 0;
3486  for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I){
3487    SDNode *N = I;
3488    N->setNodeId(Id++);
3489  }
3490  return Id;
3491}
3492
3493/// AssignTopologicalOrder - Assign a unique node id for each node in the DAG
3494/// based on their topological order. It returns the maximum id and a vector
3495/// of the SDNodes* in assigned order by reference.
3496unsigned SelectionDAG::AssignTopologicalOrder(std::vector<SDNode*> &TopOrder) {
3497  unsigned DAGSize = AllNodes.size();
3498  std::vector<unsigned> InDegree(DAGSize);
3499  std::vector<SDNode*> Sources;
3500
3501  // Use a two pass approach to avoid using a std::map which is slow.
3502  unsigned Id = 0;
3503  for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ++I){
3504    SDNode *N = I;
3505    N->setNodeId(Id++);
3506    unsigned Degree = N->use_size();
3507    InDegree[N->getNodeId()] = Degree;
3508    if (Degree == 0)
3509      Sources.push_back(N);
3510  }
3511
3512  TopOrder.clear();
3513  while (!Sources.empty()) {
3514    SDNode *N = Sources.back();
3515    Sources.pop_back();
3516    TopOrder.push_back(N);
3517    for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
3518      SDNode *P = I->Val;
3519      unsigned Degree = --InDegree[P->getNodeId()];
3520      if (Degree == 0)
3521        Sources.push_back(P);
3522    }
3523  }
3524
3525  // Second pass, assign the actual topological order as node ids.
3526  Id = 0;
3527  for (std::vector<SDNode*>::iterator TI = TopOrder.begin(),TE = TopOrder.end();
3528       TI != TE; ++TI)
3529    (*TI)->setNodeId(Id++);
3530
3531  return Id;
3532}
3533
3534
3535
3536//===----------------------------------------------------------------------===//
3537//                              SDNode Class
3538//===----------------------------------------------------------------------===//
3539
3540// Out-of-line virtual method to give class a home.
3541void SDNode::ANCHOR() {}
3542void UnarySDNode::ANCHOR() {}
3543void BinarySDNode::ANCHOR() {}
3544void TernarySDNode::ANCHOR() {}
3545void HandleSDNode::ANCHOR() {}
3546void StringSDNode::ANCHOR() {}
3547void ConstantSDNode::ANCHOR() {}
3548void ConstantFPSDNode::ANCHOR() {}
3549void GlobalAddressSDNode::ANCHOR() {}
3550void FrameIndexSDNode::ANCHOR() {}
3551void JumpTableSDNode::ANCHOR() {}
3552void ConstantPoolSDNode::ANCHOR() {}
3553void BasicBlockSDNode::ANCHOR() {}
3554void SrcValueSDNode::ANCHOR() {}
3555void MemOperandSDNode::ANCHOR() {}
3556void RegisterSDNode::ANCHOR() {}
3557void ExternalSymbolSDNode::ANCHOR() {}
3558void CondCodeSDNode::ANCHOR() {}
3559void VTSDNode::ANCHOR() {}
3560void LoadSDNode::ANCHOR() {}
3561void StoreSDNode::ANCHOR() {}
3562void AtomicSDNode::ANCHOR() {}
3563
3564HandleSDNode::~HandleSDNode() {
3565  SDVTList VTs = { 0, 0 };
3566  MorphNodeTo(ISD::HANDLENODE, VTs, 0, 0);  // Drops operand uses.
3567}
3568
3569GlobalAddressSDNode::GlobalAddressSDNode(bool isTarget, const GlobalValue *GA,
3570                                         MVT::ValueType VT, int o)
3571  : SDNode(isa<GlobalVariable>(GA) &&
3572           cast<GlobalVariable>(GA)->isThreadLocal() ?
3573           // Thread Local
3574           (isTarget ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress) :
3575           // Non Thread Local
3576           (isTarget ? ISD::TargetGlobalAddress : ISD::GlobalAddress),
3577           getSDVTList(VT)), Offset(o) {
3578  TheGlobal = const_cast<GlobalValue*>(GA);
3579}
3580
3581/// getMemOperand - Return a MemOperand object describing the memory
3582/// reference performed by this load or store.
3583MemOperand LSBaseSDNode::getMemOperand() const {
3584  int Size = (MVT::getSizeInBits(getMemoryVT()) + 7) >> 3;
3585  int Flags =
3586    getOpcode() == ISD::LOAD ? MemOperand::MOLoad : MemOperand::MOStore;
3587  if (IsVolatile) Flags |= MemOperand::MOVolatile;
3588
3589  // Check if the load references a frame index, and does not have
3590  // an SV attached.
3591  const FrameIndexSDNode *FI =
3592    dyn_cast<const FrameIndexSDNode>(getBasePtr().Val);
3593  if (!getSrcValue() && FI)
3594    return MemOperand(PseudoSourceValue::getFixedStack(), Flags,
3595                      FI->getIndex(), Size, Alignment);
3596  else
3597    return MemOperand(getSrcValue(), Flags,
3598                      getSrcValueOffset(), Size, Alignment);
3599}
3600
3601/// Profile - Gather unique data for the node.
3602///
3603void SDNode::Profile(FoldingSetNodeID &ID) {
3604  AddNodeIDNode(ID, this);
3605}
3606
3607/// getValueTypeList - Return a pointer to the specified value type.
3608///
3609const MVT::ValueType *SDNode::getValueTypeList(MVT::ValueType VT) {
3610  if (MVT::isExtendedVT(VT)) {
3611    static std::set<MVT::ValueType> EVTs;
3612    return &(*EVTs.insert(VT).first);
3613  } else {
3614    static MVT::ValueType VTs[MVT::LAST_VALUETYPE];
3615    VTs[VT] = VT;
3616    return &VTs[VT];
3617  }
3618}
3619
3620/// hasNUsesOfValue - Return true if there are exactly NUSES uses of the
3621/// indicated value.  This method ignores uses of other values defined by this
3622/// operation.
3623bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const {
3624  assert(Value < getNumValues() && "Bad value!");
3625
3626  // If there is only one value, this is easy.
3627  if (getNumValues() == 1)
3628    return use_size() == NUses;
3629  if (use_size() < NUses) return false;
3630
3631  SDOperand TheValue(const_cast<SDNode *>(this), Value);
3632
3633  SmallPtrSet<SDNode*, 32> UsersHandled;
3634
3635  for (SDNode::use_iterator UI = Uses.begin(), E = Uses.end(); UI != E; ++UI) {
3636    SDNode *User = *UI;
3637    if (User->getNumOperands() == 1 ||
3638        UsersHandled.insert(User))     // First time we've seen this?
3639      for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i)
3640        if (User->getOperand(i) == TheValue) {
3641          if (NUses == 0)
3642            return false;   // too many uses
3643          --NUses;
3644        }
3645  }
3646
3647  // Found exactly the right number of uses?
3648  return NUses == 0;
3649}
3650
3651
3652/// hasAnyUseOfValue - Return true if there are any use of the indicated
3653/// value. This method ignores uses of other values defined by this operation.
3654bool SDNode::hasAnyUseOfValue(unsigned Value) const {
3655  assert(Value < getNumValues() && "Bad value!");
3656
3657  if (use_empty()) return false;
3658
3659  SDOperand TheValue(const_cast<SDNode *>(this), Value);
3660
3661  SmallPtrSet<SDNode*, 32> UsersHandled;
3662
3663  for (SDNode::use_iterator UI = Uses.begin(), E = Uses.end(); UI != E; ++UI) {
3664    SDNode *User = *UI;
3665    if (User->getNumOperands() == 1 ||
3666        UsersHandled.insert(User))     // First time we've seen this?
3667      for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i)
3668        if (User->getOperand(i) == TheValue) {
3669          return true;
3670        }
3671  }
3672
3673  return false;
3674}
3675
3676
3677/// isOnlyUse - Return true if this node is the only use of N.
3678///
3679bool SDNode::isOnlyUse(SDNode *N) const {
3680  bool Seen = false;
3681  for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {
3682    SDNode *User = *I;
3683    if (User == this)
3684      Seen = true;
3685    else
3686      return false;
3687  }
3688
3689  return Seen;
3690}
3691
3692/// isOperand - Return true if this node is an operand of N.
3693///
3694bool SDOperand::isOperand(SDNode *N) const {
3695  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
3696    if (*this == N->getOperand(i))
3697      return true;
3698  return false;
3699}
3700
3701bool SDNode::isOperand(SDNode *N) const {
3702  for (unsigned i = 0, e = N->NumOperands; i != e; ++i)
3703    if (this == N->OperandList[i].Val)
3704      return true;
3705  return false;
3706}
3707
3708/// reachesChainWithoutSideEffects - Return true if this operand (which must
3709/// be a chain) reaches the specified operand without crossing any
3710/// side-effecting instructions.  In practice, this looks through token
3711/// factors and non-volatile loads.  In order to remain efficient, this only
3712/// looks a couple of nodes in, it does not do an exhaustive search.
3713bool SDOperand::reachesChainWithoutSideEffects(SDOperand Dest,
3714                                               unsigned Depth) const {
3715  if (*this == Dest) return true;
3716
3717  // Don't search too deeply, we just want to be able to see through
3718  // TokenFactor's etc.
3719  if (Depth == 0) return false;
3720
3721  // If this is a token factor, all inputs to the TF happen in parallel.  If any
3722  // of the operands of the TF reach dest, then we can do the xform.
3723  if (getOpcode() == ISD::TokenFactor) {
3724    for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
3725      if (getOperand(i).reachesChainWithoutSideEffects(Dest, Depth-1))
3726        return true;
3727    return false;
3728  }
3729
3730  // Loads don't have side effects, look through them.
3731  if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(*this)) {
3732    if (!Ld->isVolatile())
3733      return Ld->getChain().reachesChainWithoutSideEffects(Dest, Depth-1);
3734  }
3735  return false;
3736}
3737
3738
3739static void findPredecessor(SDNode *N, const SDNode *P, bool &found,
3740                            SmallPtrSet<SDNode *, 32> &Visited) {
3741  if (found || !Visited.insert(N))
3742    return;
3743
3744  for (unsigned i = 0, e = N->getNumOperands(); !found && i != e; ++i) {
3745    SDNode *Op = N->getOperand(i).Val;
3746    if (Op == P) {
3747      found = true;
3748      return;
3749    }
3750    findPredecessor(Op, P, found, Visited);
3751  }
3752}
3753
3754/// isPredecessor - Return true if this node is a predecessor of N. This node
3755/// is either an operand of N or it can be reached by recursively traversing
3756/// up the operands.
3757/// NOTE: this is an expensive method. Use it carefully.
3758bool SDNode::isPredecessor(SDNode *N) const {
3759  SmallPtrSet<SDNode *, 32> Visited;
3760  bool found = false;
3761  findPredecessor(N, this, found, Visited);
3762  return found;
3763}
3764
3765uint64_t SDNode::getConstantOperandVal(unsigned Num) const {
3766  assert(Num < NumOperands && "Invalid child # of SDNode!");
3767  return cast<ConstantSDNode>(OperandList[Num])->getValue();
3768}
3769
3770std::string SDNode::getOperationName(const SelectionDAG *G) const {
3771  switch (getOpcode()) {
3772  default:
3773    if (getOpcode() < ISD::BUILTIN_OP_END)
3774      return "<<Unknown DAG Node>>";
3775    else {
3776      if (G) {
3777        if (const TargetInstrInfo *TII = G->getTarget().getInstrInfo())
3778          if (getOpcode()-ISD::BUILTIN_OP_END < TII->getNumOpcodes())
3779            return TII->get(getOpcode()-ISD::BUILTIN_OP_END).getName();
3780
3781        TargetLowering &TLI = G->getTargetLoweringInfo();
3782        const char *Name =
3783          TLI.getTargetNodeName(getOpcode());
3784        if (Name) return Name;
3785      }
3786
3787      return "<<Unknown Target Node>>";
3788    }
3789
3790  case ISD::MEMBARRIER:    return "MemBarrier";
3791  case ISD::ATOMIC_LCS:    return "AtomicLCS";
3792  case ISD::ATOMIC_LAS:    return "AtomicLAS";
3793  case ISD::ATOMIC_SWAP:    return "AtomicSWAP";
3794  case ISD::PCMARKER:      return "PCMarker";
3795  case ISD::READCYCLECOUNTER: return "ReadCycleCounter";
3796  case ISD::SRCVALUE:      return "SrcValue";
3797  case ISD::MEMOPERAND:    return "MemOperand";
3798  case ISD::EntryToken:    return "EntryToken";
3799  case ISD::TokenFactor:   return "TokenFactor";
3800  case ISD::AssertSext:    return "AssertSext";
3801  case ISD::AssertZext:    return "AssertZext";
3802
3803  case ISD::STRING:        return "String";
3804  case ISD::BasicBlock:    return "BasicBlock";
3805  case ISD::VALUETYPE:     return "ValueType";
3806  case ISD::Register:      return "Register";
3807
3808  case ISD::Constant:      return "Constant";
3809  case ISD::ConstantFP:    return "ConstantFP";
3810  case ISD::GlobalAddress: return "GlobalAddress";
3811  case ISD::GlobalTLSAddress: return "GlobalTLSAddress";
3812  case ISD::FrameIndex:    return "FrameIndex";
3813  case ISD::JumpTable:     return "JumpTable";
3814  case ISD::GLOBAL_OFFSET_TABLE: return "GLOBAL_OFFSET_TABLE";
3815  case ISD::RETURNADDR: return "RETURNADDR";
3816  case ISD::FRAMEADDR: return "FRAMEADDR";
3817  case ISD::FRAME_TO_ARGS_OFFSET: return "FRAME_TO_ARGS_OFFSET";
3818  case ISD::EXCEPTIONADDR: return "EXCEPTIONADDR";
3819  case ISD::EHSELECTION: return "EHSELECTION";
3820  case ISD::EH_RETURN: return "EH_RETURN";
3821  case ISD::ConstantPool:  return "ConstantPool";
3822  case ISD::ExternalSymbol: return "ExternalSymbol";
3823  case ISD::INTRINSIC_WO_CHAIN: {
3824    unsigned IID = cast<ConstantSDNode>(getOperand(0))->getValue();
3825    return Intrinsic::getName((Intrinsic::ID)IID);
3826  }
3827  case ISD::INTRINSIC_VOID:
3828  case ISD::INTRINSIC_W_CHAIN: {
3829    unsigned IID = cast<ConstantSDNode>(getOperand(1))->getValue();
3830    return Intrinsic::getName((Intrinsic::ID)IID);
3831  }
3832
3833  case ISD::BUILD_VECTOR:   return "BUILD_VECTOR";
3834  case ISD::TargetConstant: return "TargetConstant";
3835  case ISD::TargetConstantFP:return "TargetConstantFP";
3836  case ISD::TargetGlobalAddress: return "TargetGlobalAddress";
3837  case ISD::TargetGlobalTLSAddress: return "TargetGlobalTLSAddress";
3838  case ISD::TargetFrameIndex: return "TargetFrameIndex";
3839  case ISD::TargetJumpTable:  return "TargetJumpTable";
3840  case ISD::TargetConstantPool:  return "TargetConstantPool";
3841  case ISD::TargetExternalSymbol: return "TargetExternalSymbol";
3842
3843  case ISD::CopyToReg:     return "CopyToReg";
3844  case ISD::CopyFromReg:   return "CopyFromReg";
3845  case ISD::UNDEF:         return "undef";
3846  case ISD::MERGE_VALUES:  return "merge_values";
3847  case ISD::INLINEASM:     return "inlineasm";
3848  case ISD::LABEL:         return "label";
3849  case ISD::DECLARE:       return "declare";
3850  case ISD::HANDLENODE:    return "handlenode";
3851  case ISD::FORMAL_ARGUMENTS: return "formal_arguments";
3852  case ISD::CALL:          return "call";
3853
3854  // Unary operators
3855  case ISD::FABS:   return "fabs";
3856  case ISD::FNEG:   return "fneg";
3857  case ISD::FSQRT:  return "fsqrt";
3858  case ISD::FSIN:   return "fsin";
3859  case ISD::FCOS:   return "fcos";
3860  case ISD::FPOWI:  return "fpowi";
3861  case ISD::FPOW:   return "fpow";
3862
3863  // Binary operators
3864  case ISD::ADD:    return "add";
3865  case ISD::SUB:    return "sub";
3866  case ISD::MUL:    return "mul";
3867  case ISD::MULHU:  return "mulhu";
3868  case ISD::MULHS:  return "mulhs";
3869  case ISD::SDIV:   return "sdiv";
3870  case ISD::UDIV:   return "udiv";
3871  case ISD::SREM:   return "srem";
3872  case ISD::UREM:   return "urem";
3873  case ISD::SMUL_LOHI:  return "smul_lohi";
3874  case ISD::UMUL_LOHI:  return "umul_lohi";
3875  case ISD::SDIVREM:    return "sdivrem";
3876  case ISD::UDIVREM:    return "divrem";
3877  case ISD::AND:    return "and";
3878  case ISD::OR:     return "or";
3879  case ISD::XOR:    return "xor";
3880  case ISD::SHL:    return "shl";
3881  case ISD::SRA:    return "sra";
3882  case ISD::SRL:    return "srl";
3883  case ISD::ROTL:   return "rotl";
3884  case ISD::ROTR:   return "rotr";
3885  case ISD::FADD:   return "fadd";
3886  case ISD::FSUB:   return "fsub";
3887  case ISD::FMUL:   return "fmul";
3888  case ISD::FDIV:   return "fdiv";
3889  case ISD::FREM:   return "frem";
3890  case ISD::FCOPYSIGN: return "fcopysign";
3891  case ISD::FGETSIGN:  return "fgetsign";
3892
3893  case ISD::SETCC:       return "setcc";
3894  case ISD::SELECT:      return "select";
3895  case ISD::SELECT_CC:   return "select_cc";
3896  case ISD::INSERT_VECTOR_ELT:   return "insert_vector_elt";
3897  case ISD::EXTRACT_VECTOR_ELT:  return "extract_vector_elt";
3898  case ISD::CONCAT_VECTORS:      return "concat_vectors";
3899  case ISD::EXTRACT_SUBVECTOR:   return "extract_subvector";
3900  case ISD::SCALAR_TO_VECTOR:    return "scalar_to_vector";
3901  case ISD::VECTOR_SHUFFLE:      return "vector_shuffle";
3902  case ISD::CARRY_FALSE:         return "carry_false";
3903  case ISD::ADDC:        return "addc";
3904  case ISD::ADDE:        return "adde";
3905  case ISD::SUBC:        return "subc";
3906  case ISD::SUBE:        return "sube";
3907  case ISD::SHL_PARTS:   return "shl_parts";
3908  case ISD::SRA_PARTS:   return "sra_parts";
3909  case ISD::SRL_PARTS:   return "srl_parts";
3910
3911  case ISD::EXTRACT_SUBREG:     return "extract_subreg";
3912  case ISD::INSERT_SUBREG:      return "insert_subreg";
3913
3914  // Conversion operators.
3915  case ISD::SIGN_EXTEND: return "sign_extend";
3916  case ISD::ZERO_EXTEND: return "zero_extend";
3917  case ISD::ANY_EXTEND:  return "any_extend";
3918  case ISD::SIGN_EXTEND_INREG: return "sign_extend_inreg";
3919  case ISD::TRUNCATE:    return "truncate";
3920  case ISD::FP_ROUND:    return "fp_round";
3921  case ISD::FLT_ROUNDS_: return "flt_rounds";
3922  case ISD::FP_ROUND_INREG: return "fp_round_inreg";
3923  case ISD::FP_EXTEND:   return "fp_extend";
3924
3925  case ISD::SINT_TO_FP:  return "sint_to_fp";
3926  case ISD::UINT_TO_FP:  return "uint_to_fp";
3927  case ISD::FP_TO_SINT:  return "fp_to_sint";
3928  case ISD::FP_TO_UINT:  return "fp_to_uint";
3929  case ISD::BIT_CONVERT: return "bit_convert";
3930
3931    // Control flow instructions
3932  case ISD::BR:      return "br";
3933  case ISD::BRIND:   return "brind";
3934  case ISD::BR_JT:   return "br_jt";
3935  case ISD::BRCOND:  return "brcond";
3936  case ISD::BR_CC:   return "br_cc";
3937  case ISD::RET:     return "ret";
3938  case ISD::CALLSEQ_START:  return "callseq_start";
3939  case ISD::CALLSEQ_END:    return "callseq_end";
3940
3941    // Other operators
3942  case ISD::LOAD:               return "load";
3943  case ISD::STORE:              return "store";
3944  case ISD::VAARG:              return "vaarg";
3945  case ISD::VACOPY:             return "vacopy";
3946  case ISD::VAEND:              return "vaend";
3947  case ISD::VASTART:            return "vastart";
3948  case ISD::DYNAMIC_STACKALLOC: return "dynamic_stackalloc";
3949  case ISD::EXTRACT_ELEMENT:    return "extract_element";
3950  case ISD::BUILD_PAIR:         return "build_pair";
3951  case ISD::STACKSAVE:          return "stacksave";
3952  case ISD::STACKRESTORE:       return "stackrestore";
3953  case ISD::TRAP:               return "trap";
3954
3955  // Block memory operations.
3956  case ISD::MEMSET:  return "memset";
3957  case ISD::MEMCPY:  return "memcpy";
3958  case ISD::MEMMOVE: return "memmove";
3959
3960  // Bit manipulation
3961  case ISD::BSWAP:   return "bswap";
3962  case ISD::CTPOP:   return "ctpop";
3963  case ISD::CTTZ:    return "cttz";
3964  case ISD::CTLZ:    return "ctlz";
3965
3966  // Debug info
3967  case ISD::LOCATION: return "location";
3968  case ISD::DEBUG_LOC: return "debug_loc";
3969
3970  // Trampolines
3971  case ISD::TRAMPOLINE: return "trampoline";
3972
3973  case ISD::CONDCODE:
3974    switch (cast<CondCodeSDNode>(this)->get()) {
3975    default: assert(0 && "Unknown setcc condition!");
3976    case ISD::SETOEQ:  return "setoeq";
3977    case ISD::SETOGT:  return "setogt";
3978    case ISD::SETOGE:  return "setoge";
3979    case ISD::SETOLT:  return "setolt";
3980    case ISD::SETOLE:  return "setole";
3981    case ISD::SETONE:  return "setone";
3982
3983    case ISD::SETO:    return "seto";
3984    case ISD::SETUO:   return "setuo";
3985    case ISD::SETUEQ:  return "setue";
3986    case ISD::SETUGT:  return "setugt";
3987    case ISD::SETUGE:  return "setuge";
3988    case ISD::SETULT:  return "setult";
3989    case ISD::SETULE:  return "setule";
3990    case ISD::SETUNE:  return "setune";
3991
3992    case ISD::SETEQ:   return "seteq";
3993    case ISD::SETGT:   return "setgt";
3994    case ISD::SETGE:   return "setge";
3995    case ISD::SETLT:   return "setlt";
3996    case ISD::SETLE:   return "setle";
3997    case ISD::SETNE:   return "setne";
3998    }
3999  }
4000}
4001
4002const char *SDNode::getIndexedModeName(ISD::MemIndexedMode AM) {
4003  switch (AM) {
4004  default:
4005    return "";
4006  case ISD::PRE_INC:
4007    return "<pre-inc>";
4008  case ISD::PRE_DEC:
4009    return "<pre-dec>";
4010  case ISD::POST_INC:
4011    return "<post-inc>";
4012  case ISD::POST_DEC:
4013    return "<post-dec>";
4014  }
4015}
4016
4017void SDNode::dump() const { dump(0); }
4018void SDNode::dump(const SelectionDAG *G) const {
4019  cerr << (void*)this << ": ";
4020
4021  for (unsigned i = 0, e = getNumValues(); i != e; ++i) {
4022    if (i) cerr << ",";
4023    if (getValueType(i) == MVT::Other)
4024      cerr << "ch";
4025    else
4026      cerr << MVT::getValueTypeString(getValueType(i));
4027  }
4028  cerr << " = " << getOperationName(G);
4029
4030  cerr << " ";
4031  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
4032    if (i) cerr << ", ";
4033    cerr << (void*)getOperand(i).Val;
4034    if (unsigned RN = getOperand(i).ResNo)
4035      cerr << ":" << RN;
4036  }
4037
4038  if (!isTargetOpcode() && getOpcode() == ISD::VECTOR_SHUFFLE) {
4039    SDNode *Mask = getOperand(2).Val;
4040    cerr << "<";
4041    for (unsigned i = 0, e = Mask->getNumOperands(); i != e; ++i) {
4042      if (i) cerr << ",";
4043      if (Mask->getOperand(i).getOpcode() == ISD::UNDEF)
4044        cerr << "u";
4045      else
4046        cerr << cast<ConstantSDNode>(Mask->getOperand(i))->getValue();
4047    }
4048    cerr << ">";
4049  }
4050
4051  if (const ConstantSDNode *CSDN = dyn_cast<ConstantSDNode>(this)) {
4052    cerr << "<" << CSDN->getValue() << ">";
4053  } else if (const ConstantFPSDNode *CSDN = dyn_cast<ConstantFPSDNode>(this)) {
4054    if (&CSDN->getValueAPF().getSemantics()==&APFloat::IEEEsingle)
4055      cerr << "<" << CSDN->getValueAPF().convertToFloat() << ">";
4056    else if (&CSDN->getValueAPF().getSemantics()==&APFloat::IEEEdouble)
4057      cerr << "<" << CSDN->getValueAPF().convertToDouble() << ">";
4058    else {
4059      cerr << "<APFloat(";
4060      CSDN->getValueAPF().convertToAPInt().dump();
4061      cerr << ")>";
4062    }
4063  } else if (const GlobalAddressSDNode *GADN =
4064             dyn_cast<GlobalAddressSDNode>(this)) {
4065    int offset = GADN->getOffset();
4066    cerr << "<";
4067    WriteAsOperand(*cerr.stream(), GADN->getGlobal()) << ">";
4068    if (offset > 0)
4069      cerr << " + " << offset;
4070    else
4071      cerr << " " << offset;
4072  } else if (const FrameIndexSDNode *FIDN = dyn_cast<FrameIndexSDNode>(this)) {
4073    cerr << "<" << FIDN->getIndex() << ">";
4074  } else if (const JumpTableSDNode *JTDN = dyn_cast<JumpTableSDNode>(this)) {
4075    cerr << "<" << JTDN->getIndex() << ">";
4076  } else if (const ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(this)){
4077    int offset = CP->getOffset();
4078    if (CP->isMachineConstantPoolEntry())
4079      cerr << "<" << *CP->getMachineCPVal() << ">";
4080    else
4081      cerr << "<" << *CP->getConstVal() << ">";
4082    if (offset > 0)
4083      cerr << " + " << offset;
4084    else
4085      cerr << " " << offset;
4086  } else if (const BasicBlockSDNode *BBDN = dyn_cast<BasicBlockSDNode>(this)) {
4087    cerr << "<";
4088    const Value *LBB = (const Value*)BBDN->getBasicBlock()->getBasicBlock();
4089    if (LBB)
4090      cerr << LBB->getName() << " ";
4091    cerr << (const void*)BBDN->getBasicBlock() << ">";
4092  } else if (const RegisterSDNode *R = dyn_cast<RegisterSDNode>(this)) {
4093    if (G && R->getReg() &&
4094        TargetRegisterInfo::isPhysicalRegister(R->getReg())) {
4095      cerr << " " << G->getTarget().getRegisterInfo()->getName(R->getReg());
4096    } else {
4097      cerr << " #" << R->getReg();
4098    }
4099  } else if (const ExternalSymbolSDNode *ES =
4100             dyn_cast<ExternalSymbolSDNode>(this)) {
4101    cerr << "'" << ES->getSymbol() << "'";
4102  } else if (const SrcValueSDNode *M = dyn_cast<SrcValueSDNode>(this)) {
4103    if (M->getValue())
4104      cerr << "<" << M->getValue() << ">";
4105    else
4106      cerr << "<null>";
4107  } else if (const MemOperandSDNode *M = dyn_cast<MemOperandSDNode>(this)) {
4108    if (M->MO.getValue())
4109      cerr << "<" << M->MO.getValue() << ":" << M->MO.getOffset() << ">";
4110    else
4111      cerr << "<null:" << M->MO.getOffset() << ">";
4112  } else if (const VTSDNode *N = dyn_cast<VTSDNode>(this)) {
4113    cerr << ":" << MVT::getValueTypeString(N->getVT());
4114  } else if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(this)) {
4115    const Value *SrcValue = LD->getSrcValue();
4116    int SrcOffset = LD->getSrcValueOffset();
4117    cerr << " <";
4118    if (SrcValue)
4119      cerr << SrcValue;
4120    else
4121      cerr << "null";
4122    cerr << ":" << SrcOffset << ">";
4123
4124    bool doExt = true;
4125    switch (LD->getExtensionType()) {
4126    default: doExt = false; break;
4127    case ISD::EXTLOAD:
4128      cerr << " <anyext ";
4129      break;
4130    case ISD::SEXTLOAD:
4131      cerr << " <sext ";
4132      break;
4133    case ISD::ZEXTLOAD:
4134      cerr << " <zext ";
4135      break;
4136    }
4137    if (doExt)
4138      cerr << MVT::getValueTypeString(LD->getMemoryVT()) << ">";
4139
4140    const char *AM = getIndexedModeName(LD->getAddressingMode());
4141    if (*AM)
4142      cerr << " " << AM;
4143    if (LD->isVolatile())
4144      cerr << " <volatile>";
4145    cerr << " alignment=" << LD->getAlignment();
4146  } else if (const StoreSDNode *ST = dyn_cast<StoreSDNode>(this)) {
4147    const Value *SrcValue = ST->getSrcValue();
4148    int SrcOffset = ST->getSrcValueOffset();
4149    cerr << " <";
4150    if (SrcValue)
4151      cerr << SrcValue;
4152    else
4153      cerr << "null";
4154    cerr << ":" << SrcOffset << ">";
4155
4156    if (ST->isTruncatingStore())
4157      cerr << " <trunc "
4158           << MVT::getValueTypeString(ST->getMemoryVT()) << ">";
4159
4160    const char *AM = getIndexedModeName(ST->getAddressingMode());
4161    if (*AM)
4162      cerr << " " << AM;
4163    if (ST->isVolatile())
4164      cerr << " <volatile>";
4165    cerr << " alignment=" << ST->getAlignment();
4166  }
4167}
4168
4169static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {
4170  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
4171    if (N->getOperand(i).Val->hasOneUse())
4172      DumpNodes(N->getOperand(i).Val, indent+2, G);
4173    else
4174      cerr << "\n" << std::string(indent+2, ' ')
4175           << (void*)N->getOperand(i).Val << ": <multiple use>";
4176
4177
4178  cerr << "\n" << std::string(indent, ' ');
4179  N->dump(G);
4180}
4181
4182void SelectionDAG::dump() const {
4183  cerr << "SelectionDAG has " << AllNodes.size() << " nodes:";
4184  std::vector<const SDNode*> Nodes;
4185  for (allnodes_const_iterator I = allnodes_begin(), E = allnodes_end();
4186       I != E; ++I)
4187    Nodes.push_back(I);
4188
4189  std::sort(Nodes.begin(), Nodes.end());
4190
4191  for (unsigned i = 0, e = Nodes.size(); i != e; ++i) {
4192    if (!Nodes[i]->hasOneUse() && Nodes[i] != getRoot().Val)
4193      DumpNodes(Nodes[i], 2, this);
4194  }
4195
4196  if (getRoot().Val) DumpNodes(getRoot().Val, 2, this);
4197
4198  cerr << "\n\n";
4199}
4200
4201const Type *ConstantPoolSDNode::getType() const {
4202  if (isMachineConstantPoolEntry())
4203    return Val.MachineCPVal->getType();
4204  return Val.ConstVal->getType();
4205}
4206