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