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