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