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