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