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