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