c90c27abb3d93b7fc5b4323f5fa9f4be60247831
[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   assert(Value.getValueType() == MVT::i8 && "memset with non-byte fill value?");
3795   EVT IntVT = VT.getScalarType();
3796   if (!IntVT.isInteger())
3797     IntVT = EVT::getIntegerVT(*DAG.getContext(), IntVT.getSizeInBits());
3798
3799   Value = DAG.getNode(ISD::ZERO_EXTEND, dl, IntVT, Value);
3800   if (NumBits > 8) {
3801     // Use a multiplication with 0x010101... to extend the input to the
3802     // required length.
3803     APInt Magic = APInt::getSplat(NumBits, APInt(8, 0x01));
3804     Value = DAG.getNode(ISD::MUL, dl, IntVT, Value,
3805                         DAG.getConstant(Magic, IntVT));
3806   }
3807
3808   if (VT != Value.getValueType() && !VT.isInteger())
3809     Value = DAG.getNode(ISD::BITCAST, dl, VT.getScalarType(), Value);
3810   if (VT != Value.getValueType()) {
3811     assert(VT.getVectorElementType() == Value.getValueType() &&
3812            "value type should be one vector element here");
3813     SmallVector<SDValue, 8> BVOps(VT.getVectorNumElements(), Value);
3814     Value = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, BVOps);
3815   }
3816
3817   return Value;
3818 }
3819
3820 /// getMemsetStringVal - Similar to getMemsetValue. Except this is only
3821 /// used when a memcpy is turned into a memset when the source is a constant
3822 /// string ptr.
3823 static SDValue getMemsetStringVal(EVT VT, SDLoc dl, SelectionDAG &DAG,
3824                                   const TargetLowering &TLI, StringRef Str) {
3825   // Handle vector with all elements zero.
3826   if (Str.empty()) {
3827     if (VT.isInteger())
3828       return DAG.getConstant(0, VT);
3829     else if (VT == MVT::f32 || VT == MVT::f64 || VT == MVT::f128)
3830       return DAG.getConstantFP(0.0, VT);
3831     else if (VT.isVector()) {
3832       unsigned NumElts = VT.getVectorNumElements();
3833       MVT EltVT = (VT.getVectorElementType() == MVT::f32) ? MVT::i32 : MVT::i64;
3834       return DAG.getNode(ISD::BITCAST, dl, VT,
3835                          DAG.getConstant(0, EVT::getVectorVT(*DAG.getContext(),
3836                                                              EltVT, NumElts)));
3837     } else
3838       llvm_unreachable("Expected type!");
3839   }
3840
3841   assert(!VT.isVector() && "Can't handle vector type here!");
3842   unsigned NumVTBits = VT.getSizeInBits();
3843   unsigned NumVTBytes = NumVTBits / 8;
3844   unsigned NumBytes = std::min(NumVTBytes, unsigned(Str.size()));
3845
3846   APInt Val(NumVTBits, 0);
3847   if (TLI.isLittleEndian()) {
3848     for (unsigned i = 0; i != NumBytes; ++i)
3849       Val |= (uint64_t)(unsigned char)Str[i] << i*8;
3850   } else {
3851     for (unsigned i = 0; i != NumBytes; ++i)
3852       Val |= (uint64_t)(unsigned char)Str[i] << (NumVTBytes-i-1)*8;
3853   }
3854
3855   // If the "cost" of materializing the integer immediate is less than the cost
3856   // of a load, then it is cost effective to turn the load into the immediate.
3857   Type *Ty = VT.getTypeForEVT(*DAG.getContext());
3858   if (TLI.shouldConvertConstantLoadToIntImm(Val, Ty))
3859     return DAG.getConstant(Val, VT);
3860   return SDValue(nullptr, 0);
3861 }
3862
3863 /// getMemBasePlusOffset - Returns base and offset node for the
3864 ///
3865 static SDValue getMemBasePlusOffset(SDValue Base, unsigned Offset, SDLoc dl,
3866                                       SelectionDAG &DAG) {
3867   EVT VT = Base.getValueType();
3868   return DAG.getNode(ISD::ADD, dl,
3869                      VT, Base, DAG.getConstant(Offset, VT));
3870 }
3871
3872 /// isMemSrcFromString - Returns true if memcpy source is a string constant.
3873 ///
3874 static bool isMemSrcFromString(SDValue Src, StringRef &Str) {
3875   unsigned SrcDelta = 0;
3876   GlobalAddressSDNode *G = nullptr;
3877   if (Src.getOpcode() == ISD::GlobalAddress)
3878     G = cast<GlobalAddressSDNode>(Src);
3879   else if (Src.getOpcode() == ISD::ADD &&
3880            Src.getOperand(0).getOpcode() == ISD::GlobalAddress &&
3881            Src.getOperand(1).getOpcode() == ISD::Constant) {
3882     G = cast<GlobalAddressSDNode>(Src.getOperand(0));
3883     SrcDelta = cast<ConstantSDNode>(Src.getOperand(1))->getZExtValue();
3884   }
3885   if (!G)
3886     return false;
3887
3888   return getConstantStringInfo(G->getGlobal(), Str, SrcDelta, false);
3889 }
3890
3891 /// FindOptimalMemOpLowering - Determines the optimial series memory ops
3892 /// to replace the memset / memcpy. Return true if the number of memory ops
3893 /// is below the threshold. It returns the types of the sequence of
3894 /// memory ops to perform memset / memcpy by reference.
3895 static bool FindOptimalMemOpLowering(std::vector<EVT> &MemOps,
3896                                      unsigned Limit, uint64_t Size,
3897                                      unsigned DstAlign, unsigned SrcAlign,
3898                                      bool IsMemset,
3899                                      bool ZeroMemset,
3900                                      bool MemcpyStrSrc,
3901                                      bool AllowOverlap,
3902                                      SelectionDAG &DAG,
3903                                      const TargetLowering &TLI) {
3904   assert((SrcAlign == 0 || SrcAlign >= DstAlign) &&
3905          "Expecting memcpy / memset source to meet alignment requirement!");
3906   // If 'SrcAlign' is zero, that means the memory operation does not need to
3907   // load the value, i.e. memset or memcpy from constant string. Otherwise,
3908   // it's the inferred alignment of the source. 'DstAlign', on the other hand,
3909   // is the specified alignment of the memory operation. If it is zero, that
3910   // means it's possible to change the alignment of the destination.
3911   // 'MemcpyStrSrc' indicates whether the memcpy source is constant so it does
3912   // not need to be loaded.
3913   EVT VT = TLI.getOptimalMemOpType(Size, DstAlign, SrcAlign,
3914                                    IsMemset, ZeroMemset, MemcpyStrSrc,
3915                                    DAG.getMachineFunction());
3916
3917   if (VT == MVT::Other) {
3918     unsigned AS = 0;
3919     if (DstAlign >= TLI.getDataLayout()->getPointerPrefAlignment(AS) ||
3920         TLI.allowsMisalignedMemoryAccesses(VT, AS, DstAlign)) {
3921       VT = TLI.getPointerTy();
3922     } else {
3923       switch (DstAlign & 7) {
3924       case 0:  VT = MVT::i64; break;
3925       case 4:  VT = MVT::i32; break;
3926       case 2:  VT = MVT::i16; break;
3927       default: VT = MVT::i8;  break;
3928       }
3929     }
3930
3931     MVT LVT = MVT::i64;
3932     while (!TLI.isTypeLegal(LVT))
3933       LVT = (MVT::SimpleValueType)(LVT.SimpleTy - 1);
3934     assert(LVT.isInteger());
3935
3936     if (VT.bitsGT(LVT))
3937       VT = LVT;
3938   }
3939
3940   unsigned NumMemOps = 0;
3941   while (Size != 0) {
3942     unsigned VTSize = VT.getSizeInBits() / 8;
3943     while (VTSize > Size) {
3944       // For now, only use non-vector load / store's for the left-over pieces.
3945       EVT NewVT = VT;
3946       unsigned NewVTSize;
3947
3948       bool Found = false;
3949       if (VT.isVector() || VT.isFloatingPoint()) {
3950         NewVT = (VT.getSizeInBits() > 64) ? MVT::i64 : MVT::i32;
3951         if (TLI.isOperationLegalOrCustom(ISD::STORE, NewVT) &&
3952             TLI.isSafeMemOpType(NewVT.getSimpleVT()))
3953           Found = true;
3954         else if (NewVT == MVT::i64 &&
3955                  TLI.isOperationLegalOrCustom(ISD::STORE, MVT::f64) &&
3956                  TLI.isSafeMemOpType(MVT::f64)) {
3957           // i64 is usually not legal on 32-bit targets, but f64 may be.
3958           NewVT = MVT::f64;
3959           Found = true;
3960         }
3961       }
3962
3963       if (!Found) {
3964         do {
3965           NewVT = (MVT::SimpleValueType)(NewVT.getSimpleVT().SimpleTy - 1);
3966           if (NewVT == MVT::i8)
3967             break;
3968         } while (!TLI.isSafeMemOpType(NewVT.getSimpleVT()));
3969       }
3970       NewVTSize = NewVT.getSizeInBits() / 8;
3971
3972       // If the new VT cannot cover all of the remaining bits, then consider
3973       // issuing a (or a pair of) unaligned and overlapping load / store.
3974       // FIXME: Only does this for 64-bit or more since we don't have proper
3975       // cost model for unaligned load / store.
3976       bool Fast;
3977       unsigned AS = 0;
3978       if (NumMemOps && AllowOverlap &&
3979           VTSize >= 8 && NewVTSize < Size &&
3980           TLI.allowsMisalignedMemoryAccesses(VT, AS, DstAlign, &Fast) && Fast)
3981         VTSize = Size;
3982       else {
3983         VT = NewVT;
3984         VTSize = NewVTSize;
3985       }
3986     }
3987
3988     if (++NumMemOps > Limit)
3989       return false;
3990
3991     MemOps.push_back(VT);
3992     Size -= VTSize;
3993   }
3994
3995   return true;
3996 }
3997
3998 static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, SDLoc dl,
3999                                        SDValue Chain, SDValue Dst,
4000                                        SDValue Src, uint64_t Size,
4001                                        unsigned Align, bool isVol,
4002                                        bool AlwaysInline,
4003                                        MachinePointerInfo DstPtrInfo,
4004                                        MachinePointerInfo SrcPtrInfo) {
4005   // Turn a memcpy of undef to nop.
4006   if (Src.getOpcode() == ISD::UNDEF)
4007     return Chain;
4008
4009   // Expand memcpy to a series of load and store ops if the size operand falls
4010   // below a certain threshold.
4011   // TODO: In the AlwaysInline case, if the size is big then generate a loop
4012   // rather than maybe a humongous number of loads and stores.
4013   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
4014   std::vector<EVT> MemOps;
4015   bool DstAlignCanChange = false;
4016   MachineFunction &MF = DAG.getMachineFunction();
4017   MachineFrameInfo *MFI = MF.getFrameInfo();
4018   bool OptSize = MF.getFunction()->hasFnAttribute(Attribute::OptimizeForSize);
4019   FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst);
4020   if (FI && !MFI->isFixedObjectIndex(FI->getIndex()))
4021     DstAlignCanChange = true;
4022   unsigned SrcAlign = DAG.InferPtrAlignment(Src);
4023   if (Align > SrcAlign)
4024     SrcAlign = Align;
4025   StringRef Str;
4026   bool CopyFromStr = isMemSrcFromString(Src, Str);
4027   bool isZeroStr = CopyFromStr && Str.empty();
4028   unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemcpy(OptSize);
4029
4030   if (!FindOptimalMemOpLowering(MemOps, Limit, Size,
4031                                 (DstAlignCanChange ? 0 : Align),
4032                                 (isZeroStr ? 0 : SrcAlign),
4033                                 false, false, CopyFromStr, true, DAG, TLI))
4034     return SDValue();
4035
4036   if (DstAlignCanChange) {
4037     Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext());
4038     unsigned NewAlign = (unsigned) TLI.getDataLayout()->getABITypeAlignment(Ty);
4039
4040     // Don't promote to an alignment that would require dynamic stack
4041     // realignment.
4042     const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo();
4043     if (!TRI->needsStackRealignment(MF))
4044        while (NewAlign > Align &&
4045              TLI.getDataLayout()->exceedsNaturalStackAlignment(NewAlign))
4046           NewAlign /= 2;
4047
4048     if (NewAlign > Align) {
4049       // Give the stack frame object a larger alignment if needed.
4050       if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign)
4051         MFI->setObjectAlignment(FI->getIndex(), NewAlign);
4052       Align = NewAlign;
4053     }
4054   }
4055
4056   SmallVector<SDValue, 8> OutChains;
4057   unsigned NumMemOps = MemOps.size();
4058   uint64_t SrcOff = 0, DstOff = 0;
4059   for (unsigned i = 0; i != NumMemOps; ++i) {
4060     EVT VT = MemOps[i];
4061     unsigned VTSize = VT.getSizeInBits() / 8;
4062     SDValue Value, Store;
4063
4064     if (VTSize > Size) {
4065       // Issuing an unaligned load / store pair  that overlaps with the previous
4066       // pair. Adjust the offset accordingly.
4067       assert(i == NumMemOps-1 && i != 0);
4068       SrcOff -= VTSize - Size;
4069       DstOff -= VTSize - Size;
4070     }
4071
4072     if (CopyFromStr &&
4073         (isZeroStr || (VT.isInteger() && !VT.isVector()))) {
4074       // It's unlikely a store of a vector immediate can be done in a single
4075       // instruction. It would require a load from a constantpool first.
4076       // We only handle zero vectors here.
4077       // FIXME: Handle other cases where store of vector immediate is done in
4078       // a single instruction.
4079       Value = getMemsetStringVal(VT, dl, DAG, TLI, Str.substr(SrcOff));
4080       if (Value.getNode())
4081         Store = DAG.getStore(Chain, dl, Value,
4082                              getMemBasePlusOffset(Dst, DstOff, dl, DAG),
4083                              DstPtrInfo.getWithOffset(DstOff), isVol,
4084                              false, Align);
4085     }
4086
4087     if (!Store.getNode()) {
4088       // The type might not be legal for the target.  This should only happen
4089       // if the type is smaller than a legal type, as on PPC, so the right
4090       // thing to do is generate a LoadExt/StoreTrunc pair.  These simplify
4091       // to Load/Store if NVT==VT.
4092       // FIXME does the case above also need this?
4093       EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
4094       assert(NVT.bitsGE(VT));
4095       Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain,
4096                              getMemBasePlusOffset(Src, SrcOff, dl, DAG),
4097                              SrcPtrInfo.getWithOffset(SrcOff), VT, isVol, false,
4098                              false, MinAlign(SrcAlign, SrcOff));
4099       Store = DAG.getTruncStore(Chain, dl, Value,
4100                                 getMemBasePlusOffset(Dst, DstOff, dl, DAG),
4101                                 DstPtrInfo.getWithOffset(DstOff), VT, isVol,
4102                                 false, Align);
4103     }
4104     OutChains.push_back(Store);
4105     SrcOff += VTSize;
4106     DstOff += VTSize;
4107     Size -= VTSize;
4108   }
4109
4110   return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
4111 }
4112
4113 static SDValue getMemmoveLoadsAndStores(SelectionDAG &DAG, SDLoc dl,
4114                                         SDValue Chain, SDValue Dst,
4115                                         SDValue Src, uint64_t Size,
4116                                         unsigned Align,  bool isVol,
4117                                         bool AlwaysInline,
4118                                         MachinePointerInfo DstPtrInfo,
4119                                         MachinePointerInfo SrcPtrInfo) {
4120   // Turn a memmove of undef to nop.
4121   if (Src.getOpcode() == ISD::UNDEF)
4122     return Chain;
4123
4124   // Expand memmove to a series of load and store ops if the size operand falls
4125   // below a certain threshold.
4126   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
4127   std::vector<EVT> MemOps;
4128   bool DstAlignCanChange = false;
4129   MachineFunction &MF = DAG.getMachineFunction();
4130   MachineFrameInfo *MFI = MF.getFrameInfo();
4131   bool OptSize = MF.getFunction()->hasFnAttribute(Attribute::OptimizeForSize);
4132   FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst);
4133   if (FI && !MFI->isFixedObjectIndex(FI->getIndex()))
4134     DstAlignCanChange = true;
4135   unsigned SrcAlign = DAG.InferPtrAlignment(Src);
4136   if (Align > SrcAlign)
4137     SrcAlign = Align;
4138   unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemmove(OptSize);
4139
4140   if (!FindOptimalMemOpLowering(MemOps, Limit, Size,
4141                                 (DstAlignCanChange ? 0 : Align), SrcAlign,
4142                                 false, false, false, false, DAG, TLI))
4143     return SDValue();
4144
4145   if (DstAlignCanChange) {
4146     Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext());
4147     unsigned NewAlign = (unsigned) TLI.getDataLayout()->getABITypeAlignment(Ty);
4148     if (NewAlign > Align) {
4149       // Give the stack frame object a larger alignment if needed.
4150       if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign)
4151         MFI->setObjectAlignment(FI->getIndex(), NewAlign);
4152       Align = NewAlign;
4153     }
4154   }
4155
4156   uint64_t SrcOff = 0, DstOff = 0;
4157   SmallVector<SDValue, 8> LoadValues;
4158   SmallVector<SDValue, 8> LoadChains;
4159   SmallVector<SDValue, 8> OutChains;
4160   unsigned NumMemOps = MemOps.size();
4161   for (unsigned i = 0; i < NumMemOps; i++) {
4162     EVT VT = MemOps[i];
4163     unsigned VTSize = VT.getSizeInBits() / 8;
4164     SDValue Value;
4165
4166     Value = DAG.getLoad(VT, dl, Chain,
4167                         getMemBasePlusOffset(Src, SrcOff, dl, DAG),
4168                         SrcPtrInfo.getWithOffset(SrcOff), isVol,
4169                         false, false, SrcAlign);
4170     LoadValues.push_back(Value);
4171     LoadChains.push_back(Value.getValue(1));
4172     SrcOff += VTSize;
4173   }
4174   Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, LoadChains);
4175   OutChains.clear();
4176   for (unsigned i = 0; i < NumMemOps; i++) {
4177     EVT VT = MemOps[i];
4178     unsigned VTSize = VT.getSizeInBits() / 8;
4179     SDValue Store;
4180
4181     Store = DAG.getStore(Chain, dl, LoadValues[i],
4182                          getMemBasePlusOffset(Dst, DstOff, dl, DAG),
4183                          DstPtrInfo.getWithOffset(DstOff), isVol, false, Align);
4184     OutChains.push_back(Store);
4185     DstOff += VTSize;
4186   }
4187
4188   return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
4189 }
4190
4191 /// \brief Lower the call to 'memset' intrinsic function into a series of store
4192 /// operations.
4193 ///
4194 /// \param DAG Selection DAG where lowered code is placed.
4195 /// \param dl Link to corresponding IR location.
4196 /// \param Chain Control flow dependency.
4197 /// \param Dst Pointer to destination memory location.
4198 /// \param Src Value of byte to write into the memory.
4199 /// \param Size Number of bytes to write.
4200 /// \param Align Alignment of the destination in bytes.
4201 /// \param isVol True if destination is volatile.
4202 /// \param DstPtrInfo IR information on the memory pointer.
4203 /// \returns New head in the control flow, if lowering was successful, empty
4204 /// SDValue otherwise.
4205 ///
4206 /// The function tries to replace 'llvm.memset' intrinsic with several store
4207 /// operations and value calculation code. This is usually profitable for small
4208 /// memory size.
4209 static SDValue getMemsetStores(SelectionDAG &DAG, SDLoc dl,
4210                                SDValue Chain, SDValue Dst,
4211                                SDValue Src, uint64_t Size,
4212                                unsigned Align, bool isVol,
4213                                MachinePointerInfo DstPtrInfo) {
4214   // Turn a memset of undef to nop.
4215   if (Src.getOpcode() == ISD::UNDEF)
4216     return Chain;
4217
4218   // Expand memset to a series of load/store ops if the size operand
4219   // falls below a certain threshold.
4220   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
4221   std::vector<EVT> MemOps;
4222   bool DstAlignCanChange = false;
4223   MachineFunction &MF = DAG.getMachineFunction();
4224   MachineFrameInfo *MFI = MF.getFrameInfo();
4225   bool OptSize = MF.getFunction()->hasFnAttribute(Attribute::OptimizeForSize);
4226   FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst);
4227   if (FI && !MFI->isFixedObjectIndex(FI->getIndex()))
4228     DstAlignCanChange = true;
4229   bool IsZeroVal =
4230     isa<ConstantSDNode>(Src) && cast<ConstantSDNode>(Src)->isNullValue();
4231   if (!FindOptimalMemOpLowering(MemOps, TLI.getMaxStoresPerMemset(OptSize),
4232                                 Size, (DstAlignCanChange ? 0 : Align), 0,
4233                                 true, IsZeroVal, false, true, DAG, TLI))
4234     return SDValue();
4235
4236   if (DstAlignCanChange) {
4237     Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext());
4238     unsigned NewAlign = (unsigned) TLI.getDataLayout()->getABITypeAlignment(Ty);
4239     if (NewAlign > Align) {
4240       // Give the stack frame object a larger alignment if needed.
4241       if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign)
4242         MFI->setObjectAlignment(FI->getIndex(), NewAlign);
4243       Align = NewAlign;
4244     }
4245   }
4246
4247   SmallVector<SDValue, 8> OutChains;
4248   uint64_t DstOff = 0;
4249   unsigned NumMemOps = MemOps.size();
4250
4251   // Find the largest store and generate the bit pattern for it.
4252   EVT LargestVT = MemOps[0];
4253   for (unsigned i = 1; i < NumMemOps; i++)
4254     if (MemOps[i].bitsGT(LargestVT))
4255       LargestVT = MemOps[i];
4256   SDValue MemSetValue = getMemsetValue(Src, LargestVT, DAG, dl);
4257
4258   for (unsigned i = 0; i < NumMemOps; i++) {
4259     EVT VT = MemOps[i];
4260     unsigned VTSize = VT.getSizeInBits() / 8;
4261     if (VTSize > Size) {
4262       // Issuing an unaligned load / store pair  that overlaps with the previous
4263       // pair. Adjust the offset accordingly.
4264       assert(i == NumMemOps-1 && i != 0);
4265       DstOff -= VTSize - Size;
4266     }
4267
4268     // If this store is smaller than the largest store see whether we can get
4269     // the smaller value for free with a truncate.
4270     SDValue Value = MemSetValue;
4271     if (VT.bitsLT(LargestVT)) {
4272       if (!LargestVT.isVector() && !VT.isVector() &&
4273           TLI.isTruncateFree(LargestVT, VT))
4274         Value = DAG.getNode(ISD::TRUNCATE, dl, VT, MemSetValue);
4275       else
4276         Value = getMemsetValue(Src, VT, DAG, dl);
4277     }
4278     assert(Value.getValueType() == VT && "Value with wrong type.");
4279     SDValue Store = DAG.getStore(Chain, dl, Value,
4280                                  getMemBasePlusOffset(Dst, DstOff, dl, DAG),
4281                                  DstPtrInfo.getWithOffset(DstOff),
4282                                  isVol, false, Align);
4283     OutChains.push_back(Store);
4284     DstOff += VT.getSizeInBits() / 8;
4285     Size -= VTSize;
4286   }
4287
4288   return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
4289 }
4290
4291 SDValue SelectionDAG::getMemcpy(SDValue Chain, SDLoc dl, SDValue Dst,
4292                                 SDValue Src, SDValue Size,
4293                                 unsigned Align, bool isVol, bool AlwaysInline,
4294                                 MachinePointerInfo DstPtrInfo,
4295                                 MachinePointerInfo SrcPtrInfo) {
4296   assert(Align && "The SDAG layer expects explicit alignment and reserves 0");
4297
4298   // Check to see if we should lower the memcpy to loads and stores first.
4299   // For cases within the target-specified limits, this is the best choice.
4300   ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
4301   if (ConstantSize) {
4302     // Memcpy with size zero? Just return the original chain.
4303     if (ConstantSize->isNullValue())
4304       return Chain;
4305
4306     SDValue Result = getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src,
4307                                              ConstantSize->getZExtValue(),Align,
4308                                 isVol, false, DstPtrInfo, SrcPtrInfo);
4309     if (Result.getNode())
4310       return Result;
4311   }
4312
4313   // Then check to see if we should lower the memcpy with target-specific
4314   // code. If the target chooses to do this, this is the next best.
4315   if (TSI) {
4316     SDValue Result = TSI->EmitTargetCodeForMemcpy(
4317         *this, dl, Chain, Dst, Src, Size, Align, isVol, AlwaysInline,
4318         DstPtrInfo, SrcPtrInfo);
4319     if (Result.getNode())
4320       return Result;
4321   }
4322
4323   // If we really need inline code and the target declined to provide it,
4324   // use a (potentially long) sequence of loads and stores.
4325   if (AlwaysInline) {
4326     assert(ConstantSize && "AlwaysInline requires a constant size!");
4327     return getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src,
4328                                    ConstantSize->getZExtValue(), Align, isVol,
4329                                    true, DstPtrInfo, SrcPtrInfo);
4330   }
4331
4332   // FIXME: If the memcpy is volatile (isVol), lowering it to a plain libc
4333   // memcpy is not guaranteed to be safe. libc memcpys aren't required to
4334   // respect volatile, so they may do things like read or write memory
4335   // beyond the given memory regions. But fixing this isn't easy, and most
4336   // people don't care.
4337
4338   // Emit a library call.
4339   TargetLowering::ArgListTy Args;
4340   TargetLowering::ArgListEntry Entry;
4341   Entry.Ty = TLI->getDataLayout()->getIntPtrType(*getContext());
4342   Entry.Node = Dst; Args.push_back(Entry);
4343   Entry.Node = Src; Args.push_back(Entry);
4344   Entry.Node = Size; Args.push_back(Entry);
4345   // FIXME: pass in SDLoc
4346   TargetLowering::CallLoweringInfo CLI(*this);
4347   CLI.setDebugLoc(dl).setChain(Chain)
4348     .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMCPY),
4349                Type::getVoidTy(*getContext()),
4350                getExternalSymbol(TLI->getLibcallName(RTLIB::MEMCPY),
4351                                  TLI->getPointerTy()), std::move(Args), 0)
4352     .setDiscardResult();
4353   std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI);
4354
4355   return CallResult.second;
4356 }
4357
4358 SDValue SelectionDAG::getMemmove(SDValue Chain, SDLoc dl, SDValue Dst,
4359                                  SDValue Src, SDValue Size,
4360                                  unsigned Align, bool isVol,
4361                                  MachinePointerInfo DstPtrInfo,
4362                                  MachinePointerInfo SrcPtrInfo) {
4363   assert(Align && "The SDAG layer expects explicit alignment and reserves 0");
4364
4365   // Check to see if we should lower the memmove to loads and stores first.
4366   // For cases within the target-specified limits, this is the best choice.
4367   ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
4368   if (ConstantSize) {
4369     // Memmove with size zero? Just return the original chain.
4370     if (ConstantSize->isNullValue())
4371       return Chain;
4372
4373     SDValue Result =
4374       getMemmoveLoadsAndStores(*this, dl, Chain, Dst, Src,
4375                                ConstantSize->getZExtValue(), Align, isVol,
4376                                false, DstPtrInfo, SrcPtrInfo);
4377     if (Result.getNode())
4378       return Result;
4379   }
4380
4381   // Then check to see if we should lower the memmove with target-specific
4382   // code. If the target chooses to do this, this is the next best.
4383   if (TSI) {
4384     SDValue Result = TSI->EmitTargetCodeForMemmove(
4385         *this, dl, Chain, Dst, Src, Size, Align, isVol, DstPtrInfo, SrcPtrInfo);
4386     if (Result.getNode())
4387       return Result;
4388   }
4389
4390   // FIXME: If the memmove is volatile, lowering it to plain libc memmove may
4391   // not be safe.  See memcpy above for more details.
4392
4393   // Emit a library call.
4394   TargetLowering::ArgListTy Args;
4395   TargetLowering::ArgListEntry Entry;
4396   Entry.Ty = TLI->getDataLayout()->getIntPtrType(*getContext());
4397   Entry.Node = Dst; Args.push_back(Entry);
4398   Entry.Node = Src; Args.push_back(Entry);
4399   Entry.Node = Size; Args.push_back(Entry);
4400   // FIXME:  pass in SDLoc
4401   TargetLowering::CallLoweringInfo CLI(*this);
4402   CLI.setDebugLoc(dl).setChain(Chain)
4403     .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMMOVE),
4404                Type::getVoidTy(*getContext()),
4405                getExternalSymbol(TLI->getLibcallName(RTLIB::MEMMOVE),
4406                                  TLI->getPointerTy()), std::move(Args), 0)
4407     .setDiscardResult();
4408   std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI);
4409
4410   return CallResult.second;
4411 }
4412
4413 SDValue SelectionDAG::getMemset(SDValue Chain, SDLoc dl, SDValue Dst,
4414                                 SDValue Src, SDValue Size,
4415                                 unsigned Align, bool isVol,
4416                                 MachinePointerInfo DstPtrInfo) {
4417   assert(Align && "The SDAG layer expects explicit alignment and reserves 0");
4418
4419   // Check to see if we should lower the memset to stores first.
4420   // For cases within the target-specified limits, this is the best choice.
4421   ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
4422   if (ConstantSize) {
4423     // Memset with size zero? Just return the original chain.
4424     if (ConstantSize->isNullValue())
4425       return Chain;
4426
4427     SDValue Result =
4428       getMemsetStores(*this, dl, Chain, Dst, Src, ConstantSize->getZExtValue(),
4429                       Align, isVol, DstPtrInfo);
4430
4431     if (Result.getNode())
4432       return Result;
4433   }
4434
4435   // Then check to see if we should lower the memset with target-specific
4436   // code. If the target chooses to do this, this is the next best.
4437   if (TSI) {
4438     SDValue Result = TSI->EmitTargetCodeForMemset(
4439         *this, dl, Chain, Dst, Src, Size, Align, isVol, DstPtrInfo);
4440     if (Result.getNode())
4441       return Result;
4442   }
4443
4444   // Emit a library call.
4445   Type *IntPtrTy = TLI->getDataLayout()->getIntPtrType(*getContext());
4446   TargetLowering::ArgListTy Args;
4447   TargetLowering::ArgListEntry Entry;
4448   Entry.Node = Dst; Entry.Ty = IntPtrTy;
4449   Args.push_back(Entry);
4450   Entry.Node = Src;
4451   Entry.Ty = Src.getValueType().getTypeForEVT(*getContext());
4452   Args.push_back(Entry);
4453   Entry.Node = Size;
4454   Entry.Ty = IntPtrTy;
4455   Args.push_back(Entry);
4456
4457   // FIXME: pass in SDLoc
4458   TargetLowering::CallLoweringInfo CLI(*this);
4459   CLI.setDebugLoc(dl).setChain(Chain)
4460     .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMSET),
4461                Type::getVoidTy(*getContext()),
4462                getExternalSymbol(TLI->getLibcallName(RTLIB::MEMSET),
4463                                  TLI->getPointerTy()), std::move(Args), 0)
4464     .setDiscardResult();
4465
4466   std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI);
4467   return CallResult.second;
4468 }
4469
4470 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
4471                                 SDVTList VTList, ArrayRef<SDValue> Ops,
4472                                 MachineMemOperand *MMO,
4473                                 AtomicOrdering SuccessOrdering,
4474                                 AtomicOrdering FailureOrdering,
4475                                 SynchronizationScope SynchScope) {
4476   FoldingSetNodeID ID;
4477   ID.AddInteger(MemVT.getRawBits());
4478   AddNodeIDNode(ID, Opcode, VTList, Ops);
4479   ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
4480   void* IP = nullptr;
4481   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4482     cast<AtomicSDNode>(E)->refineAlignment(MMO);
4483     return SDValue(E, 0);
4484   }
4485
4486   // Allocate the operands array for the node out of the BumpPtrAllocator, since
4487   // SDNode doesn't have access to it.  This memory will be "leaked" when
4488   // the node is deallocated, but recovered when the allocator is released.
4489   // If the number of operands is less than 5 we use AtomicSDNode's internal
4490   // storage.
4491   unsigned NumOps = Ops.size();
4492   SDUse *DynOps = NumOps > 4 ? OperandAllocator.Allocate<SDUse>(NumOps)
4493                              : nullptr;
4494
4495   SDNode *N = new (NodeAllocator) AtomicSDNode(Opcode, dl.getIROrder(),
4496                                                dl.getDebugLoc(), VTList, MemVT,
4497                                                Ops.data(), DynOps, NumOps, MMO,
4498                                                SuccessOrdering, FailureOrdering,
4499                                                SynchScope);
4500   CSEMap.InsertNode(N, IP);
4501   InsertNode(N);
4502   return SDValue(N, 0);
4503 }
4504
4505 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
4506                                 SDVTList VTList, ArrayRef<SDValue> Ops,
4507                                 MachineMemOperand *MMO,
4508                                 AtomicOrdering Ordering,
4509                                 SynchronizationScope SynchScope) {
4510   return getAtomic(Opcode, dl, MemVT, VTList, Ops, MMO, Ordering,
4511                    Ordering, SynchScope);
4512 }
4513
4514 SDValue SelectionDAG::getAtomicCmpSwap(
4515     unsigned Opcode, SDLoc dl, EVT MemVT, SDVTList VTs, SDValue Chain,
4516     SDValue Ptr, SDValue Cmp, SDValue Swp, MachinePointerInfo PtrInfo,
4517     unsigned Alignment, AtomicOrdering SuccessOrdering,
4518     AtomicOrdering FailureOrdering, SynchronizationScope SynchScope) {
4519   assert(Opcode == ISD::ATOMIC_CMP_SWAP ||
4520          Opcode == ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS);
4521   assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types");
4522
4523   if (Alignment == 0)  // Ensure that codegen never sees alignment 0
4524     Alignment = getEVTAlignment(MemVT);
4525
4526   MachineFunction &MF = getMachineFunction();
4527
4528   // FIXME: Volatile isn't really correct; we should keep track of atomic
4529   // orderings in the memoperand.
4530   unsigned Flags = MachineMemOperand::MOVolatile;
4531   Flags |= MachineMemOperand::MOLoad;
4532   Flags |= MachineMemOperand::MOStore;
4533
4534   MachineMemOperand *MMO =
4535     MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment);
4536
4537   return getAtomicCmpSwap(Opcode, dl, MemVT, VTs, Chain, Ptr, Cmp, Swp, MMO,
4538                           SuccessOrdering, FailureOrdering, SynchScope);
4539 }
4540
4541 SDValue SelectionDAG::getAtomicCmpSwap(unsigned Opcode, SDLoc dl, EVT MemVT,
4542                                        SDVTList VTs, SDValue Chain, SDValue Ptr,
4543                                        SDValue Cmp, SDValue Swp,
4544                                        MachineMemOperand *MMO,
4545                                        AtomicOrdering SuccessOrdering,
4546                                        AtomicOrdering FailureOrdering,
4547                                        SynchronizationScope SynchScope) {
4548   assert(Opcode == ISD::ATOMIC_CMP_SWAP ||
4549          Opcode == ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS);
4550   assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types");
4551
4552   SDValue Ops[] = {Chain, Ptr, Cmp, Swp};
4553   return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO,
4554                    SuccessOrdering, FailureOrdering, SynchScope);
4555 }
4556
4557 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
4558                                 SDValue Chain,
4559                                 SDValue Ptr, SDValue Val,
4560                                 const Value* PtrVal,
4561                                 unsigned Alignment,
4562                                 AtomicOrdering Ordering,
4563                                 SynchronizationScope SynchScope) {
4564   if (Alignment == 0)  // Ensure that codegen never sees alignment 0
4565     Alignment = getEVTAlignment(MemVT);
4566
4567   MachineFunction &MF = getMachineFunction();
4568   // An atomic store does not load. An atomic load does not store.
4569   // (An atomicrmw obviously both loads and stores.)
4570   // For now, atomics are considered to be volatile always, and they are
4571   // chained as such.
4572   // FIXME: Volatile isn't really correct; we should keep track of atomic
4573   // orderings in the memoperand.
4574   unsigned Flags = MachineMemOperand::MOVolatile;
4575   if (Opcode != ISD::ATOMIC_STORE)
4576     Flags |= MachineMemOperand::MOLoad;
4577   if (Opcode != ISD::ATOMIC_LOAD)
4578     Flags |= MachineMemOperand::MOStore;
4579
4580   MachineMemOperand *MMO =
4581     MF.getMachineMemOperand(MachinePointerInfo(PtrVal), Flags,
4582                             MemVT.getStoreSize(), Alignment);
4583
4584   return getAtomic(Opcode, dl, MemVT, Chain, Ptr, Val, MMO,
4585                    Ordering, SynchScope);
4586 }
4587
4588 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
4589                                 SDValue Chain,
4590                                 SDValue Ptr, SDValue Val,
4591                                 MachineMemOperand *MMO,
4592                                 AtomicOrdering Ordering,
4593                                 SynchronizationScope SynchScope) {
4594   assert((Opcode == ISD::ATOMIC_LOAD_ADD ||
4595           Opcode == ISD::ATOMIC_LOAD_SUB ||
4596           Opcode == ISD::ATOMIC_LOAD_AND ||
4597           Opcode == ISD::ATOMIC_LOAD_OR ||
4598           Opcode == ISD::ATOMIC_LOAD_XOR ||
4599           Opcode == ISD::ATOMIC_LOAD_NAND ||
4600           Opcode == ISD::ATOMIC_LOAD_MIN ||
4601           Opcode == ISD::ATOMIC_LOAD_MAX ||
4602           Opcode == ISD::ATOMIC_LOAD_UMIN ||
4603           Opcode == ISD::ATOMIC_LOAD_UMAX ||
4604           Opcode == ISD::ATOMIC_SWAP ||
4605           Opcode == ISD::ATOMIC_STORE) &&
4606          "Invalid Atomic Op");
4607
4608   EVT VT = Val.getValueType();
4609
4610   SDVTList VTs = Opcode == ISD::ATOMIC_STORE ? getVTList(MVT::Other) :
4611                                                getVTList(VT, MVT::Other);
4612   SDValue Ops[] = {Chain, Ptr, Val};
4613   return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, Ordering, SynchScope);
4614 }
4615
4616 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
4617                                 EVT VT, SDValue Chain,
4618                                 SDValue Ptr,
4619                                 MachineMemOperand *MMO,
4620                                 AtomicOrdering Ordering,
4621                                 SynchronizationScope SynchScope) {
4622   assert(Opcode == ISD::ATOMIC_LOAD && "Invalid Atomic Op");
4623
4624   SDVTList VTs = getVTList(VT, MVT::Other);
4625   SDValue Ops[] = {Chain, Ptr};
4626   return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, Ordering, SynchScope);
4627 }
4628
4629 /// getMergeValues - Create a MERGE_VALUES node from the given operands.
4630 SDValue SelectionDAG::getMergeValues(ArrayRef<SDValue> Ops, SDLoc dl) {
4631   if (Ops.size() == 1)
4632     return Ops[0];
4633
4634   SmallVector<EVT, 4> VTs;
4635   VTs.reserve(Ops.size());
4636   for (unsigned i = 0; i < Ops.size(); ++i)
4637     VTs.push_back(Ops[i].getValueType());
4638   return getNode(ISD::MERGE_VALUES, dl, getVTList(VTs), Ops);
4639 }
4640
4641 SDValue
4642 SelectionDAG::getMemIntrinsicNode(unsigned Opcode, SDLoc dl, SDVTList VTList,
4643                                   ArrayRef<SDValue> Ops,
4644                                   EVT MemVT, MachinePointerInfo PtrInfo,
4645                                   unsigned Align, bool Vol,
4646                                   bool ReadMem, bool WriteMem, unsigned Size) {
4647   if (Align == 0)  // Ensure that codegen never sees alignment 0
4648     Align = getEVTAlignment(MemVT);
4649
4650   MachineFunction &MF = getMachineFunction();
4651   unsigned Flags = 0;
4652   if (WriteMem)
4653     Flags |= MachineMemOperand::MOStore;
4654   if (ReadMem)
4655     Flags |= MachineMemOperand::MOLoad;
4656   if (Vol)
4657     Flags |= MachineMemOperand::MOVolatile;
4658   if (!Size)
4659     Size = MemVT.getStoreSize();
4660   MachineMemOperand *MMO =
4661     MF.getMachineMemOperand(PtrInfo, Flags, Size, Align);
4662
4663   return getMemIntrinsicNode(Opcode, dl, VTList, Ops, MemVT, MMO);
4664 }
4665
4666 SDValue
4667 SelectionDAG::getMemIntrinsicNode(unsigned Opcode, SDLoc dl, SDVTList VTList,
4668                                   ArrayRef<SDValue> Ops, EVT MemVT,
4669                                   MachineMemOperand *MMO) {
4670   assert((Opcode == ISD::INTRINSIC_VOID ||
4671           Opcode == ISD::INTRINSIC_W_CHAIN ||
4672           Opcode == ISD::PREFETCH ||
4673           Opcode == ISD::LIFETIME_START ||
4674           Opcode == ISD::LIFETIME_END ||
4675           (Opcode <= INT_MAX &&
4676            (int)Opcode >= ISD::FIRST_TARGET_MEMORY_OPCODE)) &&
4677          "Opcode is not a memory-accessing opcode!");
4678
4679   // Memoize the node unless it returns a flag.
4680   MemIntrinsicSDNode *N;
4681   if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) {
4682     FoldingSetNodeID ID;
4683     AddNodeIDNode(ID, Opcode, VTList, Ops);
4684     ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
4685     void *IP = nullptr;
4686     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4687       cast<MemIntrinsicSDNode>(E)->refineAlignment(MMO);
4688       return SDValue(E, 0);
4689     }
4690
4691     N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl.getIROrder(),
4692                                                dl.getDebugLoc(), VTList, Ops,
4693                                                MemVT, MMO);
4694     CSEMap.InsertNode(N, IP);
4695   } else {
4696     N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl.getIROrder(),
4697                                                dl.getDebugLoc(), VTList, Ops,
4698                                                MemVT, MMO);
4699   }
4700   InsertNode(N);
4701   return SDValue(N, 0);
4702 }
4703
4704 /// InferPointerInfo - If the specified ptr/offset is a frame index, infer a
4705 /// MachinePointerInfo record from it.  This is particularly useful because the
4706 /// code generator has many cases where it doesn't bother passing in a
4707 /// MachinePointerInfo to getLoad or getStore when it has "FI+Cst".
4708 static MachinePointerInfo InferPointerInfo(SDValue Ptr, int64_t Offset = 0) {
4709   // If this is FI+Offset, we can model it.
4710   if (const FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr))
4711     return MachinePointerInfo::getFixedStack(FI->getIndex(), Offset);
4712
4713   // If this is (FI+Offset1)+Offset2, we can model it.
4714   if (Ptr.getOpcode() != ISD::ADD ||
4715       !isa<ConstantSDNode>(Ptr.getOperand(1)) ||
4716       !isa<FrameIndexSDNode>(Ptr.getOperand(0)))
4717     return MachinePointerInfo();
4718
4719   int FI = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex();
4720   return MachinePointerInfo::getFixedStack(FI, Offset+
4721                        cast<ConstantSDNode>(Ptr.getOperand(1))->getSExtValue());
4722 }
4723
4724 /// InferPointerInfo - If the specified ptr/offset is a frame index, infer a
4725 /// MachinePointerInfo record from it.  This is particularly useful because the
4726 /// code generator has many cases where it doesn't bother passing in a
4727 /// MachinePointerInfo to getLoad or getStore when it has "FI+Cst".
4728 static MachinePointerInfo InferPointerInfo(SDValue Ptr, SDValue OffsetOp) {
4729   // If the 'Offset' value isn't a constant, we can't handle this.
4730   if (ConstantSDNode *OffsetNode = dyn_cast<ConstantSDNode>(OffsetOp))
4731     return InferPointerInfo(Ptr, OffsetNode->getSExtValue());
4732   if (OffsetOp.getOpcode() == ISD::UNDEF)
4733     return InferPointerInfo(Ptr);
4734   return MachinePointerInfo();
4735 }
4736
4737
4738 SDValue
4739 SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
4740                       EVT VT, SDLoc dl, SDValue Chain,
4741                       SDValue Ptr, SDValue Offset,
4742                       MachinePointerInfo PtrInfo, EVT MemVT,
4743                       bool isVolatile, bool isNonTemporal, bool isInvariant,
4744                       unsigned Alignment, const AAMDNodes &AAInfo,
4745                       const MDNode *Ranges) {
4746   assert(Chain.getValueType() == MVT::Other &&
4747         "Invalid chain type");
4748   if (Alignment == 0)  // Ensure that codegen never sees alignment 0
4749     Alignment = getEVTAlignment(VT);
4750
4751   unsigned Flags = MachineMemOperand::MOLoad;
4752   if (isVolatile)
4753     Flags |= MachineMemOperand::MOVolatile;
4754   if (isNonTemporal)
4755     Flags |= MachineMemOperand::MONonTemporal;
4756   if (isInvariant)
4757     Flags |= MachineMemOperand::MOInvariant;
4758
4759   // If we don't have a PtrInfo, infer the trivial frame index case to simplify
4760   // clients.
4761   if (PtrInfo.V.isNull())
4762     PtrInfo = InferPointerInfo(Ptr, Offset);
4763
4764   MachineFunction &MF = getMachineFunction();
4765   MachineMemOperand *MMO =
4766     MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment,
4767                             AAInfo, Ranges);
4768   return getLoad(AM, ExtType, VT, dl, Chain, Ptr, Offset, MemVT, MMO);
4769 }
4770
4771 SDValue
4772 SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
4773                       EVT VT, SDLoc dl, SDValue Chain,
4774                       SDValue Ptr, SDValue Offset, EVT MemVT,
4775                       MachineMemOperand *MMO) {
4776   if (VT == MemVT) {
4777     ExtType = ISD::NON_EXTLOAD;
4778   } else if (ExtType == ISD::NON_EXTLOAD) {
4779     assert(VT == MemVT && "Non-extending load from different memory type!");
4780   } else {
4781     // Extending load.
4782     assert(MemVT.getScalarType().bitsLT(VT.getScalarType()) &&
4783            "Should only be an extending load, not truncating!");
4784     assert(VT.isInteger() == MemVT.isInteger() &&
4785            "Cannot convert from FP to Int or Int -> FP!");
4786     assert(VT.isVector() == MemVT.isVector() &&
4787            "Cannot use an ext load to convert to or from a vector!");
4788     assert((!VT.isVector() ||
4789             VT.getVectorNumElements() == MemVT.getVectorNumElements()) &&
4790            "Cannot use an ext load to change the number of vector elements!");
4791   }
4792
4793   bool Indexed = AM != ISD::UNINDEXED;
4794   assert((Indexed || Offset.getOpcode() == ISD::UNDEF) &&
4795          "Unindexed load with an offset!");
4796
4797   SDVTList VTs = Indexed ?
4798     getVTList(VT, Ptr.getValueType(), MVT::Other) : getVTList(VT, MVT::Other);
4799   SDValue Ops[] = { Chain, Ptr, Offset };
4800   FoldingSetNodeID ID;
4801   AddNodeIDNode(ID, ISD::LOAD, VTs, Ops);
4802   ID.AddInteger(MemVT.getRawBits());
4803   ID.AddInteger(encodeMemSDNodeFlags(ExtType, AM, MMO->isVolatile(),
4804                                      MMO->isNonTemporal(),
4805                                      MMO->isInvariant()));
4806   ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
4807   void *IP = nullptr;
4808   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4809     cast<LoadSDNode>(E)->refineAlignment(MMO);
4810     return SDValue(E, 0);
4811   }
4812   SDNode *N = new (NodeAllocator) LoadSDNode(Ops, dl.getIROrder(),
4813                                              dl.getDebugLoc(), VTs, AM, ExtType,
4814                                              MemVT, MMO);
4815   CSEMap.InsertNode(N, IP);
4816   InsertNode(N);
4817   return SDValue(N, 0);
4818 }
4819
4820 SDValue SelectionDAG::getLoad(EVT VT, SDLoc dl,
4821                               SDValue Chain, SDValue Ptr,
4822                               MachinePointerInfo PtrInfo,
4823                               bool isVolatile, bool isNonTemporal,
4824                               bool isInvariant, unsigned Alignment,
4825                               const AAMDNodes &AAInfo,
4826                               const MDNode *Ranges) {
4827   SDValue Undef = getUNDEF(Ptr.getValueType());
4828   return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef,
4829                  PtrInfo, VT, isVolatile, isNonTemporal, isInvariant, Alignment,
4830                  AAInfo, Ranges);
4831 }
4832
4833 SDValue SelectionDAG::getLoad(EVT VT, SDLoc dl,
4834                               SDValue Chain, SDValue Ptr,
4835                               MachineMemOperand *MMO) {
4836   SDValue Undef = getUNDEF(Ptr.getValueType());
4837   return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef,
4838                  VT, MMO);
4839 }
4840
4841 SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT,
4842                                  SDValue Chain, SDValue Ptr,
4843                                  MachinePointerInfo PtrInfo, EVT MemVT,
4844                                  bool isVolatile, bool isNonTemporal,
4845                                  bool isInvariant, unsigned Alignment,
4846                                  const AAMDNodes &AAInfo) {
4847   SDValue Undef = getUNDEF(Ptr.getValueType());
4848   return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef,
4849                  PtrInfo, MemVT, isVolatile, isNonTemporal, isInvariant,
4850                  Alignment, AAInfo);
4851 }
4852
4853
4854 SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT,
4855                                  SDValue Chain, SDValue Ptr, EVT MemVT,
4856                                  MachineMemOperand *MMO) {
4857   SDValue Undef = getUNDEF(Ptr.getValueType());
4858   return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef,
4859                  MemVT, MMO);
4860 }
4861
4862 SDValue
4863 SelectionDAG::getIndexedLoad(SDValue OrigLoad, SDLoc dl, SDValue Base,
4864                              SDValue Offset, ISD::MemIndexedMode AM) {
4865   LoadSDNode *LD = cast<LoadSDNode>(OrigLoad);
4866   assert(LD->getOffset().getOpcode() == ISD::UNDEF &&
4867          "Load is already a indexed load!");
4868   return getLoad(AM, LD->getExtensionType(), OrigLoad.getValueType(), dl,
4869                  LD->getChain(), Base, Offset, LD->getPointerInfo(),
4870                  LD->getMemoryVT(), LD->isVolatile(), LD->isNonTemporal(),
4871                  false, LD->getAlignment());
4872 }
4873
4874 SDValue SelectionDAG::getStore(SDValue Chain, SDLoc dl, SDValue Val,
4875                                SDValue Ptr, MachinePointerInfo PtrInfo,
4876                                bool isVolatile, bool isNonTemporal,
4877                                unsigned Alignment, const AAMDNodes &AAInfo) {
4878   assert(Chain.getValueType() == MVT::Other &&
4879         "Invalid chain type");
4880   if (Alignment == 0)  // Ensure that codegen never sees alignment 0
4881     Alignment = getEVTAlignment(Val.getValueType());
4882
4883   unsigned Flags = MachineMemOperand::MOStore;
4884   if (isVolatile)
4885     Flags |= MachineMemOperand::MOVolatile;
4886   if (isNonTemporal)
4887     Flags |= MachineMemOperand::MONonTemporal;
4888
4889   if (PtrInfo.V.isNull())
4890     PtrInfo = InferPointerInfo(Ptr);
4891
4892   MachineFunction &MF = getMachineFunction();
4893   MachineMemOperand *MMO =
4894     MF.getMachineMemOperand(PtrInfo, Flags,
4895                             Val.getValueType().getStoreSize(), Alignment,
4896                             AAInfo);
4897
4898   return getStore(Chain, dl, Val, Ptr, MMO);
4899 }
4900
4901 SDValue SelectionDAG::getStore(SDValue Chain, SDLoc dl, SDValue Val,
4902                                SDValue Ptr, MachineMemOperand *MMO) {
4903   assert(Chain.getValueType() == MVT::Other &&
4904         "Invalid chain type");
4905   EVT VT = Val.getValueType();
4906   SDVTList VTs = getVTList(MVT::Other);
4907   SDValue Undef = getUNDEF(Ptr.getValueType());
4908   SDValue Ops[] = { Chain, Val, Ptr, Undef };
4909   FoldingSetNodeID ID;
4910   AddNodeIDNode(ID, ISD::STORE, VTs, Ops);
4911   ID.AddInteger(VT.getRawBits());
4912   ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(),
4913                                      MMO->isNonTemporal(), MMO->isInvariant()));
4914   ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
4915   void *IP = nullptr;
4916   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4917     cast<StoreSDNode>(E)->refineAlignment(MMO);
4918     return SDValue(E, 0);
4919   }
4920   SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(),
4921                                               dl.getDebugLoc(), VTs,
4922                                               ISD::UNINDEXED, false, VT, MMO);
4923   CSEMap.InsertNode(N, IP);
4924   InsertNode(N);
4925   return SDValue(N, 0);
4926 }
4927
4928 SDValue SelectionDAG::getTruncStore(SDValue Chain, SDLoc dl, SDValue Val,
4929                                     SDValue Ptr, MachinePointerInfo PtrInfo,
4930                                     EVT SVT,bool isVolatile, bool isNonTemporal,
4931                                     unsigned Alignment,
4932                                     const AAMDNodes &AAInfo) {
4933   assert(Chain.getValueType() == MVT::Other &&
4934         "Invalid chain type");
4935   if (Alignment == 0)  // Ensure that codegen never sees alignment 0
4936     Alignment = getEVTAlignment(SVT);
4937
4938   unsigned Flags = MachineMemOperand::MOStore;
4939   if (isVolatile)
4940     Flags |= MachineMemOperand::MOVolatile;
4941   if (isNonTemporal)
4942     Flags |= MachineMemOperand::MONonTemporal;
4943
4944   if (PtrInfo.V.isNull())
4945     PtrInfo = InferPointerInfo(Ptr);
4946
4947   MachineFunction &MF = getMachineFunction();
4948   MachineMemOperand *MMO =
4949     MF.getMachineMemOperand(PtrInfo, Flags, SVT.getStoreSize(), Alignment,
4950                             AAInfo);
4951
4952   return getTruncStore(Chain, dl, Val, Ptr, SVT, MMO);
4953 }
4954
4955 SDValue SelectionDAG::getTruncStore(SDValue Chain, SDLoc dl, SDValue Val,
4956                                     SDValue Ptr, EVT SVT,
4957                                     MachineMemOperand *MMO) {
4958   EVT VT = Val.getValueType();
4959
4960   assert(Chain.getValueType() == MVT::Other &&
4961         "Invalid chain type");
4962   if (VT == SVT)
4963     return getStore(Chain, dl, Val, Ptr, MMO);
4964
4965   assert(SVT.getScalarType().bitsLT(VT.getScalarType()) &&
4966          "Should only be a truncating store, not extending!");
4967   assert(VT.isInteger() == SVT.isInteger() &&
4968          "Can't do FP-INT conversion!");
4969   assert(VT.isVector() == SVT.isVector() &&
4970          "Cannot use trunc store to convert to or from a vector!");
4971   assert((!VT.isVector() ||
4972           VT.getVectorNumElements() == SVT.getVectorNumElements()) &&
4973          "Cannot use trunc store to change the number of vector elements!");
4974
4975   SDVTList VTs = getVTList(MVT::Other);
4976   SDValue Undef = getUNDEF(Ptr.getValueType());
4977   SDValue Ops[] = { Chain, Val, Ptr, Undef };
4978   FoldingSetNodeID ID;
4979   AddNodeIDNode(ID, ISD::STORE, VTs, Ops);
4980   ID.AddInteger(SVT.getRawBits());
4981   ID.AddInteger(encodeMemSDNodeFlags(true, ISD::UNINDEXED, MMO->isVolatile(),
4982                                      MMO->isNonTemporal(), MMO->isInvariant()));
4983   ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
4984   void *IP = nullptr;
4985   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
4986     cast<StoreSDNode>(E)->refineAlignment(MMO);
4987     return SDValue(E, 0);
4988   }
4989   SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(),
4990                                               dl.getDebugLoc(), VTs,
4991                                               ISD::UNINDEXED, true, SVT, MMO);
4992   CSEMap.InsertNode(N, IP);
4993   InsertNode(N);
4994   return SDValue(N, 0);
4995 }
4996
4997 SDValue
4998 SelectionDAG::getIndexedStore(SDValue OrigStore, SDLoc dl, SDValue Base,
4999                               SDValue Offset, ISD::MemIndexedMode AM) {
5000   StoreSDNode *ST = cast<StoreSDNode>(OrigStore);
5001   assert(ST->getOffset().getOpcode() == ISD::UNDEF &&
5002          "Store is already a indexed store!");
5003   SDVTList VTs = getVTList(Base.getValueType(), MVT::Other);
5004   SDValue Ops[] = { ST->getChain(), ST->getValue(), Base, Offset };
5005   FoldingSetNodeID ID;
5006   AddNodeIDNode(ID, ISD::STORE, VTs, Ops);
5007   ID.AddInteger(ST->getMemoryVT().getRawBits());
5008   ID.AddInteger(ST->getRawSubclassData());
5009   ID.AddInteger(ST->getPointerInfo().getAddrSpace());
5010   void *IP = nullptr;
5011   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
5012     return SDValue(E, 0);
5013
5014   SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(),
5015                                               dl.getDebugLoc(), VTs, AM,
5016                                               ST->isTruncatingStore(),
5017                                               ST->getMemoryVT(),
5018                                               ST->getMemOperand());
5019   CSEMap.InsertNode(N, IP);
5020   InsertNode(N);
5021   return SDValue(N, 0);
5022 }
5023
5024 SDValue
5025 SelectionDAG::getMaskedLoad(EVT VT, SDLoc dl, SDValue Chain,
5026                             SDValue Ptr, SDValue Mask, SDValue Src0, EVT MemVT,
5027                             MachineMemOperand *MMO, ISD::LoadExtType ExtTy) {
5028
5029   SDVTList VTs = getVTList(VT, MVT::Other);
5030   SDValue Ops[] = { Chain, Ptr, Mask, Src0 };
5031   FoldingSetNodeID ID;
5032   AddNodeIDNode(ID, ISD::MLOAD, VTs, Ops);
5033   ID.AddInteger(VT.getRawBits());
5034   ID.AddInteger(encodeMemSDNodeFlags(ExtTy, ISD::UNINDEXED,
5035                                      MMO->isVolatile(),
5036                                      MMO->isNonTemporal(),
5037                                      MMO->isInvariant()));
5038   ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
5039   void *IP = nullptr;
5040   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
5041     cast<MaskedLoadSDNode>(E)->refineAlignment(MMO);
5042     return SDValue(E, 0);
5043   }
5044   SDNode *N = new (NodeAllocator) MaskedLoadSDNode(dl.getIROrder(),
5045                                              dl.getDebugLoc(), Ops, 4, VTs,
5046                                              ExtTy, MemVT, MMO);
5047   CSEMap.InsertNode(N, IP);
5048   InsertNode(N);
5049   return SDValue(N, 0);
5050 }
5051
5052 SDValue SelectionDAG::getMaskedStore(SDValue Chain, SDLoc dl, SDValue Val,
5053                                      SDValue Ptr, SDValue Mask, EVT MemVT,
5054                                      MachineMemOperand *MMO, bool isTrunc) {
5055   assert(Chain.getValueType() == MVT::Other &&
5056         "Invalid chain type");
5057   EVT VT = Val.getValueType();
5058   SDVTList VTs = getVTList(MVT::Other);
5059   SDValue Ops[] = { Chain, Ptr, Mask, Val };
5060   FoldingSetNodeID ID;
5061   AddNodeIDNode(ID, ISD::MSTORE, VTs, Ops);
5062   ID.AddInteger(VT.getRawBits());
5063   ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(),
5064                                      MMO->isNonTemporal(), MMO->isInvariant()));
5065   ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
5066   void *IP = nullptr;
5067   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
5068     cast<MaskedStoreSDNode>(E)->refineAlignment(MMO);
5069     return SDValue(E, 0);
5070   }
5071   SDNode *N = new (NodeAllocator) MaskedStoreSDNode(dl.getIROrder(),
5072                                                     dl.getDebugLoc(), Ops, 4,
5073                                                     VTs, isTrunc, MemVT, MMO);
5074   CSEMap.InsertNode(N, IP);
5075   InsertNode(N);
5076   return SDValue(N, 0);
5077 }
5078
5079 SDValue SelectionDAG::getVAArg(EVT VT, SDLoc dl,
5080                                SDValue Chain, SDValue Ptr,
5081                                SDValue SV,
5082                                unsigned Align) {
5083   SDValue Ops[] = { Chain, Ptr, SV, getTargetConstant(Align, MVT::i32) };
5084   return getNode(ISD::VAARG, dl, getVTList(VT, MVT::Other), Ops);
5085 }
5086
5087 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT,
5088                               ArrayRef<SDUse> Ops) {
5089   switch (Ops.size()) {
5090   case 0: return getNode(Opcode, DL, VT);
5091   case 1: return getNode(Opcode, DL, VT, static_cast<const SDValue>(Ops[0]));
5092   case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]);
5093   case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]);
5094   default: break;
5095   }
5096
5097   // Copy from an SDUse array into an SDValue array for use with
5098   // the regular getNode logic.
5099   SmallVector<SDValue, 8> NewOps(Ops.begin(), Ops.end());
5100   return getNode(Opcode, DL, VT, NewOps);
5101 }
5102
5103 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT,
5104                               ArrayRef<SDValue> Ops) {
5105   unsigned NumOps = Ops.size();
5106   switch (NumOps) {
5107   case 0: return getNode(Opcode, DL, VT);
5108   case 1: return getNode(Opcode, DL, VT, Ops[0]);
5109   case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]);
5110   case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]);
5111   default: break;
5112   }
5113
5114   switch (Opcode) {
5115   default: break;
5116   case ISD::SELECT_CC: {
5117     assert(NumOps == 5 && "SELECT_CC takes 5 operands!");
5118     assert(Ops[0].getValueType() == Ops[1].getValueType() &&
5119            "LHS and RHS of condition must have same type!");
5120     assert(Ops[2].getValueType() == Ops[3].getValueType() &&
5121            "True and False arms of SelectCC must have same type!");
5122     assert(Ops[2].getValueType() == VT &&
5123            "select_cc node must be of same type as true and false value!");
5124     break;
5125   }
5126   case ISD::BR_CC: {
5127     assert(NumOps == 5 && "BR_CC takes 5 operands!");
5128     assert(Ops[2].getValueType() == Ops[3].getValueType() &&
5129            "LHS/RHS of comparison should match types!");
5130     break;
5131   }
5132   }
5133
5134   // Memoize nodes.
5135   SDNode *N;
5136   SDVTList VTs = getVTList(VT);
5137
5138   if (VT != MVT::Glue) {
5139     FoldingSetNodeID ID;
5140     AddNodeIDNode(ID, Opcode, VTs, Ops);
5141     void *IP = nullptr;
5142
5143     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
5144       return SDValue(E, 0);
5145
5146     N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(),
5147                                    VTs, Ops);
5148     CSEMap.InsertNode(N, IP);
5149   } else {
5150     N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(),
5151                                    VTs, Ops);
5152   }
5153
5154   InsertNode(N);
5155   return SDValue(N, 0);
5156 }
5157
5158 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL,
5159                               ArrayRef<EVT> ResultTys, ArrayRef<SDValue> Ops) {
5160   return getNode(Opcode, DL, getVTList(ResultTys), Ops);
5161 }
5162
5163 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
5164                               ArrayRef<SDValue> Ops) {
5165   if (VTList.NumVTs == 1)
5166     return getNode(Opcode, DL, VTList.VTs[0], Ops);
5167
5168 #if 0
5169   switch (Opcode) {
5170   // FIXME: figure out how to safely handle things like
5171   // int foo(int x) { return 1 << (x & 255); }
5172   // int bar() { return foo(256); }
5173   case ISD::SRA_PARTS:
5174   case ISD::SRL_PARTS:
5175   case ISD::SHL_PARTS:
5176     if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG &&
5177         cast<VTSDNode>(N3.getOperand(1))->getVT() != MVT::i1)
5178       return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0));
5179     else if (N3.getOpcode() == ISD::AND)
5180       if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N3.getOperand(1))) {
5181         // If the and is only masking out bits that cannot effect the shift,
5182         // eliminate the and.
5183         unsigned NumBits = VT.getScalarType().getSizeInBits()*2;
5184         if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1)
5185           return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0));
5186       }
5187     break;
5188   }
5189 #endif
5190
5191   // Memoize the node unless it returns a flag.
5192   SDNode *N;
5193   unsigned NumOps = Ops.size();
5194   if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) {
5195     FoldingSetNodeID ID;
5196     AddNodeIDNode(ID, Opcode, VTList, Ops);
5197     void *IP = nullptr;
5198     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
5199       return SDValue(E, 0);
5200
5201     if (NumOps == 1) {
5202       N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(),
5203                                           DL.getDebugLoc(), VTList, Ops[0]);
5204     } else if (NumOps == 2) {
5205       N = new (NodeAllocator) BinarySDNode(Opcode, DL.getIROrder(),
5206                                            DL.getDebugLoc(), VTList, Ops[0],
5207                                            Ops[1]);
5208     } else if (NumOps == 3) {
5209       N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(),
5210                                             DL.getDebugLoc(), VTList, Ops[0],
5211                                             Ops[1], Ops[2]);
5212     } else {
5213       N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(),
5214                                      VTList, Ops);
5215     }
5216     CSEMap.InsertNode(N, IP);
5217   } else {
5218     if (NumOps == 1) {
5219       N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(),
5220                                           DL.getDebugLoc(), VTList, Ops[0]);
5221     } else if (NumOps == 2) {
5222       N = new (NodeAllocator) BinarySDNode(Opcode, DL.getIROrder(),
5223                                            DL.getDebugLoc(), VTList, Ops[0],
5224                                            Ops[1]);
5225     } else if (NumOps == 3) {
5226       N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(),
5227                                             DL.getDebugLoc(), VTList, Ops[0],
5228                                             Ops[1], Ops[2]);
5229     } else {
5230       N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(),
5231                                      VTList, Ops);
5232     }
5233   }
5234   InsertNode(N);
5235   return SDValue(N, 0);
5236 }
5237
5238 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList) {
5239   return getNode(Opcode, DL, VTList, None);
5240 }
5241
5242 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
5243                               SDValue N1) {
5244   SDValue Ops[] = { N1 };
5245   return getNode(Opcode, DL, VTList, Ops);
5246 }
5247
5248 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
5249                               SDValue N1, SDValue N2) {
5250   SDValue Ops[] = { N1, N2 };
5251   return getNode(Opcode, DL, VTList, Ops);
5252 }
5253
5254 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
5255                               SDValue N1, SDValue N2, SDValue N3) {
5256   SDValue Ops[] = { N1, N2, N3 };
5257   return getNode(Opcode, DL, VTList, Ops);
5258 }
5259
5260 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
5261                               SDValue N1, SDValue N2, SDValue N3,
5262                               SDValue N4) {
5263   SDValue Ops[] = { N1, N2, N3, N4 };
5264   return getNode(Opcode, DL, VTList, Ops);
5265 }
5266
5267 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
5268                               SDValue N1, SDValue N2, SDValue N3,
5269                               SDValue N4, SDValue N5) {
5270   SDValue Ops[] = { N1, N2, N3, N4, N5 };
5271   return getNode(Opcode, DL, VTList, Ops);
5272 }
5273
5274 SDVTList SelectionDAG::getVTList(EVT VT) {
5275   return makeVTList(SDNode::getValueTypeList(VT), 1);
5276 }
5277
5278 SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2) {
5279   FoldingSetNodeID ID;
5280   ID.AddInteger(2U);
5281   ID.AddInteger(VT1.getRawBits());
5282   ID.AddInteger(VT2.getRawBits());
5283
5284   void *IP = nullptr;
5285   SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP);
5286   if (!Result) {
5287     EVT *Array = Allocator.Allocate<EVT>(2);
5288     Array[0] = VT1;
5289     Array[1] = VT2;
5290     Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 2);
5291     VTListMap.InsertNode(Result, IP);
5292   }
5293   return Result->getSDVTList();
5294 }
5295
5296 SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3) {
5297   FoldingSetNodeID ID;
5298   ID.AddInteger(3U);
5299   ID.AddInteger(VT1.getRawBits());
5300   ID.AddInteger(VT2.getRawBits());
5301   ID.AddInteger(VT3.getRawBits());
5302
5303   void *IP = nullptr;
5304   SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP);
5305   if (!Result) {
5306     EVT *Array = Allocator.Allocate<EVT>(3);
5307     Array[0] = VT1;
5308     Array[1] = VT2;
5309     Array[2] = VT3;
5310     Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 3);
5311     VTListMap.InsertNode(Result, IP);
5312   }
5313   return Result->getSDVTList();
5314 }
5315
5316 SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3, EVT VT4) {
5317   FoldingSetNodeID ID;
5318   ID.AddInteger(4U);
5319   ID.AddInteger(VT1.getRawBits());
5320   ID.AddInteger(VT2.getRawBits());
5321   ID.AddInteger(VT3.getRawBits());
5322   ID.AddInteger(VT4.getRawBits());
5323
5324   void *IP = nullptr;
5325   SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP);
5326   if (!Result) {
5327     EVT *Array = Allocator.Allocate<EVT>(4);
5328     Array[0] = VT1;
5329     Array[1] = VT2;
5330     Array[2] = VT3;
5331     Array[3] = VT4;
5332     Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 4);
5333     VTListMap.InsertNode(Result, IP);
5334   }
5335   return Result->getSDVTList();
5336 }
5337
5338 SDVTList SelectionDAG::getVTList(ArrayRef<EVT> VTs) {
5339   unsigned NumVTs = VTs.size();
5340   FoldingSetNodeID ID;
5341   ID.AddInteger(NumVTs);
5342   for (unsigned index = 0; index < NumVTs; index++) {
5343     ID.AddInteger(VTs[index].getRawBits());
5344   }
5345
5346   void *IP = nullptr;
5347   SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP);
5348   if (!Result) {
5349     EVT *Array = Allocator.Allocate<EVT>(NumVTs);
5350     std::copy(VTs.begin(), VTs.end(), Array);
5351     Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, NumVTs);
5352     VTListMap.InsertNode(Result, IP);
5353   }
5354   return Result->getSDVTList();
5355 }
5356
5357
5358 /// UpdateNodeOperands - *Mutate* the specified node in-place to have the
5359 /// specified operands.  If the resultant node already exists in the DAG,
5360 /// this does not modify the specified node, instead it returns the node that
5361 /// already exists.  If the resultant node does not exist in the DAG, the
5362 /// input node is returned.  As a degenerate case, if you specify the same
5363 /// input operands as the node already has, the input node is returned.
5364 SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op) {
5365   assert(N->getNumOperands() == 1 && "Update with wrong number of operands");
5366
5367   // Check to see if there is no change.
5368   if (Op == N->getOperand(0)) return N;
5369
5370   // See if the modified node already exists.
5371   void *InsertPos = nullptr;
5372   if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos))
5373     return Existing;
5374
5375   // Nope it doesn't.  Remove the node from its current place in the maps.
5376   if (InsertPos)
5377     if (!RemoveNodeFromCSEMaps(N))
5378       InsertPos = nullptr;
5379
5380   // Now we update the operands.
5381   N->OperandList[0].set(Op);
5382
5383   // If this gets put into a CSE map, add it.
5384   if (InsertPos) CSEMap.InsertNode(N, InsertPos);
5385   return N;
5386 }
5387
5388 SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2) {
5389   assert(N->getNumOperands() == 2 && "Update with wrong number of operands");
5390
5391   // Check to see if there is no change.
5392   if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1))
5393     return N;   // No operands changed, just return the input node.
5394
5395   // See if the modified node already exists.
5396   void *InsertPos = nullptr;
5397   if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos))
5398     return Existing;
5399
5400   // Nope it doesn't.  Remove the node from its current place in the maps.
5401   if (InsertPos)
5402     if (!RemoveNodeFromCSEMaps(N))
5403       InsertPos = nullptr;
5404
5405   // Now we update the operands.
5406   if (N->OperandList[0] != Op1)
5407     N->OperandList[0].set(Op1);
5408   if (N->OperandList[1] != Op2)
5409     N->OperandList[1].set(Op2);
5410
5411   // If this gets put into a CSE map, add it.
5412   if (InsertPos) CSEMap.InsertNode(N, InsertPos);
5413   return N;
5414 }
5415
5416 SDNode *SelectionDAG::
5417 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, SDValue Op3) {
5418   SDValue Ops[] = { Op1, Op2, Op3 };
5419   return UpdateNodeOperands(N, Ops);
5420 }
5421
5422 SDNode *SelectionDAG::
5423 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
5424                    SDValue Op3, SDValue Op4) {
5425   SDValue Ops[] = { Op1, Op2, Op3, Op4 };
5426   return UpdateNodeOperands(N, Ops);
5427 }
5428
5429 SDNode *SelectionDAG::
5430 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
5431                    SDValue Op3, SDValue Op4, SDValue Op5) {
5432   SDValue Ops[] = { Op1, Op2, Op3, Op4, Op5 };
5433   return UpdateNodeOperands(N, Ops);
5434 }
5435
5436 SDNode *SelectionDAG::
5437 UpdateNodeOperands(SDNode *N, ArrayRef<SDValue> Ops) {
5438   unsigned NumOps = Ops.size();
5439   assert(N->getNumOperands() == NumOps &&
5440          "Update with wrong number of operands");
5441
5442   // If no operands changed just return the input node.
5443   if (Ops.empty() || std::equal(Ops.begin(), Ops.end(), N->op_begin()))
5444     return N;
5445
5446   // See if the modified node already exists.
5447   void *InsertPos = nullptr;
5448   if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, InsertPos))
5449     return Existing;
5450
5451   // Nope it doesn't.  Remove the node from its current place in the maps.
5452   if (InsertPos)
5453     if (!RemoveNodeFromCSEMaps(N))
5454       InsertPos = nullptr;
5455
5456   // Now we update the operands.
5457   for (unsigned i = 0; i != NumOps; ++i)
5458     if (N->OperandList[i] != Ops[i])
5459       N->OperandList[i].set(Ops[i]);
5460
5461   // If this gets put into a CSE map, add it.
5462   if (InsertPos) CSEMap.InsertNode(N, InsertPos);
5463   return N;
5464 }
5465
5466 /// DropOperands - Release the operands and set this node to have
5467 /// zero operands.
5468 void SDNode::DropOperands() {
5469   // Unlike the code in MorphNodeTo that does this, we don't need to
5470   // watch for dead nodes here.
5471   for (op_iterator I = op_begin(), E = op_end(); I != E; ) {
5472     SDUse &Use = *I++;
5473     Use.set(SDValue());
5474   }
5475 }
5476
5477 /// SelectNodeTo - These are wrappers around MorphNodeTo that accept a
5478 /// machine opcode.
5479 ///
5480 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5481                                    EVT VT) {
5482   SDVTList VTs = getVTList(VT);
5483   return SelectNodeTo(N, MachineOpc, VTs, None);
5484 }
5485
5486 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5487                                    EVT VT, SDValue Op1) {
5488   SDVTList VTs = getVTList(VT);
5489   SDValue Ops[] = { Op1 };
5490   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5491 }
5492
5493 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5494                                    EVT VT, SDValue Op1,
5495                                    SDValue Op2) {
5496   SDVTList VTs = getVTList(VT);
5497   SDValue Ops[] = { Op1, Op2 };
5498   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5499 }
5500
5501 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5502                                    EVT VT, SDValue Op1,
5503                                    SDValue Op2, SDValue Op3) {
5504   SDVTList VTs = getVTList(VT);
5505   SDValue Ops[] = { Op1, Op2, Op3 };
5506   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5507 }
5508
5509 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5510                                    EVT VT, ArrayRef<SDValue> Ops) {
5511   SDVTList VTs = getVTList(VT);
5512   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5513 }
5514
5515 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5516                                    EVT VT1, EVT VT2, ArrayRef<SDValue> Ops) {
5517   SDVTList VTs = getVTList(VT1, VT2);
5518   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5519 }
5520
5521 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5522                                    EVT VT1, EVT VT2) {
5523   SDVTList VTs = getVTList(VT1, VT2);
5524   return SelectNodeTo(N, MachineOpc, VTs, None);
5525 }
5526
5527 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5528                                    EVT VT1, EVT VT2, EVT VT3,
5529                                    ArrayRef<SDValue> Ops) {
5530   SDVTList VTs = getVTList(VT1, VT2, VT3);
5531   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5532 }
5533
5534 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5535                                    EVT VT1, EVT VT2, EVT VT3, EVT VT4,
5536                                    ArrayRef<SDValue> Ops) {
5537   SDVTList VTs = getVTList(VT1, VT2, VT3, VT4);
5538   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5539 }
5540
5541 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5542                                    EVT VT1, EVT VT2,
5543                                    SDValue Op1) {
5544   SDVTList VTs = getVTList(VT1, VT2);
5545   SDValue Ops[] = { Op1 };
5546   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5547 }
5548
5549 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5550                                    EVT VT1, EVT VT2,
5551                                    SDValue Op1, SDValue Op2) {
5552   SDVTList VTs = getVTList(VT1, VT2);
5553   SDValue Ops[] = { Op1, Op2 };
5554   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5555 }
5556
5557 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5558                                    EVT VT1, EVT VT2,
5559                                    SDValue Op1, SDValue Op2,
5560                                    SDValue Op3) {
5561   SDVTList VTs = getVTList(VT1, VT2);
5562   SDValue Ops[] = { Op1, Op2, Op3 };
5563   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5564 }
5565
5566 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5567                                    EVT VT1, EVT VT2, EVT VT3,
5568                                    SDValue Op1, SDValue Op2,
5569                                    SDValue Op3) {
5570   SDVTList VTs = getVTList(VT1, VT2, VT3);
5571   SDValue Ops[] = { Op1, Op2, Op3 };
5572   return SelectNodeTo(N, MachineOpc, VTs, Ops);
5573 }
5574
5575 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
5576                                    SDVTList VTs,ArrayRef<SDValue> Ops) {
5577   N = MorphNodeTo(N, ~MachineOpc, VTs, Ops);
5578   // Reset the NodeID to -1.
5579   N->setNodeId(-1);
5580   return N;
5581 }
5582
5583 /// UpdadeSDLocOnMergedSDNode - If the opt level is -O0 then it throws away
5584 /// the line number information on the merged node since it is not possible to
5585 /// preserve the information that operation is associated with multiple lines.
5586 /// This will make the debugger working better at -O0, were there is a higher
5587 /// probability having other instructions associated with that line.
5588 ///
5589 /// For IROrder, we keep the smaller of the two
5590 SDNode *SelectionDAG::UpdadeSDLocOnMergedSDNode(SDNode *N, SDLoc OLoc) {
5591   DebugLoc NLoc = N->getDebugLoc();
5592   if (NLoc && OptLevel == CodeGenOpt::None && OLoc.getDebugLoc() != NLoc) {
5593     N->setDebugLoc(DebugLoc());
5594   }
5595   unsigned Order = std::min(N->getIROrder(), OLoc.getIROrder());
5596   N->setIROrder(Order);
5597   return N;
5598 }
5599
5600 /// MorphNodeTo - This *mutates* the specified node to have the specified
5601 /// return type, opcode, and operands.
5602 ///
5603 /// Note that MorphNodeTo returns the resultant node.  If there is already a
5604 /// node of the specified opcode and operands, it returns that node instead of
5605 /// the current one.  Note that the SDLoc need not be the same.
5606 ///
5607 /// Using MorphNodeTo is faster than creating a new node and swapping it in
5608 /// with ReplaceAllUsesWith both because it often avoids allocating a new
5609 /// node, and because it doesn't require CSE recalculation for any of
5610 /// the node's users.
5611 ///
5612 /// However, note that MorphNodeTo recursively deletes dead nodes from the DAG.
5613 /// As a consequence it isn't appropriate to use from within the DAG combiner or
5614 /// the legalizer which maintain worklists that would need to be updated when
5615 /// deleting things.
5616 SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc,
5617                                   SDVTList VTs, ArrayRef<SDValue> Ops) {
5618   unsigned NumOps = Ops.size();
5619   // If an identical node already exists, use it.
5620   void *IP = nullptr;
5621   if (VTs.VTs[VTs.NumVTs-1] != MVT::Glue) {
5622     FoldingSetNodeID ID;
5623     AddNodeIDNode(ID, Opc, VTs, Ops);
5624     if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
5625       return UpdadeSDLocOnMergedSDNode(ON, SDLoc(N));
5626   }
5627
5628   if (!RemoveNodeFromCSEMaps(N))
5629     IP = nullptr;
5630
5631   // Start the morphing.
5632   N->NodeType = Opc;
5633   N->ValueList = VTs.VTs;
5634   N->NumValues = VTs.NumVTs;
5635
5636   // Clear the operands list, updating used nodes to remove this from their
5637   // use list.  Keep track of any operands that become dead as a result.
5638   SmallPtrSet<SDNode*, 16> DeadNodeSet;
5639   for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) {
5640     SDUse &Use = *I++;
5641     SDNode *Used = Use.getNode();
5642     Use.set(SDValue());
5643     if (Used->use_empty())
5644       DeadNodeSet.insert(Used);
5645   }
5646
5647   if (MachineSDNode *MN = dyn_cast<MachineSDNode>(N)) {
5648     // Initialize the memory references information.
5649     MN->setMemRefs(nullptr, nullptr);
5650     // If NumOps is larger than the # of operands we can have in a
5651     // MachineSDNode, reallocate the operand list.
5652     if (NumOps > MN->NumOperands || !MN->OperandsNeedDelete) {
5653       if (MN->OperandsNeedDelete)
5654         delete[] MN->OperandList;
5655       if (NumOps > array_lengthof(MN->LocalOperands))
5656         // We're creating a final node that will live unmorphed for the
5657         // remainder of the current SelectionDAG iteration, so we can allocate
5658         // the operands directly out of a pool with no recycling metadata.
5659         MN->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps),
5660                          Ops.data(), NumOps);
5661       else
5662         MN->InitOperands(MN->LocalOperands, Ops.data(), NumOps);
5663       MN->OperandsNeedDelete = false;
5664     } else
5665       MN->InitOperands(MN->OperandList, Ops.data(), NumOps);
5666   } else {
5667     // If NumOps is larger than the # of operands we currently have, reallocate
5668     // the operand list.
5669     if (NumOps > N->NumOperands) {
5670       if (N->OperandsNeedDelete)
5671         delete[] N->OperandList;
5672       N->InitOperands(new SDUse[NumOps], Ops.data(), NumOps);
5673       N->OperandsNeedDelete = true;
5674     } else
5675       N->InitOperands(N->OperandList, Ops.data(), NumOps);
5676   }
5677
5678   // Delete any nodes that are still dead after adding the uses for the
5679   // new operands.
5680   if (!DeadNodeSet.empty()) {
5681     SmallVector<SDNode *, 16> DeadNodes;
5682     for (SDNode *N : DeadNodeSet)
5683       if (N->use_empty())
5684         DeadNodes.push_back(N);
5685     RemoveDeadNodes(DeadNodes);
5686   }
5687
5688   if (IP)
5689     CSEMap.InsertNode(N, IP);   // Memoize the new node.
5690   return N;
5691 }
5692
5693
5694 /// getMachineNode - These are used for target selectors to create a new node
5695 /// with specified return type(s), MachineInstr opcode, and operands.
5696 ///
5697 /// Note that getMachineNode returns the resultant node.  If there is already a
5698 /// node of the specified opcode and operands, it returns that node instead of
5699 /// the current one.
5700 MachineSDNode *
5701 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT) {
5702   SDVTList VTs = getVTList(VT);
5703   return getMachineNode(Opcode, dl, VTs, None);
5704 }
5705
5706 MachineSDNode *
5707 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, SDValue Op1) {
5708   SDVTList VTs = getVTList(VT);
5709   SDValue Ops[] = { Op1 };
5710   return getMachineNode(Opcode, dl, VTs, Ops);
5711 }
5712
5713 MachineSDNode *
5714 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT,
5715                              SDValue Op1, SDValue Op2) {
5716   SDVTList VTs = getVTList(VT);
5717   SDValue Ops[] = { Op1, Op2 };
5718   return getMachineNode(Opcode, dl, VTs, Ops);
5719 }
5720
5721 MachineSDNode *
5722 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT,
5723                              SDValue Op1, SDValue Op2, SDValue Op3) {
5724   SDVTList VTs = getVTList(VT);
5725   SDValue Ops[] = { Op1, Op2, Op3 };
5726   return getMachineNode(Opcode, dl, VTs, Ops);
5727 }
5728
5729 MachineSDNode *
5730 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT,
5731                              ArrayRef<SDValue> Ops) {
5732   SDVTList VTs = getVTList(VT);
5733   return getMachineNode(Opcode, dl, VTs, Ops);
5734 }
5735
5736 MachineSDNode *
5737 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT1, EVT VT2) {
5738   SDVTList VTs = getVTList(VT1, VT2);
5739   return getMachineNode(Opcode, dl, VTs, None);
5740 }
5741
5742 MachineSDNode *
5743 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
5744                              EVT VT1, EVT VT2, SDValue Op1) {
5745   SDVTList VTs = getVTList(VT1, VT2);
5746   SDValue Ops[] = { Op1 };
5747   return getMachineNode(Opcode, dl, VTs, Ops);
5748 }
5749
5750 MachineSDNode *
5751 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
5752                              EVT VT1, EVT VT2, SDValue Op1, SDValue Op2) {
5753   SDVTList VTs = getVTList(VT1, VT2);
5754   SDValue Ops[] = { Op1, Op2 };
5755   return getMachineNode(Opcode, dl, VTs, Ops);
5756 }
5757
5758 MachineSDNode *
5759 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
5760                              EVT VT1, EVT VT2, SDValue Op1,
5761                              SDValue Op2, SDValue Op3) {
5762   SDVTList VTs = getVTList(VT1, VT2);
5763   SDValue Ops[] = { Op1, Op2, Op3 };
5764   return getMachineNode(Opcode, dl, VTs, Ops);
5765 }
5766
5767 MachineSDNode *
5768 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
5769                              EVT VT1, EVT VT2,
5770                              ArrayRef<SDValue> Ops) {
5771   SDVTList VTs = getVTList(VT1, VT2);
5772   return getMachineNode(Opcode, dl, VTs, Ops);
5773 }
5774
5775 MachineSDNode *
5776 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
5777                              EVT VT1, EVT VT2, EVT VT3,
5778                              SDValue Op1, SDValue Op2) {
5779   SDVTList VTs = getVTList(VT1, VT2, VT3);
5780   SDValue Ops[] = { Op1, Op2 };
5781   return getMachineNode(Opcode, dl, VTs, Ops);
5782 }
5783
5784 MachineSDNode *
5785 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
5786                              EVT VT1, EVT VT2, EVT VT3,
5787                              SDValue Op1, SDValue Op2, SDValue Op3) {
5788   SDVTList VTs = getVTList(VT1, VT2, VT3);
5789   SDValue Ops[] = { Op1, Op2, Op3 };
5790   return getMachineNode(Opcode, dl, VTs, Ops);
5791 }
5792
5793 MachineSDNode *
5794 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
5795                              EVT VT1, EVT VT2, EVT VT3,
5796                              ArrayRef<SDValue> Ops) {
5797   SDVTList VTs = getVTList(VT1, VT2, VT3);
5798   return getMachineNode(Opcode, dl, VTs, Ops);
5799 }
5800
5801 MachineSDNode *
5802 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT1,
5803                              EVT VT2, EVT VT3, EVT VT4,
5804                              ArrayRef<SDValue> Ops) {
5805   SDVTList VTs = getVTList(VT1, VT2, VT3, VT4);
5806   return getMachineNode(Opcode, dl, VTs, Ops);
5807 }
5808
5809 MachineSDNode *
5810 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
5811                              ArrayRef<EVT> ResultTys,
5812                              ArrayRef<SDValue> Ops) {
5813   SDVTList VTs = getVTList(ResultTys);
5814   return getMachineNode(Opcode, dl, VTs, Ops);
5815 }
5816
5817 MachineSDNode *
5818 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc DL, SDVTList VTs,
5819                              ArrayRef<SDValue> OpsArray) {
5820   bool DoCSE = VTs.VTs[VTs.NumVTs-1] != MVT::Glue;
5821   MachineSDNode *N;
5822   void *IP = nullptr;
5823   const SDValue *Ops = OpsArray.data();
5824   unsigned NumOps = OpsArray.size();
5825
5826   if (DoCSE) {
5827     FoldingSetNodeID ID;
5828     AddNodeIDNode(ID, ~Opcode, VTs, OpsArray);
5829     IP = nullptr;
5830     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
5831       return cast<MachineSDNode>(UpdadeSDLocOnMergedSDNode(E, DL));
5832     }
5833   }
5834
5835   // Allocate a new MachineSDNode.
5836   N = new (NodeAllocator) MachineSDNode(~Opcode, DL.getIROrder(),
5837                                         DL.getDebugLoc(), VTs);
5838
5839   // Initialize the operands list.
5840   if (NumOps > array_lengthof(N->LocalOperands))
5841     // We're creating a final node that will live unmorphed for the
5842     // remainder of the current SelectionDAG iteration, so we can allocate
5843     // the operands directly out of a pool with no recycling metadata.
5844     N->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps),
5845                     Ops, NumOps);
5846   else
5847     N->InitOperands(N->LocalOperands, Ops, NumOps);
5848   N->OperandsNeedDelete = false;
5849
5850   if (DoCSE)
5851     CSEMap.InsertNode(N, IP);
5852
5853   InsertNode(N);
5854   return N;
5855 }
5856
5857 /// getTargetExtractSubreg - A convenience function for creating
5858 /// TargetOpcode::EXTRACT_SUBREG nodes.
5859 SDValue
5860 SelectionDAG::getTargetExtractSubreg(int SRIdx, SDLoc DL, EVT VT,
5861                                      SDValue Operand) {
5862   SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32);
5863   SDNode *Subreg = getMachineNode(TargetOpcode::EXTRACT_SUBREG, DL,
5864                                   VT, Operand, SRIdxVal);
5865   return SDValue(Subreg, 0);
5866 }
5867
5868 /// getTargetInsertSubreg - A convenience function for creating
5869 /// TargetOpcode::INSERT_SUBREG nodes.
5870 SDValue
5871 SelectionDAG::getTargetInsertSubreg(int SRIdx, SDLoc DL, EVT VT,
5872                                     SDValue Operand, SDValue Subreg) {
5873   SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32);
5874   SDNode *Result = getMachineNode(TargetOpcode::INSERT_SUBREG, DL,
5875                                   VT, Operand, Subreg, SRIdxVal);
5876   return SDValue(Result, 0);
5877 }
5878
5879 /// getNodeIfExists - Get the specified node if it's already available, or
5880 /// else return NULL.
5881 SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList,
5882                                       ArrayRef<SDValue> Ops, bool nuw, bool nsw,
5883                                       bool exact) {
5884   if (VTList.VTs[VTList.NumVTs - 1] != MVT::Glue) {
5885     FoldingSetNodeID ID;
5886     AddNodeIDNode(ID, Opcode, VTList, Ops);
5887     if (isBinOpWithFlags(Opcode))
5888       AddBinaryNodeIDCustom(ID, nuw, nsw, exact);
5889     void *IP = nullptr;
5890     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
5891       return E;
5892   }
5893   return nullptr;
5894 }
5895
5896 /// getDbgValue - Creates a SDDbgValue node.
5897 ///
5898 /// SDNode
5899 SDDbgValue *SelectionDAG::getDbgValue(MDNode *Var, MDNode *Expr, SDNode *N,
5900                                       unsigned R, bool IsIndirect, uint64_t Off,
5901                                       DebugLoc DL, unsigned O) {
5902   return new (Allocator) SDDbgValue(Var, Expr, N, R, IsIndirect, Off, DL, O);
5903 }
5904
5905 /// Constant
5906 SDDbgValue *SelectionDAG::getConstantDbgValue(MDNode *Var, MDNode *Expr,
5907                                               const Value *C, uint64_t Off,
5908                                               DebugLoc DL, unsigned O) {
5909   return new (Allocator) SDDbgValue(Var, Expr, C, Off, DL, O);
5910 }
5911
5912 /// FrameIndex
5913 SDDbgValue *SelectionDAG::getFrameIndexDbgValue(MDNode *Var, MDNode *Expr,
5914                                                 unsigned FI, uint64_t Off,
5915                                                 DebugLoc DL, unsigned O) {
5916   return new (Allocator) SDDbgValue(Var, Expr, FI, Off, DL, O);
5917 }
5918
5919 namespace {
5920
5921 /// RAUWUpdateListener - Helper for ReplaceAllUsesWith - When the node
5922 /// pointed to by a use iterator is deleted, increment the use iterator
5923 /// so that it doesn't dangle.
5924 ///
5925 class RAUWUpdateListener : public SelectionDAG::DAGUpdateListener {
5926   SDNode::use_iterator &UI;
5927   SDNode::use_iterator &UE;
5928
5929   void NodeDeleted(SDNode *N, SDNode *E) override {
5930     // Increment the iterator as needed.
5931     while (UI != UE && N == *UI)
5932       ++UI;
5933   }
5934
5935 public:
5936   RAUWUpdateListener(SelectionDAG &d,
5937                      SDNode::use_iterator &ui,
5938                      SDNode::use_iterator &ue)
5939     : SelectionDAG::DAGUpdateListener(d), UI(ui), UE(ue) {}
5940 };
5941
5942 }
5943
5944 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
5945 /// This can cause recursive merging of nodes in the DAG.
5946 ///
5947 /// This version assumes From has a single result value.
5948 ///
5949 void SelectionDAG::ReplaceAllUsesWith(SDValue FromN, SDValue To) {
5950   SDNode *From = FromN.getNode();
5951   assert(From->getNumValues() == 1 && FromN.getResNo() == 0 &&
5952          "Cannot replace with this method!");
5953   assert(From != To.getNode() && "Cannot replace uses of with self");
5954
5955   // Iterate over all the existing uses of From. New uses will be added
5956   // to the beginning of the use list, which we avoid visiting.
5957   // This specifically avoids visiting uses of From that arise while the
5958   // replacement is happening, because any such uses would be the result
5959   // of CSE: If an existing node looks like From after one of its operands
5960   // is replaced by To, we don't want to replace of all its users with To
5961   // too. See PR3018 for more info.
5962   SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
5963   RAUWUpdateListener Listener(*this, UI, UE);
5964   while (UI != UE) {
5965     SDNode *User = *UI;
5966
5967     // This node is about to morph, remove its old self from the CSE maps.
5968     RemoveNodeFromCSEMaps(User);
5969
5970     // A user can appear in a use list multiple times, and when this
5971     // happens the uses are usually next to each other in the list.
5972     // To help reduce the number of CSE recomputations, process all
5973     // the uses of this user that we can find this way.
5974     do {
5975       SDUse &Use = UI.getUse();
5976       ++UI;
5977       Use.set(To);
5978     } while (UI != UE && *UI == User);
5979
5980     // Now that we have modified User, add it back to the CSE maps.  If it
5981     // already exists there, recursively merge the results together.
5982     AddModifiedNodeToCSEMaps(User);
5983   }
5984
5985   // If we just RAUW'd the root, take note.
5986   if (FromN == getRoot())
5987     setRoot(To);
5988 }
5989
5990 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
5991 /// This can cause recursive merging of nodes in the DAG.
5992 ///
5993 /// This version assumes that for each value of From, there is a
5994 /// corresponding value in To in the same position with the same type.
5995 ///
5996 void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To) {
5997 #ifndef NDEBUG
5998   for (unsigned i = 0, e = From->getNumValues(); i != e; ++i)
5999     assert((!From->hasAnyUseOfValue(i) ||
6000             From->getValueType(i) == To->getValueType(i)) &&
6001            "Cannot use this version of ReplaceAllUsesWith!");
6002 #endif
6003
6004   // Handle the trivial case.
6005   if (From == To)
6006     return;
6007
6008   // Iterate over just the existing users of From. See the comments in
6009   // the ReplaceAllUsesWith above.
6010   SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
6011   RAUWUpdateListener Listener(*this, UI, UE);
6012   while (UI != UE) {
6013     SDNode *User = *UI;
6014
6015     // This node is about to morph, remove its old self from the CSE maps.
6016     RemoveNodeFromCSEMaps(User);
6017
6018     // A user can appear in a use list multiple times, and when this
6019     // happens the uses are usually next to each other in the list.
6020     // To help reduce the number of CSE recomputations, process all
6021     // the uses of this user that we can find this way.
6022     do {
6023       SDUse &Use = UI.getUse();
6024       ++UI;
6025       Use.setNode(To);
6026     } while (UI != UE && *UI == User);
6027
6028     // Now that we have modified User, add it back to the CSE maps.  If it
6029     // already exists there, recursively merge the results together.
6030     AddModifiedNodeToCSEMaps(User);
6031   }
6032
6033   // If we just RAUW'd the root, take note.
6034   if (From == getRoot().getNode())
6035     setRoot(SDValue(To, getRoot().getResNo()));
6036 }
6037
6038 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
6039 /// This can cause recursive merging of nodes in the DAG.
6040 ///
6041 /// This version can replace From with any result values.  To must match the
6042 /// number and types of values returned by From.
6043 void SelectionDAG::ReplaceAllUsesWith(SDNode *From, const SDValue *To) {
6044   if (From->getNumValues() == 1)  // Handle the simple case efficiently.
6045     return ReplaceAllUsesWith(SDValue(From, 0), To[0]);
6046
6047   // Iterate over just the existing users of From. See the comments in
6048   // the ReplaceAllUsesWith above.
6049   SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
6050   RAUWUpdateListener Listener(*this, UI, UE);
6051   while (UI != UE) {
6052     SDNode *User = *UI;
6053
6054     // This node is about to morph, remove its old self from the CSE maps.
6055     RemoveNodeFromCSEMaps(User);
6056
6057     // A user can appear in a use list multiple times, and when this
6058     // happens the uses are usually next to each other in the list.
6059     // To help reduce the number of CSE recomputations, process all
6060     // the uses of this user that we can find this way.
6061     do {
6062       SDUse &Use = UI.getUse();
6063       const SDValue &ToOp = To[Use.getResNo()];
6064       ++UI;
6065       Use.set(ToOp);
6066     } while (UI != UE && *UI == User);
6067
6068     // Now that we have modified User, add it back to the CSE maps.  If it
6069     // already exists there, recursively merge the results together.
6070     AddModifiedNodeToCSEMaps(User);
6071   }
6072
6073   // If we just RAUW'd the root, take note.
6074   if (From == getRoot().getNode())
6075     setRoot(SDValue(To[getRoot().getResNo()]));
6076 }
6077
6078 /// ReplaceAllUsesOfValueWith - Replace any uses of From with To, leaving
6079 /// uses of other values produced by From.getNode() alone.  The Deleted
6080 /// vector is handled the same way as for ReplaceAllUsesWith.
6081 void SelectionDAG::ReplaceAllUsesOfValueWith(SDValue From, SDValue To){
6082   // Handle the really simple, really trivial case efficiently.
6083   if (From == To) return;
6084
6085   // Handle the simple, trivial, case efficiently.
6086   if (From.getNode()->getNumValues() == 1) {
6087     ReplaceAllUsesWith(From, To);
6088     return;
6089   }
6090
6091   // Iterate over just the existing users of From. See the comments in
6092   // the ReplaceAllUsesWith above.
6093   SDNode::use_iterator UI = From.getNode()->use_begin(),
6094                        UE = From.getNode()->use_end();
6095   RAUWUpdateListener Listener(*this, UI, UE);
6096   while (UI != UE) {
6097     SDNode *User = *UI;
6098     bool UserRemovedFromCSEMaps = false;
6099
6100     // A user can appear in a use list multiple times, and when this
6101     // happens the uses are usually next to each other in the list.
6102     // To help reduce the number of CSE recomputations, process all
6103     // the uses of this user that we can find this way.
6104     do {
6105       SDUse &Use = UI.getUse();
6106
6107       // Skip uses of different values from the same node.
6108       if (Use.getResNo() != From.getResNo()) {
6109         ++UI;
6110         continue;
6111       }
6112
6113       // If this node hasn't been modified yet, it's still in the CSE maps,
6114       // so remove its old self from the CSE maps.
6115       if (!UserRemovedFromCSEMaps) {
6116         RemoveNodeFromCSEMaps(User);
6117         UserRemovedFromCSEMaps = true;
6118       }
6119
6120       ++UI;
6121       Use.set(To);
6122     } while (UI != UE && *UI == User);
6123
6124     // We are iterating over all uses of the From node, so if a use
6125     // doesn't use the specific value, no changes are made.
6126     if (!UserRemovedFromCSEMaps)
6127       continue;
6128
6129     // Now that we have modified User, add it back to the CSE maps.  If it
6130     // already exists there, recursively merge the results together.
6131     AddModifiedNodeToCSEMaps(User);
6132   }
6133
6134   // If we just RAUW'd the root, take note.
6135   if (From == getRoot())
6136     setRoot(To);
6137 }
6138
6139 namespace {
6140   /// UseMemo - This class is used by SelectionDAG::ReplaceAllUsesOfValuesWith
6141   /// to record information about a use.
6142   struct UseMemo {
6143     SDNode *User;
6144     unsigned Index;
6145     SDUse *Use;
6146   };
6147
6148   /// operator< - Sort Memos by User.
6149   bool operator<(const UseMemo &L, const UseMemo &R) {
6150     return (intptr_t)L.User < (intptr_t)R.User;
6151   }
6152 }
6153
6154 /// ReplaceAllUsesOfValuesWith - Replace any uses of From with To, leaving
6155 /// uses of other values produced by From.getNode() alone.  The same value
6156 /// may appear in both the From and To list.  The Deleted vector is
6157 /// handled the same way as for ReplaceAllUsesWith.
6158 void SelectionDAG::ReplaceAllUsesOfValuesWith(const SDValue *From,
6159                                               const SDValue *To,
6160                                               unsigned Num){
6161   // Handle the simple, trivial case efficiently.
6162   if (Num == 1)
6163     return ReplaceAllUsesOfValueWith(*From, *To);
6164
6165   // Read up all the uses and make records of them. This helps
6166   // processing new uses that are introduced during the
6167   // replacement process.
6168   SmallVector<UseMemo, 4> Uses;
6169   for (unsigned i = 0; i != Num; ++i) {
6170     unsigned FromResNo = From[i].getResNo();
6171     SDNode *FromNode = From[i].getNode();
6172     for (SDNode::use_iterator UI = FromNode->use_begin(),
6173          E = FromNode->use_end(); UI != E; ++UI) {
6174       SDUse &Use = UI.getUse();
6175       if (Use.getResNo() == FromResNo) {
6176         UseMemo Memo = { *UI, i, &Use };
6177         Uses.push_back(Memo);
6178       }
6179     }
6180   }
6181
6182   // Sort the uses, so that all the uses from a given User are together.
6183   std::sort(Uses.begin(), Uses.end());
6184
6185   for (unsigned UseIndex = 0, UseIndexEnd = Uses.size();
6186        UseIndex != UseIndexEnd; ) {
6187     // We know that this user uses some value of From.  If it is the right
6188     // value, update it.
6189     SDNode *User = Uses[UseIndex].User;
6190
6191     // This node is about to morph, remove its old self from the CSE maps.
6192     RemoveNodeFromCSEMaps(User);
6193
6194     // The Uses array is sorted, so all the uses for a given User
6195     // are next to each other in the list.
6196     // To help reduce the number of CSE recomputations, process all
6197     // the uses of this user that we can find this way.
6198     do {
6199       unsigned i = Uses[UseIndex].Index;
6200       SDUse &Use = *Uses[UseIndex].Use;
6201       ++UseIndex;
6202
6203       Use.set(To[i]);
6204     } while (UseIndex != UseIndexEnd && Uses[UseIndex].User == User);
6205
6206     // Now that we have modified User, add it back to the CSE maps.  If it
6207     // already exists there, recursively merge the results together.
6208     AddModifiedNodeToCSEMaps(User);
6209   }
6210 }
6211
6212 /// AssignTopologicalOrder - Assign a unique node id for each node in the DAG
6213 /// based on their topological order. It returns the maximum id and a vector
6214 /// of the SDNodes* in assigned order by reference.
6215 unsigned SelectionDAG::AssignTopologicalOrder() {
6216
6217   unsigned DAGSize = 0;
6218
6219   // SortedPos tracks the progress of the algorithm. Nodes before it are
6220   // sorted, nodes after it are unsorted. When the algorithm completes
6221   // it is at the end of the list.
6222   allnodes_iterator SortedPos = allnodes_begin();
6223
6224   // Visit all the nodes. Move nodes with no operands to the front of
6225   // the list immediately. Annotate nodes that do have operands with their
6226   // operand count. Before we do this, the Node Id fields of the nodes
6227   // may contain arbitrary values. After, the Node Id fields for nodes
6228   // before SortedPos will contain the topological sort index, and the
6229   // Node Id fields for nodes At SortedPos and after will contain the
6230   // count of outstanding operands.
6231   for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ) {
6232     SDNode *N = I++;
6233     checkForCycles(N, this);
6234     unsigned Degree = N->getNumOperands();
6235     if (Degree == 0) {
6236       // A node with no uses, add it to the result array immediately.
6237       N->setNodeId(DAGSize++);
6238       allnodes_iterator Q = N;
6239       if (Q != SortedPos)
6240         SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(Q));
6241       assert(SortedPos != AllNodes.end() && "Overran node list");
6242       ++SortedPos;
6243     } else {
6244       // Temporarily use the Node Id as scratch space for the degree count.
6245       N->setNodeId(Degree);
6246     }
6247   }
6248
6249   // Visit all the nodes. As we iterate, move nodes into sorted order,
6250   // such that by the time the end is reached all nodes will be sorted.
6251   for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ++I) {
6252     SDNode *N = I;
6253     checkForCycles(N, this);
6254     // N is in sorted position, so all its uses have one less operand
6255     // that needs to be sorted.
6256     for (SDNode::use_iterator UI = N->use_begin(), UE = N->use_end();
6257          UI != UE; ++UI) {
6258       SDNode *P = *UI;
6259       unsigned Degree = P->getNodeId();
6260       assert(Degree != 0 && "Invalid node degree");
6261       --Degree;
6262       if (Degree == 0) {
6263         // All of P's operands are sorted, so P may sorted now.
6264         P->setNodeId(DAGSize++);
6265         if (P != SortedPos)
6266           SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(P));
6267         assert(SortedPos != AllNodes.end() && "Overran node list");
6268         ++SortedPos;
6269       } else {
6270         // Update P's outstanding operand count.
6271         P->setNodeId(Degree);
6272       }
6273     }
6274     if (I == SortedPos) {
6275 #ifndef NDEBUG
6276       SDNode *S = ++I;
6277       dbgs() << "Overran sorted position:\n";
6278       S->dumprFull(this); dbgs() << "\n";
6279       dbgs() << "Checking if this is due to cycles\n";
6280       checkForCycles(this, true);
6281 #endif
6282       llvm_unreachable(nullptr);
6283     }
6284   }
6285
6286   assert(SortedPos == AllNodes.end() &&
6287          "Topological sort incomplete!");
6288   assert(AllNodes.front().getOpcode() == ISD::EntryToken &&
6289          "First node in topological sort is not the entry token!");
6290   assert(AllNodes.front().getNodeId() == 0 &&
6291          "First node in topological sort has non-zero id!");
6292   assert(AllNodes.front().getNumOperands() == 0 &&
6293          "First node in topological sort has operands!");
6294   assert(AllNodes.back().getNodeId() == (int)DAGSize-1 &&
6295          "Last node in topologic sort has unexpected id!");
6296   assert(AllNodes.back().use_empty() &&
6297          "Last node in topologic sort has users!");
6298   assert(DAGSize == allnodes_size() && "Node count mismatch!");
6299   return DAGSize;
6300 }
6301
6302 /// AddDbgValue - Add a dbg_value SDNode. If SD is non-null that means the
6303 /// value is produced by SD.
6304 void SelectionDAG::AddDbgValue(SDDbgValue *DB, SDNode *SD, bool isParameter) {
6305   if (SD) {
6306     assert(DbgInfo->getSDDbgValues(SD).empty() || SD->getHasDebugValue());
6307     SD->setHasDebugValue(true);
6308   }
6309   DbgInfo->add(DB, SD, isParameter);
6310 }
6311
6312 /// TransferDbgValues - Transfer SDDbgValues.
6313 void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) {
6314   if (From == To || !From.getNode()->getHasDebugValue())
6315     return;
6316   SDNode *FromNode = From.getNode();
6317   SDNode *ToNode = To.getNode();
6318   ArrayRef<SDDbgValue *> DVs = GetDbgValues(FromNode);
6319   SmallVector<SDDbgValue *, 2> ClonedDVs;
6320   for (ArrayRef<SDDbgValue *>::iterator I = DVs.begin(), E = DVs.end();
6321        I != E; ++I) {
6322     SDDbgValue *Dbg = *I;
6323     if (Dbg->getKind() == SDDbgValue::SDNODE) {
6324       SDDbgValue *Clone =
6325           getDbgValue(Dbg->getVariable(), Dbg->getExpression(), ToNode,
6326                       To.getResNo(), Dbg->isIndirect(), Dbg->getOffset(),
6327                       Dbg->getDebugLoc(), Dbg->getOrder());
6328       ClonedDVs.push_back(Clone);
6329     }
6330   }
6331   for (SmallVectorImpl<SDDbgValue *>::iterator I = ClonedDVs.begin(),
6332          E = ClonedDVs.end(); I != E; ++I)
6333     AddDbgValue(*I, ToNode, false);
6334 }
6335
6336 //===----------------------------------------------------------------------===//
6337 //                              SDNode Class
6338 //===----------------------------------------------------------------------===//
6339
6340 HandleSDNode::~HandleSDNode() {
6341   DropOperands();
6342 }
6343
6344 GlobalAddressSDNode::GlobalAddressSDNode(unsigned Opc, unsigned Order,
6345                                          DebugLoc DL, const GlobalValue *GA,
6346                                          EVT VT, int64_t o, unsigned char TF)
6347   : SDNode(Opc, Order, DL, getSDVTList(VT)), Offset(o), TargetFlags(TF) {
6348   TheGlobal = GA;
6349 }
6350
6351 AddrSpaceCastSDNode::AddrSpaceCastSDNode(unsigned Order, DebugLoc dl, EVT VT,
6352                                          SDValue X, unsigned SrcAS,
6353                                          unsigned DestAS)
6354  : UnarySDNode(ISD::ADDRSPACECAST, Order, dl, getSDVTList(VT), X),
6355    SrcAddrSpace(SrcAS), DestAddrSpace(DestAS) {}
6356
6357 MemSDNode::MemSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs,
6358                      EVT memvt, MachineMemOperand *mmo)
6359  : SDNode(Opc, Order, dl, VTs), MemoryVT(memvt), MMO(mmo) {
6360   SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(),
6361                                       MMO->isNonTemporal(), MMO->isInvariant());
6362   assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!");
6363   assert(isNonTemporal() == MMO->isNonTemporal() &&
6364          "Non-temporal encoding error!");
6365   // We check here that the size of the memory operand fits within the size of
6366   // the MMO. This is because the MMO might indicate only a possible address
6367   // range instead of specifying the affected memory addresses precisely.
6368   assert(memvt.getStoreSize() <= MMO->getSize() && "Size mismatch!");
6369 }
6370
6371 MemSDNode::MemSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs,
6372                      ArrayRef<SDValue> Ops, EVT memvt, MachineMemOperand *mmo)
6373    : SDNode(Opc, Order, dl, VTs, Ops),
6374      MemoryVT(memvt), MMO(mmo) {
6375   SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(),
6376                                       MMO->isNonTemporal(), MMO->isInvariant());
6377   assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!");
6378   assert(memvt.getStoreSize() <= MMO->getSize() && "Size mismatch!");
6379 }
6380
6381 /// Profile - Gather unique data for the node.
6382 ///
6383 void SDNode::Profile(FoldingSetNodeID &ID) const {
6384   AddNodeIDNode(ID, this);
6385 }
6386
6387 namespace {
6388   struct EVTArray {
6389     std::vector<EVT> VTs;
6390
6391     EVTArray() {
6392       VTs.reserve(MVT::LAST_VALUETYPE);
6393       for (unsigned i = 0; i < MVT::LAST_VALUETYPE; ++i)
6394         VTs.push_back(MVT((MVT::SimpleValueType)i));
6395     }
6396   };
6397 }
6398
6399 static ManagedStatic<std::set<EVT, EVT::compareRawBits> > EVTs;
6400 static ManagedStatic<EVTArray> SimpleVTArray;
6401 static ManagedStatic<sys::SmartMutex<true> > VTMutex;
6402
6403 /// getValueTypeList - Return a pointer to the specified value type.
6404 ///
6405 const EVT *SDNode::getValueTypeList(EVT VT) {
6406   if (VT.isExtended()) {
6407     sys::SmartScopedLock<true> Lock(*VTMutex);
6408     return &(*EVTs->insert(VT).first);
6409   } else {
6410     assert(VT.getSimpleVT() < MVT::LAST_VALUETYPE &&
6411            "Value type out of range!");
6412     return &SimpleVTArray->VTs[VT.getSimpleVT().SimpleTy];
6413   }
6414 }
6415
6416 /// hasNUsesOfValue - Return true if there are exactly NUSES uses of the
6417 /// indicated value.  This method ignores uses of other values defined by this
6418 /// operation.
6419 bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const {
6420   assert(Value < getNumValues() && "Bad value!");
6421
6422   // TODO: Only iterate over uses of a given value of the node
6423   for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI) {
6424     if (UI.getUse().getResNo() == Value) {
6425       if (NUses == 0)
6426         return false;
6427       --NUses;
6428     }
6429   }
6430
6431   // Found exactly the right number of uses?
6432   return NUses == 0;
6433 }
6434
6435
6436 /// hasAnyUseOfValue - Return true if there are any use of the indicated
6437 /// value. This method ignores uses of other values defined by this operation.
6438 bool SDNode::hasAnyUseOfValue(unsigned Value) const {
6439   assert(Value < getNumValues() && "Bad value!");
6440
6441   for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI)
6442     if (UI.getUse().getResNo() == Value)
6443       return true;
6444
6445   return false;
6446 }
6447
6448
6449 /// isOnlyUserOf - Return true if this node is the only use of N.
6450 ///
6451 bool SDNode::isOnlyUserOf(SDNode *N) const {
6452   bool Seen = false;
6453   for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {
6454     SDNode *User = *I;
6455     if (User == this)
6456       Seen = true;
6457     else
6458       return false;
6459   }
6460
6461   return Seen;
6462 }
6463
6464 /// isOperand - Return true if this node is an operand of N.
6465 ///
6466 bool SDValue::isOperandOf(SDNode *N) const {
6467   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
6468     if (*this == N->getOperand(i))
6469       return true;
6470   return false;
6471 }
6472
6473 bool SDNode::isOperandOf(SDNode *N) const {
6474   for (unsigned i = 0, e = N->NumOperands; i != e; ++i)
6475     if (this == N->OperandList[i].getNode())
6476       return true;
6477   return false;
6478 }
6479
6480 /// reachesChainWithoutSideEffects - Return true if this operand (which must
6481 /// be a chain) reaches the specified operand without crossing any
6482 /// side-effecting instructions on any chain path.  In practice, this looks
6483 /// through token factors and non-volatile loads.  In order to remain efficient,
6484 /// this only looks a couple of nodes in, it does not do an exhaustive search.
6485 bool SDValue::reachesChainWithoutSideEffects(SDValue Dest,
6486                                                unsigned Depth) const {
6487   if (*this == Dest) return true;
6488
6489   // Don't search too deeply, we just want to be able to see through
6490   // TokenFactor's etc.
6491   if (Depth == 0) return false;
6492
6493   // If this is a token factor, all inputs to the TF happen in parallel.  If any
6494   // of the operands of the TF does not reach dest, then we cannot do the xform.
6495   if (getOpcode() == ISD::TokenFactor) {
6496     for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
6497       if (!getOperand(i).reachesChainWithoutSideEffects(Dest, Depth-1))
6498         return false;
6499     return true;
6500   }
6501
6502   // Loads don't have side effects, look through them.
6503   if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(*this)) {
6504     if (!Ld->isVolatile())
6505       return Ld->getChain().reachesChainWithoutSideEffects(Dest, Depth-1);
6506   }
6507   return false;
6508 }
6509
6510 /// hasPredecessor - Return true if N is a predecessor of this node.
6511 /// N is either an operand of this node, or can be reached by recursively
6512 /// traversing up the operands.
6513 /// NOTE: This is an expensive method. Use it carefully.
6514 bool SDNode::hasPredecessor(const SDNode *N) const {
6515   SmallPtrSet<const SDNode *, 32> Visited;
6516   SmallVector<const SDNode *, 16> Worklist;
6517   return hasPredecessorHelper(N, Visited, Worklist);
6518 }
6519
6520 bool
6521 SDNode::hasPredecessorHelper(const SDNode *N,
6522                              SmallPtrSetImpl<const SDNode *> &Visited,
6523                              SmallVectorImpl<const SDNode *> &Worklist) const {
6524   if (Visited.empty()) {
6525     Worklist.push_back(this);
6526   } else {
6527     // Take a look in the visited set. If we've already encountered this node
6528     // we needn't search further.
6529     if (Visited.count(N))
6530       return true;
6531   }
6532
6533   // Haven't visited N yet. Continue the search.
6534   while (!Worklist.empty()) {
6535     const SDNode *M = Worklist.pop_back_val();
6536     for (unsigned i = 0, e = M->getNumOperands(); i != e; ++i) {
6537       SDNode *Op = M->getOperand(i).getNode();
6538       if (Visited.insert(Op).second)
6539         Worklist.push_back(Op);
6540       if (Op == N)
6541         return true;
6542     }
6543   }
6544
6545   return false;
6546 }
6547
6548 uint64_t SDNode::getConstantOperandVal(unsigned Num) const {
6549   assert(Num < NumOperands && "Invalid child # of SDNode!");
6550   return cast<ConstantSDNode>(OperandList[Num])->getZExtValue();
6551 }
6552
6553 SDValue SelectionDAG::UnrollVectorOp(SDNode *N, unsigned ResNE) {
6554   assert(N->getNumValues() == 1 &&
6555          "Can't unroll a vector with multiple results!");
6556
6557   EVT VT = N->getValueType(0);
6558   unsigned NE = VT.getVectorNumElements();
6559   EVT EltVT = VT.getVectorElementType();
6560   SDLoc dl(N);
6561
6562   SmallVector<SDValue, 8> Scalars;
6563   SmallVector<SDValue, 4> Operands(N->getNumOperands());
6564
6565   // If ResNE is 0, fully unroll the vector op.
6566   if (ResNE == 0)
6567     ResNE = NE;
6568   else if (NE > ResNE)
6569     NE = ResNE;
6570
6571   unsigned i;
6572   for (i= 0; i != NE; ++i) {
6573     for (unsigned j = 0, e = N->getNumOperands(); j != e; ++j) {
6574       SDValue Operand = N->getOperand(j);
6575       EVT OperandVT = Operand.getValueType();
6576       if (OperandVT.isVector()) {
6577         // A vector operand; extract a single element.
6578         EVT OperandEltVT = OperandVT.getVectorElementType();
6579         Operands[j] = getNode(ISD::EXTRACT_VECTOR_ELT, dl,
6580                               OperandEltVT,
6581                               Operand,
6582                               getConstant(i, TLI->getVectorIdxTy()));
6583       } else {
6584         // A scalar operand; just use it as is.
6585         Operands[j] = Operand;
6586       }
6587     }
6588
6589     switch (N->getOpcode()) {
6590     default:
6591       Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands));
6592       break;
6593     case ISD::VSELECT:
6594       Scalars.push_back(getNode(ISD::SELECT, dl, EltVT, Operands));
6595       break;
6596     case ISD::SHL:
6597     case ISD::SRA:
6598     case ISD::SRL:
6599     case ISD::ROTL:
6600     case ISD::ROTR:
6601       Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands[0],
6602                                getShiftAmountOperand(Operands[0].getValueType(),
6603                                                      Operands[1])));
6604       break;
6605     case ISD::SIGN_EXTEND_INREG:
6606     case ISD::FP_ROUND_INREG: {
6607       EVT ExtVT = cast<VTSDNode>(Operands[1])->getVT().getVectorElementType();
6608       Scalars.push_back(getNode(N->getOpcode(), dl, EltVT,
6609                                 Operands[0],
6610                                 getValueType(ExtVT)));
6611     }
6612     }
6613   }
6614
6615   for (; i < ResNE; ++i)
6616     Scalars.push_back(getUNDEF(EltVT));
6617
6618   return getNode(ISD::BUILD_VECTOR, dl,
6619                  EVT::getVectorVT(*getContext(), EltVT, ResNE), Scalars);
6620 }
6621
6622
6623 /// isConsecutiveLoad - Return true if LD is loading 'Bytes' bytes from a
6624 /// location that is 'Dist' units away from the location that the 'Base' load
6625 /// is loading from.
6626 bool SelectionDAG::isConsecutiveLoad(LoadSDNode *LD, LoadSDNode *Base,
6627                                      unsigned Bytes, int Dist) const {
6628   if (LD->getChain() != Base->getChain())
6629     return false;
6630   EVT VT = LD->getValueType(0);
6631   if (VT.getSizeInBits() / 8 != Bytes)
6632     return false;
6633
6634   SDValue Loc = LD->getOperand(1);
6635   SDValue BaseLoc = Base->getOperand(1);
6636   if (Loc.getOpcode() == ISD::FrameIndex) {
6637     if (BaseLoc.getOpcode() != ISD::FrameIndex)
6638       return false;
6639     const MachineFrameInfo *MFI = getMachineFunction().getFrameInfo();
6640     int FI  = cast<FrameIndexSDNode>(Loc)->getIndex();
6641     int BFI = cast<FrameIndexSDNode>(BaseLoc)->getIndex();
6642     int FS  = MFI->getObjectSize(FI);
6643     int BFS = MFI->getObjectSize(BFI);
6644     if (FS != BFS || FS != (int)Bytes) return false;
6645     return MFI->getObjectOffset(FI) == (MFI->getObjectOffset(BFI) + Dist*Bytes);
6646   }
6647
6648   // Handle X + C.
6649   if (isBaseWithConstantOffset(Loc)) {
6650     int64_t LocOffset = cast<ConstantSDNode>(Loc.getOperand(1))->getSExtValue();
6651     if (Loc.getOperand(0) == BaseLoc) {
6652       // If the base location is a simple address with no offset itself, then
6653       // the second load's first add operand should be the base address.
6654       if (LocOffset == Dist * (int)Bytes)
6655         return true;
6656     } else if (isBaseWithConstantOffset(BaseLoc)) {
6657       // The base location itself has an offset, so subtract that value from the
6658       // second load's offset before comparing to distance * size.
6659       int64_t BOffset =
6660         cast<ConstantSDNode>(BaseLoc.getOperand(1))->getSExtValue();
6661       if (Loc.getOperand(0) == BaseLoc.getOperand(0)) {
6662         if ((LocOffset - BOffset) == Dist * (int)Bytes)
6663           return true;
6664       }
6665     }
6666   }
6667   const GlobalValue *GV1 = nullptr;
6668   const GlobalValue *GV2 = nullptr;
6669   int64_t Offset1 = 0;
6670   int64_t Offset2 = 0;
6671   bool isGA1 = TLI->isGAPlusOffset(Loc.getNode(), GV1, Offset1);
6672   bool isGA2 = TLI->isGAPlusOffset(BaseLoc.getNode(), GV2, Offset2);
6673   if (isGA1 && isGA2 && GV1 == GV2)
6674     return Offset1 == (Offset2 + Dist*Bytes);
6675   return false;
6676 }
6677
6678
6679 /// InferPtrAlignment - Infer alignment of a load / store address. Return 0 if
6680 /// it cannot be inferred.
6681 unsigned SelectionDAG::InferPtrAlignment(SDValue Ptr) const {
6682   // If this is a GlobalAddress + cst, return the alignment.
6683   const GlobalValue *GV;
6684   int64_t GVOffset = 0;
6685   if (TLI->isGAPlusOffset(Ptr.getNode(), GV, GVOffset)) {
6686     unsigned PtrWidth = TLI->getPointerTypeSizeInBits(GV->getType());
6687     APInt KnownZero(PtrWidth, 0), KnownOne(PtrWidth, 0);
6688     llvm::computeKnownBits(const_cast<GlobalValue *>(GV), KnownZero, KnownOne,
6689                            *TLI->getDataLayout());
6690     unsigned AlignBits = KnownZero.countTrailingOnes();
6691     unsigned Align = AlignBits ? 1 << std::min(31U, AlignBits) : 0;
6692     if (Align)
6693       return MinAlign(Align, GVOffset);
6694   }
6695
6696   // If this is a direct reference to a stack slot, use information about the
6697   // stack slot's alignment.
6698   int FrameIdx = 1 << 31;
6699   int64_t FrameOffset = 0;
6700   if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr)) {
6701     FrameIdx = FI->getIndex();
6702   } else if (isBaseWithConstantOffset(Ptr) &&
6703              isa<FrameIndexSDNode>(Ptr.getOperand(0))) {
6704     // Handle FI+Cst
6705     FrameIdx = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex();
6706     FrameOffset = Ptr.getConstantOperandVal(1);
6707   }
6708
6709   if (FrameIdx != (1 << 31)) {
6710     const MachineFrameInfo &MFI = *getMachineFunction().getFrameInfo();
6711     unsigned FIInfoAlign = MinAlign(MFI.getObjectAlignment(FrameIdx),
6712                                     FrameOffset);
6713     return FIInfoAlign;
6714   }
6715
6716   return 0;
6717 }
6718
6719 /// GetSplitDestVTs - Compute the VTs needed for the low/hi parts of a type
6720 /// which is split (or expanded) into two not necessarily identical pieces.
6721 std::pair<EVT, EVT> SelectionDAG::GetSplitDestVTs(const EVT &VT) const {
6722   // Currently all types are split in half.
6723   EVT LoVT, HiVT;
6724   if (!VT.isVector()) {
6725     LoVT = HiVT = TLI->getTypeToTransformTo(*getContext(), VT);
6726   } else {
6727     unsigned NumElements = VT.getVectorNumElements();
6728     assert(!(NumElements & 1) && "Splitting vector, but not in half!");
6729     LoVT = HiVT = EVT::getVectorVT(*getContext(), VT.getVectorElementType(),
6730                                    NumElements/2);
6731   }
6732   return std::make_pair(LoVT, HiVT);
6733 }
6734
6735 /// SplitVector - Split the vector with EXTRACT_SUBVECTOR and return the
6736 /// low/high part.
6737 std::pair<SDValue, SDValue>
6738 SelectionDAG::SplitVector(const SDValue &N, const SDLoc &DL, const EVT &LoVT,
6739                           const EVT &HiVT) {
6740   assert(LoVT.getVectorNumElements() + HiVT.getVectorNumElements() <=
6741          N.getValueType().getVectorNumElements() &&
6742          "More vector elements requested than available!");
6743   SDValue Lo, Hi;
6744   Lo = getNode(ISD::EXTRACT_SUBVECTOR, DL, LoVT, N,
6745                getConstant(0, TLI->getVectorIdxTy()));
6746   Hi = getNode(ISD::EXTRACT_SUBVECTOR, DL, HiVT, N,
6747                getConstant(LoVT.getVectorNumElements(), TLI->getVectorIdxTy()));
6748   return std::make_pair(Lo, Hi);
6749 }
6750
6751 void SelectionDAG::ExtractVectorElements(SDValue Op,
6752                                          SmallVectorImpl<SDValue> &Args,
6753                                          unsigned Start, unsigned Count) {
6754   EVT VT = Op.getValueType();
6755   if (Count == 0)
6756     Count = VT.getVectorNumElements();
6757
6758   EVT EltVT = VT.getVectorElementType();
6759   EVT IdxTy = TLI->getVectorIdxTy();
6760   SDLoc SL(Op);
6761   for (unsigned i = Start, e = Start + Count; i != e; ++i) {
6762     Args.push_back(getNode(ISD::EXTRACT_VECTOR_ELT, SL, EltVT,
6763                            Op, getConstant(i, IdxTy)));
6764   }
6765 }
6766
6767 // getAddressSpace - Return the address space this GlobalAddress belongs to.
6768 unsigned GlobalAddressSDNode::getAddressSpace() const {
6769   return getGlobal()->getType()->getAddressSpace();
6770 }
6771
6772
6773 Type *ConstantPoolSDNode::getType() const {
6774   if (isMachineConstantPoolEntry())
6775     return Val.MachineCPVal->getType();
6776   return Val.ConstVal->getType();
6777 }
6778
6779 bool BuildVectorSDNode::isConstantSplat(APInt &SplatValue,
6780                                         APInt &SplatUndef,
6781                                         unsigned &SplatBitSize,
6782                                         bool &HasAnyUndefs,
6783                                         unsigned MinSplatBits,
6784                                         bool isBigEndian) const {
6785   EVT VT = getValueType(0);
6786   assert(VT.isVector() && "Expected a vector type");
6787   unsigned sz = VT.getSizeInBits();
6788   if (MinSplatBits > sz)
6789     return false;
6790
6791   SplatValue = APInt(sz, 0);
6792   SplatUndef = APInt(sz, 0);
6793
6794   // Get the bits.  Bits with undefined values (when the corresponding element
6795   // of the vector is an ISD::UNDEF value) are set in SplatUndef and cleared
6796   // in SplatValue.  If any of the values are not constant, give up and return
6797   // false.
6798   unsigned int nOps = getNumOperands();
6799   assert(nOps > 0 && "isConstantSplat has 0-size build vector");
6800   unsigned EltBitSize = VT.getVectorElementType().getSizeInBits();
6801
6802   for (unsigned j = 0; j < nOps; ++j) {
6803     unsigned i = isBigEndian ? nOps-1-j : j;
6804     SDValue OpVal = getOperand(i);
6805     unsigned BitPos = j * EltBitSize;
6806
6807     if (OpVal.getOpcode() == ISD::UNDEF)
6808       SplatUndef |= APInt::getBitsSet(sz, BitPos, BitPos + EltBitSize);
6809     else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal))
6810       SplatValue |= CN->getAPIntValue().zextOrTrunc(EltBitSize).
6811                     zextOrTrunc(sz) << BitPos;
6812     else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal))
6813       SplatValue |= CN->getValueAPF().bitcastToAPInt().zextOrTrunc(sz) <<BitPos;
6814      else
6815       return false;
6816   }
6817
6818   // The build_vector is all constants or undefs.  Find the smallest element
6819   // size that splats the vector.
6820
6821   HasAnyUndefs = (SplatUndef != 0);
6822   while (sz > 8) {
6823
6824     unsigned HalfSize = sz / 2;
6825     APInt HighValue = SplatValue.lshr(HalfSize).trunc(HalfSize);
6826     APInt LowValue = SplatValue.trunc(HalfSize);
6827     APInt HighUndef = SplatUndef.lshr(HalfSize).trunc(HalfSize);
6828     APInt LowUndef = SplatUndef.trunc(HalfSize);
6829
6830     // If the two halves do not match (ignoring undef bits), stop here.
6831     if ((HighValue & ~LowUndef) != (LowValue & ~HighUndef) ||
6832         MinSplatBits > HalfSize)
6833       break;
6834
6835     SplatValue = HighValue | LowValue;
6836     SplatUndef = HighUndef & LowUndef;
6837
6838     sz = HalfSize;
6839   }
6840
6841   SplatBitSize = sz;
6842   return true;
6843 }
6844
6845 SDValue BuildVectorSDNode::getSplatValue(BitVector *UndefElements) const {
6846   if (UndefElements) {
6847     UndefElements->clear();
6848     UndefElements->resize(getNumOperands());
6849   }
6850   SDValue Splatted;
6851   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
6852     SDValue Op = getOperand(i);
6853     if (Op.getOpcode() == ISD::UNDEF) {
6854       if (UndefElements)
6855         (*UndefElements)[i] = true;
6856     } else if (!Splatted) {
6857       Splatted = Op;
6858     } else if (Splatted != Op) {
6859       return SDValue();
6860     }
6861   }
6862
6863   if (!Splatted) {
6864     assert(getOperand(0).getOpcode() == ISD::UNDEF &&
6865            "Can only have a splat without a constant for all undefs.");
6866     return getOperand(0);
6867   }
6868
6869   return Splatted;
6870 }
6871
6872 ConstantSDNode *
6873 BuildVectorSDNode::getConstantSplatNode(BitVector *UndefElements) const {
6874   return dyn_cast_or_null<ConstantSDNode>(
6875       getSplatValue(UndefElements).getNode());
6876 }
6877
6878 ConstantFPSDNode *
6879 BuildVectorSDNode::getConstantFPSplatNode(BitVector *UndefElements) const {
6880   return dyn_cast_or_null<ConstantFPSDNode>(
6881       getSplatValue(UndefElements).getNode());
6882 }
6883
6884 bool BuildVectorSDNode::isConstant() const {
6885   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
6886     unsigned Opc = getOperand(i).getOpcode();
6887     if (Opc != ISD::UNDEF && Opc != ISD::Constant && Opc != ISD::ConstantFP)
6888       return false;
6889   }
6890   return true;
6891 }
6892
6893 bool ShuffleVectorSDNode::isSplatMask(const int *Mask, EVT VT) {
6894   // Find the first non-undef value in the shuffle mask.
6895   unsigned i, e;
6896   for (i = 0, e = VT.getVectorNumElements(); i != e && Mask[i] < 0; ++i)
6897     /* search */;
6898
6899   assert(i != e && "VECTOR_SHUFFLE node with all undef indices!");
6900
6901   // Make sure all remaining elements are either undef or the same as the first
6902   // non-undef value.
6903   for (int Idx = Mask[i]; i != e; ++i)
6904     if (Mask[i] >= 0 && Mask[i] != Idx)
6905       return false;
6906   return true;
6907 }
6908
6909 #ifndef NDEBUG
6910 static void checkForCyclesHelper(const SDNode *N,
6911                                  SmallPtrSetImpl<const SDNode*> &Visited,
6912                                  SmallPtrSetImpl<const SDNode*> &Checked,
6913                                  const llvm::SelectionDAG *DAG) {
6914   // If this node has already been checked, don't check it again.
6915   if (Checked.count(N))
6916     return;
6917
6918   // If a node has already been visited on this depth-first walk, reject it as
6919   // a cycle.
6920   if (!Visited.insert(N).second) {
6921     errs() << "Detected cycle in SelectionDAG\n";
6922     dbgs() << "Offending node:\n";
6923     N->dumprFull(DAG); dbgs() << "\n";
6924     abort();
6925   }
6926
6927   for(unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
6928     checkForCyclesHelper(N->getOperand(i).getNode(), Visited, Checked, DAG);
6929
6930   Checked.insert(N);
6931   Visited.erase(N);
6932 }
6933 #endif
6934
6935 void llvm::checkForCycles(const llvm::SDNode *N,
6936                           const llvm::SelectionDAG *DAG,
6937                           bool force) {
6938 #ifndef NDEBUG
6939   bool check = force;
6940 #ifdef XDEBUG
6941   check = true;
6942 #endif  // XDEBUG
6943   if (check) {
6944     assert(N && "Checking nonexistent SDNode");
6945     SmallPtrSet<const SDNode*, 32> visited;
6946     SmallPtrSet<const SDNode*, 32> checked;
6947     checkForCyclesHelper(N, visited, checked, DAG);
6948   }
6949 #endif  // !NDEBUG
6950 }
6951
6952 void llvm::checkForCycles(const llvm::SelectionDAG *DAG, bool force) {
6953   checkForCycles(DAG->getRoot().getNode(), DAG, force);
6954 }