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