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