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