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