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