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 "SDNodeOrdering.h"
16#include "SDNodeDbgValue.h"
17#include "llvm/Constants.h"
18#include "llvm/Analysis/DebugInfo.h"
19#include "llvm/Analysis/ValueTracking.h"
20#include "llvm/Function.h"
21#include "llvm/GlobalAlias.h"
22#include "llvm/GlobalVariable.h"
23#include "llvm/Intrinsics.h"
24#include "llvm/DerivedTypes.h"
25#include "llvm/Assembly/Writer.h"
26#include "llvm/CallingConv.h"
27#include "llvm/CodeGen/MachineBasicBlock.h"
28#include "llvm/CodeGen/MachineConstantPool.h"
29#include "llvm/CodeGen/MachineFrameInfo.h"
30#include "llvm/CodeGen/MachineModuleInfo.h"
31#include "llvm/Target/TargetRegisterInfo.h"
32#include "llvm/Target/TargetData.h"
33#include "llvm/Target/TargetLowering.h"
34#include "llvm/Target/TargetSelectionDAGInfo.h"
35#include "llvm/Target/TargetOptions.h"
36#include "llvm/Target/TargetInstrInfo.h"
37#include "llvm/Target/TargetIntrinsicInfo.h"
38#include "llvm/Target/TargetMachine.h"
39#include "llvm/Support/CommandLine.h"
40#include "llvm/Support/Debug.h"
41#include "llvm/Support/ErrorHandling.h"
42#include "llvm/Support/ManagedStatic.h"
43#include "llvm/Support/MathExtras.h"
44#include "llvm/Support/raw_ostream.h"
45#include "llvm/Support/Mutex.h"
46#include "llvm/ADT/SetVector.h"
47#include "llvm/ADT/SmallPtrSet.h"
48#include "llvm/ADT/SmallSet.h"
49#include "llvm/ADT/SmallVector.h"
50#include "llvm/ADT/StringExtras.h"
51#include <algorithm>
52#include <cmath>
53using namespace llvm;
54
55/// makeVTList - Return an instance of the SDVTList struct initialized with the
56/// specified members.
57static SDVTList makeVTList(const EVT *VTs, unsigned NumVTs) {
58  SDVTList Res = {VTs, NumVTs};
59  return Res;
60}
61
62static const fltSemantics *EVTToAPFloatSemantics(EVT VT) {
63  switch (VT.getSimpleVT().SimpleTy) {
64  default: llvm_unreachable("Unknown FP format");
65  case MVT::f16:     return &APFloat::IEEEhalf;
66  case MVT::f32:     return &APFloat::IEEEsingle;
67  case MVT::f64:     return &APFloat::IEEEdouble;
68  case MVT::f80:     return &APFloat::x87DoubleExtended;
69  case MVT::f128:    return &APFloat::IEEEquad;
70  case MVT::ppcf128: return &APFloat::PPCDoubleDouble;
71  }
72}
73
74SelectionDAG::DAGUpdateListener::~DAGUpdateListener() {}
75
76//===----------------------------------------------------------------------===//
77//                              ConstantFPSDNode Class
78//===----------------------------------------------------------------------===//
79
80/// isExactlyValue - We don't rely on operator== working on double values, as
81/// it returns true for things that are clearly not equal, like -0.0 and 0.0.
82/// As such, this method can be used to do an exact bit-for-bit comparison of
83/// two floating point values.
84bool ConstantFPSDNode::isExactlyValue(const APFloat& V) const {
85  return getValueAPF().bitwiseIsEqual(V);
86}
87
88bool ConstantFPSDNode::isValueValidForType(EVT VT,
89                                           const APFloat& Val) {
90  assert(VT.isFloatingPoint() && "Can only convert between FP types");
91
92  // PPC long double cannot be converted to any other type.
93  if (VT == MVT::ppcf128 ||
94      &Val.getSemantics() == &APFloat::PPCDoubleDouble)
95    return false;
96
97  // convert modifies in place, so make a copy.
98  APFloat Val2 = APFloat(Val);
99  bool losesInfo;
100  (void) Val2.convert(*EVTToAPFloatSemantics(VT), APFloat::rmNearestTiesToEven,
101                      &losesInfo);
102  return !losesInfo;
103}
104
105//===----------------------------------------------------------------------===//
106//                              ISD Namespace
107//===----------------------------------------------------------------------===//
108
109/// isBuildVectorAllOnes - Return true if the specified node is a
110/// BUILD_VECTOR where all of the elements are ~0 or undef.
111bool ISD::isBuildVectorAllOnes(const SDNode *N) {
112  // Look through a bit convert.
113  if (N->getOpcode() == ISD::BITCAST)
114    N = N->getOperand(0).getNode();
115
116  if (N->getOpcode() != ISD::BUILD_VECTOR) return false;
117
118  unsigned i = 0, e = N->getNumOperands();
119
120  // Skip over all of the undef values.
121  while (i != e && N->getOperand(i).getOpcode() == ISD::UNDEF)
122    ++i;
123
124  // Do not accept an all-undef vector.
125  if (i == e) return false;
126
127  // Do not accept build_vectors that aren't all constants or which have non-~0
128  // elements. We have to be a bit careful here, as the type of the constant
129  // may not be the same as the type of the vector elements due to type
130  // legalization (the elements are promoted to a legal type for the target and
131  // a vector of a type may be legal when the base element type is not).
132  // We only want to check enough bits to cover the vector elements, because
133  // we care if the resultant vector is all ones, not whether the individual
134  // constants are.
135  SDValue NotZero = N->getOperand(i);
136  unsigned EltSize = N->getValueType(0).getVectorElementType().getSizeInBits();
137  if (isa<ConstantSDNode>(NotZero)) {
138    if (cast<ConstantSDNode>(NotZero)->getAPIntValue().countTrailingOnes() <
139        EltSize)
140      return false;
141  } else if (isa<ConstantFPSDNode>(NotZero)) {
142    if (cast<ConstantFPSDNode>(NotZero)->getValueAPF()
143              .bitcastToAPInt().countTrailingOnes() < EltSize)
144      return false;
145  } else
146    return false;
147
148  // Okay, we have at least one ~0 value, check to see if the rest match or are
149  // undefs. Even with the above element type twiddling, this should be OK, as
150  // the same type legalization should have applied to all the elements.
151  for (++i; i != e; ++i)
152    if (N->getOperand(i) != NotZero &&
153        N->getOperand(i).getOpcode() != ISD::UNDEF)
154      return false;
155  return true;
156}
157
158
159/// isBuildVectorAllZeros - Return true if the specified node is a
160/// BUILD_VECTOR where all of the elements are 0 or undef.
161bool ISD::isBuildVectorAllZeros(const SDNode *N) {
162  // Look through a bit convert.
163  if (N->getOpcode() == ISD::BITCAST)
164    N = N->getOperand(0).getNode();
165
166  if (N->getOpcode() != ISD::BUILD_VECTOR) return false;
167
168  unsigned i = 0, e = N->getNumOperands();
169
170  // Skip over all of the undef values.
171  while (i != e && N->getOperand(i).getOpcode() == ISD::UNDEF)
172    ++i;
173
174  // Do not accept an all-undef vector.
175  if (i == e) return false;
176
177  // Do not accept build_vectors that aren't all constants or which have non-0
178  // elements.
179  SDValue Zero = N->getOperand(i);
180  if (isa<ConstantSDNode>(Zero)) {
181    if (!cast<ConstantSDNode>(Zero)->isNullValue())
182      return false;
183  } else if (isa<ConstantFPSDNode>(Zero)) {
184    if (!cast<ConstantFPSDNode>(Zero)->getValueAPF().isPosZero())
185      return false;
186  } else
187    return false;
188
189  // Okay, we have at least one 0 value, check to see if the rest match or are
190  // undefs.
191  for (++i; i != e; ++i)
192    if (N->getOperand(i) != Zero &&
193        N->getOperand(i).getOpcode() != ISD::UNDEF)
194      return false;
195  return true;
196}
197
198/// isScalarToVector - Return true if the specified node is a
199/// ISD::SCALAR_TO_VECTOR node or a BUILD_VECTOR node where only the low
200/// element is not an undef.
201bool ISD::isScalarToVector(const SDNode *N) {
202  if (N->getOpcode() == ISD::SCALAR_TO_VECTOR)
203    return true;
204
205  if (N->getOpcode() != ISD::BUILD_VECTOR)
206    return false;
207  if (N->getOperand(0).getOpcode() == ISD::UNDEF)
208    return false;
209  unsigned NumElems = N->getNumOperands();
210  if (NumElems == 1)
211    return false;
212  for (unsigned i = 1; i < NumElems; ++i) {
213    SDValue V = N->getOperand(i);
214    if (V.getOpcode() != ISD::UNDEF)
215      return false;
216  }
217  return true;
218}
219
220/// getSetCCSwappedOperands - Return the operation corresponding to (Y op X)
221/// when given the operation for (X op Y).
222ISD::CondCode ISD::getSetCCSwappedOperands(ISD::CondCode Operation) {
223  // To perform this operation, we just need to swap the L and G bits of the
224  // operation.
225  unsigned OldL = (Operation >> 2) & 1;
226  unsigned OldG = (Operation >> 1) & 1;
227  return ISD::CondCode((Operation & ~6) |  // Keep the N, U, E bits
228                       (OldL << 1) |       // New G bit
229                       (OldG << 2));       // New L bit.
230}
231
232/// getSetCCInverse - Return the operation corresponding to !(X op Y), where
233/// 'op' is a valid SetCC operation.
234ISD::CondCode ISD::getSetCCInverse(ISD::CondCode Op, bool isInteger) {
235  unsigned Operation = Op;
236  if (isInteger)
237    Operation ^= 7;   // Flip L, G, E bits, but not U.
238  else
239    Operation ^= 15;  // Flip all of the condition bits.
240
241  if (Operation > ISD::SETTRUE2)
242    Operation &= ~8;  // Don't let N and U bits get set.
243
244  return ISD::CondCode(Operation);
245}
246
247
248/// isSignedOp - For an integer comparison, return 1 if the comparison is a
249/// signed operation and 2 if the result is an unsigned comparison.  Return zero
250/// if the operation does not depend on the sign of the input (setne and seteq).
251static int isSignedOp(ISD::CondCode Opcode) {
252  switch (Opcode) {
253  default: llvm_unreachable("Illegal integer setcc operation!");
254  case ISD::SETEQ:
255  case ISD::SETNE: return 0;
256  case ISD::SETLT:
257  case ISD::SETLE:
258  case ISD::SETGT:
259  case ISD::SETGE: return 1;
260  case ISD::SETULT:
261  case ISD::SETULE:
262  case ISD::SETUGT:
263  case ISD::SETUGE: return 2;
264  }
265}
266
267/// getSetCCOrOperation - Return the result of a logical OR between different
268/// comparisons of identical values: ((X op1 Y) | (X op2 Y)).  This function
269/// returns SETCC_INVALID if it is not possible to represent the resultant
270/// comparison.
271ISD::CondCode ISD::getSetCCOrOperation(ISD::CondCode Op1, ISD::CondCode Op2,
272                                       bool isInteger) {
273  if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3)
274    // Cannot fold a signed integer setcc with an unsigned integer setcc.
275    return ISD::SETCC_INVALID;
276
277  unsigned Op = Op1 | Op2;  // Combine all of the condition bits.
278
279  // If the N and U bits get set then the resultant comparison DOES suddenly
280  // care about orderedness, and is true when ordered.
281  if (Op > ISD::SETTRUE2)
282    Op &= ~16;     // Clear the U bit if the N bit is set.
283
284  // Canonicalize illegal integer setcc's.
285  if (isInteger && Op == ISD::SETUNE)  // e.g. SETUGT | SETULT
286    Op = ISD::SETNE;
287
288  return ISD::CondCode(Op);
289}
290
291/// getSetCCAndOperation - Return the result of a logical AND between different
292/// comparisons of identical values: ((X op1 Y) & (X op2 Y)).  This
293/// function returns zero if it is not possible to represent the resultant
294/// comparison.
295ISD::CondCode ISD::getSetCCAndOperation(ISD::CondCode Op1, ISD::CondCode Op2,
296                                        bool isInteger) {
297  if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3)
298    // Cannot fold a signed setcc with an unsigned setcc.
299    return ISD::SETCC_INVALID;
300
301  // Combine all of the condition bits.
302  ISD::CondCode Result = ISD::CondCode(Op1 & Op2);
303
304  // Canonicalize illegal integer setcc's.
305  if (isInteger) {
306    switch (Result) {
307    default: break;
308    case ISD::SETUO : Result = ISD::SETFALSE; break;  // SETUGT & SETULT
309    case ISD::SETOEQ:                                 // SETEQ  & SETU[LG]E
310    case ISD::SETUEQ: Result = ISD::SETEQ   ; break;  // SETUGE & SETULE
311    case ISD::SETOLT: Result = ISD::SETULT  ; break;  // SETULT & SETNE
312    case ISD::SETOGT: Result = ISD::SETUGT  ; break;  // SETUGT & SETNE
313    }
314  }
315
316  return Result;
317}
318
319//===----------------------------------------------------------------------===//
320//                           SDNode Profile Support
321//===----------------------------------------------------------------------===//
322
323/// AddNodeIDOpcode - Add the node opcode to the NodeID data.
324///
325static void AddNodeIDOpcode(FoldingSetNodeID &ID, unsigned OpC)  {
326  ID.AddInteger(OpC);
327}
328
329/// AddNodeIDValueTypes - Value type lists are intern'd so we can represent them
330/// solely with their pointer.
331static void AddNodeIDValueTypes(FoldingSetNodeID &ID, SDVTList VTList) {
332  ID.AddPointer(VTList.VTs);
333}
334
335/// AddNodeIDOperands - Various routines for adding operands to the NodeID data.
336///
337static void AddNodeIDOperands(FoldingSetNodeID &ID,
338                              const SDValue *Ops, unsigned NumOps) {
339  for (; NumOps; --NumOps, ++Ops) {
340    ID.AddPointer(Ops->getNode());
341    ID.AddInteger(Ops->getResNo());
342  }
343}
344
345/// AddNodeIDOperands - Various routines for adding operands to the NodeID data.
346///
347static void AddNodeIDOperands(FoldingSetNodeID &ID,
348                              const SDUse *Ops, unsigned NumOps) {
349  for (; NumOps; --NumOps, ++Ops) {
350    ID.AddPointer(Ops->getNode());
351    ID.AddInteger(Ops->getResNo());
352  }
353}
354
355static void AddNodeIDNode(FoldingSetNodeID &ID,
356                          unsigned short OpC, SDVTList VTList,
357                          const SDValue *OpList, unsigned N) {
358  AddNodeIDOpcode(ID, OpC);
359  AddNodeIDValueTypes(ID, VTList);
360  AddNodeIDOperands(ID, OpList, N);
361}
362
363/// AddNodeIDCustom - If this is an SDNode with special info, add this info to
364/// the NodeID data.
365static void AddNodeIDCustom(FoldingSetNodeID &ID, const SDNode *N) {
366  switch (N->getOpcode()) {
367  case ISD::TargetExternalSymbol:
368  case ISD::ExternalSymbol:
369    llvm_unreachable("Should only be used on nodes with operands");
370  default: break;  // Normal nodes don't need extra info.
371  case ISD::TargetConstant:
372  case ISD::Constant:
373    ID.AddPointer(cast<ConstantSDNode>(N)->getConstantIntValue());
374    break;
375  case ISD::TargetConstantFP:
376  case ISD::ConstantFP: {
377    ID.AddPointer(cast<ConstantFPSDNode>(N)->getConstantFPValue());
378    break;
379  }
380  case ISD::TargetGlobalAddress:
381  case ISD::GlobalAddress:
382  case ISD::TargetGlobalTLSAddress:
383  case ISD::GlobalTLSAddress: {
384    const GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(N);
385    ID.AddPointer(GA->getGlobal());
386    ID.AddInteger(GA->getOffset());
387    ID.AddInteger(GA->getTargetFlags());
388    break;
389  }
390  case ISD::BasicBlock:
391    ID.AddPointer(cast<BasicBlockSDNode>(N)->getBasicBlock());
392    break;
393  case ISD::Register:
394    ID.AddInteger(cast<RegisterSDNode>(N)->getReg());
395    break;
396  case ISD::RegisterMask:
397    ID.AddPointer(cast<RegisterMaskSDNode>(N)->getRegMask());
398    break;
399  case ISD::SRCVALUE:
400    ID.AddPointer(cast<SrcValueSDNode>(N)->getValue());
401    break;
402  case ISD::FrameIndex:
403  case ISD::TargetFrameIndex:
404    ID.AddInteger(cast<FrameIndexSDNode>(N)->getIndex());
405    break;
406  case ISD::JumpTable:
407  case ISD::TargetJumpTable:
408    ID.AddInteger(cast<JumpTableSDNode>(N)->getIndex());
409    ID.AddInteger(cast<JumpTableSDNode>(N)->getTargetFlags());
410    break;
411  case ISD::ConstantPool:
412  case ISD::TargetConstantPool: {
413    const ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(N);
414    ID.AddInteger(CP->getAlignment());
415    ID.AddInteger(CP->getOffset());
416    if (CP->isMachineConstantPoolEntry())
417      CP->getMachineCPVal()->addSelectionDAGCSEId(ID);
418    else
419      ID.AddPointer(CP->getConstVal());
420    ID.AddInteger(CP->getTargetFlags());
421    break;
422  }
423  case ISD::LOAD: {
424    const LoadSDNode *LD = cast<LoadSDNode>(N);
425    ID.AddInteger(LD->getMemoryVT().getRawBits());
426    ID.AddInteger(LD->getRawSubclassData());
427    break;
428  }
429  case ISD::STORE: {
430    const StoreSDNode *ST = cast<StoreSDNode>(N);
431    ID.AddInteger(ST->getMemoryVT().getRawBits());
432    ID.AddInteger(ST->getRawSubclassData());
433    break;
434  }
435  case ISD::ATOMIC_CMP_SWAP:
436  case ISD::ATOMIC_SWAP:
437  case ISD::ATOMIC_LOAD_ADD:
438  case ISD::ATOMIC_LOAD_SUB:
439  case ISD::ATOMIC_LOAD_AND:
440  case ISD::ATOMIC_LOAD_OR:
441  case ISD::ATOMIC_LOAD_XOR:
442  case ISD::ATOMIC_LOAD_NAND:
443  case ISD::ATOMIC_LOAD_MIN:
444  case ISD::ATOMIC_LOAD_MAX:
445  case ISD::ATOMIC_LOAD_UMIN:
446  case ISD::ATOMIC_LOAD_UMAX:
447  case ISD::ATOMIC_LOAD:
448  case ISD::ATOMIC_STORE: {
449    const AtomicSDNode *AT = cast<AtomicSDNode>(N);
450    ID.AddInteger(AT->getMemoryVT().getRawBits());
451    ID.AddInteger(AT->getRawSubclassData());
452    break;
453  }
454  case ISD::VECTOR_SHUFFLE: {
455    const ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(N);
456    for (unsigned i = 0, e = N->getValueType(0).getVectorNumElements();
457         i != e; ++i)
458      ID.AddInteger(SVN->getMaskElt(i));
459    break;
460  }
461  case ISD::TargetBlockAddress:
462  case ISD::BlockAddress: {
463    ID.AddPointer(cast<BlockAddressSDNode>(N)->getBlockAddress());
464    ID.AddInteger(cast<BlockAddressSDNode>(N)->getTargetFlags());
465    break;
466  }
467  } // end switch (N->getOpcode())
468}
469
470/// AddNodeIDNode - Generic routine for adding a nodes info to the NodeID
471/// data.
472static void AddNodeIDNode(FoldingSetNodeID &ID, const SDNode *N) {
473  AddNodeIDOpcode(ID, N->getOpcode());
474  // Add the return value info.
475  AddNodeIDValueTypes(ID, N->getVTList());
476  // Add the operand info.
477  AddNodeIDOperands(ID, N->op_begin(), N->getNumOperands());
478
479  // Handle SDNode leafs with special info.
480  AddNodeIDCustom(ID, N);
481}
482
483/// encodeMemSDNodeFlags - Generic routine for computing a value for use in
484/// the CSE map that carries volatility, temporalness, indexing mode, and
485/// extension/truncation information.
486///
487static inline unsigned
488encodeMemSDNodeFlags(int ConvType, ISD::MemIndexedMode AM, bool isVolatile,
489                     bool isNonTemporal, bool isInvariant) {
490  assert((ConvType & 3) == ConvType &&
491         "ConvType may not require more than 2 bits!");
492  assert((AM & 7) == AM &&
493         "AM may not require more than 3 bits!");
494  return ConvType |
495         (AM << 2) |
496         (isVolatile << 5) |
497         (isNonTemporal << 6) |
498         (isInvariant << 7);
499}
500
501//===----------------------------------------------------------------------===//
502//                              SelectionDAG Class
503//===----------------------------------------------------------------------===//
504
505/// doNotCSE - Return true if CSE should not be performed for this node.
506static bool doNotCSE(SDNode *N) {
507  if (N->getValueType(0) == MVT::Glue)
508    return true; // Never CSE anything that produces a flag.
509
510  switch (N->getOpcode()) {
511  default: break;
512  case ISD::HANDLENODE:
513  case ISD::EH_LABEL:
514    return true;   // Never CSE these nodes.
515  }
516
517  // Check that remaining values produced are not flags.
518  for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
519    if (N->getValueType(i) == MVT::Glue)
520      return true; // Never CSE anything that produces a flag.
521
522  return false;
523}
524
525/// RemoveDeadNodes - This method deletes all unreachable nodes in the
526/// SelectionDAG.
527void SelectionDAG::RemoveDeadNodes() {
528  // Create a dummy node (which is not added to allnodes), that adds a reference
529  // to the root node, preventing it from being deleted.
530  HandleSDNode Dummy(getRoot());
531
532  SmallVector<SDNode*, 128> DeadNodes;
533
534  // Add all obviously-dead nodes to the DeadNodes worklist.
535  for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I)
536    if (I->use_empty())
537      DeadNodes.push_back(I);
538
539  RemoveDeadNodes(DeadNodes);
540
541  // If the root changed (e.g. it was a dead load, update the root).
542  setRoot(Dummy.getValue());
543}
544
545/// RemoveDeadNodes - This method deletes the unreachable nodes in the
546/// given list, and any nodes that become unreachable as a result.
547void SelectionDAG::RemoveDeadNodes(SmallVectorImpl<SDNode *> &DeadNodes,
548                                   DAGUpdateListener *UpdateListener) {
549
550  // Process the worklist, deleting the nodes and adding their uses to the
551  // worklist.
552  while (!DeadNodes.empty()) {
553    SDNode *N = DeadNodes.pop_back_val();
554
555    if (UpdateListener)
556      UpdateListener->NodeDeleted(N, 0);
557
558    // Take the node out of the appropriate CSE map.
559    RemoveNodeFromCSEMaps(N);
560
561    // Next, brutally remove the operand list.  This is safe to do, as there are
562    // no cycles in the graph.
563    for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) {
564      SDUse &Use = *I++;
565      SDNode *Operand = Use.getNode();
566      Use.set(SDValue());
567
568      // Now that we removed this operand, see if there are no uses of it left.
569      if (Operand->use_empty())
570        DeadNodes.push_back(Operand);
571    }
572
573    DeallocateNode(N);
574  }
575}
576
577void SelectionDAG::RemoveDeadNode(SDNode *N, DAGUpdateListener *UpdateListener){
578  SmallVector<SDNode*, 16> DeadNodes(1, N);
579
580  // Create a dummy node that adds a reference to the root node, preventing
581  // it from being deleted.  (This matters if the root is an operand of the
582  // dead node.)
583  HandleSDNode Dummy(getRoot());
584
585  RemoveDeadNodes(DeadNodes, UpdateListener);
586}
587
588void SelectionDAG::DeleteNode(SDNode *N) {
589  // First take this out of the appropriate CSE map.
590  RemoveNodeFromCSEMaps(N);
591
592  // Finally, remove uses due to operands of this node, remove from the
593  // AllNodes list, and delete the node.
594  DeleteNodeNotInCSEMaps(N);
595}
596
597void SelectionDAG::DeleteNodeNotInCSEMaps(SDNode *N) {
598  assert(N != AllNodes.begin() && "Cannot delete the entry node!");
599  assert(N->use_empty() && "Cannot delete a node that is not dead!");
600
601  // Drop all of the operands and decrement used node's use counts.
602  N->DropOperands();
603
604  DeallocateNode(N);
605}
606
607void SelectionDAG::DeallocateNode(SDNode *N) {
608  if (N->OperandsNeedDelete)
609    delete[] N->OperandList;
610
611  // Set the opcode to DELETED_NODE to help catch bugs when node
612  // memory is reallocated.
613  N->NodeType = ISD::DELETED_NODE;
614
615  NodeAllocator.Deallocate(AllNodes.remove(N));
616
617  // Remove the ordering of this node.
618  Ordering->remove(N);
619
620  // If any of the SDDbgValue nodes refer to this SDNode, invalidate them.
621  ArrayRef<SDDbgValue*> DbgVals = DbgInfo->getSDDbgValues(N);
622  for (unsigned i = 0, e = DbgVals.size(); i != e; ++i)
623    DbgVals[i]->setIsInvalidated();
624}
625
626/// RemoveNodeFromCSEMaps - Take the specified node out of the CSE map that
627/// correspond to it.  This is useful when we're about to delete or repurpose
628/// the node.  We don't want future request for structurally identical nodes
629/// to return N anymore.
630bool SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
631  bool Erased = false;
632  switch (N->getOpcode()) {
633  case ISD::HANDLENODE: return false;  // noop.
634  case ISD::CONDCODE:
635    assert(CondCodeNodes[cast<CondCodeSDNode>(N)->get()] &&
636           "Cond code doesn't exist!");
637    Erased = CondCodeNodes[cast<CondCodeSDNode>(N)->get()] != 0;
638    CondCodeNodes[cast<CondCodeSDNode>(N)->get()] = 0;
639    break;
640  case ISD::ExternalSymbol:
641    Erased = ExternalSymbols.erase(cast<ExternalSymbolSDNode>(N)->getSymbol());
642    break;
643  case ISD::TargetExternalSymbol: {
644    ExternalSymbolSDNode *ESN = cast<ExternalSymbolSDNode>(N);
645    Erased = TargetExternalSymbols.erase(
646               std::pair<std::string,unsigned char>(ESN->getSymbol(),
647                                                    ESN->getTargetFlags()));
648    break;
649  }
650  case ISD::VALUETYPE: {
651    EVT VT = cast<VTSDNode>(N)->getVT();
652    if (VT.isExtended()) {
653      Erased = ExtendedValueTypeNodes.erase(VT);
654    } else {
655      Erased = ValueTypeNodes[VT.getSimpleVT().SimpleTy] != 0;
656      ValueTypeNodes[VT.getSimpleVT().SimpleTy] = 0;
657    }
658    break;
659  }
660  default:
661    // Remove it from the CSE Map.
662    assert(N->getOpcode() != ISD::DELETED_NODE && "DELETED_NODE in CSEMap!");
663    assert(N->getOpcode() != ISD::EntryToken && "EntryToken in CSEMap!");
664    Erased = CSEMap.RemoveNode(N);
665    break;
666  }
667#ifndef NDEBUG
668  // Verify that the node was actually in one of the CSE maps, unless it has a
669  // flag result (which cannot be CSE'd) or is one of the special cases that are
670  // not subject to CSE.
671  if (!Erased && N->getValueType(N->getNumValues()-1) != MVT::Glue &&
672      !N->isMachineOpcode() && !doNotCSE(N)) {
673    N->dump(this);
674    dbgs() << "\n";
675    llvm_unreachable("Node is not in map!");
676  }
677#endif
678  return Erased;
679}
680
681/// AddModifiedNodeToCSEMaps - The specified node has been removed from the CSE
682/// maps and modified in place. Add it back to the CSE maps, unless an identical
683/// node already exists, in which case transfer all its users to the existing
684/// node. This transfer can potentially trigger recursive merging.
685///
686void
687SelectionDAG::AddModifiedNodeToCSEMaps(SDNode *N,
688                                       DAGUpdateListener *UpdateListener) {
689  // For node types that aren't CSE'd, just act as if no identical node
690  // already exists.
691  if (!doNotCSE(N)) {
692    SDNode *Existing = CSEMap.GetOrInsertNode(N);
693    if (Existing != N) {
694      // If there was already an existing matching node, use ReplaceAllUsesWith
695      // to replace the dead one with the existing one.  This can cause
696      // recursive merging of other unrelated nodes down the line.
697      ReplaceAllUsesWith(N, Existing, UpdateListener);
698
699      // N is now dead.  Inform the listener if it exists and delete it.
700      if (UpdateListener)
701        UpdateListener->NodeDeleted(N, Existing);
702      DeleteNodeNotInCSEMaps(N);
703      return;
704    }
705  }
706
707  // If the node doesn't already exist, we updated it.  Inform a listener if
708  // it exists.
709  if (UpdateListener)
710    UpdateListener->NodeUpdated(N);
711}
712
713/// FindModifiedNodeSlot - Find a slot for the specified node if its operands
714/// were replaced with those specified.  If this node is never memoized,
715/// return null, otherwise return a pointer to the slot it would take.  If a
716/// node already exists with these operands, the slot will be non-null.
717SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, SDValue Op,
718                                           void *&InsertPos) {
719  if (doNotCSE(N))
720    return 0;
721
722  SDValue Ops[] = { Op };
723  FoldingSetNodeID ID;
724  AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, 1);
725  AddNodeIDCustom(ID, N);
726  SDNode *Node = CSEMap.FindNodeOrInsertPos(ID, InsertPos);
727  return Node;
728}
729
730/// FindModifiedNodeSlot - Find a slot for the specified node if its operands
731/// were replaced with those specified.  If this node is never memoized,
732/// return null, otherwise return a pointer to the slot it would take.  If a
733/// node already exists with these operands, the slot will be non-null.
734SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N,
735                                           SDValue Op1, SDValue Op2,
736                                           void *&InsertPos) {
737  if (doNotCSE(N))
738    return 0;
739
740  SDValue Ops[] = { Op1, Op2 };
741  FoldingSetNodeID ID;
742  AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, 2);
743  AddNodeIDCustom(ID, N);
744  SDNode *Node = CSEMap.FindNodeOrInsertPos(ID, InsertPos);
745  return Node;
746}
747
748
749/// FindModifiedNodeSlot - Find a slot for the specified node if its operands
750/// were replaced with those specified.  If this node is never memoized,
751/// return null, otherwise return a pointer to the slot it would take.  If a
752/// node already exists with these operands, the slot will be non-null.
753SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N,
754                                           const SDValue *Ops,unsigned NumOps,
755                                           void *&InsertPos) {
756  if (doNotCSE(N))
757    return 0;
758
759  FoldingSetNodeID ID;
760  AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, NumOps);
761  AddNodeIDCustom(ID, N);
762  SDNode *Node = CSEMap.FindNodeOrInsertPos(ID, InsertPos);
763  return Node;
764}
765
766#ifndef NDEBUG
767/// VerifyNodeCommon - Sanity check the given node.  Aborts if it is invalid.
768static void VerifyNodeCommon(SDNode *N) {
769  switch (N->getOpcode()) {
770  default:
771    break;
772  case ISD::BUILD_PAIR: {
773    EVT VT = N->getValueType(0);
774    assert(N->getNumValues() == 1 && "Too many results!");
775    assert(!VT.isVector() && (VT.isInteger() || VT.isFloatingPoint()) &&
776           "Wrong return type!");
777    assert(N->getNumOperands() == 2 && "Wrong number of operands!");
778    assert(N->getOperand(0).getValueType() == N->getOperand(1).getValueType() &&
779           "Mismatched operand types!");
780    assert(N->getOperand(0).getValueType().isInteger() == VT.isInteger() &&
781           "Wrong operand type!");
782    assert(VT.getSizeInBits() == 2 * N->getOperand(0).getValueSizeInBits() &&
783           "Wrong return type size");
784    break;
785  }
786  case ISD::BUILD_VECTOR: {
787    assert(N->getNumValues() == 1 && "Too many results!");
788    assert(N->getValueType(0).isVector() && "Wrong return type!");
789    assert(N->getNumOperands() == N->getValueType(0).getVectorNumElements() &&
790           "Wrong number of operands!");
791    EVT EltVT = N->getValueType(0).getVectorElementType();
792    for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
793      assert((I->getValueType() == EltVT ||
794             (EltVT.isInteger() && I->getValueType().isInteger() &&
795              EltVT.bitsLE(I->getValueType()))) &&
796            "Wrong operand type!");
797      assert(I->getValueType() == N->getOperand(0).getValueType() &&
798             "Operands must all have the same type");
799    }
800    break;
801  }
802  }
803}
804
805/// VerifySDNode - Sanity check the given SDNode.  Aborts if it is invalid.
806static void VerifySDNode(SDNode *N) {
807  // The SDNode allocators cannot be used to allocate nodes with fields that are
808  // not present in an SDNode!
809  assert(!isa<MemSDNode>(N) && "Bad MemSDNode!");
810  assert(!isa<ShuffleVectorSDNode>(N) && "Bad ShuffleVectorSDNode!");
811  assert(!isa<ConstantSDNode>(N) && "Bad ConstantSDNode!");
812  assert(!isa<ConstantFPSDNode>(N) && "Bad ConstantFPSDNode!");
813  assert(!isa<GlobalAddressSDNode>(N) && "Bad GlobalAddressSDNode!");
814  assert(!isa<FrameIndexSDNode>(N) && "Bad FrameIndexSDNode!");
815  assert(!isa<JumpTableSDNode>(N) && "Bad JumpTableSDNode!");
816  assert(!isa<ConstantPoolSDNode>(N) && "Bad ConstantPoolSDNode!");
817  assert(!isa<BasicBlockSDNode>(N) && "Bad BasicBlockSDNode!");
818  assert(!isa<SrcValueSDNode>(N) && "Bad SrcValueSDNode!");
819  assert(!isa<MDNodeSDNode>(N) && "Bad MDNodeSDNode!");
820  assert(!isa<RegisterSDNode>(N) && "Bad RegisterSDNode!");
821  assert(!isa<BlockAddressSDNode>(N) && "Bad BlockAddressSDNode!");
822  assert(!isa<EHLabelSDNode>(N) && "Bad EHLabelSDNode!");
823  assert(!isa<ExternalSymbolSDNode>(N) && "Bad ExternalSymbolSDNode!");
824  assert(!isa<CondCodeSDNode>(N) && "Bad CondCodeSDNode!");
825  assert(!isa<CvtRndSatSDNode>(N) && "Bad CvtRndSatSDNode!");
826  assert(!isa<VTSDNode>(N) && "Bad VTSDNode!");
827  assert(!isa<MachineSDNode>(N) && "Bad MachineSDNode!");
828
829  VerifyNodeCommon(N);
830}
831
832/// VerifyMachineNode - Sanity check the given MachineNode.  Aborts if it is
833/// invalid.
834static void VerifyMachineNode(SDNode *N) {
835  // The MachineNode allocators cannot be used to allocate nodes with fields
836  // that are not present in a MachineNode!
837  // Currently there are no such nodes.
838
839  VerifyNodeCommon(N);
840}
841#endif // NDEBUG
842
843/// getEVTAlignment - Compute the default alignment value for the
844/// given type.
845///
846unsigned SelectionDAG::getEVTAlignment(EVT VT) const {
847  Type *Ty = VT == MVT::iPTR ?
848                   PointerType::get(Type::getInt8Ty(*getContext()), 0) :
849                   VT.getTypeForEVT(*getContext());
850
851  return TLI.getTargetData()->getABITypeAlignment(Ty);
852}
853
854// EntryNode could meaningfully have debug info if we can find it...
855SelectionDAG::SelectionDAG(const TargetMachine &tm, CodeGenOpt::Level OL)
856  : TM(tm), TLI(*tm.getTargetLowering()), TSI(*tm.getSelectionDAGInfo()),
857    OptLevel(OL), EntryNode(ISD::EntryToken, DebugLoc(), getVTList(MVT::Other)),
858    Root(getEntryNode()), Ordering(0) {
859  AllNodes.push_back(&EntryNode);
860  Ordering = new SDNodeOrdering();
861  DbgInfo = new SDDbgInfo();
862}
863
864void SelectionDAG::init(MachineFunction &mf) {
865  MF = &mf;
866  Context = &mf.getFunction()->getContext();
867}
868
869SelectionDAG::~SelectionDAG() {
870  allnodes_clear();
871  delete Ordering;
872  delete DbgInfo;
873}
874
875void SelectionDAG::allnodes_clear() {
876  assert(&*AllNodes.begin() == &EntryNode);
877  AllNodes.remove(AllNodes.begin());
878  while (!AllNodes.empty())
879    DeallocateNode(AllNodes.begin());
880}
881
882void SelectionDAG::clear() {
883  allnodes_clear();
884  OperandAllocator.Reset();
885  CSEMap.clear();
886
887  ExtendedValueTypeNodes.clear();
888  ExternalSymbols.clear();
889  TargetExternalSymbols.clear();
890  std::fill(CondCodeNodes.begin(), CondCodeNodes.end(),
891            static_cast<CondCodeSDNode*>(0));
892  std::fill(ValueTypeNodes.begin(), ValueTypeNodes.end(),
893            static_cast<SDNode*>(0));
894
895  EntryNode.UseList = 0;
896  AllNodes.push_back(&EntryNode);
897  Root = getEntryNode();
898  Ordering->clear();
899  DbgInfo->clear();
900}
901
902SDValue SelectionDAG::getAnyExtOrTrunc(SDValue Op, DebugLoc DL, EVT VT) {
903  return VT.bitsGT(Op.getValueType()) ?
904    getNode(ISD::ANY_EXTEND, DL, VT, Op) :
905    getNode(ISD::TRUNCATE, DL, VT, Op);
906}
907
908SDValue SelectionDAG::getSExtOrTrunc(SDValue Op, DebugLoc DL, EVT VT) {
909  return VT.bitsGT(Op.getValueType()) ?
910    getNode(ISD::SIGN_EXTEND, DL, VT, Op) :
911    getNode(ISD::TRUNCATE, DL, VT, Op);
912}
913
914SDValue SelectionDAG::getZExtOrTrunc(SDValue Op, DebugLoc DL, EVT VT) {
915  return VT.bitsGT(Op.getValueType()) ?
916    getNode(ISD::ZERO_EXTEND, DL, VT, Op) :
917    getNode(ISD::TRUNCATE, DL, VT, Op);
918}
919
920SDValue SelectionDAG::getZeroExtendInReg(SDValue Op, DebugLoc DL, EVT VT) {
921  assert(!VT.isVector() &&
922         "getZeroExtendInReg should use the vector element type instead of "
923         "the vector type!");
924  if (Op.getValueType() == VT) return Op;
925  unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits();
926  APInt Imm = APInt::getLowBitsSet(BitWidth,
927                                   VT.getSizeInBits());
928  return getNode(ISD::AND, DL, Op.getValueType(), Op,
929                 getConstant(Imm, Op.getValueType()));
930}
931
932/// getNOT - Create a bitwise NOT operation as (XOR Val, -1).
933///
934SDValue SelectionDAG::getNOT(DebugLoc DL, SDValue Val, EVT VT) {
935  EVT EltVT = VT.getScalarType();
936  SDValue NegOne =
937    getConstant(APInt::getAllOnesValue(EltVT.getSizeInBits()), VT);
938  return getNode(ISD::XOR, DL, VT, Val, NegOne);
939}
940
941SDValue SelectionDAG::getConstant(uint64_t Val, EVT VT, bool isT) {
942  EVT EltVT = VT.getScalarType();
943  assert((EltVT.getSizeInBits() >= 64 ||
944         (uint64_t)((int64_t)Val >> EltVT.getSizeInBits()) + 1 < 2) &&
945         "getConstant with a uint64_t value that doesn't fit in the type!");
946  return getConstant(APInt(EltVT.getSizeInBits(), Val), VT, isT);
947}
948
949SDValue SelectionDAG::getConstant(const APInt &Val, EVT VT, bool isT) {
950  return getConstant(*ConstantInt::get(*Context, Val), VT, isT);
951}
952
953SDValue SelectionDAG::getConstant(const ConstantInt &Val, EVT VT, bool isT) {
954  assert(VT.isInteger() && "Cannot create FP integer constant!");
955
956  EVT EltVT = VT.getScalarType();
957  const ConstantInt *Elt = &Val;
958
959  // In some cases the vector type is legal but the element type is illegal and
960  // needs to be promoted, for example v8i8 on ARM.  In this case, promote the
961  // inserted value (the type does not need to match the vector element type).
962  // Any extra bits introduced will be truncated away.
963  if (VT.isVector() && TLI.getTypeAction(*getContext(), EltVT) ==
964      TargetLowering::TypePromoteInteger) {
965   EltVT = TLI.getTypeToTransformTo(*getContext(), EltVT);
966   APInt NewVal = Elt->getValue().zext(EltVT.getSizeInBits());
967   Elt = ConstantInt::get(*getContext(), NewVal);
968  }
969
970  assert(Elt->getBitWidth() == EltVT.getSizeInBits() &&
971         "APInt size does not match type size!");
972  unsigned Opc = isT ? ISD::TargetConstant : ISD::Constant;
973  FoldingSetNodeID ID;
974  AddNodeIDNode(ID, Opc, getVTList(EltVT), 0, 0);
975  ID.AddPointer(Elt);
976  void *IP = 0;
977  SDNode *N = NULL;
978  if ((N = CSEMap.FindNodeOrInsertPos(ID, IP)))
979    if (!VT.isVector())
980      return SDValue(N, 0);
981
982  if (!N) {
983    N = new (NodeAllocator) ConstantSDNode(isT, Elt, EltVT);
984    CSEMap.InsertNode(N, IP);
985    AllNodes.push_back(N);
986  }
987
988  SDValue Result(N, 0);
989  if (VT.isVector()) {
990    SmallVector<SDValue, 8> Ops;
991    Ops.assign(VT.getVectorNumElements(), Result);
992    Result = getNode(ISD::BUILD_VECTOR, DebugLoc(), VT, &Ops[0], Ops.size());
993  }
994  return Result;
995}
996
997SDValue SelectionDAG::getIntPtrConstant(uint64_t Val, bool isTarget) {
998  return getConstant(Val, TLI.getPointerTy(), isTarget);
999}
1000
1001
1002SDValue SelectionDAG::getConstantFP(const APFloat& V, EVT VT, bool isTarget) {
1003  return getConstantFP(*ConstantFP::get(*getContext(), V), VT, isTarget);
1004}
1005
1006SDValue SelectionDAG::getConstantFP(const ConstantFP& V, EVT VT, bool isTarget){
1007  assert(VT.isFloatingPoint() && "Cannot create integer FP constant!");
1008
1009  EVT EltVT = VT.getScalarType();
1010
1011  // Do the map lookup using the actual bit pattern for the floating point
1012  // value, so that we don't have problems with 0.0 comparing equal to -0.0, and
1013  // we don't have issues with SNANs.
1014  unsigned Opc = isTarget ? ISD::TargetConstantFP : ISD::ConstantFP;
1015  FoldingSetNodeID ID;
1016  AddNodeIDNode(ID, Opc, getVTList(EltVT), 0, 0);
1017  ID.AddPointer(&V);
1018  void *IP = 0;
1019  SDNode *N = NULL;
1020  if ((N = CSEMap.FindNodeOrInsertPos(ID, IP)))
1021    if (!VT.isVector())
1022      return SDValue(N, 0);
1023
1024  if (!N) {
1025    N = new (NodeAllocator) ConstantFPSDNode(isTarget, &V, EltVT);
1026    CSEMap.InsertNode(N, IP);
1027    AllNodes.push_back(N);
1028  }
1029
1030  SDValue Result(N, 0);
1031  if (VT.isVector()) {
1032    SmallVector<SDValue, 8> Ops;
1033    Ops.assign(VT.getVectorNumElements(), Result);
1034    // FIXME DebugLoc info might be appropriate here
1035    Result = getNode(ISD::BUILD_VECTOR, DebugLoc(), VT, &Ops[0], Ops.size());
1036  }
1037  return Result;
1038}
1039
1040SDValue SelectionDAG::getConstantFP(double Val, EVT VT, bool isTarget) {
1041  EVT EltVT = VT.getScalarType();
1042  if (EltVT==MVT::f32)
1043    return getConstantFP(APFloat((float)Val), VT, isTarget);
1044  else if (EltVT==MVT::f64)
1045    return getConstantFP(APFloat(Val), VT, isTarget);
1046  else if (EltVT==MVT::f80 || EltVT==MVT::f128 || EltVT==MVT::f16) {
1047    bool ignored;
1048    APFloat apf = APFloat(Val);
1049    apf.convert(*EVTToAPFloatSemantics(EltVT), APFloat::rmNearestTiesToEven,
1050                &ignored);
1051    return getConstantFP(apf, VT, isTarget);
1052  } else
1053    llvm_unreachable("Unsupported type in getConstantFP");
1054}
1055
1056SDValue SelectionDAG::getGlobalAddress(const GlobalValue *GV, DebugLoc DL,
1057                                       EVT VT, int64_t Offset,
1058                                       bool isTargetGA,
1059                                       unsigned char TargetFlags) {
1060  assert((TargetFlags == 0 || isTargetGA) &&
1061         "Cannot set target flags on target-independent globals");
1062
1063  // Truncate (with sign-extension) the offset value to the pointer size.
1064  EVT PTy = TLI.getPointerTy();
1065  unsigned BitWidth = PTy.getSizeInBits();
1066  if (BitWidth < 64)
1067    Offset = (Offset << (64 - BitWidth) >> (64 - BitWidth));
1068
1069  const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV);
1070  if (!GVar) {
1071    // If GV is an alias then use the aliasee for determining thread-localness.
1072    if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(GV))
1073      GVar = dyn_cast_or_null<GlobalVariable>(GA->resolveAliasedGlobal(false));
1074  }
1075
1076  unsigned Opc;
1077  if (GVar && GVar->isThreadLocal())
1078    Opc = isTargetGA ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress;
1079  else
1080    Opc = isTargetGA ? ISD::TargetGlobalAddress : ISD::GlobalAddress;
1081
1082  FoldingSetNodeID ID;
1083  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
1084  ID.AddPointer(GV);
1085  ID.AddInteger(Offset);
1086  ID.AddInteger(TargetFlags);
1087  void *IP = 0;
1088  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1089    return SDValue(E, 0);
1090
1091  SDNode *N = new (NodeAllocator) GlobalAddressSDNode(Opc, DL, GV, VT,
1092                                                      Offset, TargetFlags);
1093  CSEMap.InsertNode(N, IP);
1094  AllNodes.push_back(N);
1095  return SDValue(N, 0);
1096}
1097
1098SDValue SelectionDAG::getFrameIndex(int FI, EVT VT, bool isTarget) {
1099  unsigned Opc = isTarget ? ISD::TargetFrameIndex : ISD::FrameIndex;
1100  FoldingSetNodeID ID;
1101  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
1102  ID.AddInteger(FI);
1103  void *IP = 0;
1104  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1105    return SDValue(E, 0);
1106
1107  SDNode *N = new (NodeAllocator) FrameIndexSDNode(FI, VT, isTarget);
1108  CSEMap.InsertNode(N, IP);
1109  AllNodes.push_back(N);
1110  return SDValue(N, 0);
1111}
1112
1113SDValue SelectionDAG::getJumpTable(int JTI, EVT VT, bool isTarget,
1114                                   unsigned char TargetFlags) {
1115  assert((TargetFlags == 0 || isTarget) &&
1116         "Cannot set target flags on target-independent jump tables");
1117  unsigned Opc = isTarget ? ISD::TargetJumpTable : ISD::JumpTable;
1118  FoldingSetNodeID ID;
1119  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
1120  ID.AddInteger(JTI);
1121  ID.AddInteger(TargetFlags);
1122  void *IP = 0;
1123  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1124    return SDValue(E, 0);
1125
1126  SDNode *N = new (NodeAllocator) JumpTableSDNode(JTI, VT, isTarget,
1127                                                  TargetFlags);
1128  CSEMap.InsertNode(N, IP);
1129  AllNodes.push_back(N);
1130  return SDValue(N, 0);
1131}
1132
1133SDValue SelectionDAG::getConstantPool(const Constant *C, EVT VT,
1134                                      unsigned Alignment, int Offset,
1135                                      bool isTarget,
1136                                      unsigned char TargetFlags) {
1137  assert((TargetFlags == 0 || isTarget) &&
1138         "Cannot set target flags on target-independent globals");
1139  if (Alignment == 0)
1140    Alignment = TLI.getTargetData()->getPrefTypeAlignment(C->getType());
1141  unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
1142  FoldingSetNodeID ID;
1143  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
1144  ID.AddInteger(Alignment);
1145  ID.AddInteger(Offset);
1146  ID.AddPointer(C);
1147  ID.AddInteger(TargetFlags);
1148  void *IP = 0;
1149  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1150    return SDValue(E, 0);
1151
1152  SDNode *N = new (NodeAllocator) ConstantPoolSDNode(isTarget, C, VT, Offset,
1153                                                     Alignment, TargetFlags);
1154  CSEMap.InsertNode(N, IP);
1155  AllNodes.push_back(N);
1156  return SDValue(N, 0);
1157}
1158
1159
1160SDValue SelectionDAG::getConstantPool(MachineConstantPoolValue *C, EVT VT,
1161                                      unsigned Alignment, int Offset,
1162                                      bool isTarget,
1163                                      unsigned char TargetFlags) {
1164  assert((TargetFlags == 0 || isTarget) &&
1165         "Cannot set target flags on target-independent globals");
1166  if (Alignment == 0)
1167    Alignment = TLI.getTargetData()->getPrefTypeAlignment(C->getType());
1168  unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
1169  FoldingSetNodeID ID;
1170  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
1171  ID.AddInteger(Alignment);
1172  ID.AddInteger(Offset);
1173  C->addSelectionDAGCSEId(ID);
1174  ID.AddInteger(TargetFlags);
1175  void *IP = 0;
1176  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1177    return SDValue(E, 0);
1178
1179  SDNode *N = new (NodeAllocator) ConstantPoolSDNode(isTarget, C, VT, Offset,
1180                                                     Alignment, TargetFlags);
1181  CSEMap.InsertNode(N, IP);
1182  AllNodes.push_back(N);
1183  return SDValue(N, 0);
1184}
1185
1186SDValue SelectionDAG::getBasicBlock(MachineBasicBlock *MBB) {
1187  FoldingSetNodeID ID;
1188  AddNodeIDNode(ID, ISD::BasicBlock, getVTList(MVT::Other), 0, 0);
1189  ID.AddPointer(MBB);
1190  void *IP = 0;
1191  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1192    return SDValue(E, 0);
1193
1194  SDNode *N = new (NodeAllocator) BasicBlockSDNode(MBB);
1195  CSEMap.InsertNode(N, IP);
1196  AllNodes.push_back(N);
1197  return SDValue(N, 0);
1198}
1199
1200SDValue SelectionDAG::getValueType(EVT VT) {
1201  if (VT.isSimple() && (unsigned)VT.getSimpleVT().SimpleTy >=
1202      ValueTypeNodes.size())
1203    ValueTypeNodes.resize(VT.getSimpleVT().SimpleTy+1);
1204
1205  SDNode *&N = VT.isExtended() ?
1206    ExtendedValueTypeNodes[VT] : ValueTypeNodes[VT.getSimpleVT().SimpleTy];
1207
1208  if (N) return SDValue(N, 0);
1209  N = new (NodeAllocator) VTSDNode(VT);
1210  AllNodes.push_back(N);
1211  return SDValue(N, 0);
1212}
1213
1214SDValue SelectionDAG::getExternalSymbol(const char *Sym, EVT VT) {
1215  SDNode *&N = ExternalSymbols[Sym];
1216  if (N) return SDValue(N, 0);
1217  N = new (NodeAllocator) ExternalSymbolSDNode(false, Sym, 0, VT);
1218  AllNodes.push_back(N);
1219  return SDValue(N, 0);
1220}
1221
1222SDValue SelectionDAG::getTargetExternalSymbol(const char *Sym, EVT VT,
1223                                              unsigned char TargetFlags) {
1224  SDNode *&N =
1225    TargetExternalSymbols[std::pair<std::string,unsigned char>(Sym,
1226                                                               TargetFlags)];
1227  if (N) return SDValue(N, 0);
1228  N = new (NodeAllocator) ExternalSymbolSDNode(true, Sym, TargetFlags, VT);
1229  AllNodes.push_back(N);
1230  return SDValue(N, 0);
1231}
1232
1233SDValue SelectionDAG::getCondCode(ISD::CondCode Cond) {
1234  if ((unsigned)Cond >= CondCodeNodes.size())
1235    CondCodeNodes.resize(Cond+1);
1236
1237  if (CondCodeNodes[Cond] == 0) {
1238    CondCodeSDNode *N = new (NodeAllocator) CondCodeSDNode(Cond);
1239    CondCodeNodes[Cond] = N;
1240    AllNodes.push_back(N);
1241  }
1242
1243  return SDValue(CondCodeNodes[Cond], 0);
1244}
1245
1246// commuteShuffle - swaps the values of N1 and N2, and swaps all indices in
1247// the shuffle mask M that point at N1 to point at N2, and indices that point
1248// N2 to point at N1.
1249static void commuteShuffle(SDValue &N1, SDValue &N2, SmallVectorImpl<int> &M) {
1250  std::swap(N1, N2);
1251  int NElts = M.size();
1252  for (int i = 0; i != NElts; ++i) {
1253    if (M[i] >= NElts)
1254      M[i] -= NElts;
1255    else if (M[i] >= 0)
1256      M[i] += NElts;
1257  }
1258}
1259
1260SDValue SelectionDAG::getVectorShuffle(EVT VT, DebugLoc dl, SDValue N1,
1261                                       SDValue N2, const int *Mask) {
1262  assert(N1.getValueType() == N2.getValueType() && "Invalid VECTOR_SHUFFLE");
1263  assert(VT.isVector() && N1.getValueType().isVector() &&
1264         "Vector Shuffle VTs must be a vectors");
1265  assert(VT.getVectorElementType() == N1.getValueType().getVectorElementType()
1266         && "Vector Shuffle VTs must have same element type");
1267
1268  // Canonicalize shuffle undef, undef -> undef
1269  if (N1.getOpcode() == ISD::UNDEF && N2.getOpcode() == ISD::UNDEF)
1270    return getUNDEF(VT);
1271
1272  // Validate that all indices in Mask are within the range of the elements
1273  // input to the shuffle.
1274  unsigned NElts = VT.getVectorNumElements();
1275  SmallVector<int, 8> MaskVec;
1276  for (unsigned i = 0; i != NElts; ++i) {
1277    assert(Mask[i] < (int)(NElts * 2) && "Index out of range");
1278    MaskVec.push_back(Mask[i]);
1279  }
1280
1281  // Canonicalize shuffle v, v -> v, undef
1282  if (N1 == N2) {
1283    N2 = getUNDEF(VT);
1284    for (unsigned i = 0; i != NElts; ++i)
1285      if (MaskVec[i] >= (int)NElts) MaskVec[i] -= NElts;
1286  }
1287
1288  // Canonicalize shuffle undef, v -> v, undef.  Commute the shuffle mask.
1289  if (N1.getOpcode() == ISD::UNDEF)
1290    commuteShuffle(N1, N2, MaskVec);
1291
1292  // Canonicalize all index into lhs, -> shuffle lhs, undef
1293  // Canonicalize all index into rhs, -> shuffle rhs, undef
1294  bool AllLHS = true, AllRHS = true;
1295  bool N2Undef = N2.getOpcode() == ISD::UNDEF;
1296  for (unsigned i = 0; i != NElts; ++i) {
1297    if (MaskVec[i] >= (int)NElts) {
1298      if (N2Undef)
1299        MaskVec[i] = -1;
1300      else
1301        AllLHS = false;
1302    } else if (MaskVec[i] >= 0) {
1303      AllRHS = false;
1304    }
1305  }
1306  if (AllLHS && AllRHS)
1307    return getUNDEF(VT);
1308  if (AllLHS && !N2Undef)
1309    N2 = getUNDEF(VT);
1310  if (AllRHS) {
1311    N1 = getUNDEF(VT);
1312    commuteShuffle(N1, N2, MaskVec);
1313  }
1314
1315  // If Identity shuffle, or all shuffle in to undef, return that node.
1316  bool AllUndef = true;
1317  bool Identity = true;
1318  for (unsigned i = 0; i != NElts; ++i) {
1319    if (MaskVec[i] >= 0 && MaskVec[i] != (int)i) Identity = false;
1320    if (MaskVec[i] >= 0) AllUndef = false;
1321  }
1322  if (Identity && NElts == N1.getValueType().getVectorNumElements())
1323    return N1;
1324  if (AllUndef)
1325    return getUNDEF(VT);
1326
1327  FoldingSetNodeID ID;
1328  SDValue Ops[2] = { N1, N2 };
1329  AddNodeIDNode(ID, ISD::VECTOR_SHUFFLE, getVTList(VT), Ops, 2);
1330  for (unsigned i = 0; i != NElts; ++i)
1331    ID.AddInteger(MaskVec[i]);
1332
1333  void* IP = 0;
1334  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1335    return SDValue(E, 0);
1336
1337  // Allocate the mask array for the node out of the BumpPtrAllocator, since
1338  // SDNode doesn't have access to it.  This memory will be "leaked" when
1339  // the node is deallocated, but recovered when the NodeAllocator is released.
1340  int *MaskAlloc = OperandAllocator.Allocate<int>(NElts);
1341  memcpy(MaskAlloc, &MaskVec[0], NElts * sizeof(int));
1342
1343  ShuffleVectorSDNode *N =
1344    new (NodeAllocator) ShuffleVectorSDNode(VT, dl, N1, N2, MaskAlloc);
1345  CSEMap.InsertNode(N, IP);
1346  AllNodes.push_back(N);
1347  return SDValue(N, 0);
1348}
1349
1350SDValue SelectionDAG::getConvertRndSat(EVT VT, DebugLoc dl,
1351                                       SDValue Val, SDValue DTy,
1352                                       SDValue STy, SDValue Rnd, SDValue Sat,
1353                                       ISD::CvtCode Code) {
1354  // If the src and dest types are the same and the conversion is between
1355  // integer types of the same sign or two floats, no conversion is necessary.
1356  if (DTy == STy &&
1357      (Code == ISD::CVT_UU || Code == ISD::CVT_SS || Code == ISD::CVT_FF))
1358    return Val;
1359
1360  FoldingSetNodeID ID;
1361  SDValue Ops[] = { Val, DTy, STy, Rnd, Sat };
1362  AddNodeIDNode(ID, ISD::CONVERT_RNDSAT, getVTList(VT), &Ops[0], 5);
1363  void* IP = 0;
1364  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1365    return SDValue(E, 0);
1366
1367  CvtRndSatSDNode *N = new (NodeAllocator) CvtRndSatSDNode(VT, dl, Ops, 5,
1368                                                           Code);
1369  CSEMap.InsertNode(N, IP);
1370  AllNodes.push_back(N);
1371  return SDValue(N, 0);
1372}
1373
1374SDValue SelectionDAG::getRegister(unsigned RegNo, EVT VT) {
1375  FoldingSetNodeID ID;
1376  AddNodeIDNode(ID, ISD::Register, getVTList(VT), 0, 0);
1377  ID.AddInteger(RegNo);
1378  void *IP = 0;
1379  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1380    return SDValue(E, 0);
1381
1382  SDNode *N = new (NodeAllocator) RegisterSDNode(RegNo, VT);
1383  CSEMap.InsertNode(N, IP);
1384  AllNodes.push_back(N);
1385  return SDValue(N, 0);
1386}
1387
1388SDValue SelectionDAG::getRegisterMask(const uint32_t *RegMask) {
1389  FoldingSetNodeID ID;
1390  AddNodeIDNode(ID, ISD::RegisterMask, getVTList(MVT::Untyped), 0, 0);
1391  ID.AddPointer(RegMask);
1392  void *IP = 0;
1393  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1394    return SDValue(E, 0);
1395
1396  SDNode *N = new (NodeAllocator) RegisterMaskSDNode(RegMask);
1397  CSEMap.InsertNode(N, IP);
1398  AllNodes.push_back(N);
1399  return SDValue(N, 0);
1400}
1401
1402SDValue SelectionDAG::getEHLabel(DebugLoc dl, SDValue Root, MCSymbol *Label) {
1403  FoldingSetNodeID ID;
1404  SDValue Ops[] = { Root };
1405  AddNodeIDNode(ID, ISD::EH_LABEL, getVTList(MVT::Other), &Ops[0], 1);
1406  ID.AddPointer(Label);
1407  void *IP = 0;
1408  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1409    return SDValue(E, 0);
1410
1411  SDNode *N = new (NodeAllocator) EHLabelSDNode(dl, Root, Label);
1412  CSEMap.InsertNode(N, IP);
1413  AllNodes.push_back(N);
1414  return SDValue(N, 0);
1415}
1416
1417
1418SDValue SelectionDAG::getBlockAddress(const BlockAddress *BA, EVT VT,
1419                                      bool isTarget,
1420                                      unsigned char TargetFlags) {
1421  unsigned Opc = isTarget ? ISD::TargetBlockAddress : ISD::BlockAddress;
1422
1423  FoldingSetNodeID ID;
1424  AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
1425  ID.AddPointer(BA);
1426  ID.AddInteger(TargetFlags);
1427  void *IP = 0;
1428  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1429    return SDValue(E, 0);
1430
1431  SDNode *N = new (NodeAllocator) BlockAddressSDNode(Opc, VT, BA, TargetFlags);
1432  CSEMap.InsertNode(N, IP);
1433  AllNodes.push_back(N);
1434  return SDValue(N, 0);
1435}
1436
1437SDValue SelectionDAG::getSrcValue(const Value *V) {
1438  assert((!V || V->getType()->isPointerTy()) &&
1439         "SrcValue is not a pointer?");
1440
1441  FoldingSetNodeID ID;
1442  AddNodeIDNode(ID, ISD::SRCVALUE, getVTList(MVT::Other), 0, 0);
1443  ID.AddPointer(V);
1444
1445  void *IP = 0;
1446  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1447    return SDValue(E, 0);
1448
1449  SDNode *N = new (NodeAllocator) SrcValueSDNode(V);
1450  CSEMap.InsertNode(N, IP);
1451  AllNodes.push_back(N);
1452  return SDValue(N, 0);
1453}
1454
1455/// getMDNode - Return an MDNodeSDNode which holds an MDNode.
1456SDValue SelectionDAG::getMDNode(const MDNode *MD) {
1457  FoldingSetNodeID ID;
1458  AddNodeIDNode(ID, ISD::MDNODE_SDNODE, getVTList(MVT::Other), 0, 0);
1459  ID.AddPointer(MD);
1460
1461  void *IP = 0;
1462  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1463    return SDValue(E, 0);
1464
1465  SDNode *N = new (NodeAllocator) MDNodeSDNode(MD);
1466  CSEMap.InsertNode(N, IP);
1467  AllNodes.push_back(N);
1468  return SDValue(N, 0);
1469}
1470
1471
1472/// getShiftAmountOperand - Return the specified value casted to
1473/// the target's desired shift amount type.
1474SDValue SelectionDAG::getShiftAmountOperand(EVT LHSTy, SDValue Op) {
1475  EVT OpTy = Op.getValueType();
1476  MVT ShTy = TLI.getShiftAmountTy(LHSTy);
1477  if (OpTy == ShTy || OpTy.isVector()) return Op;
1478
1479  ISD::NodeType Opcode = OpTy.bitsGT(ShTy) ?  ISD::TRUNCATE : ISD::ZERO_EXTEND;
1480  return getNode(Opcode, Op.getDebugLoc(), ShTy, Op);
1481}
1482
1483/// CreateStackTemporary - Create a stack temporary, suitable for holding the
1484/// specified value type.
1485SDValue SelectionDAG::CreateStackTemporary(EVT VT, unsigned minAlign) {
1486  MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo();
1487  unsigned ByteSize = VT.getStoreSize();
1488  Type *Ty = VT.getTypeForEVT(*getContext());
1489  unsigned StackAlign =
1490  std::max((unsigned)TLI.getTargetData()->getPrefTypeAlignment(Ty), minAlign);
1491
1492  int FrameIdx = FrameInfo->CreateStackObject(ByteSize, StackAlign, false);
1493  return getFrameIndex(FrameIdx, TLI.getPointerTy());
1494}
1495
1496/// CreateStackTemporary - Create a stack temporary suitable for holding
1497/// either of the specified value types.
1498SDValue SelectionDAG::CreateStackTemporary(EVT VT1, EVT VT2) {
1499  unsigned Bytes = std::max(VT1.getStoreSizeInBits(),
1500                            VT2.getStoreSizeInBits())/8;
1501  Type *Ty1 = VT1.getTypeForEVT(*getContext());
1502  Type *Ty2 = VT2.getTypeForEVT(*getContext());
1503  const TargetData *TD = TLI.getTargetData();
1504  unsigned Align = std::max(TD->getPrefTypeAlignment(Ty1),
1505                            TD->getPrefTypeAlignment(Ty2));
1506
1507  MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo();
1508  int FrameIdx = FrameInfo->CreateStackObject(Bytes, Align, false);
1509  return getFrameIndex(FrameIdx, TLI.getPointerTy());
1510}
1511
1512SDValue SelectionDAG::FoldSetCC(EVT VT, SDValue N1,
1513                                SDValue N2, ISD::CondCode Cond, DebugLoc dl) {
1514  // These setcc operations always fold.
1515  switch (Cond) {
1516  default: break;
1517  case ISD::SETFALSE:
1518  case ISD::SETFALSE2: return getConstant(0, VT);
1519  case ISD::SETTRUE:
1520  case ISD::SETTRUE2:  return getConstant(1, VT);
1521
1522  case ISD::SETOEQ:
1523  case ISD::SETOGT:
1524  case ISD::SETOGE:
1525  case ISD::SETOLT:
1526  case ISD::SETOLE:
1527  case ISD::SETONE:
1528  case ISD::SETO:
1529  case ISD::SETUO:
1530  case ISD::SETUEQ:
1531  case ISD::SETUNE:
1532    assert(!N1.getValueType().isInteger() && "Illegal setcc for integer!");
1533    break;
1534  }
1535
1536  if (ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.getNode())) {
1537    const APInt &C2 = N2C->getAPIntValue();
1538    if (ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode())) {
1539      const APInt &C1 = N1C->getAPIntValue();
1540
1541      switch (Cond) {
1542      default: llvm_unreachable("Unknown integer setcc!");
1543      case ISD::SETEQ:  return getConstant(C1 == C2, VT);
1544      case ISD::SETNE:  return getConstant(C1 != C2, VT);
1545      case ISD::SETULT: return getConstant(C1.ult(C2), VT);
1546      case ISD::SETUGT: return getConstant(C1.ugt(C2), VT);
1547      case ISD::SETULE: return getConstant(C1.ule(C2), VT);
1548      case ISD::SETUGE: return getConstant(C1.uge(C2), VT);
1549      case ISD::SETLT:  return getConstant(C1.slt(C2), VT);
1550      case ISD::SETGT:  return getConstant(C1.sgt(C2), VT);
1551      case ISD::SETLE:  return getConstant(C1.sle(C2), VT);
1552      case ISD::SETGE:  return getConstant(C1.sge(C2), VT);
1553      }
1554    }
1555  }
1556  if (ConstantFPSDNode *N1C = dyn_cast<ConstantFPSDNode>(N1.getNode())) {
1557    if (ConstantFPSDNode *N2C = dyn_cast<ConstantFPSDNode>(N2.getNode())) {
1558      // No compile time operations on this type yet.
1559      if (N1C->getValueType(0) == MVT::ppcf128)
1560        return SDValue();
1561
1562      APFloat::cmpResult R = N1C->getValueAPF().compare(N2C->getValueAPF());
1563      switch (Cond) {
1564      default: break;
1565      case ISD::SETEQ:  if (R==APFloat::cmpUnordered)
1566                          return getUNDEF(VT);
1567                        // fall through
1568      case ISD::SETOEQ: return getConstant(R==APFloat::cmpEqual, VT);
1569      case ISD::SETNE:  if (R==APFloat::cmpUnordered)
1570                          return getUNDEF(VT);
1571                        // fall through
1572      case ISD::SETONE: return getConstant(R==APFloat::cmpGreaterThan ||
1573                                           R==APFloat::cmpLessThan, VT);
1574      case ISD::SETLT:  if (R==APFloat::cmpUnordered)
1575                          return getUNDEF(VT);
1576                        // fall through
1577      case ISD::SETOLT: return getConstant(R==APFloat::cmpLessThan, VT);
1578      case ISD::SETGT:  if (R==APFloat::cmpUnordered)
1579                          return getUNDEF(VT);
1580                        // fall through
1581      case ISD::SETOGT: return getConstant(R==APFloat::cmpGreaterThan, VT);
1582      case ISD::SETLE:  if (R==APFloat::cmpUnordered)
1583                          return getUNDEF(VT);
1584                        // fall through
1585      case ISD::SETOLE: return getConstant(R==APFloat::cmpLessThan ||
1586                                           R==APFloat::cmpEqual, VT);
1587      case ISD::SETGE:  if (R==APFloat::cmpUnordered)
1588                          return getUNDEF(VT);
1589                        // fall through
1590      case ISD::SETOGE: return getConstant(R==APFloat::cmpGreaterThan ||
1591                                           R==APFloat::cmpEqual, VT);
1592      case ISD::SETO:   return getConstant(R!=APFloat::cmpUnordered, VT);
1593      case ISD::SETUO:  return getConstant(R==APFloat::cmpUnordered, VT);
1594      case ISD::SETUEQ: return getConstant(R==APFloat::cmpUnordered ||
1595                                           R==APFloat::cmpEqual, VT);
1596      case ISD::SETUNE: return getConstant(R!=APFloat::cmpEqual, VT);
1597      case ISD::SETULT: return getConstant(R==APFloat::cmpUnordered ||
1598                                           R==APFloat::cmpLessThan, VT);
1599      case ISD::SETUGT: return getConstant(R==APFloat::cmpGreaterThan ||
1600                                           R==APFloat::cmpUnordered, VT);
1601      case ISD::SETULE: return getConstant(R!=APFloat::cmpGreaterThan, VT);
1602      case ISD::SETUGE: return getConstant(R!=APFloat::cmpLessThan, VT);
1603      }
1604    } else {
1605      // Ensure that the constant occurs on the RHS.
1606      return getSetCC(dl, VT, N2, N1, ISD::getSetCCSwappedOperands(Cond));
1607    }
1608  }
1609
1610  // Could not fold it.
1611  return SDValue();
1612}
1613
1614/// SignBitIsZero - Return true if the sign bit of Op is known to be zero.  We
1615/// use this predicate to simplify operations downstream.
1616bool SelectionDAG::SignBitIsZero(SDValue Op, unsigned Depth) const {
1617  // This predicate is not safe for vector operations.
1618  if (Op.getValueType().isVector())
1619    return false;
1620
1621  unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits();
1622  return MaskedValueIsZero(Op, APInt::getSignBit(BitWidth), Depth);
1623}
1624
1625/// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero.  We use
1626/// this predicate to simplify operations downstream.  Mask is known to be zero
1627/// for bits that V cannot have.
1628bool SelectionDAG::MaskedValueIsZero(SDValue Op, const APInt &Mask,
1629                                     unsigned Depth) const {
1630  APInt KnownZero, KnownOne;
1631  ComputeMaskedBits(Op, KnownZero, KnownOne, Depth);
1632  assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1633  return (KnownZero & Mask) == Mask;
1634}
1635
1636/// ComputeMaskedBits - Determine which of the bits specified in Mask are
1637/// known to be either zero or one and return them in the KnownZero/KnownOne
1638/// bitsets.  This code only analyzes bits in Mask, in order to short-circuit
1639/// processing.
1640void SelectionDAG::ComputeMaskedBits(SDValue Op, APInt &KnownZero,
1641                                     APInt &KnownOne, unsigned Depth) const {
1642  unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits();
1643
1644  KnownZero = KnownOne = APInt(BitWidth, 0);   // Don't know anything.
1645  if (Depth == 6)
1646    return;  // Limit search depth.
1647
1648  APInt KnownZero2, KnownOne2;
1649
1650  switch (Op.getOpcode()) {
1651  case ISD::Constant:
1652    // We know all of the bits for a constant!
1653    KnownOne = cast<ConstantSDNode>(Op)->getAPIntValue();
1654    KnownZero = ~KnownOne;
1655    return;
1656  case ISD::AND:
1657    // If either the LHS or the RHS are Zero, the result is zero.
1658    ComputeMaskedBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
1659    ComputeMaskedBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
1660    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1661    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1662
1663    // Output known-1 bits are only known if set in both the LHS & RHS.
1664    KnownOne &= KnownOne2;
1665    // Output known-0 are known to be clear if zero in either the LHS | RHS.
1666    KnownZero |= KnownZero2;
1667    return;
1668  case ISD::OR:
1669    ComputeMaskedBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
1670    ComputeMaskedBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
1671    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1672    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1673
1674    // Output known-0 bits are only known if clear in both the LHS & RHS.
1675    KnownZero &= KnownZero2;
1676    // Output known-1 are known to be set if set in either the LHS | RHS.
1677    KnownOne |= KnownOne2;
1678    return;
1679  case ISD::XOR: {
1680    ComputeMaskedBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
1681    ComputeMaskedBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
1682    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1683    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1684
1685    // Output known-0 bits are known if clear or set in both the LHS & RHS.
1686    APInt KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
1687    // Output known-1 are known to be set if set in only one of the LHS, RHS.
1688    KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
1689    KnownZero = KnownZeroOut;
1690    return;
1691  }
1692  case ISD::MUL: {
1693    ComputeMaskedBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
1694    ComputeMaskedBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
1695    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1696    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1697
1698    // If low bits are zero in either operand, output low known-0 bits.
1699    // Also compute a conserative estimate for high known-0 bits.
1700    // More trickiness is possible, but this is sufficient for the
1701    // interesting case of alignment computation.
1702    KnownOne.clearAllBits();
1703    unsigned TrailZ = KnownZero.countTrailingOnes() +
1704                      KnownZero2.countTrailingOnes();
1705    unsigned LeadZ =  std::max(KnownZero.countLeadingOnes() +
1706                               KnownZero2.countLeadingOnes(),
1707                               BitWidth) - BitWidth;
1708
1709    TrailZ = std::min(TrailZ, BitWidth);
1710    LeadZ = std::min(LeadZ, BitWidth);
1711    KnownZero = APInt::getLowBitsSet(BitWidth, TrailZ) |
1712                APInt::getHighBitsSet(BitWidth, LeadZ);
1713    return;
1714  }
1715  case ISD::UDIV: {
1716    // For the purposes of computing leading zeros we can conservatively
1717    // treat a udiv as a logical right shift by the power of 2 known to
1718    // be less than the denominator.
1719    ComputeMaskedBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
1720    unsigned LeadZ = KnownZero2.countLeadingOnes();
1721
1722    KnownOne2.clearAllBits();
1723    KnownZero2.clearAllBits();
1724    ComputeMaskedBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
1725    unsigned RHSUnknownLeadingOnes = KnownOne2.countLeadingZeros();
1726    if (RHSUnknownLeadingOnes != BitWidth)
1727      LeadZ = std::min(BitWidth,
1728                       LeadZ + BitWidth - RHSUnknownLeadingOnes - 1);
1729
1730    KnownZero = APInt::getHighBitsSet(BitWidth, LeadZ);
1731    return;
1732  }
1733  case ISD::SELECT:
1734    ComputeMaskedBits(Op.getOperand(2), KnownZero, KnownOne, Depth+1);
1735    ComputeMaskedBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
1736    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1737    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1738
1739    // Only known if known in both the LHS and RHS.
1740    KnownOne &= KnownOne2;
1741    KnownZero &= KnownZero2;
1742    return;
1743  case ISD::SELECT_CC:
1744    ComputeMaskedBits(Op.getOperand(3), KnownZero, KnownOne, Depth+1);
1745    ComputeMaskedBits(Op.getOperand(2), KnownZero2, KnownOne2, Depth+1);
1746    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1747    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1748
1749    // Only known if known in both the LHS and RHS.
1750    KnownOne &= KnownOne2;
1751    KnownZero &= KnownZero2;
1752    return;
1753  case ISD::SADDO:
1754  case ISD::UADDO:
1755  case ISD::SSUBO:
1756  case ISD::USUBO:
1757  case ISD::SMULO:
1758  case ISD::UMULO:
1759    if (Op.getResNo() != 1)
1760      return;
1761    // The boolean result conforms to getBooleanContents.  Fall through.
1762  case ISD::SETCC:
1763    // If we know the result of a setcc has the top bits zero, use this info.
1764    if (TLI.getBooleanContents(Op.getValueType().isVector()) ==
1765        TargetLowering::ZeroOrOneBooleanContent && BitWidth > 1)
1766      KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1);
1767    return;
1768  case ISD::SHL:
1769    // (shl X, C1) & C2 == 0   iff   (X & C2 >>u C1) == 0
1770    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1771      unsigned ShAmt = SA->getZExtValue();
1772
1773      // If the shift count is an invalid immediate, don't do anything.
1774      if (ShAmt >= BitWidth)
1775        return;
1776
1777      ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
1778      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1779      KnownZero <<= ShAmt;
1780      KnownOne  <<= ShAmt;
1781      // low bits known zero.
1782      KnownZero |= APInt::getLowBitsSet(BitWidth, ShAmt);
1783    }
1784    return;
1785  case ISD::SRL:
1786    // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
1787    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1788      unsigned ShAmt = SA->getZExtValue();
1789
1790      // If the shift count is an invalid immediate, don't do anything.
1791      if (ShAmt >= BitWidth)
1792        return;
1793
1794      ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
1795      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1796      KnownZero = KnownZero.lshr(ShAmt);
1797      KnownOne  = KnownOne.lshr(ShAmt);
1798
1799      APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt);
1800      KnownZero |= HighBits;  // High bits known zero.
1801    }
1802    return;
1803  case ISD::SRA:
1804    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1805      unsigned ShAmt = SA->getZExtValue();
1806
1807      // If the shift count is an invalid immediate, don't do anything.
1808      if (ShAmt >= BitWidth)
1809        return;
1810
1811      // If any of the demanded bits are produced by the sign extension, we also
1812      // demand the input sign bit.
1813      APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt);
1814
1815      ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
1816      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1817      KnownZero = KnownZero.lshr(ShAmt);
1818      KnownOne  = KnownOne.lshr(ShAmt);
1819
1820      // Handle the sign bits.
1821      APInt SignBit = APInt::getSignBit(BitWidth);
1822      SignBit = SignBit.lshr(ShAmt);  // Adjust to where it is now in the mask.
1823
1824      if (KnownZero.intersects(SignBit)) {
1825        KnownZero |= HighBits;  // New bits are known zero.
1826      } else if (KnownOne.intersects(SignBit)) {
1827        KnownOne  |= HighBits;  // New bits are known one.
1828      }
1829    }
1830    return;
1831  case ISD::SIGN_EXTEND_INREG: {
1832    EVT EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
1833    unsigned EBits = EVT.getScalarType().getSizeInBits();
1834
1835    // Sign extension.  Compute the demanded bits in the result that are not
1836    // present in the input.
1837    APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - EBits);
1838
1839    APInt InSignBit = APInt::getSignBit(EBits);
1840    APInt InputDemandedBits = APInt::getLowBitsSet(BitWidth, EBits);
1841
1842    // If the sign extended bits are demanded, we know that the sign
1843    // bit is demanded.
1844    InSignBit = InSignBit.zext(BitWidth);
1845    if (NewBits.getBoolValue())
1846      InputDemandedBits |= InSignBit;
1847
1848    ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
1849    KnownOne &= InputDemandedBits;
1850    KnownZero &= InputDemandedBits;
1851    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1852
1853    // If the sign bit of the input is known set or clear, then we know the
1854    // top bits of the result.
1855    if (KnownZero.intersects(InSignBit)) {         // Input sign bit known clear
1856      KnownZero |= NewBits;
1857      KnownOne  &= ~NewBits;
1858    } else if (KnownOne.intersects(InSignBit)) {   // Input sign bit known set
1859      KnownOne  |= NewBits;
1860      KnownZero &= ~NewBits;
1861    } else {                              // Input sign bit unknown
1862      KnownZero &= ~NewBits;
1863      KnownOne  &= ~NewBits;
1864    }
1865    return;
1866  }
1867  case ISD::CTTZ:
1868  case ISD::CTTZ_ZERO_UNDEF:
1869  case ISD::CTLZ:
1870  case ISD::CTLZ_ZERO_UNDEF:
1871  case ISD::CTPOP: {
1872    unsigned LowBits = Log2_32(BitWidth)+1;
1873    KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - LowBits);
1874    KnownOne.clearAllBits();
1875    return;
1876  }
1877  case ISD::LOAD: {
1878    LoadSDNode *LD = cast<LoadSDNode>(Op);
1879    if (ISD::isZEXTLoad(Op.getNode())) {
1880      EVT VT = LD->getMemoryVT();
1881      unsigned MemBits = VT.getScalarType().getSizeInBits();
1882      KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - MemBits);
1883    } else if (const MDNode *Ranges = LD->getRanges()) {
1884      computeMaskedBitsLoad(*Ranges, KnownZero);
1885    }
1886    return;
1887  }
1888  case ISD::ZERO_EXTEND: {
1889    EVT InVT = Op.getOperand(0).getValueType();
1890    unsigned InBits = InVT.getScalarType().getSizeInBits();
1891    APInt NewBits   = APInt::getHighBitsSet(BitWidth, BitWidth - InBits);
1892    KnownZero = KnownZero.trunc(InBits);
1893    KnownOne = KnownOne.trunc(InBits);
1894    ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
1895    KnownZero = KnownZero.zext(BitWidth);
1896    KnownOne = KnownOne.zext(BitWidth);
1897    KnownZero |= NewBits;
1898    return;
1899  }
1900  case ISD::SIGN_EXTEND: {
1901    EVT InVT = Op.getOperand(0).getValueType();
1902    unsigned InBits = InVT.getScalarType().getSizeInBits();
1903    APInt InSignBit = APInt::getSignBit(InBits);
1904    APInt NewBits   = APInt::getHighBitsSet(BitWidth, BitWidth - InBits);
1905
1906    KnownZero = KnownZero.trunc(InBits);
1907    KnownOne = KnownOne.trunc(InBits);
1908    ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
1909
1910    // Note if the sign bit is known to be zero or one.
1911    bool SignBitKnownZero = KnownZero.isNegative();
1912    bool SignBitKnownOne  = KnownOne.isNegative();
1913    assert(!(SignBitKnownZero && SignBitKnownOne) &&
1914           "Sign bit can't be known to be both zero and one!");
1915
1916    KnownZero = KnownZero.zext(BitWidth);
1917    KnownOne = KnownOne.zext(BitWidth);
1918
1919    // If the sign bit is known zero or one, the top bits match.
1920    if (SignBitKnownZero)
1921      KnownZero |= NewBits;
1922    else if (SignBitKnownOne)
1923      KnownOne  |= NewBits;
1924    return;
1925  }
1926  case ISD::ANY_EXTEND: {
1927    EVT InVT = Op.getOperand(0).getValueType();
1928    unsigned InBits = InVT.getScalarType().getSizeInBits();
1929    KnownZero = KnownZero.trunc(InBits);
1930    KnownOne = KnownOne.trunc(InBits);
1931    ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
1932    KnownZero = KnownZero.zext(BitWidth);
1933    KnownOne = KnownOne.zext(BitWidth);
1934    return;
1935  }
1936  case ISD::TRUNCATE: {
1937    EVT InVT = Op.getOperand(0).getValueType();
1938    unsigned InBits = InVT.getScalarType().getSizeInBits();
1939    KnownZero = KnownZero.zext(InBits);
1940    KnownOne = KnownOne.zext(InBits);
1941    ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
1942    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1943    KnownZero = KnownZero.trunc(BitWidth);
1944    KnownOne = KnownOne.trunc(BitWidth);
1945    break;
1946  }
1947  case ISD::AssertZext: {
1948    EVT VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
1949    APInt InMask = APInt::getLowBitsSet(BitWidth, VT.getSizeInBits());
1950    ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
1951    KnownZero |= (~InMask);
1952    return;
1953  }
1954  case ISD::FGETSIGN:
1955    // All bits are zero except the low bit.
1956    KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - 1);
1957    return;
1958
1959  case ISD::SUB: {
1960    if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0))) {
1961      // We know that the top bits of C-X are clear if X contains less bits
1962      // than C (i.e. no wrap-around can happen).  For example, 20-X is
1963      // positive if we can prove that X is >= 0 and < 16.
1964      if (CLHS->getAPIntValue().isNonNegative()) {
1965        unsigned NLZ = (CLHS->getAPIntValue()+1).countLeadingZeros();
1966        // NLZ can't be BitWidth with no sign bit
1967        APInt MaskV = APInt::getHighBitsSet(BitWidth, NLZ+1);
1968        ComputeMaskedBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
1969
1970        // If all of the MaskV bits are known to be zero, then we know the
1971        // output top bits are zero, because we now know that the output is
1972        // from [0-C].
1973        if ((KnownZero2 & MaskV) == MaskV) {
1974          unsigned NLZ2 = CLHS->getAPIntValue().countLeadingZeros();
1975          // Top bits known zero.
1976          KnownZero = APInt::getHighBitsSet(BitWidth, NLZ2);
1977        }
1978      }
1979    }
1980  }
1981  // fall through
1982  case ISD::ADD:
1983  case ISD::ADDE: {
1984    // Output known-0 bits are known if clear or set in both the low clear bits
1985    // common to both LHS & RHS.  For example, 8+(X<<3) is known to have the
1986    // low 3 bits clear.
1987    ComputeMaskedBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
1988    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1989    unsigned KnownZeroOut = KnownZero2.countTrailingOnes();
1990
1991    ComputeMaskedBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
1992    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1993    KnownZeroOut = std::min(KnownZeroOut,
1994                            KnownZero2.countTrailingOnes());
1995
1996    if (Op.getOpcode() == ISD::ADD) {
1997      KnownZero |= APInt::getLowBitsSet(BitWidth, KnownZeroOut);
1998      return;
1999    }
2000
2001    // With ADDE, a carry bit may be added in, so we can only use this
2002    // information if we know (at least) that the low two bits are clear.  We
2003    // then return to the caller that the low bit is unknown but that other bits
2004    // are known zero.
2005    if (KnownZeroOut >= 2) // ADDE
2006      KnownZero |= APInt::getBitsSet(BitWidth, 1, KnownZeroOut);
2007    return;
2008  }
2009  case ISD::SREM:
2010    if (ConstantSDNode *Rem = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
2011      const APInt &RA = Rem->getAPIntValue().abs();
2012      if (RA.isPowerOf2()) {
2013        APInt LowBits = RA - 1;
2014        APInt Mask2 = LowBits | APInt::getSignBit(BitWidth);
2015        ComputeMaskedBits(Op.getOperand(0), KnownZero2,KnownOne2,Depth+1);
2016
2017        // The low bits of the first operand are unchanged by the srem.
2018        KnownZero = KnownZero2 & LowBits;
2019        KnownOne = KnownOne2 & LowBits;
2020
2021        // If the first operand is non-negative or has all low bits zero, then
2022        // the upper bits are all zero.
2023        if (KnownZero2[BitWidth-1] || ((KnownZero2 & LowBits) == LowBits))
2024          KnownZero |= ~LowBits;
2025
2026        // If the first operand is negative and not all low bits are zero, then
2027        // the upper bits are all one.
2028        if (KnownOne2[BitWidth-1] && ((KnownOne2 & LowBits) != 0))
2029          KnownOne |= ~LowBits;
2030        assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?");
2031      }
2032    }
2033    return;
2034  case ISD::UREM: {
2035    if (ConstantSDNode *Rem = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
2036      const APInt &RA = Rem->getAPIntValue();
2037      if (RA.isPowerOf2()) {
2038        APInt LowBits = (RA - 1);
2039        KnownZero |= ~LowBits;
2040        ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne,Depth+1);
2041        assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?");
2042        break;
2043      }
2044    }
2045
2046    // Since the result is less than or equal to either operand, any leading
2047    // zero bits in either operand must also exist in the result.
2048    ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
2049    ComputeMaskedBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
2050
2051    uint32_t Leaders = std::max(KnownZero.countLeadingOnes(),
2052                                KnownZero2.countLeadingOnes());
2053    KnownOne.clearAllBits();
2054    KnownZero = APInt::getHighBitsSet(BitWidth, Leaders);
2055    return;
2056  }
2057  case ISD::FrameIndex:
2058  case ISD::TargetFrameIndex:
2059    if (unsigned Align = InferPtrAlignment(Op)) {
2060      // The low bits are known zero if the pointer is aligned.
2061      KnownZero = APInt::getLowBitsSet(BitWidth, Log2_32(Align));
2062      return;
2063    }
2064    break;
2065
2066  default:
2067    if (Op.getOpcode() < ISD::BUILTIN_OP_END)
2068      break;
2069    // Fallthrough
2070  case ISD::INTRINSIC_WO_CHAIN:
2071  case ISD::INTRINSIC_W_CHAIN:
2072  case ISD::INTRINSIC_VOID:
2073    // Allow the target to implement this method for its nodes.
2074    TLI.computeMaskedBitsForTargetNode(Op, KnownZero, KnownOne, *this, Depth);
2075    return;
2076  }
2077}
2078
2079/// ComputeNumSignBits - Return the number of times the sign bit of the
2080/// register is replicated into the other bits.  We know that at least 1 bit
2081/// is always equal to the sign bit (itself), but other cases can give us
2082/// information.  For example, immediately after an "SRA X, 2", we know that
2083/// the top 3 bits are all equal to each other, so we return 3.
2084unsigned SelectionDAG::ComputeNumSignBits(SDValue Op, unsigned Depth) const{
2085  EVT VT = Op.getValueType();
2086  assert(VT.isInteger() && "Invalid VT!");
2087  unsigned VTBits = VT.getScalarType().getSizeInBits();
2088  unsigned Tmp, Tmp2;
2089  unsigned FirstAnswer = 1;
2090
2091  if (Depth == 6)
2092    return 1;  // Limit search depth.
2093
2094  switch (Op.getOpcode()) {
2095  default: break;
2096  case ISD::AssertSext:
2097    Tmp = cast<VTSDNode>(Op.getOperand(1))->getVT().getSizeInBits();
2098    return VTBits-Tmp+1;
2099  case ISD::AssertZext:
2100    Tmp = cast<VTSDNode>(Op.getOperand(1))->getVT().getSizeInBits();
2101    return VTBits-Tmp;
2102
2103  case ISD::Constant: {
2104    const APInt &Val = cast<ConstantSDNode>(Op)->getAPIntValue();
2105    return Val.getNumSignBits();
2106  }
2107
2108  case ISD::SIGN_EXTEND:
2109    Tmp = VTBits-Op.getOperand(0).getValueType().getScalarType().getSizeInBits();
2110    return ComputeNumSignBits(Op.getOperand(0), Depth+1) + Tmp;
2111
2112  case ISD::SIGN_EXTEND_INREG:
2113    // Max of the input and what this extends.
2114    Tmp =
2115      cast<VTSDNode>(Op.getOperand(1))->getVT().getScalarType().getSizeInBits();
2116    Tmp = VTBits-Tmp+1;
2117
2118    Tmp2 = ComputeNumSignBits(Op.getOperand(0), Depth+1);
2119    return std::max(Tmp, Tmp2);
2120
2121  case ISD::SRA:
2122    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
2123    // SRA X, C   -> adds C sign bits.
2124    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
2125      Tmp += C->getZExtValue();
2126      if (Tmp > VTBits) Tmp = VTBits;
2127    }
2128    return Tmp;
2129  case ISD::SHL:
2130    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
2131      // shl destroys sign bits.
2132      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
2133      if (C->getZExtValue() >= VTBits ||      // Bad shift.
2134          C->getZExtValue() >= Tmp) break;    // Shifted all sign bits out.
2135      return Tmp - C->getZExtValue();
2136    }
2137    break;
2138  case ISD::AND:
2139  case ISD::OR:
2140  case ISD::XOR:    // NOT is handled here.
2141    // Logical binary ops preserve the number of sign bits at the worst.
2142    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
2143    if (Tmp != 1) {
2144      Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
2145      FirstAnswer = std::min(Tmp, Tmp2);
2146      // We computed what we know about the sign bits as our first
2147      // answer. Now proceed to the generic code that uses
2148      // ComputeMaskedBits, and pick whichever answer is better.
2149    }
2150    break;
2151
2152  case ISD::SELECT:
2153    Tmp = ComputeNumSignBits(Op.getOperand(1), Depth+1);
2154    if (Tmp == 1) return 1;  // Early out.
2155    Tmp2 = ComputeNumSignBits(Op.getOperand(2), Depth+1);
2156    return std::min(Tmp, Tmp2);
2157
2158  case ISD::SADDO:
2159  case ISD::UADDO:
2160  case ISD::SSUBO:
2161  case ISD::USUBO:
2162  case ISD::SMULO:
2163  case ISD::UMULO:
2164    if (Op.getResNo() != 1)
2165      break;
2166    // The boolean result conforms to getBooleanContents.  Fall through.
2167  case ISD::SETCC:
2168    // If setcc returns 0/-1, all bits are sign bits.
2169    if (TLI.getBooleanContents(Op.getValueType().isVector()) ==
2170        TargetLowering::ZeroOrNegativeOneBooleanContent)
2171      return VTBits;
2172    break;
2173  case ISD::ROTL:
2174  case ISD::ROTR:
2175    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
2176      unsigned RotAmt = C->getZExtValue() & (VTBits-1);
2177
2178      // Handle rotate right by N like a rotate left by 32-N.
2179      if (Op.getOpcode() == ISD::ROTR)
2180        RotAmt = (VTBits-RotAmt) & (VTBits-1);
2181
2182      // If we aren't rotating out all of the known-in sign bits, return the
2183      // number that are left.  This handles rotl(sext(x), 1) for example.
2184      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
2185      if (Tmp > RotAmt+1) return Tmp-RotAmt;
2186    }
2187    break;
2188  case ISD::ADD:
2189    // Add can have at most one carry bit.  Thus we know that the output
2190    // is, at worst, one more bit than the inputs.
2191    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
2192    if (Tmp == 1) return 1;  // Early out.
2193
2194    // Special case decrementing a value (ADD X, -1):
2195    if (ConstantSDNode *CRHS = dyn_cast<ConstantSDNode>(Op.getOperand(1)))
2196      if (CRHS->isAllOnesValue()) {
2197        APInt KnownZero, KnownOne;
2198        ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
2199
2200        // If the input is known to be 0 or 1, the output is 0/-1, which is all
2201        // sign bits set.
2202        if ((KnownZero | APInt(VTBits, 1)).isAllOnesValue())
2203          return VTBits;
2204
2205        // If we are subtracting one from a positive number, there is no carry
2206        // out of the result.
2207        if (KnownZero.isNegative())
2208          return Tmp;
2209      }
2210
2211    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
2212    if (Tmp2 == 1) return 1;
2213    return std::min(Tmp, Tmp2)-1;
2214
2215  case ISD::SUB:
2216    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
2217    if (Tmp2 == 1) return 1;
2218
2219    // Handle NEG.
2220    if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
2221      if (CLHS->isNullValue()) {
2222        APInt KnownZero, KnownOne;
2223        ComputeMaskedBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
2224        // If the input is known to be 0 or 1, the output is 0/-1, which is all
2225        // sign bits set.
2226        if ((KnownZero | APInt(VTBits, 1)).isAllOnesValue())
2227          return VTBits;
2228
2229        // If the input is known to be positive (the sign bit is known clear),
2230        // the output of the NEG has the same number of sign bits as the input.
2231        if (KnownZero.isNegative())
2232          return Tmp2;
2233
2234        // Otherwise, we treat this like a SUB.
2235      }
2236
2237    // Sub can have at most one carry bit.  Thus we know that the output
2238    // is, at worst, one more bit than the inputs.
2239    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
2240    if (Tmp == 1) return 1;  // Early out.
2241    return std::min(Tmp, Tmp2)-1;
2242  case ISD::TRUNCATE:
2243    // FIXME: it's tricky to do anything useful for this, but it is an important
2244    // case for targets like X86.
2245    break;
2246  }
2247
2248  // Handle LOADX separately here. EXTLOAD case will fallthrough.
2249  if (Op.getOpcode() == ISD::LOAD) {
2250    LoadSDNode *LD = cast<LoadSDNode>(Op);
2251    unsigned ExtType = LD->getExtensionType();
2252    switch (ExtType) {
2253    default: break;
2254    case ISD::SEXTLOAD:    // '17' bits known
2255      Tmp = LD->getMemoryVT().getScalarType().getSizeInBits();
2256      return VTBits-Tmp+1;
2257    case ISD::ZEXTLOAD:    // '16' bits known
2258      Tmp = LD->getMemoryVT().getScalarType().getSizeInBits();
2259      return VTBits-Tmp;
2260    }
2261  }
2262
2263  // Allow the target to implement this method for its nodes.
2264  if (Op.getOpcode() >= ISD::BUILTIN_OP_END ||
2265      Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
2266      Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
2267      Op.getOpcode() == ISD::INTRINSIC_VOID) {
2268    unsigned NumBits = TLI.ComputeNumSignBitsForTargetNode(Op, Depth);
2269    if (NumBits > 1) FirstAnswer = std::max(FirstAnswer, NumBits);
2270  }
2271
2272  // Finally, if we can prove that the top bits of the result are 0's or 1's,
2273  // use this information.
2274  APInt KnownZero, KnownOne;
2275  ComputeMaskedBits(Op, KnownZero, KnownOne, Depth);
2276
2277  APInt Mask;
2278  if (KnownZero.isNegative()) {        // sign bit is 0
2279    Mask = KnownZero;
2280  } else if (KnownOne.isNegative()) {  // sign bit is 1;
2281    Mask = KnownOne;
2282  } else {
2283    // Nothing known.
2284    return FirstAnswer;
2285  }
2286
2287  // Okay, we know that the sign bit in Mask is set.  Use CLZ to determine
2288  // the number of identical bits in the top of the input value.
2289  Mask = ~Mask;
2290  Mask <<= Mask.getBitWidth()-VTBits;
2291  // Return # leading zeros.  We use 'min' here in case Val was zero before
2292  // shifting.  We don't want to return '64' as for an i32 "0".
2293  return std::max(FirstAnswer, std::min(VTBits, Mask.countLeadingZeros()));
2294}
2295
2296/// isBaseWithConstantOffset - Return true if the specified operand is an
2297/// ISD::ADD with a ConstantSDNode on the right-hand side, or if it is an
2298/// ISD::OR with a ConstantSDNode that is guaranteed to have the same
2299/// semantics as an ADD.  This handles the equivalence:
2300///     X|Cst == X+Cst iff X&Cst = 0.
2301bool SelectionDAG::isBaseWithConstantOffset(SDValue Op) const {
2302  if ((Op.getOpcode() != ISD::ADD && Op.getOpcode() != ISD::OR) ||
2303      !isa<ConstantSDNode>(Op.getOperand(1)))
2304    return false;
2305
2306  if (Op.getOpcode() == ISD::OR &&
2307      !MaskedValueIsZero(Op.getOperand(0),
2308                     cast<ConstantSDNode>(Op.getOperand(1))->getAPIntValue()))
2309    return false;
2310
2311  return true;
2312}
2313
2314
2315bool SelectionDAG::isKnownNeverNaN(SDValue Op) const {
2316  // If we're told that NaNs won't happen, assume they won't.
2317  if (getTarget().Options.NoNaNsFPMath)
2318    return true;
2319
2320  // If the value is a constant, we can obviously see if it is a NaN or not.
2321  if (const ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Op))
2322    return !C->getValueAPF().isNaN();
2323
2324  // TODO: Recognize more cases here.
2325
2326  return false;
2327}
2328
2329bool SelectionDAG::isKnownNeverZero(SDValue Op) const {
2330  // If the value is a constant, we can obviously see if it is a zero or not.
2331  if (const ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Op))
2332    return !C->isZero();
2333
2334  // TODO: Recognize more cases here.
2335  switch (Op.getOpcode()) {
2336  default: break;
2337  case ISD::OR:
2338    if (const ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1)))
2339      return !C->isNullValue();
2340    break;
2341  }
2342
2343  return false;
2344}
2345
2346bool SelectionDAG::isEqualTo(SDValue A, SDValue B) const {
2347  // Check the obvious case.
2348  if (A == B) return true;
2349
2350  // For for negative and positive zero.
2351  if (const ConstantFPSDNode *CA = dyn_cast<ConstantFPSDNode>(A))
2352    if (const ConstantFPSDNode *CB = dyn_cast<ConstantFPSDNode>(B))
2353      if (CA->isZero() && CB->isZero()) return true;
2354
2355  // Otherwise they may not be equal.
2356  return false;
2357}
2358
2359/// getNode - Gets or creates the specified node.
2360///
2361SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT) {
2362  FoldingSetNodeID ID;
2363  AddNodeIDNode(ID, Opcode, getVTList(VT), 0, 0);
2364  void *IP = 0;
2365  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2366    return SDValue(E, 0);
2367
2368  SDNode *N = new (NodeAllocator) SDNode(Opcode, DL, getVTList(VT));
2369  CSEMap.InsertNode(N, IP);
2370
2371  AllNodes.push_back(N);
2372#ifndef NDEBUG
2373  VerifySDNode(N);
2374#endif
2375  return SDValue(N, 0);
2376}
2377
2378SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL,
2379                              EVT VT, SDValue Operand) {
2380  // Constant fold unary operations with an integer constant operand.
2381  if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Operand.getNode())) {
2382    const APInt &Val = C->getAPIntValue();
2383    switch (Opcode) {
2384    default: break;
2385    case ISD::SIGN_EXTEND:
2386      return getConstant(Val.sextOrTrunc(VT.getSizeInBits()), VT);
2387    case ISD::ANY_EXTEND:
2388    case ISD::ZERO_EXTEND:
2389    case ISD::TRUNCATE:
2390      return getConstant(Val.zextOrTrunc(VT.getSizeInBits()), VT);
2391    case ISD::UINT_TO_FP:
2392    case ISD::SINT_TO_FP: {
2393      // No compile time operations on ppcf128.
2394      if (VT == MVT::ppcf128) break;
2395      APFloat apf(APInt::getNullValue(VT.getSizeInBits()));
2396      (void)apf.convertFromAPInt(Val,
2397                                 Opcode==ISD::SINT_TO_FP,
2398                                 APFloat::rmNearestTiesToEven);
2399      return getConstantFP(apf, VT);
2400    }
2401    case ISD::BITCAST:
2402      if (VT == MVT::f32 && C->getValueType(0) == MVT::i32)
2403        return getConstantFP(Val.bitsToFloat(), VT);
2404      else if (VT == MVT::f64 && C->getValueType(0) == MVT::i64)
2405        return getConstantFP(Val.bitsToDouble(), VT);
2406      break;
2407    case ISD::BSWAP:
2408      return getConstant(Val.byteSwap(), VT);
2409    case ISD::CTPOP:
2410      return getConstant(Val.countPopulation(), VT);
2411    case ISD::CTLZ:
2412    case ISD::CTLZ_ZERO_UNDEF:
2413      return getConstant(Val.countLeadingZeros(), VT);
2414    case ISD::CTTZ:
2415    case ISD::CTTZ_ZERO_UNDEF:
2416      return getConstant(Val.countTrailingZeros(), VT);
2417    }
2418  }
2419
2420  // Constant fold unary operations with a floating point constant operand.
2421  if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Operand.getNode())) {
2422    APFloat V = C->getValueAPF();    // make copy
2423    if (VT != MVT::ppcf128 && Operand.getValueType() != MVT::ppcf128) {
2424      switch (Opcode) {
2425      case ISD::FNEG:
2426        V.changeSign();
2427        return getConstantFP(V, VT);
2428      case ISD::FABS:
2429        V.clearSign();
2430        return getConstantFP(V, VT);
2431      case ISD::FP_EXTEND: {
2432        bool ignored;
2433        // This can return overflow, underflow, or inexact; we don't care.
2434        // FIXME need to be more flexible about rounding mode.
2435        (void)V.convert(*EVTToAPFloatSemantics(VT),
2436                        APFloat::rmNearestTiesToEven, &ignored);
2437        return getConstantFP(V, VT);
2438      }
2439      case ISD::FP_TO_SINT:
2440      case ISD::FP_TO_UINT: {
2441        integerPart x[2];
2442        bool ignored;
2443        assert(integerPartWidth >= 64);
2444        // FIXME need to be more flexible about rounding mode.
2445        APFloat::opStatus s = V.convertToInteger(x, VT.getSizeInBits(),
2446                              Opcode==ISD::FP_TO_SINT,
2447                              APFloat::rmTowardZero, &ignored);
2448        if (s==APFloat::opInvalidOp)     // inexact is OK, in fact usual
2449          break;
2450        APInt api(VT.getSizeInBits(), x);
2451        return getConstant(api, VT);
2452      }
2453      case ISD::BITCAST:
2454        if (VT == MVT::i32 && C->getValueType(0) == MVT::f32)
2455          return getConstant((uint32_t)V.bitcastToAPInt().getZExtValue(), VT);
2456        else if (VT == MVT::i64 && C->getValueType(0) == MVT::f64)
2457          return getConstant(V.bitcastToAPInt().getZExtValue(), VT);
2458        break;
2459      }
2460    }
2461  }
2462
2463  unsigned OpOpcode = Operand.getNode()->getOpcode();
2464  switch (Opcode) {
2465  case ISD::TokenFactor:
2466  case ISD::MERGE_VALUES:
2467  case ISD::CONCAT_VECTORS:
2468    return Operand;         // Factor, merge or concat of one node?  No need.
2469  case ISD::FP_ROUND: llvm_unreachable("Invalid method to make FP_ROUND node");
2470  case ISD::FP_EXTEND:
2471    assert(VT.isFloatingPoint() &&
2472           Operand.getValueType().isFloatingPoint() && "Invalid FP cast!");
2473    if (Operand.getValueType() == VT) return Operand;  // noop conversion.
2474    assert((!VT.isVector() ||
2475            VT.getVectorNumElements() ==
2476            Operand.getValueType().getVectorNumElements()) &&
2477           "Vector element count mismatch!");
2478    if (Operand.getOpcode() == ISD::UNDEF)
2479      return getUNDEF(VT);
2480    break;
2481  case ISD::SIGN_EXTEND:
2482    assert(VT.isInteger() && Operand.getValueType().isInteger() &&
2483           "Invalid SIGN_EXTEND!");
2484    if (Operand.getValueType() == VT) return Operand;   // noop extension
2485    assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) &&
2486           "Invalid sext node, dst < src!");
2487    assert((!VT.isVector() ||
2488            VT.getVectorNumElements() ==
2489            Operand.getValueType().getVectorNumElements()) &&
2490           "Vector element count mismatch!");
2491    if (OpOpcode == ISD::SIGN_EXTEND || OpOpcode == ISD::ZERO_EXTEND)
2492      return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0));
2493    else if (OpOpcode == ISD::UNDEF)
2494      // sext(undef) = 0, because the top bits will all be the same.
2495      return getConstant(0, VT);
2496    break;
2497  case ISD::ZERO_EXTEND:
2498    assert(VT.isInteger() && Operand.getValueType().isInteger() &&
2499           "Invalid ZERO_EXTEND!");
2500    if (Operand.getValueType() == VT) return Operand;   // noop extension
2501    assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) &&
2502           "Invalid zext node, dst < src!");
2503    assert((!VT.isVector() ||
2504            VT.getVectorNumElements() ==
2505            Operand.getValueType().getVectorNumElements()) &&
2506           "Vector element count mismatch!");
2507    if (OpOpcode == ISD::ZERO_EXTEND)   // (zext (zext x)) -> (zext x)
2508      return getNode(ISD::ZERO_EXTEND, DL, VT,
2509                     Operand.getNode()->getOperand(0));
2510    else if (OpOpcode == ISD::UNDEF)
2511      // zext(undef) = 0, because the top bits will be zero.
2512      return getConstant(0, VT);
2513    break;
2514  case ISD::ANY_EXTEND:
2515    assert(VT.isInteger() && Operand.getValueType().isInteger() &&
2516           "Invalid ANY_EXTEND!");
2517    if (Operand.getValueType() == VT) return Operand;   // noop extension
2518    assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) &&
2519           "Invalid anyext node, dst < src!");
2520    assert((!VT.isVector() ||
2521            VT.getVectorNumElements() ==
2522            Operand.getValueType().getVectorNumElements()) &&
2523           "Vector element count mismatch!");
2524
2525    if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND ||
2526        OpOpcode == ISD::ANY_EXTEND)
2527      // (ext (zext x)) -> (zext x)  and  (ext (sext x)) -> (sext x)
2528      return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0));
2529    else if (OpOpcode == ISD::UNDEF)
2530      return getUNDEF(VT);
2531
2532    // (ext (trunx x)) -> x
2533    if (OpOpcode == ISD::TRUNCATE) {
2534      SDValue OpOp = Operand.getNode()->getOperand(0);
2535      if (OpOp.getValueType() == VT)
2536        return OpOp;
2537    }
2538    break;
2539  case ISD::TRUNCATE:
2540    assert(VT.isInteger() && Operand.getValueType().isInteger() &&
2541           "Invalid TRUNCATE!");
2542    if (Operand.getValueType() == VT) return Operand;   // noop truncate
2543    assert(Operand.getValueType().getScalarType().bitsGT(VT.getScalarType()) &&
2544           "Invalid truncate node, src < dst!");
2545    assert((!VT.isVector() ||
2546            VT.getVectorNumElements() ==
2547            Operand.getValueType().getVectorNumElements()) &&
2548           "Vector element count mismatch!");
2549    if (OpOpcode == ISD::TRUNCATE)
2550      return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0));
2551    if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND ||
2552        OpOpcode == ISD::ANY_EXTEND) {
2553      // If the source is smaller than the dest, we still need an extend.
2554      if (Operand.getNode()->getOperand(0).getValueType().getScalarType()
2555            .bitsLT(VT.getScalarType()))
2556        return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0));
2557      if (Operand.getNode()->getOperand(0).getValueType().bitsGT(VT))
2558        return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0));
2559      return Operand.getNode()->getOperand(0);
2560    }
2561    if (OpOpcode == ISD::UNDEF)
2562      return getUNDEF(VT);
2563    break;
2564  case ISD::BITCAST:
2565    // Basic sanity checking.
2566    assert(VT.getSizeInBits() == Operand.getValueType().getSizeInBits()
2567           && "Cannot BITCAST between types of different sizes!");
2568    if (VT == Operand.getValueType()) return Operand;  // noop conversion.
2569    if (OpOpcode == ISD::BITCAST)  // bitconv(bitconv(x)) -> bitconv(x)
2570      return getNode(ISD::BITCAST, DL, VT, Operand.getOperand(0));
2571    if (OpOpcode == ISD::UNDEF)
2572      return getUNDEF(VT);
2573    break;
2574  case ISD::SCALAR_TO_VECTOR:
2575    assert(VT.isVector() && !Operand.getValueType().isVector() &&
2576           (VT.getVectorElementType() == Operand.getValueType() ||
2577            (VT.getVectorElementType().isInteger() &&
2578             Operand.getValueType().isInteger() &&
2579             VT.getVectorElementType().bitsLE(Operand.getValueType()))) &&
2580           "Illegal SCALAR_TO_VECTOR node!");
2581    if (OpOpcode == ISD::UNDEF)
2582      return getUNDEF(VT);
2583    // scalar_to_vector(extract_vector_elt V, 0) -> V, top bits are undefined.
2584    if (OpOpcode == ISD::EXTRACT_VECTOR_ELT &&
2585        isa<ConstantSDNode>(Operand.getOperand(1)) &&
2586        Operand.getConstantOperandVal(1) == 0 &&
2587        Operand.getOperand(0).getValueType() == VT)
2588      return Operand.getOperand(0);
2589    break;
2590  case ISD::FNEG:
2591    // -(X-Y) -> (Y-X) is unsafe because when X==Y, -0.0 != +0.0
2592    if (getTarget().Options.UnsafeFPMath && OpOpcode == ISD::FSUB)
2593      return getNode(ISD::FSUB, DL, VT, Operand.getNode()->getOperand(1),
2594                     Operand.getNode()->getOperand(0));
2595    if (OpOpcode == ISD::FNEG)  // --X -> X
2596      return Operand.getNode()->getOperand(0);
2597    break;
2598  case ISD::FABS:
2599    if (OpOpcode == ISD::FNEG)  // abs(-X) -> abs(X)
2600      return getNode(ISD::FABS, DL, VT, Operand.getNode()->getOperand(0));
2601    break;
2602  }
2603
2604  SDNode *N;
2605  SDVTList VTs = getVTList(VT);
2606  if (VT != MVT::Glue) { // Don't CSE flag producing nodes
2607    FoldingSetNodeID ID;
2608    SDValue Ops[1] = { Operand };
2609    AddNodeIDNode(ID, Opcode, VTs, Ops, 1);
2610    void *IP = 0;
2611    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2612      return SDValue(E, 0);
2613
2614    N = new (NodeAllocator) UnarySDNode(Opcode, DL, VTs, Operand);
2615    CSEMap.InsertNode(N, IP);
2616  } else {
2617    N = new (NodeAllocator) UnarySDNode(Opcode, DL, VTs, Operand);
2618  }
2619
2620  AllNodes.push_back(N);
2621#ifndef NDEBUG
2622  VerifySDNode(N);
2623#endif
2624  return SDValue(N, 0);
2625}
2626
2627SDValue SelectionDAG::FoldConstantArithmetic(unsigned Opcode,
2628                                             EVT VT,
2629                                             ConstantSDNode *Cst1,
2630                                             ConstantSDNode *Cst2) {
2631  const APInt &C1 = Cst1->getAPIntValue(), &C2 = Cst2->getAPIntValue();
2632
2633  switch (Opcode) {
2634  case ISD::ADD:  return getConstant(C1 + C2, VT);
2635  case ISD::SUB:  return getConstant(C1 - C2, VT);
2636  case ISD::MUL:  return getConstant(C1 * C2, VT);
2637  case ISD::UDIV:
2638    if (C2.getBoolValue()) return getConstant(C1.udiv(C2), VT);
2639    break;
2640  case ISD::UREM:
2641    if (C2.getBoolValue()) return getConstant(C1.urem(C2), VT);
2642    break;
2643  case ISD::SDIV:
2644    if (C2.getBoolValue()) return getConstant(C1.sdiv(C2), VT);
2645    break;
2646  case ISD::SREM:
2647    if (C2.getBoolValue()) return getConstant(C1.srem(C2), VT);
2648    break;
2649  case ISD::AND:  return getConstant(C1 & C2, VT);
2650  case ISD::OR:   return getConstant(C1 | C2, VT);
2651  case ISD::XOR:  return getConstant(C1 ^ C2, VT);
2652  case ISD::SHL:  return getConstant(C1 << C2, VT);
2653  case ISD::SRL:  return getConstant(C1.lshr(C2), VT);
2654  case ISD::SRA:  return getConstant(C1.ashr(C2), VT);
2655  case ISD::ROTL: return getConstant(C1.rotl(C2), VT);
2656  case ISD::ROTR: return getConstant(C1.rotr(C2), VT);
2657  default: break;
2658  }
2659
2660  return SDValue();
2661}
2662
2663SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT,
2664                              SDValue N1, SDValue N2) {
2665  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode());
2666  ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.getNode());
2667  switch (Opcode) {
2668  default: break;
2669  case ISD::TokenFactor:
2670    assert(VT == MVT::Other && N1.getValueType() == MVT::Other &&
2671           N2.getValueType() == MVT::Other && "Invalid token factor!");
2672    // Fold trivial token factors.
2673    if (N1.getOpcode() == ISD::EntryToken) return N2;
2674    if (N2.getOpcode() == ISD::EntryToken) return N1;
2675    if (N1 == N2) return N1;
2676    break;
2677  case ISD::CONCAT_VECTORS:
2678    // A CONCAT_VECTOR with all operands BUILD_VECTOR can be simplified to
2679    // one big BUILD_VECTOR.
2680    if (N1.getOpcode() == ISD::BUILD_VECTOR &&
2681        N2.getOpcode() == ISD::BUILD_VECTOR) {
2682      SmallVector<SDValue, 16> Elts(N1.getNode()->op_begin(),
2683                                    N1.getNode()->op_end());
2684      Elts.append(N2.getNode()->op_begin(), N2.getNode()->op_end());
2685      return getNode(ISD::BUILD_VECTOR, DL, VT, &Elts[0], Elts.size());
2686    }
2687    break;
2688  case ISD::AND:
2689    assert(VT.isInteger() && "This operator does not apply to FP types!");
2690    assert(N1.getValueType() == N2.getValueType() &&
2691           N1.getValueType() == VT && "Binary operator types must match!");
2692    // (X & 0) -> 0.  This commonly occurs when legalizing i64 values, so it's
2693    // worth handling here.
2694    if (N2C && N2C->isNullValue())
2695      return N2;
2696    if (N2C && N2C->isAllOnesValue())  // X & -1 -> X
2697      return N1;
2698    break;
2699  case ISD::OR:
2700  case ISD::XOR:
2701  case ISD::ADD:
2702  case ISD::SUB:
2703    assert(VT.isInteger() && "This operator does not apply to FP types!");
2704    assert(N1.getValueType() == N2.getValueType() &&
2705           N1.getValueType() == VT && "Binary operator types must match!");
2706    // (X ^|+- 0) -> X.  This commonly occurs when legalizing i64 values, so
2707    // it's worth handling here.
2708    if (N2C && N2C->isNullValue())
2709      return N1;
2710    break;
2711  case ISD::UDIV:
2712  case ISD::UREM:
2713  case ISD::MULHU:
2714  case ISD::MULHS:
2715  case ISD::MUL:
2716  case ISD::SDIV:
2717  case ISD::SREM:
2718    assert(VT.isInteger() && "This operator does not apply to FP types!");
2719    assert(N1.getValueType() == N2.getValueType() &&
2720           N1.getValueType() == VT && "Binary operator types must match!");
2721    break;
2722  case ISD::FADD:
2723  case ISD::FSUB:
2724  case ISD::FMUL:
2725  case ISD::FDIV:
2726  case ISD::FREM:
2727    if (getTarget().Options.UnsafeFPMath) {
2728      if (Opcode == ISD::FADD) {
2729        // 0+x --> x
2730        if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1))
2731          if (CFP->getValueAPF().isZero())
2732            return N2;
2733        // x+0 --> x
2734        if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N2))
2735          if (CFP->getValueAPF().isZero())
2736            return N1;
2737      } else if (Opcode == ISD::FSUB) {
2738        // x-0 --> x
2739        if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N2))
2740          if (CFP->getValueAPF().isZero())
2741            return N1;
2742      }
2743    }
2744    assert(VT.isFloatingPoint() && "This operator only applies to FP types!");
2745    assert(N1.getValueType() == N2.getValueType() &&
2746           N1.getValueType() == VT && "Binary operator types must match!");
2747    break;
2748  case ISD::FCOPYSIGN:   // N1 and result must match.  N1/N2 need not match.
2749    assert(N1.getValueType() == VT &&
2750           N1.getValueType().isFloatingPoint() &&
2751           N2.getValueType().isFloatingPoint() &&
2752           "Invalid FCOPYSIGN!");
2753    break;
2754  case ISD::SHL:
2755  case ISD::SRA:
2756  case ISD::SRL:
2757  case ISD::ROTL:
2758  case ISD::ROTR:
2759    assert(VT == N1.getValueType() &&
2760           "Shift operators return type must be the same as their first arg");
2761    assert(VT.isInteger() && N2.getValueType().isInteger() &&
2762           "Shifts only work on integers");
2763    // Verify that the shift amount VT is bit enough to hold valid shift
2764    // amounts.  This catches things like trying to shift an i1024 value by an
2765    // i8, which is easy to fall into in generic code that uses
2766    // TLI.getShiftAmount().
2767    assert(N2.getValueType().getSizeInBits() >=
2768                   Log2_32_Ceil(N1.getValueType().getSizeInBits()) &&
2769           "Invalid use of small shift amount with oversized value!");
2770
2771    // Always fold shifts of i1 values so the code generator doesn't need to
2772    // handle them.  Since we know the size of the shift has to be less than the
2773    // size of the value, the shift/rotate count is guaranteed to be zero.
2774    if (VT == MVT::i1)
2775      return N1;
2776    if (N2C && N2C->isNullValue())
2777      return N1;
2778    break;
2779  case ISD::FP_ROUND_INREG: {
2780    EVT EVT = cast<VTSDNode>(N2)->getVT();
2781    assert(VT == N1.getValueType() && "Not an inreg round!");
2782    assert(VT.isFloatingPoint() && EVT.isFloatingPoint() &&
2783           "Cannot FP_ROUND_INREG integer types");
2784    assert(EVT.isVector() == VT.isVector() &&
2785           "FP_ROUND_INREG type should be vector iff the operand "
2786           "type is vector!");
2787    assert((!EVT.isVector() ||
2788            EVT.getVectorNumElements() == VT.getVectorNumElements()) &&
2789           "Vector element counts must match in FP_ROUND_INREG");
2790    assert(EVT.bitsLE(VT) && "Not rounding down!");
2791    (void)EVT;
2792    if (cast<VTSDNode>(N2)->getVT() == VT) return N1;  // Not actually rounding.
2793    break;
2794  }
2795  case ISD::FP_ROUND:
2796    assert(VT.isFloatingPoint() &&
2797           N1.getValueType().isFloatingPoint() &&
2798           VT.bitsLE(N1.getValueType()) &&
2799           isa<ConstantSDNode>(N2) && "Invalid FP_ROUND!");
2800    if (N1.getValueType() == VT) return N1;  // noop conversion.
2801    break;
2802  case ISD::AssertSext:
2803  case ISD::AssertZext: {
2804    EVT EVT = cast<VTSDNode>(N2)->getVT();
2805    assert(VT == N1.getValueType() && "Not an inreg extend!");
2806    assert(VT.isInteger() && EVT.isInteger() &&
2807           "Cannot *_EXTEND_INREG FP types");
2808    assert(!EVT.isVector() &&
2809           "AssertSExt/AssertZExt type should be the vector element type "
2810           "rather than the vector type!");
2811    assert(EVT.bitsLE(VT) && "Not extending!");
2812    if (VT == EVT) return N1; // noop assertion.
2813    break;
2814  }
2815  case ISD::SIGN_EXTEND_INREG: {
2816    EVT EVT = cast<VTSDNode>(N2)->getVT();
2817    assert(VT == N1.getValueType() && "Not an inreg extend!");
2818    assert(VT.isInteger() && EVT.isInteger() &&
2819           "Cannot *_EXTEND_INREG FP types");
2820    assert(EVT.isVector() == VT.isVector() &&
2821           "SIGN_EXTEND_INREG type should be vector iff the operand "
2822           "type is vector!");
2823    assert((!EVT.isVector() ||
2824            EVT.getVectorNumElements() == VT.getVectorNumElements()) &&
2825           "Vector element counts must match in SIGN_EXTEND_INREG");
2826    assert(EVT.bitsLE(VT) && "Not extending!");
2827    if (EVT == VT) return N1;  // Not actually extending
2828
2829    if (N1C) {
2830      APInt Val = N1C->getAPIntValue();
2831      unsigned FromBits = EVT.getScalarType().getSizeInBits();
2832      Val <<= Val.getBitWidth()-FromBits;
2833      Val = Val.ashr(Val.getBitWidth()-FromBits);
2834      return getConstant(Val, VT);
2835    }
2836    break;
2837  }
2838  case ISD::EXTRACT_VECTOR_ELT:
2839    // EXTRACT_VECTOR_ELT of an UNDEF is an UNDEF.
2840    if (N1.getOpcode() == ISD::UNDEF)
2841      return getUNDEF(VT);
2842
2843    // EXTRACT_VECTOR_ELT of CONCAT_VECTORS is often formed while lowering is
2844    // expanding copies of large vectors from registers.
2845    if (N2C &&
2846        N1.getOpcode() == ISD::CONCAT_VECTORS &&
2847        N1.getNumOperands() > 0) {
2848      unsigned Factor =
2849        N1.getOperand(0).getValueType().getVectorNumElements();
2850      return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT,
2851                     N1.getOperand(N2C->getZExtValue() / Factor),
2852                     getConstant(N2C->getZExtValue() % Factor,
2853                                 N2.getValueType()));
2854    }
2855
2856    // EXTRACT_VECTOR_ELT of BUILD_VECTOR is often formed while lowering is
2857    // expanding large vector constants.
2858    if (N2C && N1.getOpcode() == ISD::BUILD_VECTOR) {
2859      SDValue Elt = N1.getOperand(N2C->getZExtValue());
2860      EVT VEltTy = N1.getValueType().getVectorElementType();
2861      if (Elt.getValueType() != VEltTy) {
2862        // If the vector element type is not legal, the BUILD_VECTOR operands
2863        // are promoted and implicitly truncated.  Make that explicit here.
2864        Elt = getNode(ISD::TRUNCATE, DL, VEltTy, Elt);
2865      }
2866      if (VT != VEltTy) {
2867        // If the vector element type is not legal, the EXTRACT_VECTOR_ELT
2868        // result is implicitly extended.
2869        Elt = getNode(ISD::ANY_EXTEND, DL, VT, Elt);
2870      }
2871      return Elt;
2872    }
2873
2874    // EXTRACT_VECTOR_ELT of INSERT_VECTOR_ELT is often formed when vector
2875    // operations are lowered to scalars.
2876    if (N1.getOpcode() == ISD::INSERT_VECTOR_ELT) {
2877      // If the indices are the same, return the inserted element else
2878      // if the indices are known different, extract the element from
2879      // the original vector.
2880      SDValue N1Op2 = N1.getOperand(2);
2881      ConstantSDNode *N1Op2C = dyn_cast<ConstantSDNode>(N1Op2.getNode());
2882
2883      if (N1Op2C && N2C) {
2884        if (N1Op2C->getZExtValue() == N2C->getZExtValue()) {
2885          if (VT == N1.getOperand(1).getValueType())
2886            return N1.getOperand(1);
2887          else
2888            return getSExtOrTrunc(N1.getOperand(1), DL, VT);
2889        }
2890
2891        return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, N1.getOperand(0), N2);
2892      }
2893    }
2894    break;
2895  case ISD::EXTRACT_ELEMENT:
2896    assert(N2C && (unsigned)N2C->getZExtValue() < 2 && "Bad EXTRACT_ELEMENT!");
2897    assert(!N1.getValueType().isVector() && !VT.isVector() &&
2898           (N1.getValueType().isInteger() == VT.isInteger()) &&
2899           N1.getValueType() != VT &&
2900           "Wrong types for EXTRACT_ELEMENT!");
2901
2902    // EXTRACT_ELEMENT of BUILD_PAIR is often formed while legalize is expanding
2903    // 64-bit integers into 32-bit parts.  Instead of building the extract of
2904    // the BUILD_PAIR, only to have legalize rip it apart, just do it now.
2905    if (N1.getOpcode() == ISD::BUILD_PAIR)
2906      return N1.getOperand(N2C->getZExtValue());
2907
2908    // EXTRACT_ELEMENT of a constant int is also very common.
2909    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) {
2910      unsigned ElementSize = VT.getSizeInBits();
2911      unsigned Shift = ElementSize * N2C->getZExtValue();
2912      APInt ShiftedVal = C->getAPIntValue().lshr(Shift);
2913      return getConstant(ShiftedVal.trunc(ElementSize), VT);
2914    }
2915    break;
2916  case ISD::EXTRACT_SUBVECTOR: {
2917    SDValue Index = N2;
2918    if (VT.isSimple() && N1.getValueType().isSimple()) {
2919      assert(VT.isVector() && N1.getValueType().isVector() &&
2920             "Extract subvector VTs must be a vectors!");
2921      assert(VT.getVectorElementType() == N1.getValueType().getVectorElementType() &&
2922             "Extract subvector VTs must have the same element type!");
2923      assert(VT.getSimpleVT() <= N1.getValueType().getSimpleVT() &&
2924             "Extract subvector must be from larger vector to smaller vector!");
2925
2926      if (isa<ConstantSDNode>(Index.getNode())) {
2927        assert((VT.getVectorNumElements() +
2928                cast<ConstantSDNode>(Index.getNode())->getZExtValue()
2929                <= N1.getValueType().getVectorNumElements())
2930               && "Extract subvector overflow!");
2931      }
2932
2933      // Trivial extraction.
2934      if (VT.getSimpleVT() == N1.getValueType().getSimpleVT())
2935        return N1;
2936    }
2937    break;
2938  }
2939  }
2940
2941  if (N1C) {
2942    if (N2C) {
2943      SDValue SV = FoldConstantArithmetic(Opcode, VT, N1C, N2C);
2944      if (SV.getNode()) return SV;
2945    } else {      // Cannonicalize constant to RHS if commutative
2946      if (isCommutativeBinOp(Opcode)) {
2947        std::swap(N1C, N2C);
2948        std::swap(N1, N2);
2949      }
2950    }
2951  }
2952
2953  // Constant fold FP operations.
2954  ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1.getNode());
2955  ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2.getNode());
2956  if (N1CFP) {
2957    if (!N2CFP && isCommutativeBinOp(Opcode)) {
2958      // Cannonicalize constant to RHS if commutative
2959      std::swap(N1CFP, N2CFP);
2960      std::swap(N1, N2);
2961    } else if (N2CFP && VT != MVT::ppcf128) {
2962      APFloat V1 = N1CFP->getValueAPF(), V2 = N2CFP->getValueAPF();
2963      APFloat::opStatus s;
2964      switch (Opcode) {
2965      case ISD::FADD:
2966        s = V1.add(V2, APFloat::rmNearestTiesToEven);
2967        if (s != APFloat::opInvalidOp)
2968          return getConstantFP(V1, VT);
2969        break;
2970      case ISD::FSUB:
2971        s = V1.subtract(V2, APFloat::rmNearestTiesToEven);
2972        if (s!=APFloat::opInvalidOp)
2973          return getConstantFP(V1, VT);
2974        break;
2975      case ISD::FMUL:
2976        s = V1.multiply(V2, APFloat::rmNearestTiesToEven);
2977        if (s!=APFloat::opInvalidOp)
2978          return getConstantFP(V1, VT);
2979        break;
2980      case ISD::FDIV:
2981        s = V1.divide(V2, APFloat::rmNearestTiesToEven);
2982        if (s!=APFloat::opInvalidOp && s!=APFloat::opDivByZero)
2983          return getConstantFP(V1, VT);
2984        break;
2985      case ISD::FREM :
2986        s = V1.mod(V2, APFloat::rmNearestTiesToEven);
2987        if (s!=APFloat::opInvalidOp && s!=APFloat::opDivByZero)
2988          return getConstantFP(V1, VT);
2989        break;
2990      case ISD::FCOPYSIGN:
2991        V1.copySign(V2);
2992        return getConstantFP(V1, VT);
2993      default: break;
2994      }
2995    }
2996
2997    if (Opcode == ISD::FP_ROUND) {
2998      APFloat V = N1CFP->getValueAPF();    // make copy
2999      bool ignored;
3000      // This can return overflow, underflow, or inexact; we don't care.
3001      // FIXME need to be more flexible about rounding mode.
3002      (void)V.convert(*EVTToAPFloatSemantics(VT),
3003                      APFloat::rmNearestTiesToEven, &ignored);
3004      return getConstantFP(V, VT);
3005    }
3006  }
3007
3008  // Canonicalize an UNDEF to the RHS, even over a constant.
3009  if (N1.getOpcode() == ISD::UNDEF) {
3010    if (isCommutativeBinOp(Opcode)) {
3011      std::swap(N1, N2);
3012    } else {
3013      switch (Opcode) {
3014      case ISD::FP_ROUND_INREG:
3015      case ISD::SIGN_EXTEND_INREG:
3016      case ISD::SUB:
3017      case ISD::FSUB:
3018      case ISD::FDIV:
3019      case ISD::FREM:
3020      case ISD::SRA:
3021        return N1;     // fold op(undef, arg2) -> undef
3022      case ISD::UDIV:
3023      case ISD::SDIV:
3024      case ISD::UREM:
3025      case ISD::SREM:
3026      case ISD::SRL:
3027      case ISD::SHL:
3028        if (!VT.isVector())
3029          return getConstant(0, VT);    // fold op(undef, arg2) -> 0
3030        // For vectors, we can't easily build an all zero vector, just return
3031        // the LHS.
3032        return N2;
3033      }
3034    }
3035  }
3036
3037  // Fold a bunch of operators when the RHS is undef.
3038  if (N2.getOpcode() == ISD::UNDEF) {
3039    switch (Opcode) {
3040    case ISD::XOR:
3041      if (N1.getOpcode() == ISD::UNDEF)
3042        // Handle undef ^ undef -> 0 special case. This is a common
3043        // idiom (misuse).
3044        return getConstant(0, VT);
3045      // fallthrough
3046    case ISD::ADD:
3047    case ISD::ADDC:
3048    case ISD::ADDE:
3049    case ISD::SUB:
3050    case ISD::UDIV:
3051    case ISD::SDIV:
3052    case ISD::UREM:
3053    case ISD::SREM:
3054      return N2;       // fold op(arg1, undef) -> undef
3055    case ISD::FADD:
3056    case ISD::FSUB:
3057    case ISD::FMUL:
3058    case ISD::FDIV:
3059    case ISD::FREM:
3060      if (getTarget().Options.UnsafeFPMath)
3061        return N2;
3062      break;
3063    case ISD::MUL:
3064    case ISD::AND:
3065    case ISD::SRL:
3066    case ISD::SHL:
3067      if (!VT.isVector())
3068        return getConstant(0, VT);  // fold op(arg1, undef) -> 0
3069      // For vectors, we can't easily build an all zero vector, just return
3070      // the LHS.
3071      return N1;
3072    case ISD::OR:
3073      if (!VT.isVector())
3074        return getConstant(APInt::getAllOnesValue(VT.getSizeInBits()), VT);
3075      // For vectors, we can't easily build an all one vector, just return
3076      // the LHS.
3077      return N1;
3078    case ISD::SRA:
3079      return N1;
3080    }
3081  }
3082
3083  // Memoize this node if possible.
3084  SDNode *N;
3085  SDVTList VTs = getVTList(VT);
3086  if (VT != MVT::Glue) {
3087    SDValue Ops[] = { N1, N2 };
3088    FoldingSetNodeID ID;
3089    AddNodeIDNode(ID, Opcode, VTs, Ops, 2);
3090    void *IP = 0;
3091    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
3092      return SDValue(E, 0);
3093
3094    N = new (NodeAllocator) BinarySDNode(Opcode, DL, VTs, N1, N2);
3095    CSEMap.InsertNode(N, IP);
3096  } else {
3097    N = new (NodeAllocator) BinarySDNode(Opcode, DL, VTs, N1, N2);
3098  }
3099
3100  AllNodes.push_back(N);
3101#ifndef NDEBUG
3102  VerifySDNode(N);
3103#endif
3104  return SDValue(N, 0);
3105}
3106
3107SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT,
3108                              SDValue N1, SDValue N2, SDValue N3) {
3109  // Perform various simplifications.
3110  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode());
3111  switch (Opcode) {
3112  case ISD::CONCAT_VECTORS:
3113    // A CONCAT_VECTOR with all operands BUILD_VECTOR can be simplified to
3114    // one big BUILD_VECTOR.
3115    if (N1.getOpcode() == ISD::BUILD_VECTOR &&
3116        N2.getOpcode() == ISD::BUILD_VECTOR &&
3117        N3.getOpcode() == ISD::BUILD_VECTOR) {
3118      SmallVector<SDValue, 16> Elts(N1.getNode()->op_begin(),
3119                                    N1.getNode()->op_end());
3120      Elts.append(N2.getNode()->op_begin(), N2.getNode()->op_end());
3121      Elts.append(N3.getNode()->op_begin(), N3.getNode()->op_end());
3122      return getNode(ISD::BUILD_VECTOR, DL, VT, &Elts[0], Elts.size());
3123    }
3124    break;
3125  case ISD::SETCC: {
3126    // Use FoldSetCC to simplify SETCC's.
3127    SDValue Simp = FoldSetCC(VT, N1, N2, cast<CondCodeSDNode>(N3)->get(), DL);
3128    if (Simp.getNode()) return Simp;
3129    break;
3130  }
3131  case ISD::SELECT:
3132    if (N1C) {
3133     if (N1C->getZExtValue())
3134       return N2;             // select true, X, Y -> X
3135     return N3;             // select false, X, Y -> Y
3136    }
3137
3138    if (N2 == N3) return N2;   // select C, X, X -> X
3139    break;
3140  case ISD::VECTOR_SHUFFLE:
3141    llvm_unreachable("should use getVectorShuffle constructor!");
3142  case ISD::INSERT_SUBVECTOR: {
3143    SDValue Index = N3;
3144    if (VT.isSimple() && N1.getValueType().isSimple()
3145        && N2.getValueType().isSimple()) {
3146      assert(VT.isVector() && N1.getValueType().isVector() &&
3147             N2.getValueType().isVector() &&
3148             "Insert subvector VTs must be a vectors");
3149      assert(VT == N1.getValueType() &&
3150             "Dest and insert subvector source types must match!");
3151      assert(N2.getValueType().getSimpleVT() <= N1.getValueType().getSimpleVT() &&
3152             "Insert subvector must be from smaller vector to larger vector!");
3153      if (isa<ConstantSDNode>(Index.getNode())) {
3154        assert((N2.getValueType().getVectorNumElements() +
3155                cast<ConstantSDNode>(Index.getNode())->getZExtValue()
3156                <= VT.getVectorNumElements())
3157               && "Insert subvector overflow!");
3158      }
3159
3160      // Trivial insertion.
3161      if (VT.getSimpleVT() == N2.getValueType().getSimpleVT())
3162        return N2;
3163    }
3164    break;
3165  }
3166  case ISD::BITCAST:
3167    // Fold bit_convert nodes from a type to themselves.
3168    if (N1.getValueType() == VT)
3169      return N1;
3170    break;
3171  }
3172
3173  // Memoize node if it doesn't produce a flag.
3174  SDNode *N;
3175  SDVTList VTs = getVTList(VT);
3176  if (VT != MVT::Glue) {
3177    SDValue Ops[] = { N1, N2, N3 };
3178    FoldingSetNodeID ID;
3179    AddNodeIDNode(ID, Opcode, VTs, Ops, 3);
3180    void *IP = 0;
3181    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
3182      return SDValue(E, 0);
3183
3184    N = new (NodeAllocator) TernarySDNode(Opcode, DL, VTs, N1, N2, N3);
3185    CSEMap.InsertNode(N, IP);
3186  } else {
3187    N = new (NodeAllocator) TernarySDNode(Opcode, DL, VTs, N1, N2, N3);
3188  }
3189
3190  AllNodes.push_back(N);
3191#ifndef NDEBUG
3192  VerifySDNode(N);
3193#endif
3194  return SDValue(N, 0);
3195}
3196
3197SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT,
3198                              SDValue N1, SDValue N2, SDValue N3,
3199                              SDValue N4) {
3200  SDValue Ops[] = { N1, N2, N3, N4 };
3201  return getNode(Opcode, DL, VT, Ops, 4);
3202}
3203
3204SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT,
3205                              SDValue N1, SDValue N2, SDValue N3,
3206                              SDValue N4, SDValue N5) {
3207  SDValue Ops[] = { N1, N2, N3, N4, N5 };
3208  return getNode(Opcode, DL, VT, Ops, 5);
3209}
3210
3211/// getStackArgumentTokenFactor - Compute a TokenFactor to force all
3212/// the incoming stack arguments to be loaded from the stack.
3213SDValue SelectionDAG::getStackArgumentTokenFactor(SDValue Chain) {
3214  SmallVector<SDValue, 8> ArgChains;
3215
3216  // Include the original chain at the beginning of the list. When this is
3217  // used by target LowerCall hooks, this helps legalize find the
3218  // CALLSEQ_BEGIN node.
3219  ArgChains.push_back(Chain);
3220
3221  // Add a chain value for each stack argument.
3222  for (SDNode::use_iterator U = getEntryNode().getNode()->use_begin(),
3223       UE = getEntryNode().getNode()->use_end(); U != UE; ++U)
3224    if (LoadSDNode *L = dyn_cast<LoadSDNode>(*U))
3225      if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(L->getBasePtr()))
3226        if (FI->getIndex() < 0)
3227          ArgChains.push_back(SDValue(L, 1));
3228
3229  // Build a tokenfactor for all the chains.
3230  return getNode(ISD::TokenFactor, Chain.getDebugLoc(), MVT::Other,
3231                 &ArgChains[0], ArgChains.size());
3232}
3233
3234/// SplatByte - Distribute ByteVal over NumBits bits.
3235static APInt SplatByte(unsigned NumBits, uint8_t ByteVal) {
3236  APInt Val = APInt(NumBits, ByteVal);
3237  unsigned Shift = 8;
3238  for (unsigned i = NumBits; i > 8; i >>= 1) {
3239    Val = (Val << Shift) | Val;
3240    Shift <<= 1;
3241  }
3242  return Val;
3243}
3244
3245/// getMemsetValue - Vectorized representation of the memset value
3246/// operand.
3247static SDValue getMemsetValue(SDValue Value, EVT VT, SelectionDAG &DAG,
3248                              DebugLoc dl) {
3249  assert(Value.getOpcode() != ISD::UNDEF);
3250
3251  unsigned NumBits = VT.getScalarType().getSizeInBits();
3252  if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Value)) {
3253    APInt Val = SplatByte(NumBits, C->getZExtValue() & 255);
3254    if (VT.isInteger())
3255      return DAG.getConstant(Val, VT);
3256    return DAG.getConstantFP(APFloat(Val), VT);
3257  }
3258
3259  Value = DAG.getNode(ISD::ZERO_EXTEND, dl, VT, Value);
3260  if (NumBits > 8) {
3261    // Use a multiplication with 0x010101... to extend the input to the
3262    // required length.
3263    APInt Magic = SplatByte(NumBits, 0x01);
3264    Value = DAG.getNode(ISD::MUL, dl, VT, Value, DAG.getConstant(Magic, VT));
3265  }
3266
3267  return Value;
3268}
3269
3270/// getMemsetStringVal - Similar to getMemsetValue. Except this is only
3271/// used when a memcpy is turned into a memset when the source is a constant
3272/// string ptr.
3273static SDValue getMemsetStringVal(EVT VT, DebugLoc dl, SelectionDAG &DAG,
3274                                  const TargetLowering &TLI, StringRef Str) {
3275  // Handle vector with all elements zero.
3276  if (Str.empty()) {
3277    if (VT.isInteger())
3278      return DAG.getConstant(0, VT);
3279    else if (VT == MVT::f32 || VT == MVT::f64)
3280      return DAG.getConstantFP(0.0, VT);
3281    else if (VT.isVector()) {
3282      unsigned NumElts = VT.getVectorNumElements();
3283      MVT EltVT = (VT.getVectorElementType() == MVT::f32) ? MVT::i32 : MVT::i64;
3284      return DAG.getNode(ISD::BITCAST, dl, VT,
3285                         DAG.getConstant(0, EVT::getVectorVT(*DAG.getContext(),
3286                                                             EltVT, NumElts)));
3287    } else
3288      llvm_unreachable("Expected type!");
3289  }
3290
3291  assert(!VT.isVector() && "Can't handle vector type here!");
3292  unsigned NumVTBytes = VT.getSizeInBits() / 8;
3293  unsigned NumBytes = std::min(NumVTBytes, unsigned(Str.size()));
3294
3295  uint64_t Val = 0;
3296  if (TLI.isLittleEndian()) {
3297    for (unsigned i = 0; i != NumBytes; ++i)
3298      Val |= (uint64_t)(unsigned char)Str[i] << i*8;
3299  } else {
3300    for (unsigned i = 0; i != NumBytes; ++i)
3301      Val |= (uint64_t)(unsigned char)Str[i] << (NumVTBytes-i-1)*8;
3302  }
3303
3304  return DAG.getConstant(Val, VT);
3305}
3306
3307/// getMemBasePlusOffset - Returns base and offset node for the
3308///
3309static SDValue getMemBasePlusOffset(SDValue Base, unsigned Offset,
3310                                      SelectionDAG &DAG) {
3311  EVT VT = Base.getValueType();
3312  return DAG.getNode(ISD::ADD, Base.getDebugLoc(),
3313                     VT, Base, DAG.getConstant(Offset, VT));
3314}
3315
3316/// isMemSrcFromString - Returns true if memcpy source is a string constant.
3317///
3318static bool isMemSrcFromString(SDValue Src, StringRef &Str) {
3319  unsigned SrcDelta = 0;
3320  GlobalAddressSDNode *G = NULL;
3321  if (Src.getOpcode() == ISD::GlobalAddress)
3322    G = cast<GlobalAddressSDNode>(Src);
3323  else if (Src.getOpcode() == ISD::ADD &&
3324           Src.getOperand(0).getOpcode() == ISD::GlobalAddress &&
3325           Src.getOperand(1).getOpcode() == ISD::Constant) {
3326    G = cast<GlobalAddressSDNode>(Src.getOperand(0));
3327    SrcDelta = cast<ConstantSDNode>(Src.getOperand(1))->getZExtValue();
3328  }
3329  if (!G)
3330    return false;
3331
3332  return getConstantStringInfo(G->getGlobal(), Str, SrcDelta, false);
3333}
3334
3335/// FindOptimalMemOpLowering - Determines the optimial series memory ops
3336/// to replace the memset / memcpy. Return true if the number of memory ops
3337/// is below the threshold. It returns the types of the sequence of
3338/// memory ops to perform memset / memcpy by reference.
3339static bool FindOptimalMemOpLowering(std::vector<EVT> &MemOps,
3340                                     unsigned Limit, uint64_t Size,
3341                                     unsigned DstAlign, unsigned SrcAlign,
3342                                     bool IsZeroVal,
3343                                     bool MemcpyStrSrc,
3344                                     SelectionDAG &DAG,
3345                                     const TargetLowering &TLI) {
3346  assert((SrcAlign == 0 || SrcAlign >= DstAlign) &&
3347         "Expecting memcpy / memset source to meet alignment requirement!");
3348  // If 'SrcAlign' is zero, that means the memory operation does not need to
3349  // load the value, i.e. memset or memcpy from constant string. Otherwise,
3350  // it's the inferred alignment of the source. 'DstAlign', on the other hand,
3351  // is the specified alignment of the memory operation. If it is zero, that
3352  // means it's possible to change the alignment of the destination.
3353  // 'MemcpyStrSrc' indicates whether the memcpy source is constant so it does
3354  // not need to be loaded.
3355  EVT VT = TLI.getOptimalMemOpType(Size, DstAlign, SrcAlign,
3356                                   IsZeroVal, MemcpyStrSrc,
3357                                   DAG.getMachineFunction());
3358
3359  if (VT == MVT::Other) {
3360    if (DstAlign >= TLI.getTargetData()->getPointerPrefAlignment() ||
3361        TLI.allowsUnalignedMemoryAccesses(VT)) {
3362      VT = TLI.getPointerTy();
3363    } else {
3364      switch (DstAlign & 7) {
3365      case 0:  VT = MVT::i64; break;
3366      case 4:  VT = MVT::i32; break;
3367      case 2:  VT = MVT::i16; break;
3368      default: VT = MVT::i8;  break;
3369      }
3370    }
3371
3372    MVT LVT = MVT::i64;
3373    while (!TLI.isTypeLegal(LVT))
3374      LVT = (MVT::SimpleValueType)(LVT.SimpleTy - 1);
3375    assert(LVT.isInteger());
3376
3377    if (VT.bitsGT(LVT))
3378      VT = LVT;
3379  }
3380
3381  unsigned NumMemOps = 0;
3382  while (Size != 0) {
3383    unsigned VTSize = VT.getSizeInBits() / 8;
3384    while (VTSize > Size) {
3385      // For now, only use non-vector load / store's for the left-over pieces.
3386      if (VT.isVector() || VT.isFloatingPoint()) {
3387        VT = MVT::i64;
3388        while (!TLI.isTypeLegal(VT))
3389          VT = (MVT::SimpleValueType)(VT.getSimpleVT().SimpleTy - 1);
3390        VTSize = VT.getSizeInBits() / 8;
3391      } else {
3392        // This can result in a type that is not legal on the target, e.g.
3393        // 1 or 2 bytes on PPC.
3394        VT = (MVT::SimpleValueType)(VT.getSimpleVT().SimpleTy - 1);
3395        VTSize >>= 1;
3396      }
3397    }
3398
3399    if (++NumMemOps > Limit)
3400      return false;
3401    MemOps.push_back(VT);
3402    Size -= VTSize;
3403  }
3404
3405  return true;
3406}
3407
3408static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, DebugLoc dl,
3409                                       SDValue Chain, SDValue Dst,
3410                                       SDValue Src, uint64_t Size,
3411                                       unsigned Align, bool isVol,
3412                                       bool AlwaysInline,
3413                                       MachinePointerInfo DstPtrInfo,
3414                                       MachinePointerInfo SrcPtrInfo) {
3415  // Turn a memcpy of undef to nop.
3416  if (Src.getOpcode() == ISD::UNDEF)
3417    return Chain;
3418
3419  // Expand memcpy to a series of load and store ops if the size operand falls
3420  // below a certain threshold.
3421  // TODO: In the AlwaysInline case, if the size is big then generate a loop
3422  // rather than maybe a humongous number of loads and stores.
3423  const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3424  std::vector<EVT> MemOps;
3425  bool DstAlignCanChange = false;
3426  MachineFunction &MF = DAG.getMachineFunction();
3427  MachineFrameInfo *MFI = MF.getFrameInfo();
3428  bool OptSize = MF.getFunction()->hasFnAttr(Attribute::OptimizeForSize);
3429  FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst);
3430  if (FI && !MFI->isFixedObjectIndex(FI->getIndex()))
3431    DstAlignCanChange = true;
3432  unsigned SrcAlign = DAG.InferPtrAlignment(Src);
3433  if (Align > SrcAlign)
3434    SrcAlign = Align;
3435  StringRef Str;
3436  bool CopyFromStr = isMemSrcFromString(Src, Str);
3437  bool isZeroStr = CopyFromStr && Str.empty();
3438  unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemcpy(OptSize);
3439
3440  if (!FindOptimalMemOpLowering(MemOps, Limit, Size,
3441                                (DstAlignCanChange ? 0 : Align),
3442                                (isZeroStr ? 0 : SrcAlign),
3443                                true, CopyFromStr, DAG, TLI))
3444    return SDValue();
3445
3446  if (DstAlignCanChange) {
3447    Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext());
3448    unsigned NewAlign = (unsigned) TLI.getTargetData()->getABITypeAlignment(Ty);
3449    if (NewAlign > Align) {
3450      // Give the stack frame object a larger alignment if needed.
3451      if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign)
3452        MFI->setObjectAlignment(FI->getIndex(), NewAlign);
3453      Align = NewAlign;
3454    }
3455  }
3456
3457  SmallVector<SDValue, 8> OutChains;
3458  unsigned NumMemOps = MemOps.size();
3459  uint64_t SrcOff = 0, DstOff = 0;
3460  for (unsigned i = 0; i != NumMemOps; ++i) {
3461    EVT VT = MemOps[i];
3462    unsigned VTSize = VT.getSizeInBits() / 8;
3463    SDValue Value, Store;
3464
3465    if (CopyFromStr &&
3466        (isZeroStr || (VT.isInteger() && !VT.isVector()))) {
3467      // It's unlikely a store of a vector immediate can be done in a single
3468      // instruction. It would require a load from a constantpool first.
3469      // We only handle zero vectors here.
3470      // FIXME: Handle other cases where store of vector immediate is done in
3471      // a single instruction.
3472      Value = getMemsetStringVal(VT, dl, DAG, TLI, Str.substr(SrcOff));
3473      Store = DAG.getStore(Chain, dl, Value,
3474                           getMemBasePlusOffset(Dst, DstOff, DAG),
3475                           DstPtrInfo.getWithOffset(DstOff), isVol,
3476                           false, Align);
3477    } else {
3478      // The type might not be legal for the target.  This should only happen
3479      // if the type is smaller than a legal type, as on PPC, so the right
3480      // thing to do is generate a LoadExt/StoreTrunc pair.  These simplify
3481      // to Load/Store if NVT==VT.
3482      // FIXME does the case above also need this?
3483      EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
3484      assert(NVT.bitsGE(VT));
3485      Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain,
3486                             getMemBasePlusOffset(Src, SrcOff, DAG),
3487                             SrcPtrInfo.getWithOffset(SrcOff), VT, isVol, false,
3488                             MinAlign(SrcAlign, SrcOff));
3489      Store = DAG.getTruncStore(Chain, dl, Value,
3490                                getMemBasePlusOffset(Dst, DstOff, DAG),
3491                                DstPtrInfo.getWithOffset(DstOff), VT, isVol,
3492                                false, Align);
3493    }
3494    OutChains.push_back(Store);
3495    SrcOff += VTSize;
3496    DstOff += VTSize;
3497  }
3498
3499  return DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
3500                     &OutChains[0], OutChains.size());
3501}
3502
3503static SDValue getMemmoveLoadsAndStores(SelectionDAG &DAG, DebugLoc dl,
3504                                        SDValue Chain, SDValue Dst,
3505                                        SDValue Src, uint64_t Size,
3506                                        unsigned Align,  bool isVol,
3507                                        bool AlwaysInline,
3508                                        MachinePointerInfo DstPtrInfo,
3509                                        MachinePointerInfo SrcPtrInfo) {
3510  // Turn a memmove of undef to nop.
3511  if (Src.getOpcode() == ISD::UNDEF)
3512    return Chain;
3513
3514  // Expand memmove to a series of load and store ops if the size operand falls
3515  // below a certain threshold.
3516  const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3517  std::vector<EVT> MemOps;
3518  bool DstAlignCanChange = false;
3519  MachineFunction &MF = DAG.getMachineFunction();
3520  MachineFrameInfo *MFI = MF.getFrameInfo();
3521  bool OptSize = MF.getFunction()->hasFnAttr(Attribute::OptimizeForSize);
3522  FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst);
3523  if (FI && !MFI->isFixedObjectIndex(FI->getIndex()))
3524    DstAlignCanChange = true;
3525  unsigned SrcAlign = DAG.InferPtrAlignment(Src);
3526  if (Align > SrcAlign)
3527    SrcAlign = Align;
3528  unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemmove(OptSize);
3529
3530  if (!FindOptimalMemOpLowering(MemOps, Limit, Size,
3531                                (DstAlignCanChange ? 0 : Align),
3532                                SrcAlign, true, false, DAG, TLI))
3533    return SDValue();
3534
3535  if (DstAlignCanChange) {
3536    Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext());
3537    unsigned NewAlign = (unsigned) TLI.getTargetData()->getABITypeAlignment(Ty);
3538    if (NewAlign > Align) {
3539      // Give the stack frame object a larger alignment if needed.
3540      if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign)
3541        MFI->setObjectAlignment(FI->getIndex(), NewAlign);
3542      Align = NewAlign;
3543    }
3544  }
3545
3546  uint64_t SrcOff = 0, DstOff = 0;
3547  SmallVector<SDValue, 8> LoadValues;
3548  SmallVector<SDValue, 8> LoadChains;
3549  SmallVector<SDValue, 8> OutChains;
3550  unsigned NumMemOps = MemOps.size();
3551  for (unsigned i = 0; i < NumMemOps; i++) {
3552    EVT VT = MemOps[i];
3553    unsigned VTSize = VT.getSizeInBits() / 8;
3554    SDValue Value, Store;
3555
3556    Value = DAG.getLoad(VT, dl, Chain,
3557                        getMemBasePlusOffset(Src, SrcOff, DAG),
3558                        SrcPtrInfo.getWithOffset(SrcOff), isVol,
3559                        false, false, SrcAlign);
3560    LoadValues.push_back(Value);
3561    LoadChains.push_back(Value.getValue(1));
3562    SrcOff += VTSize;
3563  }
3564  Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
3565                      &LoadChains[0], LoadChains.size());
3566  OutChains.clear();
3567  for (unsigned i = 0; i < NumMemOps; i++) {
3568    EVT VT = MemOps[i];
3569    unsigned VTSize = VT.getSizeInBits() / 8;
3570    SDValue Value, Store;
3571
3572    Store = DAG.getStore(Chain, dl, LoadValues[i],
3573                         getMemBasePlusOffset(Dst, DstOff, DAG),
3574                         DstPtrInfo.getWithOffset(DstOff), isVol, false, Align);
3575    OutChains.push_back(Store);
3576    DstOff += VTSize;
3577  }
3578
3579  return DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
3580                     &OutChains[0], OutChains.size());
3581}
3582
3583static SDValue getMemsetStores(SelectionDAG &DAG, DebugLoc dl,
3584                               SDValue Chain, SDValue Dst,
3585                               SDValue Src, uint64_t Size,
3586                               unsigned Align, bool isVol,
3587                               MachinePointerInfo DstPtrInfo) {
3588  // Turn a memset of undef to nop.
3589  if (Src.getOpcode() == ISD::UNDEF)
3590    return Chain;
3591
3592  // Expand memset to a series of load/store ops if the size operand
3593  // falls below a certain threshold.
3594  const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3595  std::vector<EVT> MemOps;
3596  bool DstAlignCanChange = false;
3597  MachineFunction &MF = DAG.getMachineFunction();
3598  MachineFrameInfo *MFI = MF.getFrameInfo();
3599  bool OptSize = MF.getFunction()->hasFnAttr(Attribute::OptimizeForSize);
3600  FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst);
3601  if (FI && !MFI->isFixedObjectIndex(FI->getIndex()))
3602    DstAlignCanChange = true;
3603  bool IsZeroVal =
3604    isa<ConstantSDNode>(Src) && cast<ConstantSDNode>(Src)->isNullValue();
3605  if (!FindOptimalMemOpLowering(MemOps, TLI.getMaxStoresPerMemset(OptSize),
3606                                Size, (DstAlignCanChange ? 0 : Align), 0,
3607                                IsZeroVal, false, DAG, TLI))
3608    return SDValue();
3609
3610  if (DstAlignCanChange) {
3611    Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext());
3612    unsigned NewAlign = (unsigned) TLI.getTargetData()->getABITypeAlignment(Ty);
3613    if (NewAlign > Align) {
3614      // Give the stack frame object a larger alignment if needed.
3615      if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign)
3616        MFI->setObjectAlignment(FI->getIndex(), NewAlign);
3617      Align = NewAlign;
3618    }
3619  }
3620
3621  SmallVector<SDValue, 8> OutChains;
3622  uint64_t DstOff = 0;
3623  unsigned NumMemOps = MemOps.size();
3624
3625  // Find the largest store and generate the bit pattern for it.
3626  EVT LargestVT = MemOps[0];
3627  for (unsigned i = 1; i < NumMemOps; i++)
3628    if (MemOps[i].bitsGT(LargestVT))
3629      LargestVT = MemOps[i];
3630  SDValue MemSetValue = getMemsetValue(Src, LargestVT, DAG, dl);
3631
3632  for (unsigned i = 0; i < NumMemOps; i++) {
3633    EVT VT = MemOps[i];
3634
3635    // If this store is smaller than the largest store see whether we can get
3636    // the smaller value for free with a truncate.
3637    SDValue Value = MemSetValue;
3638    if (VT.bitsLT(LargestVT)) {
3639      if (!LargestVT.isVector() && !VT.isVector() &&
3640          TLI.isTruncateFree(LargestVT, VT))
3641        Value = DAG.getNode(ISD::TRUNCATE, dl, VT, MemSetValue);
3642      else
3643        Value = getMemsetValue(Src, VT, DAG, dl);
3644    }
3645    assert(Value.getValueType() == VT && "Value with wrong type.");
3646    SDValue Store = DAG.getStore(Chain, dl, Value,
3647                                 getMemBasePlusOffset(Dst, DstOff, DAG),
3648                                 DstPtrInfo.getWithOffset(DstOff),
3649                                 isVol, false, Align);
3650    OutChains.push_back(Store);
3651    DstOff += VT.getSizeInBits() / 8;
3652  }
3653
3654  return DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
3655                     &OutChains[0], OutChains.size());
3656}
3657
3658SDValue SelectionDAG::getMemcpy(SDValue Chain, DebugLoc dl, SDValue Dst,
3659                                SDValue Src, SDValue Size,
3660                                unsigned Align, bool isVol, bool AlwaysInline,
3661                                MachinePointerInfo DstPtrInfo,
3662                                MachinePointerInfo SrcPtrInfo) {
3663
3664  // Check to see if we should lower the memcpy to loads and stores first.
3665  // For cases within the target-specified limits, this is the best choice.
3666  ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
3667  if (ConstantSize) {
3668    // Memcpy with size zero? Just return the original chain.
3669    if (ConstantSize->isNullValue())
3670      return Chain;
3671
3672    SDValue Result = getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src,
3673                                             ConstantSize->getZExtValue(),Align,
3674                                isVol, false, DstPtrInfo, SrcPtrInfo);
3675    if (Result.getNode())
3676      return Result;
3677  }
3678
3679  // Then check to see if we should lower the memcpy with target-specific
3680  // code. If the target chooses to do this, this is the next best.
3681  SDValue Result =
3682    TSI.EmitTargetCodeForMemcpy(*this, dl, Chain, Dst, Src, Size, Align,
3683                                isVol, AlwaysInline,
3684                                DstPtrInfo, SrcPtrInfo);
3685  if (Result.getNode())
3686    return Result;
3687
3688  // If we really need inline code and the target declined to provide it,
3689  // use a (potentially long) sequence of loads and stores.
3690  if (AlwaysInline) {
3691    assert(ConstantSize && "AlwaysInline requires a constant size!");
3692    return getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src,
3693                                   ConstantSize->getZExtValue(), Align, isVol,
3694                                   true, DstPtrInfo, SrcPtrInfo);
3695  }
3696
3697  // FIXME: If the memcpy is volatile (isVol), lowering it to a plain libc
3698  // memcpy is not guaranteed to be safe. libc memcpys aren't required to
3699  // respect volatile, so they may do things like read or write memory
3700  // beyond the given memory regions. But fixing this isn't easy, and most
3701  // people don't care.
3702
3703  // Emit a library call.
3704  TargetLowering::ArgListTy Args;
3705  TargetLowering::ArgListEntry Entry;
3706  Entry.Ty = TLI.getTargetData()->getIntPtrType(*getContext());
3707  Entry.Node = Dst; Args.push_back(Entry);
3708  Entry.Node = Src; Args.push_back(Entry);
3709  Entry.Node = Size; Args.push_back(Entry);
3710  // FIXME: pass in DebugLoc
3711  std::pair<SDValue,SDValue> CallResult =
3712    TLI.LowerCallTo(Chain, Type::getVoidTy(*getContext()),
3713                    false, false, false, false, 0,
3714                    TLI.getLibcallCallingConv(RTLIB::MEMCPY),
3715                    /*isTailCall=*/false,
3716                    /*doesNotReturn=*/false, /*isReturnValueUsed=*/false,
3717                    getExternalSymbol(TLI.getLibcallName(RTLIB::MEMCPY),
3718                                      TLI.getPointerTy()),
3719                    Args, *this, dl);
3720  return CallResult.second;
3721}
3722
3723SDValue SelectionDAG::getMemmove(SDValue Chain, DebugLoc dl, SDValue Dst,
3724                                 SDValue Src, SDValue Size,
3725                                 unsigned Align, bool isVol,
3726                                 MachinePointerInfo DstPtrInfo,
3727                                 MachinePointerInfo SrcPtrInfo) {
3728
3729  // Check to see if we should lower the memmove to loads and stores first.
3730  // For cases within the target-specified limits, this is the best choice.
3731  ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
3732  if (ConstantSize) {
3733    // Memmove with size zero? Just return the original chain.
3734    if (ConstantSize->isNullValue())
3735      return Chain;
3736
3737    SDValue Result =
3738      getMemmoveLoadsAndStores(*this, dl, Chain, Dst, Src,
3739                               ConstantSize->getZExtValue(), Align, isVol,
3740                               false, DstPtrInfo, SrcPtrInfo);
3741    if (Result.getNode())
3742      return Result;
3743  }
3744
3745  // Then check to see if we should lower the memmove with target-specific
3746  // code. If the target chooses to do this, this is the next best.
3747  SDValue Result =
3748    TSI.EmitTargetCodeForMemmove(*this, dl, Chain, Dst, Src, Size, Align, isVol,
3749                                 DstPtrInfo, SrcPtrInfo);
3750  if (Result.getNode())
3751    return Result;
3752
3753  // FIXME: If the memmove is volatile, lowering it to plain libc memmove may
3754  // not be safe.  See memcpy above for more details.
3755
3756  // Emit a library call.
3757  TargetLowering::ArgListTy Args;
3758  TargetLowering::ArgListEntry Entry;
3759  Entry.Ty = TLI.getTargetData()->getIntPtrType(*getContext());
3760  Entry.Node = Dst; Args.push_back(Entry);
3761  Entry.Node = Src; Args.push_back(Entry);
3762  Entry.Node = Size; Args.push_back(Entry);
3763  // FIXME:  pass in DebugLoc
3764  std::pair<SDValue,SDValue> CallResult =
3765    TLI.LowerCallTo(Chain, Type::getVoidTy(*getContext()),
3766                    false, false, false, false, 0,
3767                    TLI.getLibcallCallingConv(RTLIB::MEMMOVE),
3768                    /*isTailCall=*/false,
3769                    /*doesNotReturn=*/false, /*isReturnValueUsed=*/false,
3770                    getExternalSymbol(TLI.getLibcallName(RTLIB::MEMMOVE),
3771                                      TLI.getPointerTy()),
3772                    Args, *this, dl);
3773  return CallResult.second;
3774}
3775
3776SDValue SelectionDAG::getMemset(SDValue Chain, DebugLoc dl, SDValue Dst,
3777                                SDValue Src, SDValue Size,
3778                                unsigned Align, bool isVol,
3779                                MachinePointerInfo DstPtrInfo) {
3780
3781  // Check to see if we should lower the memset to stores first.
3782  // For cases within the target-specified limits, this is the best choice.
3783  ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
3784  if (ConstantSize) {
3785    // Memset with size zero? Just return the original chain.
3786    if (ConstantSize->isNullValue())
3787      return Chain;
3788
3789    SDValue Result =
3790      getMemsetStores(*this, dl, Chain, Dst, Src, ConstantSize->getZExtValue(),
3791                      Align, isVol, DstPtrInfo);
3792
3793    if (Result.getNode())
3794      return Result;
3795  }
3796
3797  // Then check to see if we should lower the memset with target-specific
3798  // code. If the target chooses to do this, this is the next best.
3799  SDValue Result =
3800    TSI.EmitTargetCodeForMemset(*this, dl, Chain, Dst, Src, Size, Align, isVol,
3801                                DstPtrInfo);
3802  if (Result.getNode())
3803    return Result;
3804
3805  // Emit a library call.
3806  Type *IntPtrTy = TLI.getTargetData()->getIntPtrType(*getContext());
3807  TargetLowering::ArgListTy Args;
3808  TargetLowering::ArgListEntry Entry;
3809  Entry.Node = Dst; Entry.Ty = IntPtrTy;
3810  Args.push_back(Entry);
3811  // Extend or truncate the argument to be an i32 value for the call.
3812  if (Src.getValueType().bitsGT(MVT::i32))
3813    Src = getNode(ISD::TRUNCATE, dl, MVT::i32, Src);
3814  else
3815    Src = getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Src);
3816  Entry.Node = Src;
3817  Entry.Ty = Type::getInt32Ty(*getContext());
3818  Entry.isSExt = true;
3819  Args.push_back(Entry);
3820  Entry.Node = Size;
3821  Entry.Ty = IntPtrTy;
3822  Entry.isSExt = false;
3823  Args.push_back(Entry);
3824  // FIXME: pass in DebugLoc
3825  std::pair<SDValue,SDValue> CallResult =
3826    TLI.LowerCallTo(Chain, Type::getVoidTy(*getContext()),
3827                    false, false, false, false, 0,
3828                    TLI.getLibcallCallingConv(RTLIB::MEMSET),
3829                    /*isTailCall=*/false,
3830                    /*doesNotReturn*/false, /*isReturnValueUsed=*/false,
3831                    getExternalSymbol(TLI.getLibcallName(RTLIB::MEMSET),
3832                                      TLI.getPointerTy()),
3833                    Args, *this, dl);
3834  return CallResult.second;
3835}
3836
3837SDValue SelectionDAG::getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT,
3838                                SDValue Chain, SDValue Ptr, SDValue Cmp,
3839                                SDValue Swp, MachinePointerInfo PtrInfo,
3840                                unsigned Alignment,
3841                                AtomicOrdering Ordering,
3842                                SynchronizationScope SynchScope) {
3843  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
3844    Alignment = getEVTAlignment(MemVT);
3845
3846  MachineFunction &MF = getMachineFunction();
3847  unsigned Flags = MachineMemOperand::MOLoad | MachineMemOperand::MOStore;
3848
3849  // For now, atomics are considered to be volatile always.
3850  // FIXME: Volatile isn't really correct; we should keep track of atomic
3851  // orderings in the memoperand.
3852  Flags |= MachineMemOperand::MOVolatile;
3853
3854  MachineMemOperand *MMO =
3855    MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment);
3856
3857  return getAtomic(Opcode, dl, MemVT, Chain, Ptr, Cmp, Swp, MMO,
3858                   Ordering, SynchScope);
3859}
3860
3861SDValue SelectionDAG::getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT,
3862                                SDValue Chain,
3863                                SDValue Ptr, SDValue Cmp,
3864                                SDValue Swp, MachineMemOperand *MMO,
3865                                AtomicOrdering Ordering,
3866                                SynchronizationScope SynchScope) {
3867  assert(Opcode == ISD::ATOMIC_CMP_SWAP && "Invalid Atomic Op");
3868  assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types");
3869
3870  EVT VT = Cmp.getValueType();
3871
3872  SDVTList VTs = getVTList(VT, MVT::Other);
3873  FoldingSetNodeID ID;
3874  ID.AddInteger(MemVT.getRawBits());
3875  SDValue Ops[] = {Chain, Ptr, Cmp, Swp};
3876  AddNodeIDNode(ID, Opcode, VTs, Ops, 4);
3877  void* IP = 0;
3878  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
3879    cast<AtomicSDNode>(E)->refineAlignment(MMO);
3880    return SDValue(E, 0);
3881  }
3882  SDNode *N = new (NodeAllocator) AtomicSDNode(Opcode, dl, VTs, MemVT, Chain,
3883                                               Ptr, Cmp, Swp, MMO, Ordering,
3884                                               SynchScope);
3885  CSEMap.InsertNode(N, IP);
3886  AllNodes.push_back(N);
3887  return SDValue(N, 0);
3888}
3889
3890SDValue SelectionDAG::getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT,
3891                                SDValue Chain,
3892                                SDValue Ptr, SDValue Val,
3893                                const Value* PtrVal,
3894                                unsigned Alignment,
3895                                AtomicOrdering Ordering,
3896                                SynchronizationScope SynchScope) {
3897  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
3898    Alignment = getEVTAlignment(MemVT);
3899
3900  MachineFunction &MF = getMachineFunction();
3901  // A monotonic store does not load; a release store "loads" in the sense
3902  // that other stores cannot be sunk past it.
3903  // (An atomicrmw obviously both loads and stores.)
3904  unsigned Flags = MachineMemOperand::MOStore;
3905  if (Opcode != ISD::ATOMIC_STORE || Ordering > Monotonic)
3906    Flags |= MachineMemOperand::MOLoad;
3907
3908  // For now, atomics are considered to be volatile always.
3909  // FIXME: Volatile isn't really correct; we should keep track of atomic
3910  // orderings in the memoperand.
3911  Flags |= MachineMemOperand::MOVolatile;
3912
3913  MachineMemOperand *MMO =
3914    MF.getMachineMemOperand(MachinePointerInfo(PtrVal), Flags,
3915                            MemVT.getStoreSize(), Alignment);
3916
3917  return getAtomic(Opcode, dl, MemVT, Chain, Ptr, Val, MMO,
3918                   Ordering, SynchScope);
3919}
3920
3921SDValue SelectionDAG::getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT,
3922                                SDValue Chain,
3923                                SDValue Ptr, SDValue Val,
3924                                MachineMemOperand *MMO,
3925                                AtomicOrdering Ordering,
3926                                SynchronizationScope SynchScope) {
3927  assert((Opcode == ISD::ATOMIC_LOAD_ADD ||
3928          Opcode == ISD::ATOMIC_LOAD_SUB ||
3929          Opcode == ISD::ATOMIC_LOAD_AND ||
3930          Opcode == ISD::ATOMIC_LOAD_OR ||
3931          Opcode == ISD::ATOMIC_LOAD_XOR ||
3932          Opcode == ISD::ATOMIC_LOAD_NAND ||
3933          Opcode == ISD::ATOMIC_LOAD_MIN ||
3934          Opcode == ISD::ATOMIC_LOAD_MAX ||
3935          Opcode == ISD::ATOMIC_LOAD_UMIN ||
3936          Opcode == ISD::ATOMIC_LOAD_UMAX ||
3937          Opcode == ISD::ATOMIC_SWAP ||
3938          Opcode == ISD::ATOMIC_STORE) &&
3939         "Invalid Atomic Op");
3940
3941  EVT VT = Val.getValueType();
3942
3943  SDVTList VTs = Opcode == ISD::ATOMIC_STORE ? getVTList(MVT::Other) :
3944                                               getVTList(VT, MVT::Other);
3945  FoldingSetNodeID ID;
3946  ID.AddInteger(MemVT.getRawBits());
3947  SDValue Ops[] = {Chain, Ptr, Val};
3948  AddNodeIDNode(ID, Opcode, VTs, Ops, 3);
3949  void* IP = 0;
3950  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
3951    cast<AtomicSDNode>(E)->refineAlignment(MMO);
3952    return SDValue(E, 0);
3953  }
3954  SDNode *N = new (NodeAllocator) AtomicSDNode(Opcode, dl, VTs, MemVT, Chain,
3955                                               Ptr, Val, MMO,
3956                                               Ordering, SynchScope);
3957  CSEMap.InsertNode(N, IP);
3958  AllNodes.push_back(N);
3959  return SDValue(N, 0);
3960}
3961
3962SDValue SelectionDAG::getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT,
3963                                EVT VT, SDValue Chain,
3964                                SDValue Ptr,
3965                                const Value* PtrVal,
3966                                unsigned Alignment,
3967                                AtomicOrdering Ordering,
3968                                SynchronizationScope SynchScope) {
3969  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
3970    Alignment = getEVTAlignment(MemVT);
3971
3972  MachineFunction &MF = getMachineFunction();
3973  // A monotonic load does not store; an acquire load "stores" in the sense
3974  // that other loads cannot be hoisted past it.
3975  unsigned Flags = MachineMemOperand::MOLoad;
3976  if (Ordering > Monotonic)
3977    Flags |= MachineMemOperand::MOStore;
3978
3979  // For now, atomics are considered to be volatile always.
3980  // FIXME: Volatile isn't really correct; we should keep track of atomic
3981  // orderings in the memoperand.
3982  Flags |= MachineMemOperand::MOVolatile;
3983
3984  MachineMemOperand *MMO =
3985    MF.getMachineMemOperand(MachinePointerInfo(PtrVal), Flags,
3986                            MemVT.getStoreSize(), Alignment);
3987
3988  return getAtomic(Opcode, dl, MemVT, VT, Chain, Ptr, MMO,
3989                   Ordering, SynchScope);
3990}
3991
3992SDValue SelectionDAG::getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT,
3993                                EVT VT, SDValue Chain,
3994                                SDValue Ptr,
3995                                MachineMemOperand *MMO,
3996                                AtomicOrdering Ordering,
3997                                SynchronizationScope SynchScope) {
3998  assert(Opcode == ISD::ATOMIC_LOAD && "Invalid Atomic Op");
3999
4000  SDVTList VTs = getVTList(VT, MVT::Other);
4001  FoldingSetNodeID ID;
4002  ID.AddInteger(MemVT.getRawBits());
4003  SDValue Ops[] = {Chain, Ptr};
4004  AddNodeIDNode(ID, Opcode, VTs, Ops, 2);
4005  void* IP = 0;
4006  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4007    cast<AtomicSDNode>(E)->refineAlignment(MMO);
4008    return SDValue(E, 0);
4009  }
4010  SDNode *N = new (NodeAllocator) AtomicSDNode(Opcode, dl, VTs, MemVT, Chain,
4011                                               Ptr, MMO, Ordering, SynchScope);
4012  CSEMap.InsertNode(N, IP);
4013  AllNodes.push_back(N);
4014  return SDValue(N, 0);
4015}
4016
4017/// getMergeValues - Create a MERGE_VALUES node from the given operands.
4018SDValue SelectionDAG::getMergeValues(const SDValue *Ops, unsigned NumOps,
4019                                     DebugLoc dl) {
4020  if (NumOps == 1)
4021    return Ops[0];
4022
4023  SmallVector<EVT, 4> VTs;
4024  VTs.reserve(NumOps);
4025  for (unsigned i = 0; i < NumOps; ++i)
4026    VTs.push_back(Ops[i].getValueType());
4027  return getNode(ISD::MERGE_VALUES, dl, getVTList(&VTs[0], NumOps),
4028                 Ops, NumOps);
4029}
4030
4031SDValue
4032SelectionDAG::getMemIntrinsicNode(unsigned Opcode, DebugLoc dl,
4033                                  const EVT *VTs, unsigned NumVTs,
4034                                  const SDValue *Ops, unsigned NumOps,
4035                                  EVT MemVT, MachinePointerInfo PtrInfo,
4036                                  unsigned Align, bool Vol,
4037                                  bool ReadMem, bool WriteMem) {
4038  return getMemIntrinsicNode(Opcode, dl, makeVTList(VTs, NumVTs), Ops, NumOps,
4039                             MemVT, PtrInfo, Align, Vol,
4040                             ReadMem, WriteMem);
4041}
4042
4043SDValue
4044SelectionDAG::getMemIntrinsicNode(unsigned Opcode, DebugLoc dl, SDVTList VTList,
4045                                  const SDValue *Ops, unsigned NumOps,
4046                                  EVT MemVT, MachinePointerInfo PtrInfo,
4047                                  unsigned Align, bool Vol,
4048                                  bool ReadMem, bool WriteMem) {
4049  if (Align == 0)  // Ensure that codegen never sees alignment 0
4050    Align = getEVTAlignment(MemVT);
4051
4052  MachineFunction &MF = getMachineFunction();
4053  unsigned Flags = 0;
4054  if (WriteMem)
4055    Flags |= MachineMemOperand::MOStore;
4056  if (ReadMem)
4057    Flags |= MachineMemOperand::MOLoad;
4058  if (Vol)
4059    Flags |= MachineMemOperand::MOVolatile;
4060  MachineMemOperand *MMO =
4061    MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Align);
4062
4063  return getMemIntrinsicNode(Opcode, dl, VTList, Ops, NumOps, MemVT, MMO);
4064}
4065
4066SDValue
4067SelectionDAG::getMemIntrinsicNode(unsigned Opcode, DebugLoc dl, SDVTList VTList,
4068                                  const SDValue *Ops, unsigned NumOps,
4069                                  EVT MemVT, MachineMemOperand *MMO) {
4070  assert((Opcode == ISD::INTRINSIC_VOID ||
4071          Opcode == ISD::INTRINSIC_W_CHAIN ||
4072          Opcode == ISD::PREFETCH ||
4073          (Opcode <= INT_MAX &&
4074           (int)Opcode >= ISD::FIRST_TARGET_MEMORY_OPCODE)) &&
4075         "Opcode is not a memory-accessing opcode!");
4076
4077  // Memoize the node unless it returns a flag.
4078  MemIntrinsicSDNode *N;
4079  if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) {
4080    FoldingSetNodeID ID;
4081    AddNodeIDNode(ID, Opcode, VTList, Ops, NumOps);
4082    void *IP = 0;
4083    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4084      cast<MemIntrinsicSDNode>(E)->refineAlignment(MMO);
4085      return SDValue(E, 0);
4086    }
4087
4088    N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl, VTList, Ops, NumOps,
4089                                               MemVT, MMO);
4090    CSEMap.InsertNode(N, IP);
4091  } else {
4092    N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl, VTList, Ops, NumOps,
4093                                               MemVT, MMO);
4094  }
4095  AllNodes.push_back(N);
4096  return SDValue(N, 0);
4097}
4098
4099/// InferPointerInfo - If the specified ptr/offset is a frame index, infer a
4100/// MachinePointerInfo record from it.  This is particularly useful because the
4101/// code generator has many cases where it doesn't bother passing in a
4102/// MachinePointerInfo to getLoad or getStore when it has "FI+Cst".
4103static MachinePointerInfo InferPointerInfo(SDValue Ptr, int64_t Offset = 0) {
4104  // If this is FI+Offset, we can model it.
4105  if (const FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr))
4106    return MachinePointerInfo::getFixedStack(FI->getIndex(), Offset);
4107
4108  // If this is (FI+Offset1)+Offset2, we can model it.
4109  if (Ptr.getOpcode() != ISD::ADD ||
4110      !isa<ConstantSDNode>(Ptr.getOperand(1)) ||
4111      !isa<FrameIndexSDNode>(Ptr.getOperand(0)))
4112    return MachinePointerInfo();
4113
4114  int FI = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex();
4115  return MachinePointerInfo::getFixedStack(FI, Offset+
4116                       cast<ConstantSDNode>(Ptr.getOperand(1))->getSExtValue());
4117}
4118
4119/// InferPointerInfo - If the specified ptr/offset is a frame index, infer a
4120/// MachinePointerInfo record from it.  This is particularly useful because the
4121/// code generator has many cases where it doesn't bother passing in a
4122/// MachinePointerInfo to getLoad or getStore when it has "FI+Cst".
4123static MachinePointerInfo InferPointerInfo(SDValue Ptr, SDValue OffsetOp) {
4124  // If the 'Offset' value isn't a constant, we can't handle this.
4125  if (ConstantSDNode *OffsetNode = dyn_cast<ConstantSDNode>(OffsetOp))
4126    return InferPointerInfo(Ptr, OffsetNode->getSExtValue());
4127  if (OffsetOp.getOpcode() == ISD::UNDEF)
4128    return InferPointerInfo(Ptr);
4129  return MachinePointerInfo();
4130}
4131
4132
4133SDValue
4134SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
4135                      EVT VT, DebugLoc dl, SDValue Chain,
4136                      SDValue Ptr, SDValue Offset,
4137                      MachinePointerInfo PtrInfo, EVT MemVT,
4138                      bool isVolatile, bool isNonTemporal, bool isInvariant,
4139                      unsigned Alignment, const MDNode *TBAAInfo,
4140                      const MDNode *Ranges) {
4141  assert(Chain.getValueType() == MVT::Other &&
4142        "Invalid chain type");
4143  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
4144    Alignment = getEVTAlignment(VT);
4145
4146  unsigned Flags = MachineMemOperand::MOLoad;
4147  if (isVolatile)
4148    Flags |= MachineMemOperand::MOVolatile;
4149  if (isNonTemporal)
4150    Flags |= MachineMemOperand::MONonTemporal;
4151  if (isInvariant)
4152    Flags |= MachineMemOperand::MOInvariant;
4153
4154  // If we don't have a PtrInfo, infer the trivial frame index case to simplify
4155  // clients.
4156  if (PtrInfo.V == 0)
4157    PtrInfo = InferPointerInfo(Ptr, Offset);
4158
4159  MachineFunction &MF = getMachineFunction();
4160  MachineMemOperand *MMO =
4161    MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment,
4162                            TBAAInfo, Ranges);
4163  return getLoad(AM, ExtType, VT, dl, Chain, Ptr, Offset, MemVT, MMO);
4164}
4165
4166SDValue
4167SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
4168                      EVT VT, DebugLoc dl, SDValue Chain,
4169                      SDValue Ptr, SDValue Offset, EVT MemVT,
4170                      MachineMemOperand *MMO) {
4171  if (VT == MemVT) {
4172    ExtType = ISD::NON_EXTLOAD;
4173  } else if (ExtType == ISD::NON_EXTLOAD) {
4174    assert(VT == MemVT && "Non-extending load from different memory type!");
4175  } else {
4176    // Extending load.
4177    assert(MemVT.getScalarType().bitsLT(VT.getScalarType()) &&
4178           "Should only be an extending load, not truncating!");
4179    assert(VT.isInteger() == MemVT.isInteger() &&
4180           "Cannot convert from FP to Int or Int -> FP!");
4181    assert(VT.isVector() == MemVT.isVector() &&
4182           "Cannot use trunc store to convert to or from a vector!");
4183    assert((!VT.isVector() ||
4184            VT.getVectorNumElements() == MemVT.getVectorNumElements()) &&
4185           "Cannot use trunc store to change the number of vector elements!");
4186  }
4187
4188  bool Indexed = AM != ISD::UNINDEXED;
4189  assert((Indexed || Offset.getOpcode() == ISD::UNDEF) &&
4190         "Unindexed load with an offset!");
4191
4192  SDVTList VTs = Indexed ?
4193    getVTList(VT, Ptr.getValueType(), MVT::Other) : getVTList(VT, MVT::Other);
4194  SDValue Ops[] = { Chain, Ptr, Offset };
4195  FoldingSetNodeID ID;
4196  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
4197  ID.AddInteger(MemVT.getRawBits());
4198  ID.AddInteger(encodeMemSDNodeFlags(ExtType, AM, MMO->isVolatile(),
4199                                     MMO->isNonTemporal(),
4200                                     MMO->isInvariant()));
4201  void *IP = 0;
4202  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4203    cast<LoadSDNode>(E)->refineAlignment(MMO);
4204    return SDValue(E, 0);
4205  }
4206  SDNode *N = new (NodeAllocator) LoadSDNode(Ops, dl, VTs, AM, ExtType,
4207                                             MemVT, MMO);
4208  CSEMap.InsertNode(N, IP);
4209  AllNodes.push_back(N);
4210  return SDValue(N, 0);
4211}
4212
4213SDValue SelectionDAG::getLoad(EVT VT, DebugLoc dl,
4214                              SDValue Chain, SDValue Ptr,
4215                              MachinePointerInfo PtrInfo,
4216                              bool isVolatile, bool isNonTemporal,
4217                              bool isInvariant, unsigned Alignment,
4218                              const MDNode *TBAAInfo,
4219                              const MDNode *Ranges) {
4220  SDValue Undef = getUNDEF(Ptr.getValueType());
4221  return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef,
4222                 PtrInfo, VT, isVolatile, isNonTemporal, isInvariant, Alignment,
4223                 TBAAInfo, Ranges);
4224}
4225
4226SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, DebugLoc dl, EVT VT,
4227                                 SDValue Chain, SDValue Ptr,
4228                                 MachinePointerInfo PtrInfo, EVT MemVT,
4229                                 bool isVolatile, bool isNonTemporal,
4230                                 unsigned Alignment, const MDNode *TBAAInfo) {
4231  SDValue Undef = getUNDEF(Ptr.getValueType());
4232  return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef,
4233                 PtrInfo, MemVT, isVolatile, isNonTemporal, false, Alignment,
4234                 TBAAInfo);
4235}
4236
4237
4238SDValue
4239SelectionDAG::getIndexedLoad(SDValue OrigLoad, DebugLoc dl, SDValue Base,
4240                             SDValue Offset, ISD::MemIndexedMode AM) {
4241  LoadSDNode *LD = cast<LoadSDNode>(OrigLoad);
4242  assert(LD->getOffset().getOpcode() == ISD::UNDEF &&
4243         "Load is already a indexed load!");
4244  return getLoad(AM, LD->getExtensionType(), OrigLoad.getValueType(), dl,
4245                 LD->getChain(), Base, Offset, LD->getPointerInfo(),
4246                 LD->getMemoryVT(), LD->isVolatile(), LD->isNonTemporal(),
4247                 false, LD->getAlignment());
4248}
4249
4250SDValue SelectionDAG::getStore(SDValue Chain, DebugLoc dl, SDValue Val,
4251                               SDValue Ptr, MachinePointerInfo PtrInfo,
4252                               bool isVolatile, bool isNonTemporal,
4253                               unsigned Alignment, const MDNode *TBAAInfo) {
4254  assert(Chain.getValueType() == MVT::Other &&
4255        "Invalid chain type");
4256  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
4257    Alignment = getEVTAlignment(Val.getValueType());
4258
4259  unsigned Flags = MachineMemOperand::MOStore;
4260  if (isVolatile)
4261    Flags |= MachineMemOperand::MOVolatile;
4262  if (isNonTemporal)
4263    Flags |= MachineMemOperand::MONonTemporal;
4264
4265  if (PtrInfo.V == 0)
4266    PtrInfo = InferPointerInfo(Ptr);
4267
4268  MachineFunction &MF = getMachineFunction();
4269  MachineMemOperand *MMO =
4270    MF.getMachineMemOperand(PtrInfo, Flags,
4271                            Val.getValueType().getStoreSize(), Alignment,
4272                            TBAAInfo);
4273
4274  return getStore(Chain, dl, Val, Ptr, MMO);
4275}
4276
4277SDValue SelectionDAG::getStore(SDValue Chain, DebugLoc dl, SDValue Val,
4278                               SDValue Ptr, MachineMemOperand *MMO) {
4279  assert(Chain.getValueType() == MVT::Other &&
4280        "Invalid chain type");
4281  EVT VT = Val.getValueType();
4282  SDVTList VTs = getVTList(MVT::Other);
4283  SDValue Undef = getUNDEF(Ptr.getValueType());
4284  SDValue Ops[] = { Chain, Val, Ptr, Undef };
4285  FoldingSetNodeID ID;
4286  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
4287  ID.AddInteger(VT.getRawBits());
4288  ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(),
4289                                     MMO->isNonTemporal(), MMO->isInvariant()));
4290  void *IP = 0;
4291  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4292    cast<StoreSDNode>(E)->refineAlignment(MMO);
4293    return SDValue(E, 0);
4294  }
4295  SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl, VTs, ISD::UNINDEXED,
4296                                              false, VT, MMO);
4297  CSEMap.InsertNode(N, IP);
4298  AllNodes.push_back(N);
4299  return SDValue(N, 0);
4300}
4301
4302SDValue SelectionDAG::getTruncStore(SDValue Chain, DebugLoc dl, SDValue Val,
4303                                    SDValue Ptr, MachinePointerInfo PtrInfo,
4304                                    EVT SVT,bool isVolatile, bool isNonTemporal,
4305                                    unsigned Alignment,
4306                                    const MDNode *TBAAInfo) {
4307  assert(Chain.getValueType() == MVT::Other &&
4308        "Invalid chain type");
4309  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
4310    Alignment = getEVTAlignment(SVT);
4311
4312  unsigned Flags = MachineMemOperand::MOStore;
4313  if (isVolatile)
4314    Flags |= MachineMemOperand::MOVolatile;
4315  if (isNonTemporal)
4316    Flags |= MachineMemOperand::MONonTemporal;
4317
4318  if (PtrInfo.V == 0)
4319    PtrInfo = InferPointerInfo(Ptr);
4320
4321  MachineFunction &MF = getMachineFunction();
4322  MachineMemOperand *MMO =
4323    MF.getMachineMemOperand(PtrInfo, Flags, SVT.getStoreSize(), Alignment,
4324                            TBAAInfo);
4325
4326  return getTruncStore(Chain, dl, Val, Ptr, SVT, MMO);
4327}
4328
4329SDValue SelectionDAG::getTruncStore(SDValue Chain, DebugLoc dl, SDValue Val,
4330                                    SDValue Ptr, EVT SVT,
4331                                    MachineMemOperand *MMO) {
4332  EVT VT = Val.getValueType();
4333
4334  assert(Chain.getValueType() == MVT::Other &&
4335        "Invalid chain type");
4336  if (VT == SVT)
4337    return getStore(Chain, dl, Val, Ptr, MMO);
4338
4339  assert(SVT.getScalarType().bitsLT(VT.getScalarType()) &&
4340         "Should only be a truncating store, not extending!");
4341  assert(VT.isInteger() == SVT.isInteger() &&
4342         "Can't do FP-INT conversion!");
4343  assert(VT.isVector() == SVT.isVector() &&
4344         "Cannot use trunc store to convert to or from a vector!");
4345  assert((!VT.isVector() ||
4346          VT.getVectorNumElements() == SVT.getVectorNumElements()) &&
4347         "Cannot use trunc store to change the number of vector elements!");
4348
4349  SDVTList VTs = getVTList(MVT::Other);
4350  SDValue Undef = getUNDEF(Ptr.getValueType());
4351  SDValue Ops[] = { Chain, Val, Ptr, Undef };
4352  FoldingSetNodeID ID;
4353  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
4354  ID.AddInteger(SVT.getRawBits());
4355  ID.AddInteger(encodeMemSDNodeFlags(true, ISD::UNINDEXED, MMO->isVolatile(),
4356                                     MMO->isNonTemporal(), MMO->isInvariant()));
4357  void *IP = 0;
4358  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4359    cast<StoreSDNode>(E)->refineAlignment(MMO);
4360    return SDValue(E, 0);
4361  }
4362  SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl, VTs, ISD::UNINDEXED,
4363                                              true, SVT, MMO);
4364  CSEMap.InsertNode(N, IP);
4365  AllNodes.push_back(N);
4366  return SDValue(N, 0);
4367}
4368
4369SDValue
4370SelectionDAG::getIndexedStore(SDValue OrigStore, DebugLoc dl, SDValue Base,
4371                              SDValue Offset, ISD::MemIndexedMode AM) {
4372  StoreSDNode *ST = cast<StoreSDNode>(OrigStore);
4373  assert(ST->getOffset().getOpcode() == ISD::UNDEF &&
4374         "Store is already a indexed store!");
4375  SDVTList VTs = getVTList(Base.getValueType(), MVT::Other);
4376  SDValue Ops[] = { ST->getChain(), ST->getValue(), Base, Offset };
4377  FoldingSetNodeID ID;
4378  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
4379  ID.AddInteger(ST->getMemoryVT().getRawBits());
4380  ID.AddInteger(ST->getRawSubclassData());
4381  void *IP = 0;
4382  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
4383    return SDValue(E, 0);
4384
4385  SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl, VTs, AM,
4386                                              ST->isTruncatingStore(),
4387                                              ST->getMemoryVT(),
4388                                              ST->getMemOperand());
4389  CSEMap.InsertNode(N, IP);
4390  AllNodes.push_back(N);
4391  return SDValue(N, 0);
4392}
4393
4394SDValue SelectionDAG::getVAArg(EVT VT, DebugLoc dl,
4395                               SDValue Chain, SDValue Ptr,
4396                               SDValue SV,
4397                               unsigned Align) {
4398  SDValue Ops[] = { Chain, Ptr, SV, getTargetConstant(Align, MVT::i32) };
4399  return getNode(ISD::VAARG, dl, getVTList(VT, MVT::Other), Ops, 4);
4400}
4401
4402SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT,
4403                              const SDUse *Ops, unsigned NumOps) {
4404  switch (NumOps) {
4405  case 0: return getNode(Opcode, DL, VT);
4406  case 1: return getNode(Opcode, DL, VT, Ops[0]);
4407  case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]);
4408  case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]);
4409  default: break;
4410  }
4411
4412  // Copy from an SDUse array into an SDValue array for use with
4413  // the regular getNode logic.
4414  SmallVector<SDValue, 8> NewOps(Ops, Ops + NumOps);
4415  return getNode(Opcode, DL, VT, &NewOps[0], NumOps);
4416}
4417
4418SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT,
4419                              const SDValue *Ops, unsigned NumOps) {
4420  switch (NumOps) {
4421  case 0: return getNode(Opcode, DL, VT);
4422  case 1: return getNode(Opcode, DL, VT, Ops[0]);
4423  case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]);
4424  case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]);
4425  default: break;
4426  }
4427
4428  switch (Opcode) {
4429  default: break;
4430  case ISD::SELECT_CC: {
4431    assert(NumOps == 5 && "SELECT_CC takes 5 operands!");
4432    assert(Ops[0].getValueType() == Ops[1].getValueType() &&
4433           "LHS and RHS of condition must have same type!");
4434    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
4435           "True and False arms of SelectCC must have same type!");
4436    assert(Ops[2].getValueType() == VT &&
4437           "select_cc node must be of same type as true and false value!");
4438    break;
4439  }
4440  case ISD::BR_CC: {
4441    assert(NumOps == 5 && "BR_CC takes 5 operands!");
4442    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
4443           "LHS/RHS of comparison should match types!");
4444    break;
4445  }
4446  }
4447
4448  // Memoize nodes.
4449  SDNode *N;
4450  SDVTList VTs = getVTList(VT);
4451
4452  if (VT != MVT::Glue) {
4453    FoldingSetNodeID ID;
4454    AddNodeIDNode(ID, Opcode, VTs, Ops, NumOps);
4455    void *IP = 0;
4456
4457    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
4458      return SDValue(E, 0);
4459
4460    N = new (NodeAllocator) SDNode(Opcode, DL, VTs, Ops, NumOps);
4461    CSEMap.InsertNode(N, IP);
4462  } else {
4463    N = new (NodeAllocator) SDNode(Opcode, DL, VTs, Ops, NumOps);
4464  }
4465
4466  AllNodes.push_back(N);
4467#ifndef NDEBUG
4468  VerifySDNode(N);
4469#endif
4470  return SDValue(N, 0);
4471}
4472
4473SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL,
4474                              const std::vector<EVT> &ResultTys,
4475                              const SDValue *Ops, unsigned NumOps) {
4476  return getNode(Opcode, DL, getVTList(&ResultTys[0], ResultTys.size()),
4477                 Ops, NumOps);
4478}
4479
4480SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL,
4481                              const EVT *VTs, unsigned NumVTs,
4482                              const SDValue *Ops, unsigned NumOps) {
4483  if (NumVTs == 1)
4484    return getNode(Opcode, DL, VTs[0], Ops, NumOps);
4485  return getNode(Opcode, DL, makeVTList(VTs, NumVTs), Ops, NumOps);
4486}
4487
4488SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, SDVTList VTList,
4489                              const SDValue *Ops, unsigned NumOps) {
4490  if (VTList.NumVTs == 1)
4491    return getNode(Opcode, DL, VTList.VTs[0], Ops, NumOps);
4492
4493#if 0
4494  switch (Opcode) {
4495  // FIXME: figure out how to safely handle things like
4496  // int foo(int x) { return 1 << (x & 255); }
4497  // int bar() { return foo(256); }
4498  case ISD::SRA_PARTS:
4499  case ISD::SRL_PARTS:
4500  case ISD::SHL_PARTS:
4501    if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG &&
4502        cast<VTSDNode>(N3.getOperand(1))->getVT() != MVT::i1)
4503      return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0));
4504    else if (N3.getOpcode() == ISD::AND)
4505      if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N3.getOperand(1))) {
4506        // If the and is only masking out bits that cannot effect the shift,
4507        // eliminate the and.
4508        unsigned NumBits = VT.getScalarType().getSizeInBits()*2;
4509        if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1)
4510          return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0));
4511      }
4512    break;
4513  }
4514#endif
4515
4516  // Memoize the node unless it returns a flag.
4517  SDNode *N;
4518  if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) {
4519    FoldingSetNodeID ID;
4520    AddNodeIDNode(ID, Opcode, VTList, Ops, NumOps);
4521    void *IP = 0;
4522    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
4523      return SDValue(E, 0);
4524
4525    if (NumOps == 1) {
4526      N = new (NodeAllocator) UnarySDNode(Opcode, DL, VTList, Ops[0]);
4527    } else if (NumOps == 2) {
4528      N = new (NodeAllocator) BinarySDNode(Opcode, DL, VTList, Ops[0], Ops[1]);
4529    } else if (NumOps == 3) {
4530      N = new (NodeAllocator) TernarySDNode(Opcode, DL, VTList, Ops[0], Ops[1],
4531                                            Ops[2]);
4532    } else {
4533      N = new (NodeAllocator) SDNode(Opcode, DL, VTList, Ops, NumOps);
4534    }
4535    CSEMap.InsertNode(N, IP);
4536  } else {
4537    if (NumOps == 1) {
4538      N = new (NodeAllocator) UnarySDNode(Opcode, DL, VTList, Ops[0]);
4539    } else if (NumOps == 2) {
4540      N = new (NodeAllocator) BinarySDNode(Opcode, DL, VTList, Ops[0], Ops[1]);
4541    } else if (NumOps == 3) {
4542      N = new (NodeAllocator) TernarySDNode(Opcode, DL, VTList, Ops[0], Ops[1],
4543                                            Ops[2]);
4544    } else {
4545      N = new (NodeAllocator) SDNode(Opcode, DL, VTList, Ops, NumOps);
4546    }
4547  }
4548  AllNodes.push_back(N);
4549#ifndef NDEBUG
4550  VerifySDNode(N);
4551#endif
4552  return SDValue(N, 0);
4553}
4554
4555SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, SDVTList VTList) {
4556  return getNode(Opcode, DL, VTList, 0, 0);
4557}
4558
4559SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, SDVTList VTList,
4560                              SDValue N1) {
4561  SDValue Ops[] = { N1 };
4562  return getNode(Opcode, DL, VTList, Ops, 1);
4563}
4564
4565SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, SDVTList VTList,
4566                              SDValue N1, SDValue N2) {
4567  SDValue Ops[] = { N1, N2 };
4568  return getNode(Opcode, DL, VTList, Ops, 2);
4569}
4570
4571SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, SDVTList VTList,
4572                              SDValue N1, SDValue N2, SDValue N3) {
4573  SDValue Ops[] = { N1, N2, N3 };
4574  return getNode(Opcode, DL, VTList, Ops, 3);
4575}
4576
4577SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, SDVTList VTList,
4578                              SDValue N1, SDValue N2, SDValue N3,
4579                              SDValue N4) {
4580  SDValue Ops[] = { N1, N2, N3, N4 };
4581  return getNode(Opcode, DL, VTList, Ops, 4);
4582}
4583
4584SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, SDVTList VTList,
4585                              SDValue N1, SDValue N2, SDValue N3,
4586                              SDValue N4, SDValue N5) {
4587  SDValue Ops[] = { N1, N2, N3, N4, N5 };
4588  return getNode(Opcode, DL, VTList, Ops, 5);
4589}
4590
4591SDVTList SelectionDAG::getVTList(EVT VT) {
4592  return makeVTList(SDNode::getValueTypeList(VT), 1);
4593}
4594
4595SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2) {
4596  for (std::vector<SDVTList>::reverse_iterator I = VTList.rbegin(),
4597       E = VTList.rend(); I != E; ++I)
4598    if (I->NumVTs == 2 && I->VTs[0] == VT1 && I->VTs[1] == VT2)
4599      return *I;
4600
4601  EVT *Array = Allocator.Allocate<EVT>(2);
4602  Array[0] = VT1;
4603  Array[1] = VT2;
4604  SDVTList Result = makeVTList(Array, 2);
4605  VTList.push_back(Result);
4606  return Result;
4607}
4608
4609SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3) {
4610  for (std::vector<SDVTList>::reverse_iterator I = VTList.rbegin(),
4611       E = VTList.rend(); I != E; ++I)
4612    if (I->NumVTs == 3 && I->VTs[0] == VT1 && I->VTs[1] == VT2 &&
4613                          I->VTs[2] == VT3)
4614      return *I;
4615
4616  EVT *Array = Allocator.Allocate<EVT>(3);
4617  Array[0] = VT1;
4618  Array[1] = VT2;
4619  Array[2] = VT3;
4620  SDVTList Result = makeVTList(Array, 3);
4621  VTList.push_back(Result);
4622  return Result;
4623}
4624
4625SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3, EVT VT4) {
4626  for (std::vector<SDVTList>::reverse_iterator I = VTList.rbegin(),
4627       E = VTList.rend(); I != E; ++I)
4628    if (I->NumVTs == 4 && I->VTs[0] == VT1 && I->VTs[1] == VT2 &&
4629                          I->VTs[2] == VT3 && I->VTs[3] == VT4)
4630      return *I;
4631
4632  EVT *Array = Allocator.Allocate<EVT>(4);
4633  Array[0] = VT1;
4634  Array[1] = VT2;
4635  Array[2] = VT3;
4636  Array[3] = VT4;
4637  SDVTList Result = makeVTList(Array, 4);
4638  VTList.push_back(Result);
4639  return Result;
4640}
4641
4642SDVTList SelectionDAG::getVTList(const EVT *VTs, unsigned NumVTs) {
4643  switch (NumVTs) {
4644    case 0: llvm_unreachable("Cannot have nodes without results!");
4645    case 1: return getVTList(VTs[0]);
4646    case 2: return getVTList(VTs[0], VTs[1]);
4647    case 3: return getVTList(VTs[0], VTs[1], VTs[2]);
4648    case 4: return getVTList(VTs[0], VTs[1], VTs[2], VTs[3]);
4649    default: break;
4650  }
4651
4652  for (std::vector<SDVTList>::reverse_iterator I = VTList.rbegin(),
4653       E = VTList.rend(); I != E; ++I) {
4654    if (I->NumVTs != NumVTs || VTs[0] != I->VTs[0] || VTs[1] != I->VTs[1])
4655      continue;
4656
4657    bool NoMatch = false;
4658    for (unsigned i = 2; i != NumVTs; ++i)
4659      if (VTs[i] != I->VTs[i]) {
4660        NoMatch = true;
4661        break;
4662      }
4663    if (!NoMatch)
4664      return *I;
4665  }
4666
4667  EVT *Array = Allocator.Allocate<EVT>(NumVTs);
4668  std::copy(VTs, VTs+NumVTs, Array);
4669  SDVTList Result = makeVTList(Array, NumVTs);
4670  VTList.push_back(Result);
4671  return Result;
4672}
4673
4674
4675/// UpdateNodeOperands - *Mutate* the specified node in-place to have the
4676/// specified operands.  If the resultant node already exists in the DAG,
4677/// this does not modify the specified node, instead it returns the node that
4678/// already exists.  If the resultant node does not exist in the DAG, the
4679/// input node is returned.  As a degenerate case, if you specify the same
4680/// input operands as the node already has, the input node is returned.
4681SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op) {
4682  assert(N->getNumOperands() == 1 && "Update with wrong number of operands");
4683
4684  // Check to see if there is no change.
4685  if (Op == N->getOperand(0)) return N;
4686
4687  // See if the modified node already exists.
4688  void *InsertPos = 0;
4689  if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos))
4690    return Existing;
4691
4692  // Nope it doesn't.  Remove the node from its current place in the maps.
4693  if (InsertPos)
4694    if (!RemoveNodeFromCSEMaps(N))
4695      InsertPos = 0;
4696
4697  // Now we update the operands.
4698  N->OperandList[0].set(Op);
4699
4700  // If this gets put into a CSE map, add it.
4701  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
4702  return N;
4703}
4704
4705SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2) {
4706  assert(N->getNumOperands() == 2 && "Update with wrong number of operands");
4707
4708  // Check to see if there is no change.
4709  if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1))
4710    return N;   // No operands changed, just return the input node.
4711
4712  // See if the modified node already exists.
4713  void *InsertPos = 0;
4714  if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos))
4715    return Existing;
4716
4717  // Nope it doesn't.  Remove the node from its current place in the maps.
4718  if (InsertPos)
4719    if (!RemoveNodeFromCSEMaps(N))
4720      InsertPos = 0;
4721
4722  // Now we update the operands.
4723  if (N->OperandList[0] != Op1)
4724    N->OperandList[0].set(Op1);
4725  if (N->OperandList[1] != Op2)
4726    N->OperandList[1].set(Op2);
4727
4728  // If this gets put into a CSE map, add it.
4729  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
4730  return N;
4731}
4732
4733SDNode *SelectionDAG::
4734UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, SDValue Op3) {
4735  SDValue Ops[] = { Op1, Op2, Op3 };
4736  return UpdateNodeOperands(N, Ops, 3);
4737}
4738
4739SDNode *SelectionDAG::
4740UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
4741                   SDValue Op3, SDValue Op4) {
4742  SDValue Ops[] = { Op1, Op2, Op3, Op4 };
4743  return UpdateNodeOperands(N, Ops, 4);
4744}
4745
4746SDNode *SelectionDAG::
4747UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
4748                   SDValue Op3, SDValue Op4, SDValue Op5) {
4749  SDValue Ops[] = { Op1, Op2, Op3, Op4, Op5 };
4750  return UpdateNodeOperands(N, Ops, 5);
4751}
4752
4753SDNode *SelectionDAG::
4754UpdateNodeOperands(SDNode *N, const SDValue *Ops, unsigned NumOps) {
4755  assert(N->getNumOperands() == NumOps &&
4756         "Update with wrong number of operands");
4757
4758  // Check to see if there is no change.
4759  bool AnyChange = false;
4760  for (unsigned i = 0; i != NumOps; ++i) {
4761    if (Ops[i] != N->getOperand(i)) {
4762      AnyChange = true;
4763      break;
4764    }
4765  }
4766
4767  // No operands changed, just return the input node.
4768  if (!AnyChange) return N;
4769
4770  // See if the modified node already exists.
4771  void *InsertPos = 0;
4772  if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, NumOps, InsertPos))
4773    return Existing;
4774
4775  // Nope it doesn't.  Remove the node from its current place in the maps.
4776  if (InsertPos)
4777    if (!RemoveNodeFromCSEMaps(N))
4778      InsertPos = 0;
4779
4780  // Now we update the operands.
4781  for (unsigned i = 0; i != NumOps; ++i)
4782    if (N->OperandList[i] != Ops[i])
4783      N->OperandList[i].set(Ops[i]);
4784
4785  // If this gets put into a CSE map, add it.
4786  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
4787  return N;
4788}
4789
4790/// DropOperands - Release the operands and set this node to have
4791/// zero operands.
4792void SDNode::DropOperands() {
4793  // Unlike the code in MorphNodeTo that does this, we don't need to
4794  // watch for dead nodes here.
4795  for (op_iterator I = op_begin(), E = op_end(); I != E; ) {
4796    SDUse &Use = *I++;
4797    Use.set(SDValue());
4798  }
4799}
4800
4801/// SelectNodeTo - These are wrappers around MorphNodeTo that accept a
4802/// machine opcode.
4803///
4804SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4805                                   EVT VT) {
4806  SDVTList VTs = getVTList(VT);
4807  return SelectNodeTo(N, MachineOpc, VTs, 0, 0);
4808}
4809
4810SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4811                                   EVT VT, SDValue Op1) {
4812  SDVTList VTs = getVTList(VT);
4813  SDValue Ops[] = { Op1 };
4814  return SelectNodeTo(N, MachineOpc, VTs, Ops, 1);
4815}
4816
4817SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4818                                   EVT VT, SDValue Op1,
4819                                   SDValue Op2) {
4820  SDVTList VTs = getVTList(VT);
4821  SDValue Ops[] = { Op1, Op2 };
4822  return SelectNodeTo(N, MachineOpc, VTs, Ops, 2);
4823}
4824
4825SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4826                                   EVT VT, SDValue Op1,
4827                                   SDValue Op2, SDValue Op3) {
4828  SDVTList VTs = getVTList(VT);
4829  SDValue Ops[] = { Op1, Op2, Op3 };
4830  return SelectNodeTo(N, MachineOpc, VTs, Ops, 3);
4831}
4832
4833SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4834                                   EVT VT, const SDValue *Ops,
4835                                   unsigned NumOps) {
4836  SDVTList VTs = getVTList(VT);
4837  return SelectNodeTo(N, MachineOpc, VTs, Ops, NumOps);
4838}
4839
4840SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4841                                   EVT VT1, EVT VT2, const SDValue *Ops,
4842                                   unsigned NumOps) {
4843  SDVTList VTs = getVTList(VT1, VT2);
4844  return SelectNodeTo(N, MachineOpc, VTs, Ops, NumOps);
4845}
4846
4847SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4848                                   EVT VT1, EVT VT2) {
4849  SDVTList VTs = getVTList(VT1, VT2);
4850  return SelectNodeTo(N, MachineOpc, VTs, (SDValue *)0, 0);
4851}
4852
4853SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4854                                   EVT VT1, EVT VT2, EVT VT3,
4855                                   const SDValue *Ops, unsigned NumOps) {
4856  SDVTList VTs = getVTList(VT1, VT2, VT3);
4857  return SelectNodeTo(N, MachineOpc, VTs, Ops, NumOps);
4858}
4859
4860SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4861                                   EVT VT1, EVT VT2, EVT VT3, EVT VT4,
4862                                   const SDValue *Ops, unsigned NumOps) {
4863  SDVTList VTs = getVTList(VT1, VT2, VT3, VT4);
4864  return SelectNodeTo(N, MachineOpc, VTs, Ops, NumOps);
4865}
4866
4867SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4868                                   EVT VT1, EVT VT2,
4869                                   SDValue Op1) {
4870  SDVTList VTs = getVTList(VT1, VT2);
4871  SDValue Ops[] = { Op1 };
4872  return SelectNodeTo(N, MachineOpc, VTs, Ops, 1);
4873}
4874
4875SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4876                                   EVT VT1, EVT VT2,
4877                                   SDValue Op1, SDValue Op2) {
4878  SDVTList VTs = getVTList(VT1, VT2);
4879  SDValue Ops[] = { Op1, Op2 };
4880  return SelectNodeTo(N, MachineOpc, VTs, Ops, 2);
4881}
4882
4883SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4884                                   EVT VT1, EVT VT2,
4885                                   SDValue Op1, SDValue Op2,
4886                                   SDValue Op3) {
4887  SDVTList VTs = getVTList(VT1, VT2);
4888  SDValue Ops[] = { Op1, Op2, Op3 };
4889  return SelectNodeTo(N, MachineOpc, VTs, Ops, 3);
4890}
4891
4892SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4893                                   EVT VT1, EVT VT2, EVT VT3,
4894                                   SDValue Op1, SDValue Op2,
4895                                   SDValue Op3) {
4896  SDVTList VTs = getVTList(VT1, VT2, VT3);
4897  SDValue Ops[] = { Op1, Op2, Op3 };
4898  return SelectNodeTo(N, MachineOpc, VTs, Ops, 3);
4899}
4900
4901SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
4902                                   SDVTList VTs, const SDValue *Ops,
4903                                   unsigned NumOps) {
4904  N = MorphNodeTo(N, ~MachineOpc, VTs, Ops, NumOps);
4905  // Reset the NodeID to -1.
4906  N->setNodeId(-1);
4907  return N;
4908}
4909
4910/// UpdadeDebugLocOnMergedSDNode - If the opt level is -O0 then it throws away
4911/// the line number information on the merged node since it is not possible to
4912/// preserve the information that operation is associated with multiple lines.
4913/// This will make the debugger working better at -O0, were there is a higher
4914/// probability having other instructions associated with that line.
4915///
4916SDNode *SelectionDAG::UpdadeDebugLocOnMergedSDNode(SDNode *N, DebugLoc OLoc) {
4917  DebugLoc NLoc = N->getDebugLoc();
4918  if (!(NLoc.isUnknown()) && (OptLevel == CodeGenOpt::None) && (OLoc != NLoc)) {
4919    N->setDebugLoc(DebugLoc());
4920  }
4921  return N;
4922}
4923
4924/// MorphNodeTo - This *mutates* the specified node to have the specified
4925/// return type, opcode, and operands.
4926///
4927/// Note that MorphNodeTo returns the resultant node.  If there is already a
4928/// node of the specified opcode and operands, it returns that node instead of
4929/// the current one.  Note that the DebugLoc need not be the same.
4930///
4931/// Using MorphNodeTo is faster than creating a new node and swapping it in
4932/// with ReplaceAllUsesWith both because it often avoids allocating a new
4933/// node, and because it doesn't require CSE recalculation for any of
4934/// the node's users.
4935///
4936SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc,
4937                                  SDVTList VTs, const SDValue *Ops,
4938                                  unsigned NumOps) {
4939  // If an identical node already exists, use it.
4940  void *IP = 0;
4941  if (VTs.VTs[VTs.NumVTs-1] != MVT::Glue) {
4942    FoldingSetNodeID ID;
4943    AddNodeIDNode(ID, Opc, VTs, Ops, NumOps);
4944    if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
4945      return UpdadeDebugLocOnMergedSDNode(ON, N->getDebugLoc());
4946  }
4947
4948  if (!RemoveNodeFromCSEMaps(N))
4949    IP = 0;
4950
4951  // Start the morphing.
4952  N->NodeType = Opc;
4953  N->ValueList = VTs.VTs;
4954  N->NumValues = VTs.NumVTs;
4955
4956  // Clear the operands list, updating used nodes to remove this from their
4957  // use list.  Keep track of any operands that become dead as a result.
4958  SmallPtrSet<SDNode*, 16> DeadNodeSet;
4959  for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) {
4960    SDUse &Use = *I++;
4961    SDNode *Used = Use.getNode();
4962    Use.set(SDValue());
4963    if (Used->use_empty())
4964      DeadNodeSet.insert(Used);
4965  }
4966
4967  if (MachineSDNode *MN = dyn_cast<MachineSDNode>(N)) {
4968    // Initialize the memory references information.
4969    MN->setMemRefs(0, 0);
4970    // If NumOps is larger than the # of operands we can have in a
4971    // MachineSDNode, reallocate the operand list.
4972    if (NumOps > MN->NumOperands || !MN->OperandsNeedDelete) {
4973      if (MN->OperandsNeedDelete)
4974        delete[] MN->OperandList;
4975      if (NumOps > array_lengthof(MN->LocalOperands))
4976        // We're creating a final node that will live unmorphed for the
4977        // remainder of the current SelectionDAG iteration, so we can allocate
4978        // the operands directly out of a pool with no recycling metadata.
4979        MN->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps),
4980                         Ops, NumOps);
4981      else
4982        MN->InitOperands(MN->LocalOperands, Ops, NumOps);
4983      MN->OperandsNeedDelete = false;
4984    } else
4985      MN->InitOperands(MN->OperandList, Ops, NumOps);
4986  } else {
4987    // If NumOps is larger than the # of operands we currently have, reallocate
4988    // the operand list.
4989    if (NumOps > N->NumOperands) {
4990      if (N->OperandsNeedDelete)
4991        delete[] N->OperandList;
4992      N->InitOperands(new SDUse[NumOps], Ops, NumOps);
4993      N->OperandsNeedDelete = true;
4994    } else
4995      N->InitOperands(N->OperandList, Ops, NumOps);
4996  }
4997
4998  // Delete any nodes that are still dead after adding the uses for the
4999  // new operands.
5000  if (!DeadNodeSet.empty()) {
5001    SmallVector<SDNode *, 16> DeadNodes;
5002    for (SmallPtrSet<SDNode *, 16>::iterator I = DeadNodeSet.begin(),
5003         E = DeadNodeSet.end(); I != E; ++I)
5004      if ((*I)->use_empty())
5005        DeadNodes.push_back(*I);
5006    RemoveDeadNodes(DeadNodes);
5007  }
5008
5009  if (IP)
5010    CSEMap.InsertNode(N, IP);   // Memoize the new node.
5011  return N;
5012}
5013
5014
5015/// getMachineNode - These are used for target selectors to create a new node
5016/// with specified return type(s), MachineInstr opcode, and operands.
5017///
5018/// Note that getMachineNode returns the resultant node.  If there is already a
5019/// node of the specified opcode and operands, it returns that node instead of
5020/// the current one.
5021MachineSDNode *
5022SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT) {
5023  SDVTList VTs = getVTList(VT);
5024  return getMachineNode(Opcode, dl, VTs, 0, 0);
5025}
5026
5027MachineSDNode *
5028SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT, SDValue Op1) {
5029  SDVTList VTs = getVTList(VT);
5030  SDValue Ops[] = { Op1 };
5031  return getMachineNode(Opcode, dl, VTs, Ops, array_lengthof(Ops));
5032}
5033
5034MachineSDNode *
5035SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT,
5036                             SDValue Op1, SDValue Op2) {
5037  SDVTList VTs = getVTList(VT);
5038  SDValue Ops[] = { Op1, Op2 };
5039  return getMachineNode(Opcode, dl, VTs, Ops, array_lengthof(Ops));
5040}
5041
5042MachineSDNode *
5043SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT,
5044                             SDValue Op1, SDValue Op2, SDValue Op3) {
5045  SDVTList VTs = getVTList(VT);
5046  SDValue Ops[] = { Op1, Op2, Op3 };
5047  return getMachineNode(Opcode, dl, VTs, Ops, array_lengthof(Ops));
5048}
5049
5050MachineSDNode *
5051SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT,
5052                             const SDValue *Ops, unsigned NumOps) {
5053  SDVTList VTs = getVTList(VT);
5054  return getMachineNode(Opcode, dl, VTs, Ops, NumOps);
5055}
5056
5057MachineSDNode *
5058SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT1, EVT VT2) {
5059  SDVTList VTs = getVTList(VT1, VT2);
5060  return getMachineNode(Opcode, dl, VTs, 0, 0);
5061}
5062
5063MachineSDNode *
5064SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl,
5065                             EVT VT1, EVT VT2, SDValue Op1) {
5066  SDVTList VTs = getVTList(VT1, VT2);
5067  SDValue Ops[] = { Op1 };
5068  return getMachineNode(Opcode, dl, VTs, Ops, array_lengthof(Ops));
5069}
5070
5071MachineSDNode *
5072SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl,
5073                             EVT VT1, EVT VT2, SDValue Op1, SDValue Op2) {
5074  SDVTList VTs = getVTList(VT1, VT2);
5075  SDValue Ops[] = { Op1, Op2 };
5076  return getMachineNode(Opcode, dl, VTs, Ops, array_lengthof(Ops));
5077}
5078
5079MachineSDNode *
5080SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl,
5081                             EVT VT1, EVT VT2, SDValue Op1,
5082                             SDValue Op2, SDValue Op3) {
5083  SDVTList VTs = getVTList(VT1, VT2);
5084  SDValue Ops[] = { Op1, Op2, Op3 };
5085  return getMachineNode(Opcode, dl, VTs, Ops, array_lengthof(Ops));
5086}
5087
5088MachineSDNode *
5089SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl,
5090                             EVT VT1, EVT VT2,
5091                             const SDValue *Ops, unsigned NumOps) {
5092  SDVTList VTs = getVTList(VT1, VT2);
5093  return getMachineNode(Opcode, dl, VTs, Ops, NumOps);
5094}
5095
5096MachineSDNode *
5097SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl,
5098                             EVT VT1, EVT VT2, EVT VT3,
5099                             SDValue Op1, SDValue Op2) {
5100  SDVTList VTs = getVTList(VT1, VT2, VT3);
5101  SDValue Ops[] = { Op1, Op2 };
5102  return getMachineNode(Opcode, dl, VTs, Ops, array_lengthof(Ops));
5103}
5104
5105MachineSDNode *
5106SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl,
5107                             EVT VT1, EVT VT2, EVT VT3,
5108                             SDValue Op1, SDValue Op2, SDValue Op3) {
5109  SDVTList VTs = getVTList(VT1, VT2, VT3);
5110  SDValue Ops[] = { Op1, Op2, Op3 };
5111  return getMachineNode(Opcode, dl, VTs, Ops, array_lengthof(Ops));
5112}
5113
5114MachineSDNode *
5115SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl,
5116                             EVT VT1, EVT VT2, EVT VT3,
5117                             const SDValue *Ops, unsigned NumOps) {
5118  SDVTList VTs = getVTList(VT1, VT2, VT3);
5119  return getMachineNode(Opcode, dl, VTs, Ops, NumOps);
5120}
5121
5122MachineSDNode *
5123SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT1,
5124                             EVT VT2, EVT VT3, EVT VT4,
5125                             const SDValue *Ops, unsigned NumOps) {
5126  SDVTList VTs = getVTList(VT1, VT2, VT3, VT4);
5127  return getMachineNode(Opcode, dl, VTs, Ops, NumOps);
5128}
5129
5130MachineSDNode *
5131SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl,
5132                             const std::vector<EVT> &ResultTys,
5133                             const SDValue *Ops, unsigned NumOps) {
5134  SDVTList VTs = getVTList(&ResultTys[0], ResultTys.size());
5135  return getMachineNode(Opcode, dl, VTs, Ops, NumOps);
5136}
5137
5138MachineSDNode *
5139SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc DL, SDVTList VTs,
5140                             const SDValue *Ops, unsigned NumOps) {
5141  bool DoCSE = VTs.VTs[VTs.NumVTs-1] != MVT::Glue;
5142  MachineSDNode *N;
5143  void *IP = 0;
5144
5145  if (DoCSE) {
5146    FoldingSetNodeID ID;
5147    AddNodeIDNode(ID, ~Opcode, VTs, Ops, NumOps);
5148    IP = 0;
5149    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
5150      return cast<MachineSDNode>(UpdadeDebugLocOnMergedSDNode(E, DL));
5151    }
5152  }
5153
5154  // Allocate a new MachineSDNode.
5155  N = new (NodeAllocator) MachineSDNode(~Opcode, DL, VTs);
5156
5157  // Initialize the operands list.
5158  if (NumOps > array_lengthof(N->LocalOperands))
5159    // We're creating a final node that will live unmorphed for the
5160    // remainder of the current SelectionDAG iteration, so we can allocate
5161    // the operands directly out of a pool with no recycling metadata.
5162    N->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps),
5163                    Ops, NumOps);
5164  else
5165    N->InitOperands(N->LocalOperands, Ops, NumOps);
5166  N->OperandsNeedDelete = false;
5167
5168  if (DoCSE)
5169    CSEMap.InsertNode(N, IP);
5170
5171  AllNodes.push_back(N);
5172#ifndef NDEBUG
5173  VerifyMachineNode(N);
5174#endif
5175  return N;
5176}
5177
5178/// getTargetExtractSubreg - A convenience function for creating
5179/// TargetOpcode::EXTRACT_SUBREG nodes.
5180SDValue
5181SelectionDAG::getTargetExtractSubreg(int SRIdx, DebugLoc DL, EVT VT,
5182                                     SDValue Operand) {
5183  SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32);
5184  SDNode *Subreg = getMachineNode(TargetOpcode::EXTRACT_SUBREG, DL,
5185                                  VT, Operand, SRIdxVal);
5186  return SDValue(Subreg, 0);
5187}
5188
5189/// getTargetInsertSubreg - A convenience function for creating
5190/// TargetOpcode::INSERT_SUBREG nodes.
5191SDValue
5192SelectionDAG::getTargetInsertSubreg(int SRIdx, DebugLoc DL, EVT VT,
5193                                    SDValue Operand, SDValue Subreg) {
5194  SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32);
5195  SDNode *Result = getMachineNode(TargetOpcode::INSERT_SUBREG, DL,
5196                                  VT, Operand, Subreg, SRIdxVal);
5197  return SDValue(Result, 0);
5198}
5199
5200/// getNodeIfExists - Get the specified node if it's already available, or
5201/// else return NULL.
5202SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList,
5203                                      const SDValue *Ops, unsigned NumOps) {
5204  if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) {
5205    FoldingSetNodeID ID;
5206    AddNodeIDNode(ID, Opcode, VTList, Ops, NumOps);
5207    void *IP = 0;
5208    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
5209      return E;
5210  }
5211  return NULL;
5212}
5213
5214/// getDbgValue - Creates a SDDbgValue node.
5215///
5216SDDbgValue *
5217SelectionDAG::getDbgValue(MDNode *MDPtr, SDNode *N, unsigned R, uint64_t Off,
5218                          DebugLoc DL, unsigned O) {
5219  return new (Allocator) SDDbgValue(MDPtr, N, R, Off, DL, O);
5220}
5221
5222SDDbgValue *
5223SelectionDAG::getDbgValue(MDNode *MDPtr, const Value *C, uint64_t Off,
5224                          DebugLoc DL, unsigned O) {
5225  return new (Allocator) SDDbgValue(MDPtr, C, Off, DL, O);
5226}
5227
5228SDDbgValue *
5229SelectionDAG::getDbgValue(MDNode *MDPtr, unsigned FI, uint64_t Off,
5230                          DebugLoc DL, unsigned O) {
5231  return new (Allocator) SDDbgValue(MDPtr, FI, Off, DL, O);
5232}
5233
5234namespace {
5235
5236/// RAUWUpdateListener - Helper for ReplaceAllUsesWith - When the node
5237/// pointed to by a use iterator is deleted, increment the use iterator
5238/// so that it doesn't dangle.
5239///
5240/// This class also manages a "downlink" DAGUpdateListener, to forward
5241/// messages to ReplaceAllUsesWith's callers.
5242///
5243class RAUWUpdateListener : public SelectionDAG::DAGUpdateListener {
5244  SelectionDAG::DAGUpdateListener *DownLink;
5245  SDNode::use_iterator &UI;
5246  SDNode::use_iterator &UE;
5247
5248  virtual void NodeDeleted(SDNode *N, SDNode *E) {
5249    // Increment the iterator as needed.
5250    while (UI != UE && N == *UI)
5251      ++UI;
5252
5253    // Then forward the message.
5254    if (DownLink) DownLink->NodeDeleted(N, E);
5255  }
5256
5257  virtual void NodeUpdated(SDNode *N) {
5258    // Just forward the message.
5259    if (DownLink) DownLink->NodeUpdated(N);
5260  }
5261
5262public:
5263  RAUWUpdateListener(SelectionDAG::DAGUpdateListener *dl,
5264                     SDNode::use_iterator &ui,
5265                     SDNode::use_iterator &ue)
5266    : DownLink(dl), UI(ui), UE(ue) {}
5267};
5268
5269}
5270
5271/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
5272/// This can cause recursive merging of nodes in the DAG.
5273///
5274/// This version assumes From has a single result value.
5275///
5276void SelectionDAG::ReplaceAllUsesWith(SDValue FromN, SDValue To,
5277                                      DAGUpdateListener *UpdateListener) {
5278  SDNode *From = FromN.getNode();
5279  assert(From->getNumValues() == 1 && FromN.getResNo() == 0 &&
5280         "Cannot replace with this method!");
5281  assert(From != To.getNode() && "Cannot replace uses of with self");
5282
5283  // Iterate over all the existing uses of From. New uses will be added
5284  // to the beginning of the use list, which we avoid visiting.
5285  // This specifically avoids visiting uses of From that arise while the
5286  // replacement is happening, because any such uses would be the result
5287  // of CSE: If an existing node looks like From after one of its operands
5288  // is replaced by To, we don't want to replace of all its users with To
5289  // too. See PR3018 for more info.
5290  SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
5291  RAUWUpdateListener Listener(UpdateListener, UI, UE);
5292  while (UI != UE) {
5293    SDNode *User = *UI;
5294
5295    // This node is about to morph, remove its old self from the CSE maps.
5296    RemoveNodeFromCSEMaps(User);
5297
5298    // A user can appear in a use list multiple times, and when this
5299    // happens the uses are usually next to each other in the list.
5300    // To help reduce the number of CSE recomputations, process all
5301    // the uses of this user that we can find this way.
5302    do {
5303      SDUse &Use = UI.getUse();
5304      ++UI;
5305      Use.set(To);
5306    } while (UI != UE && *UI == User);
5307
5308    // Now that we have modified User, add it back to the CSE maps.  If it
5309    // already exists there, recursively merge the results together.
5310    AddModifiedNodeToCSEMaps(User, &Listener);
5311  }
5312
5313  // If we just RAUW'd the root, take note.
5314  if (FromN == getRoot())
5315    setRoot(To);
5316}
5317
5318/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
5319/// This can cause recursive merging of nodes in the DAG.
5320///
5321/// This version assumes that for each value of From, there is a
5322/// corresponding value in To in the same position with the same type.
5323///
5324void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To,
5325                                      DAGUpdateListener *UpdateListener) {
5326#ifndef NDEBUG
5327  for (unsigned i = 0, e = From->getNumValues(); i != e; ++i)
5328    assert((!From->hasAnyUseOfValue(i) ||
5329            From->getValueType(i) == To->getValueType(i)) &&
5330           "Cannot use this version of ReplaceAllUsesWith!");
5331#endif
5332
5333  // Handle the trivial case.
5334  if (From == To)
5335    return;
5336
5337  // Iterate over just the existing users of From. See the comments in
5338  // the ReplaceAllUsesWith above.
5339  SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
5340  RAUWUpdateListener Listener(UpdateListener, UI, UE);
5341  while (UI != UE) {
5342    SDNode *User = *UI;
5343
5344    // This node is about to morph, remove its old self from the CSE maps.
5345    RemoveNodeFromCSEMaps(User);
5346
5347    // A user can appear in a use list multiple times, and when this
5348    // happens the uses are usually next to each other in the list.
5349    // To help reduce the number of CSE recomputations, process all
5350    // the uses of this user that we can find this way.
5351    do {
5352      SDUse &Use = UI.getUse();
5353      ++UI;
5354      Use.setNode(To);
5355    } while (UI != UE && *UI == User);
5356
5357    // Now that we have modified User, add it back to the CSE maps.  If it
5358    // already exists there, recursively merge the results together.
5359    AddModifiedNodeToCSEMaps(User, &Listener);
5360  }
5361
5362  // If we just RAUW'd the root, take note.
5363  if (From == getRoot().getNode())
5364    setRoot(SDValue(To, getRoot().getResNo()));
5365}
5366
5367/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
5368/// This can cause recursive merging of nodes in the DAG.
5369///
5370/// This version can replace From with any result values.  To must match the
5371/// number and types of values returned by From.
5372void SelectionDAG::ReplaceAllUsesWith(SDNode *From,
5373                                      const SDValue *To,
5374                                      DAGUpdateListener *UpdateListener) {
5375  if (From->getNumValues() == 1)  // Handle the simple case efficiently.
5376    return ReplaceAllUsesWith(SDValue(From, 0), To[0], UpdateListener);
5377
5378  // Iterate over just the existing users of From. See the comments in
5379  // the ReplaceAllUsesWith above.
5380  SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
5381  RAUWUpdateListener Listener(UpdateListener, UI, UE);
5382  while (UI != UE) {
5383    SDNode *User = *UI;
5384
5385    // This node is about to morph, remove its old self from the CSE maps.
5386    RemoveNodeFromCSEMaps(User);
5387
5388    // A user can appear in a use list multiple times, and when this
5389    // happens the uses are usually next to each other in the list.
5390    // To help reduce the number of CSE recomputations, process all
5391    // the uses of this user that we can find this way.
5392    do {
5393      SDUse &Use = UI.getUse();
5394      const SDValue &ToOp = To[Use.getResNo()];
5395      ++UI;
5396      Use.set(ToOp);
5397    } while (UI != UE && *UI == User);
5398
5399    // Now that we have modified User, add it back to the CSE maps.  If it
5400    // already exists there, recursively merge the results together.
5401    AddModifiedNodeToCSEMaps(User, &Listener);
5402  }
5403
5404  // If we just RAUW'd the root, take note.
5405  if (From == getRoot().getNode())
5406    setRoot(SDValue(To[getRoot().getResNo()]));
5407}
5408
5409/// ReplaceAllUsesOfValueWith - Replace any uses of From with To, leaving
5410/// uses of other values produced by From.getNode() alone.  The Deleted
5411/// vector is handled the same way as for ReplaceAllUsesWith.
5412void SelectionDAG::ReplaceAllUsesOfValueWith(SDValue From, SDValue To,
5413                                             DAGUpdateListener *UpdateListener){
5414  // Handle the really simple, really trivial case efficiently.
5415  if (From == To) return;
5416
5417  // Handle the simple, trivial, case efficiently.
5418  if (From.getNode()->getNumValues() == 1) {
5419    ReplaceAllUsesWith(From, To, UpdateListener);
5420    return;
5421  }
5422
5423  // Iterate over just the existing users of From. See the comments in
5424  // the ReplaceAllUsesWith above.
5425  SDNode::use_iterator UI = From.getNode()->use_begin(),
5426                       UE = From.getNode()->use_end();
5427  RAUWUpdateListener Listener(UpdateListener, UI, UE);
5428  while (UI != UE) {
5429    SDNode *User = *UI;
5430    bool UserRemovedFromCSEMaps = false;
5431
5432    // A user can appear in a use list multiple times, and when this
5433    // happens the uses are usually next to each other in the list.
5434    // To help reduce the number of CSE recomputations, process all
5435    // the uses of this user that we can find this way.
5436    do {
5437      SDUse &Use = UI.getUse();
5438
5439      // Skip uses of different values from the same node.
5440      if (Use.getResNo() != From.getResNo()) {
5441        ++UI;
5442        continue;
5443      }
5444
5445      // If this node hasn't been modified yet, it's still in the CSE maps,
5446      // so remove its old self from the CSE maps.
5447      if (!UserRemovedFromCSEMaps) {
5448        RemoveNodeFromCSEMaps(User);
5449        UserRemovedFromCSEMaps = true;
5450      }
5451
5452      ++UI;
5453      Use.set(To);
5454    } while (UI != UE && *UI == User);
5455
5456    // We are iterating over all uses of the From node, so if a use
5457    // doesn't use the specific value, no changes are made.
5458    if (!UserRemovedFromCSEMaps)
5459      continue;
5460
5461    // Now that we have modified User, add it back to the CSE maps.  If it
5462    // already exists there, recursively merge the results together.
5463    AddModifiedNodeToCSEMaps(User, &Listener);
5464  }
5465
5466  // If we just RAUW'd the root, take note.
5467  if (From == getRoot())
5468    setRoot(To);
5469}
5470
5471namespace {
5472  /// UseMemo - This class is used by SelectionDAG::ReplaceAllUsesOfValuesWith
5473  /// to record information about a use.
5474  struct UseMemo {
5475    SDNode *User;
5476    unsigned Index;
5477    SDUse *Use;
5478  };
5479
5480  /// operator< - Sort Memos by User.
5481  bool operator<(const UseMemo &L, const UseMemo &R) {
5482    return (intptr_t)L.User < (intptr_t)R.User;
5483  }
5484}
5485
5486/// ReplaceAllUsesOfValuesWith - Replace any uses of From with To, leaving
5487/// uses of other values produced by From.getNode() alone.  The same value
5488/// may appear in both the From and To list.  The Deleted vector is
5489/// handled the same way as for ReplaceAllUsesWith.
5490void SelectionDAG::ReplaceAllUsesOfValuesWith(const SDValue *From,
5491                                              const SDValue *To,
5492                                              unsigned Num,
5493                                              DAGUpdateListener *UpdateListener){
5494  // Handle the simple, trivial case efficiently.
5495  if (Num == 1)
5496    return ReplaceAllUsesOfValueWith(*From, *To, UpdateListener);
5497
5498  // Read up all the uses and make records of them. This helps
5499  // processing new uses that are introduced during the
5500  // replacement process.
5501  SmallVector<UseMemo, 4> Uses;
5502  for (unsigned i = 0; i != Num; ++i) {
5503    unsigned FromResNo = From[i].getResNo();
5504    SDNode *FromNode = From[i].getNode();
5505    for (SDNode::use_iterator UI = FromNode->use_begin(),
5506         E = FromNode->use_end(); UI != E; ++UI) {
5507      SDUse &Use = UI.getUse();
5508      if (Use.getResNo() == FromResNo) {
5509        UseMemo Memo = { *UI, i, &Use };
5510        Uses.push_back(Memo);
5511      }
5512    }
5513  }
5514
5515  // Sort the uses, so that all the uses from a given User are together.
5516  std::sort(Uses.begin(), Uses.end());
5517
5518  for (unsigned UseIndex = 0, UseIndexEnd = Uses.size();
5519       UseIndex != UseIndexEnd; ) {
5520    // We know that this user uses some value of From.  If it is the right
5521    // value, update it.
5522    SDNode *User = Uses[UseIndex].User;
5523
5524    // This node is about to morph, remove its old self from the CSE maps.
5525    RemoveNodeFromCSEMaps(User);
5526
5527    // The Uses array is sorted, so all the uses for a given User
5528    // are next to each other in the list.
5529    // To help reduce the number of CSE recomputations, process all
5530    // the uses of this user that we can find this way.
5531    do {
5532      unsigned i = Uses[UseIndex].Index;
5533      SDUse &Use = *Uses[UseIndex].Use;
5534      ++UseIndex;
5535
5536      Use.set(To[i]);
5537    } while (UseIndex != UseIndexEnd && Uses[UseIndex].User == User);
5538
5539    // Now that we have modified User, add it back to the CSE maps.  If it
5540    // already exists there, recursively merge the results together.
5541    AddModifiedNodeToCSEMaps(User, UpdateListener);
5542  }
5543}
5544
5545/// AssignTopologicalOrder - Assign a unique node id for each node in the DAG
5546/// based on their topological order. It returns the maximum id and a vector
5547/// of the SDNodes* in assigned order by reference.
5548unsigned SelectionDAG::AssignTopologicalOrder() {
5549
5550  unsigned DAGSize = 0;
5551
5552  // SortedPos tracks the progress of the algorithm. Nodes before it are
5553  // sorted, nodes after it are unsorted. When the algorithm completes
5554  // it is at the end of the list.
5555  allnodes_iterator SortedPos = allnodes_begin();
5556
5557  // Visit all the nodes. Move nodes with no operands to the front of
5558  // the list immediately. Annotate nodes that do have operands with their
5559  // operand count. Before we do this, the Node Id fields of the nodes
5560  // may contain arbitrary values. After, the Node Id fields for nodes
5561  // before SortedPos will contain the topological sort index, and the
5562  // Node Id fields for nodes At SortedPos and after will contain the
5563  // count of outstanding operands.
5564  for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ) {
5565    SDNode *N = I++;
5566    checkForCycles(N);
5567    unsigned Degree = N->getNumOperands();
5568    if (Degree == 0) {
5569      // A node with no uses, add it to the result array immediately.
5570      N->setNodeId(DAGSize++);
5571      allnodes_iterator Q = N;
5572      if (Q != SortedPos)
5573        SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(Q));
5574      assert(SortedPos != AllNodes.end() && "Overran node list");
5575      ++SortedPos;
5576    } else {
5577      // Temporarily use the Node Id as scratch space for the degree count.
5578      N->setNodeId(Degree);
5579    }
5580  }
5581
5582  // Visit all the nodes. As we iterate, moves nodes into sorted order,
5583  // such that by the time the end is reached all nodes will be sorted.
5584  for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ++I) {
5585    SDNode *N = I;
5586    checkForCycles(N);
5587    // N is in sorted position, so all its uses have one less operand
5588    // that needs to be sorted.
5589    for (SDNode::use_iterator UI = N->use_begin(), UE = N->use_end();
5590         UI != UE; ++UI) {
5591      SDNode *P = *UI;
5592      unsigned Degree = P->getNodeId();
5593      assert(Degree != 0 && "Invalid node degree");
5594      --Degree;
5595      if (Degree == 0) {
5596        // All of P's operands are sorted, so P may sorted now.
5597        P->setNodeId(DAGSize++);
5598        if (P != SortedPos)
5599          SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(P));
5600        assert(SortedPos != AllNodes.end() && "Overran node list");
5601        ++SortedPos;
5602      } else {
5603        // Update P's outstanding operand count.
5604        P->setNodeId(Degree);
5605      }
5606    }
5607    if (I == SortedPos) {
5608#ifndef NDEBUG
5609      SDNode *S = ++I;
5610      dbgs() << "Overran sorted position:\n";
5611      S->dumprFull();
5612#endif
5613      llvm_unreachable(0);
5614    }
5615  }
5616
5617  assert(SortedPos == AllNodes.end() &&
5618         "Topological sort incomplete!");
5619  assert(AllNodes.front().getOpcode() == ISD::EntryToken &&
5620         "First node in topological sort is not the entry token!");
5621  assert(AllNodes.front().getNodeId() == 0 &&
5622         "First node in topological sort has non-zero id!");
5623  assert(AllNodes.front().getNumOperands() == 0 &&
5624         "First node in topological sort has operands!");
5625  assert(AllNodes.back().getNodeId() == (int)DAGSize-1 &&
5626         "Last node in topologic sort has unexpected id!");
5627  assert(AllNodes.back().use_empty() &&
5628         "Last node in topologic sort has users!");
5629  assert(DAGSize == allnodes_size() && "Node count mismatch!");
5630  return DAGSize;
5631}
5632
5633/// AssignOrdering - Assign an order to the SDNode.
5634void SelectionDAG::AssignOrdering(const SDNode *SD, unsigned Order) {
5635  assert(SD && "Trying to assign an order to a null node!");
5636  Ordering->add(SD, Order);
5637}
5638
5639/// GetOrdering - Get the order for the SDNode.
5640unsigned SelectionDAG::GetOrdering(const SDNode *SD) const {
5641  assert(SD && "Trying to get the order of a null node!");
5642  return Ordering->getOrder(SD);
5643}
5644
5645/// AddDbgValue - Add a dbg_value SDNode. If SD is non-null that means the
5646/// value is produced by SD.
5647void SelectionDAG::AddDbgValue(SDDbgValue *DB, SDNode *SD, bool isParameter) {
5648  DbgInfo->add(DB, SD, isParameter);
5649  if (SD)
5650    SD->setHasDebugValue(true);
5651}
5652
5653/// TransferDbgValues - Transfer SDDbgValues.
5654void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) {
5655  if (From == To || !From.getNode()->getHasDebugValue())
5656    return;
5657  SDNode *FromNode = From.getNode();
5658  SDNode *ToNode = To.getNode();
5659  ArrayRef<SDDbgValue *> DVs = GetDbgValues(FromNode);
5660  SmallVector<SDDbgValue *, 2> ClonedDVs;
5661  for (ArrayRef<SDDbgValue *>::iterator I = DVs.begin(), E = DVs.end();
5662       I != E; ++I) {
5663    SDDbgValue *Dbg = *I;
5664    if (Dbg->getKind() == SDDbgValue::SDNODE) {
5665      SDDbgValue *Clone = getDbgValue(Dbg->getMDPtr(), ToNode, To.getResNo(),
5666                                      Dbg->getOffset(), Dbg->getDebugLoc(),
5667                                      Dbg->getOrder());
5668      ClonedDVs.push_back(Clone);
5669    }
5670  }
5671  for (SmallVector<SDDbgValue *, 2>::iterator I = ClonedDVs.begin(),
5672         E = ClonedDVs.end(); I != E; ++I)
5673    AddDbgValue(*I, ToNode, false);
5674}
5675
5676//===----------------------------------------------------------------------===//
5677//                              SDNode Class
5678//===----------------------------------------------------------------------===//
5679
5680HandleSDNode::~HandleSDNode() {
5681  DropOperands();
5682}
5683
5684GlobalAddressSDNode::GlobalAddressSDNode(unsigned Opc, DebugLoc DL,
5685                                         const GlobalValue *GA,
5686                                         EVT VT, int64_t o, unsigned char TF)
5687  : SDNode(Opc, DL, getSDVTList(VT)), Offset(o), TargetFlags(TF) {
5688  TheGlobal = GA;
5689}
5690
5691MemSDNode::MemSDNode(unsigned Opc, DebugLoc dl, SDVTList VTs, EVT memvt,
5692                     MachineMemOperand *mmo)
5693 : SDNode(Opc, dl, VTs), MemoryVT(memvt), MMO(mmo) {
5694  SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(),
5695                                      MMO->isNonTemporal(), MMO->isInvariant());
5696  assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!");
5697  assert(isNonTemporal() == MMO->isNonTemporal() &&
5698         "Non-temporal encoding error!");
5699  assert(memvt.getStoreSize() == MMO->getSize() && "Size mismatch!");
5700}
5701
5702MemSDNode::MemSDNode(unsigned Opc, DebugLoc dl, SDVTList VTs,
5703                     const SDValue *Ops, unsigned NumOps, EVT memvt,
5704                     MachineMemOperand *mmo)
5705   : SDNode(Opc, dl, VTs, Ops, NumOps),
5706     MemoryVT(memvt), MMO(mmo) {
5707  SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(),
5708                                      MMO->isNonTemporal(), MMO->isInvariant());
5709  assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!");
5710  assert(memvt.getStoreSize() == MMO->getSize() && "Size mismatch!");
5711}
5712
5713/// Profile - Gather unique data for the node.
5714///
5715void SDNode::Profile(FoldingSetNodeID &ID) const {
5716  AddNodeIDNode(ID, this);
5717}
5718
5719namespace {
5720  struct EVTArray {
5721    std::vector<EVT> VTs;
5722
5723    EVTArray() {
5724      VTs.reserve(MVT::LAST_VALUETYPE);
5725      for (unsigned i = 0; i < MVT::LAST_VALUETYPE; ++i)
5726        VTs.push_back(MVT((MVT::SimpleValueType)i));
5727    }
5728  };
5729}
5730
5731static ManagedStatic<std::set<EVT, EVT::compareRawBits> > EVTs;
5732static ManagedStatic<EVTArray> SimpleVTArray;
5733static ManagedStatic<sys::SmartMutex<true> > VTMutex;
5734
5735/// getValueTypeList - Return a pointer to the specified value type.
5736///
5737const EVT *SDNode::getValueTypeList(EVT VT) {
5738  if (VT.isExtended()) {
5739    sys::SmartScopedLock<true> Lock(*VTMutex);
5740    return &(*EVTs->insert(VT).first);
5741  } else {
5742    assert(VT.getSimpleVT() < MVT::LAST_VALUETYPE &&
5743           "Value type out of range!");
5744    return &SimpleVTArray->VTs[VT.getSimpleVT().SimpleTy];
5745  }
5746}
5747
5748/// hasNUsesOfValue - Return true if there are exactly NUSES uses of the
5749/// indicated value.  This method ignores uses of other values defined by this
5750/// operation.
5751bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const {
5752  assert(Value < getNumValues() && "Bad value!");
5753
5754  // TODO: Only iterate over uses of a given value of the node
5755  for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI) {
5756    if (UI.getUse().getResNo() == Value) {
5757      if (NUses == 0)
5758        return false;
5759      --NUses;
5760    }
5761  }
5762
5763  // Found exactly the right number of uses?
5764  return NUses == 0;
5765}
5766
5767
5768/// hasAnyUseOfValue - Return true if there are any use of the indicated
5769/// value. This method ignores uses of other values defined by this operation.
5770bool SDNode::hasAnyUseOfValue(unsigned Value) const {
5771  assert(Value < getNumValues() && "Bad value!");
5772
5773  for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI)
5774    if (UI.getUse().getResNo() == Value)
5775      return true;
5776
5777  return false;
5778}
5779
5780
5781/// isOnlyUserOf - Return true if this node is the only use of N.
5782///
5783bool SDNode::isOnlyUserOf(SDNode *N) const {
5784  bool Seen = false;
5785  for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {
5786    SDNode *User = *I;
5787    if (User == this)
5788      Seen = true;
5789    else
5790      return false;
5791  }
5792
5793  return Seen;
5794}
5795
5796/// isOperand - Return true if this node is an operand of N.
5797///
5798bool SDValue::isOperandOf(SDNode *N) const {
5799  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
5800    if (*this == N->getOperand(i))
5801      return true;
5802  return false;
5803}
5804
5805bool SDNode::isOperandOf(SDNode *N) const {
5806  for (unsigned i = 0, e = N->NumOperands; i != e; ++i)
5807    if (this == N->OperandList[i].getNode())
5808      return true;
5809  return false;
5810}
5811
5812/// reachesChainWithoutSideEffects - Return true if this operand (which must
5813/// be a chain) reaches the specified operand without crossing any
5814/// side-effecting instructions on any chain path.  In practice, this looks
5815/// through token factors and non-volatile loads.  In order to remain efficient,
5816/// this only looks a couple of nodes in, it does not do an exhaustive search.
5817bool SDValue::reachesChainWithoutSideEffects(SDValue Dest,
5818                                               unsigned Depth) const {
5819  if (*this == Dest) return true;
5820
5821  // Don't search too deeply, we just want to be able to see through
5822  // TokenFactor's etc.
5823  if (Depth == 0) return false;
5824
5825  // If this is a token factor, all inputs to the TF happen in parallel.  If any
5826  // of the operands of the TF does not reach dest, then we cannot do the xform.
5827  if (getOpcode() == ISD::TokenFactor) {
5828    for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
5829      if (!getOperand(i).reachesChainWithoutSideEffects(Dest, Depth-1))
5830        return false;
5831    return true;
5832  }
5833
5834  // Loads don't have side effects, look through them.
5835  if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(*this)) {
5836    if (!Ld->isVolatile())
5837      return Ld->getChain().reachesChainWithoutSideEffects(Dest, Depth-1);
5838  }
5839  return false;
5840}
5841
5842/// hasPredecessor - Return true if N is a predecessor of this node.
5843/// N is either an operand of this node, or can be reached by recursively
5844/// traversing up the operands.
5845/// NOTE: This is an expensive method. Use it carefully.
5846bool SDNode::hasPredecessor(const SDNode *N) const {
5847  SmallPtrSet<const SDNode *, 32> Visited;
5848  SmallVector<const SDNode *, 16> Worklist;
5849  return hasPredecessorHelper(N, Visited, Worklist);
5850}
5851
5852bool SDNode::hasPredecessorHelper(const SDNode *N,
5853                                  SmallPtrSet<const SDNode *, 32> &Visited,
5854                                  SmallVector<const SDNode *, 16> &Worklist) const {
5855  if (Visited.empty()) {
5856    Worklist.push_back(this);
5857  } else {
5858    // Take a look in the visited set. If we've already encountered this node
5859    // we needn't search further.
5860    if (Visited.count(N))
5861      return true;
5862  }
5863
5864  // Haven't visited N yet. Continue the search.
5865  while (!Worklist.empty()) {
5866    const SDNode *M = Worklist.pop_back_val();
5867    for (unsigned i = 0, e = M->getNumOperands(); i != e; ++i) {
5868      SDNode *Op = M->getOperand(i).getNode();
5869      if (Visited.insert(Op))
5870        Worklist.push_back(Op);
5871      if (Op == N)
5872        return true;
5873    }
5874  }
5875
5876  return false;
5877}
5878
5879uint64_t SDNode::getConstantOperandVal(unsigned Num) const {
5880  assert(Num < NumOperands && "Invalid child # of SDNode!");
5881  return cast<ConstantSDNode>(OperandList[Num])->getZExtValue();
5882}
5883
5884SDValue SelectionDAG::UnrollVectorOp(SDNode *N, unsigned ResNE) {
5885  assert(N->getNumValues() == 1 &&
5886         "Can't unroll a vector with multiple results!");
5887
5888  EVT VT = N->getValueType(0);
5889  unsigned NE = VT.getVectorNumElements();
5890  EVT EltVT = VT.getVectorElementType();
5891  DebugLoc dl = N->getDebugLoc();
5892
5893  SmallVector<SDValue, 8> Scalars;
5894  SmallVector<SDValue, 4> Operands(N->getNumOperands());
5895
5896  // If ResNE is 0, fully unroll the vector op.
5897  if (ResNE == 0)
5898    ResNE = NE;
5899  else if (NE > ResNE)
5900    NE = ResNE;
5901
5902  unsigned i;
5903  for (i= 0; i != NE; ++i) {
5904    for (unsigned j = 0, e = N->getNumOperands(); j != e; ++j) {
5905      SDValue Operand = N->getOperand(j);
5906      EVT OperandVT = Operand.getValueType();
5907      if (OperandVT.isVector()) {
5908        // A vector operand; extract a single element.
5909        EVT OperandEltVT = OperandVT.getVectorElementType();
5910        Operands[j] = getNode(ISD::EXTRACT_VECTOR_ELT, dl,
5911                              OperandEltVT,
5912                              Operand,
5913                              getConstant(i, TLI.getPointerTy()));
5914      } else {
5915        // A scalar operand; just use it as is.
5916        Operands[j] = Operand;
5917      }
5918    }
5919
5920    switch (N->getOpcode()) {
5921    default:
5922      Scalars.push_back(getNode(N->getOpcode(), dl, EltVT,
5923                                &Operands[0], Operands.size()));
5924      break;
5925    case ISD::VSELECT:
5926      Scalars.push_back(getNode(ISD::SELECT, dl, EltVT,
5927                                &Operands[0], Operands.size()));
5928      break;
5929    case ISD::SHL:
5930    case ISD::SRA:
5931    case ISD::SRL:
5932    case ISD::ROTL:
5933    case ISD::ROTR:
5934      Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands[0],
5935                                getShiftAmountOperand(Operands[0].getValueType(),
5936                                                      Operands[1])));
5937      break;
5938    case ISD::SIGN_EXTEND_INREG:
5939    case ISD::FP_ROUND_INREG: {
5940      EVT ExtVT = cast<VTSDNode>(Operands[1])->getVT().getVectorElementType();
5941      Scalars.push_back(getNode(N->getOpcode(), dl, EltVT,
5942                                Operands[0],
5943                                getValueType(ExtVT)));
5944    }
5945    }
5946  }
5947
5948  for (; i < ResNE; ++i)
5949    Scalars.push_back(getUNDEF(EltVT));
5950
5951  return getNode(ISD::BUILD_VECTOR, dl,
5952                 EVT::getVectorVT(*getContext(), EltVT, ResNE),
5953                 &Scalars[0], Scalars.size());
5954}
5955
5956
5957/// isConsecutiveLoad - Return true if LD is loading 'Bytes' bytes from a
5958/// location that is 'Dist' units away from the location that the 'Base' load
5959/// is loading from.
5960bool SelectionDAG::isConsecutiveLoad(LoadSDNode *LD, LoadSDNode *Base,
5961                                     unsigned Bytes, int Dist) const {
5962  if (LD->getChain() != Base->getChain())
5963    return false;
5964  EVT VT = LD->getValueType(0);
5965  if (VT.getSizeInBits() / 8 != Bytes)
5966    return false;
5967
5968  SDValue Loc = LD->getOperand(1);
5969  SDValue BaseLoc = Base->getOperand(1);
5970  if (Loc.getOpcode() == ISD::FrameIndex) {
5971    if (BaseLoc.getOpcode() != ISD::FrameIndex)
5972      return false;
5973    const MachineFrameInfo *MFI = getMachineFunction().getFrameInfo();
5974    int FI  = cast<FrameIndexSDNode>(Loc)->getIndex();
5975    int BFI = cast<FrameIndexSDNode>(BaseLoc)->getIndex();
5976    int FS  = MFI->getObjectSize(FI);
5977    int BFS = MFI->getObjectSize(BFI);
5978    if (FS != BFS || FS != (int)Bytes) return false;
5979    return MFI->getObjectOffset(FI) == (MFI->getObjectOffset(BFI) + Dist*Bytes);
5980  }
5981
5982  // Handle X+C
5983  if (isBaseWithConstantOffset(Loc) && Loc.getOperand(0) == BaseLoc &&
5984      cast<ConstantSDNode>(Loc.getOperand(1))->getSExtValue() == Dist*Bytes)
5985    return true;
5986
5987  const GlobalValue *GV1 = NULL;
5988  const GlobalValue *GV2 = NULL;
5989  int64_t Offset1 = 0;
5990  int64_t Offset2 = 0;
5991  bool isGA1 = TLI.isGAPlusOffset(Loc.getNode(), GV1, Offset1);
5992  bool isGA2 = TLI.isGAPlusOffset(BaseLoc.getNode(), GV2, Offset2);
5993  if (isGA1 && isGA2 && GV1 == GV2)
5994    return Offset1 == (Offset2 + Dist*Bytes);
5995  return false;
5996}
5997
5998
5999/// InferPtrAlignment - Infer alignment of a load / store address. Return 0 if
6000/// it cannot be inferred.
6001unsigned SelectionDAG::InferPtrAlignment(SDValue Ptr) const {
6002  // If this is a GlobalAddress + cst, return the alignment.
6003  const GlobalValue *GV;
6004  int64_t GVOffset = 0;
6005  if (TLI.isGAPlusOffset(Ptr.getNode(), GV, GVOffset)) {
6006    unsigned PtrWidth = TLI.getPointerTy().getSizeInBits();
6007    APInt KnownZero(PtrWidth, 0), KnownOne(PtrWidth, 0);
6008    llvm::ComputeMaskedBits(const_cast<GlobalValue*>(GV), KnownZero, KnownOne,
6009                            TLI.getTargetData());
6010    unsigned AlignBits = KnownZero.countTrailingOnes();
6011    unsigned Align = AlignBits ? 1 << std::min(31U, AlignBits) : 0;
6012    if (Align)
6013      return MinAlign(Align, GVOffset);
6014  }
6015
6016  // If this is a direct reference to a stack slot, use information about the
6017  // stack slot's alignment.
6018  int FrameIdx = 1 << 31;
6019  int64_t FrameOffset = 0;
6020  if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr)) {
6021    FrameIdx = FI->getIndex();
6022  } else if (isBaseWithConstantOffset(Ptr) &&
6023             isa<FrameIndexSDNode>(Ptr.getOperand(0))) {
6024    // Handle FI+Cst
6025    FrameIdx = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex();
6026    FrameOffset = Ptr.getConstantOperandVal(1);
6027  }
6028
6029  if (FrameIdx != (1 << 31)) {
6030    const MachineFrameInfo &MFI = *getMachineFunction().getFrameInfo();
6031    unsigned FIInfoAlign = MinAlign(MFI.getObjectAlignment(FrameIdx),
6032                                    FrameOffset);
6033    return FIInfoAlign;
6034  }
6035
6036  return 0;
6037}
6038
6039// getAddressSpace - Return the address space this GlobalAddress belongs to.
6040unsigned GlobalAddressSDNode::getAddressSpace() const {
6041  return getGlobal()->getType()->getAddressSpace();
6042}
6043
6044
6045Type *ConstantPoolSDNode::getType() const {
6046  if (isMachineConstantPoolEntry())
6047    return Val.MachineCPVal->getType();
6048  return Val.ConstVal->getType();
6049}
6050
6051bool BuildVectorSDNode::isConstantSplat(APInt &SplatValue,
6052                                        APInt &SplatUndef,
6053                                        unsigned &SplatBitSize,
6054                                        bool &HasAnyUndefs,
6055                                        unsigned MinSplatBits,
6056                                        bool isBigEndian) {
6057  EVT VT = getValueType(0);
6058  assert(VT.isVector() && "Expected a vector type");
6059  unsigned sz = VT.getSizeInBits();
6060  if (MinSplatBits > sz)
6061    return false;
6062
6063  SplatValue = APInt(sz, 0);
6064  SplatUndef = APInt(sz, 0);
6065
6066  // Get the bits.  Bits with undefined values (when the corresponding element
6067  // of the vector is an ISD::UNDEF value) are set in SplatUndef and cleared
6068  // in SplatValue.  If any of the values are not constant, give up and return
6069  // false.
6070  unsigned int nOps = getNumOperands();
6071  assert(nOps > 0 && "isConstantSplat has 0-size build vector");
6072  unsigned EltBitSize = VT.getVectorElementType().getSizeInBits();
6073
6074  for (unsigned j = 0; j < nOps; ++j) {
6075    unsigned i = isBigEndian ? nOps-1-j : j;
6076    SDValue OpVal = getOperand(i);
6077    unsigned BitPos = j * EltBitSize;
6078
6079    if (OpVal.getOpcode() == ISD::UNDEF)
6080      SplatUndef |= APInt::getBitsSet(sz, BitPos, BitPos + EltBitSize);
6081    else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal))
6082      SplatValue |= CN->getAPIntValue().zextOrTrunc(EltBitSize).
6083                    zextOrTrunc(sz) << BitPos;
6084    else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal))
6085      SplatValue |= CN->getValueAPF().bitcastToAPInt().zextOrTrunc(sz) <<BitPos;
6086     else
6087      return false;
6088  }
6089
6090  // The build_vector is all constants or undefs.  Find the smallest element
6091  // size that splats the vector.
6092
6093  HasAnyUndefs = (SplatUndef != 0);
6094  while (sz > 8) {
6095
6096    unsigned HalfSize = sz / 2;
6097    APInt HighValue = SplatValue.lshr(HalfSize).trunc(HalfSize);
6098    APInt LowValue = SplatValue.trunc(HalfSize);
6099    APInt HighUndef = SplatUndef.lshr(HalfSize).trunc(HalfSize);
6100    APInt LowUndef = SplatUndef.trunc(HalfSize);
6101
6102    // If the two halves do not match (ignoring undef bits), stop here.
6103    if ((HighValue & ~LowUndef) != (LowValue & ~HighUndef) ||
6104        MinSplatBits > HalfSize)
6105      break;
6106
6107    SplatValue = HighValue | LowValue;
6108    SplatUndef = HighUndef & LowUndef;
6109
6110    sz = HalfSize;
6111  }
6112
6113  SplatBitSize = sz;
6114  return true;
6115}
6116
6117bool ShuffleVectorSDNode::isSplatMask(const int *Mask, EVT VT) {
6118  // Find the first non-undef value in the shuffle mask.
6119  unsigned i, e;
6120  for (i = 0, e = VT.getVectorNumElements(); i != e && Mask[i] < 0; ++i)
6121    /* search */;
6122
6123  assert(i != e && "VECTOR_SHUFFLE node with all undef indices!");
6124
6125  // Make sure all remaining elements are either undef or the same as the first
6126  // non-undef value.
6127  for (int Idx = Mask[i]; i != e; ++i)
6128    if (Mask[i] >= 0 && Mask[i] != Idx)
6129      return false;
6130  return true;
6131}
6132
6133#ifdef XDEBUG
6134static void checkForCyclesHelper(const SDNode *N,
6135                                 SmallPtrSet<const SDNode*, 32> &Visited,
6136                                 SmallPtrSet<const SDNode*, 32> &Checked) {
6137  // If this node has already been checked, don't check it again.
6138  if (Checked.count(N))
6139    return;
6140
6141  // If a node has already been visited on this depth-first walk, reject it as
6142  // a cycle.
6143  if (!Visited.insert(N)) {
6144    dbgs() << "Offending node:\n";
6145    N->dumprFull();
6146    errs() << "Detected cycle in SelectionDAG\n";
6147    abort();
6148  }
6149
6150  for(unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
6151    checkForCyclesHelper(N->getOperand(i).getNode(), Visited, Checked);
6152
6153  Checked.insert(N);
6154  Visited.erase(N);
6155}
6156#endif
6157
6158void llvm::checkForCycles(const llvm::SDNode *N) {
6159#ifdef XDEBUG
6160  assert(N && "Checking nonexistant SDNode");
6161  SmallPtrSet<const SDNode*, 32> visited;
6162  SmallPtrSet<const SDNode*, 32> checked;
6163  checkForCyclesHelper(N, visited, checked);
6164#endif
6165}
6166
6167void llvm::checkForCycles(const llvm::SelectionDAG *DAG) {
6168  checkForCycles(DAG->getRoot().getNode());
6169}
6170