Move ComputeMaskedBits, MaskedValueIsZero, and ComputeNumSignBits from
[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 was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source 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 "llvm/Constants.h"
16 #include "llvm/GlobalVariable.h"
17 #include "llvm/Intrinsics.h"
18 #include "llvm/DerivedTypes.h"
19 #include "llvm/Assembly/Writer.h"
20 #include "llvm/CodeGen/MachineBasicBlock.h"
21 #include "llvm/CodeGen/MachineConstantPool.h"
22 #include "llvm/Support/MathExtras.h"
23 #include "llvm/Target/MRegisterInfo.h"
24 #include "llvm/Target/TargetData.h"
25 #include "llvm/Target/TargetLowering.h"
26 #include "llvm/Target/TargetInstrInfo.h"
27 #include "llvm/Target/TargetMachine.h"
28 #include "llvm/ADT/SetVector.h"
29 #include "llvm/ADT/SmallPtrSet.h"
30 #include "llvm/ADT/SmallVector.h"
31 #include "llvm/ADT/StringExtras.h"
32 #include <algorithm>
33 #include <cmath>
34 using namespace llvm;
35
36 /// makeVTList - Return an instance of the SDVTList struct initialized with the
37 /// specified members.
38 static SDVTList makeVTList(const MVT::ValueType *VTs, unsigned NumVTs) {
39   SDVTList Res = {VTs, NumVTs};
40   return Res;
41 }
42
43 //===----------------------------------------------------------------------===//
44 //                              ConstantFPSDNode Class
45 //===----------------------------------------------------------------------===//
46
47 /// isExactlyValue - We don't rely on operator== working on double values, as
48 /// it returns true for things that are clearly not equal, like -0.0 and 0.0.
49 /// As such, this method can be used to do an exact bit-for-bit comparison of
50 /// two floating point values.
51 bool ConstantFPSDNode::isExactlyValue(double V) const {
52   return DoubleToBits(V) == DoubleToBits(Value);
53 }
54
55 //===----------------------------------------------------------------------===//
56 //                              ISD Namespace
57 //===----------------------------------------------------------------------===//
58
59 /// isBuildVectorAllOnes - Return true if the specified node is a
60 /// BUILD_VECTOR where all of the elements are ~0 or undef.
61 bool ISD::isBuildVectorAllOnes(const SDNode *N) {
62   // Look through a bit convert.
63   if (N->getOpcode() == ISD::BIT_CONVERT)
64     N = N->getOperand(0).Val;
65   
66   if (N->getOpcode() != ISD::BUILD_VECTOR) return false;
67   
68   unsigned i = 0, e = N->getNumOperands();
69   
70   // Skip over all of the undef values.
71   while (i != e && N->getOperand(i).getOpcode() == ISD::UNDEF)
72     ++i;
73   
74   // Do not accept an all-undef vector.
75   if (i == e) return false;
76   
77   // Do not accept build_vectors that aren't all constants or which have non-~0
78   // elements.
79   SDOperand NotZero = N->getOperand(i);
80   if (isa<ConstantSDNode>(NotZero)) {
81     if (!cast<ConstantSDNode>(NotZero)->isAllOnesValue())
82       return false;
83   } else if (isa<ConstantFPSDNode>(NotZero)) {
84     MVT::ValueType VT = NotZero.getValueType();
85     if (VT== MVT::f64) {
86       if (DoubleToBits(cast<ConstantFPSDNode>(NotZero)->getValue()) !=
87           (uint64_t)-1)
88         return false;
89     } else {
90       if (FloatToBits(cast<ConstantFPSDNode>(NotZero)->getValue()) !=
91           (uint32_t)-1)
92         return false;
93     }
94   } else
95     return false;
96   
97   // Okay, we have at least one ~0 value, check to see if the rest match or are
98   // undefs.
99   for (++i; i != e; ++i)
100     if (N->getOperand(i) != NotZero &&
101         N->getOperand(i).getOpcode() != ISD::UNDEF)
102       return false;
103   return true;
104 }
105
106
107 /// isBuildVectorAllZeros - Return true if the specified node is a
108 /// BUILD_VECTOR where all of the elements are 0 or undef.
109 bool ISD::isBuildVectorAllZeros(const SDNode *N) {
110   // Look through a bit convert.
111   if (N->getOpcode() == ISD::BIT_CONVERT)
112     N = N->getOperand(0).Val;
113   
114   if (N->getOpcode() != ISD::BUILD_VECTOR) return false;
115   
116   unsigned i = 0, e = N->getNumOperands();
117   
118   // Skip over all of the undef values.
119   while (i != e && N->getOperand(i).getOpcode() == ISD::UNDEF)
120     ++i;
121   
122   // Do not accept an all-undef vector.
123   if (i == e) return false;
124   
125   // Do not accept build_vectors that aren't all constants or which have non-~0
126   // elements.
127   SDOperand Zero = N->getOperand(i);
128   if (isa<ConstantSDNode>(Zero)) {
129     if (!cast<ConstantSDNode>(Zero)->isNullValue())
130       return false;
131   } else if (isa<ConstantFPSDNode>(Zero)) {
132     if (!cast<ConstantFPSDNode>(Zero)->isExactlyValue(0.0))
133       return false;
134   } else
135     return false;
136   
137   // Okay, we have at least one ~0 value, check to see if the rest match or are
138   // undefs.
139   for (++i; i != e; ++i)
140     if (N->getOperand(i) != Zero &&
141         N->getOperand(i).getOpcode() != ISD::UNDEF)
142       return false;
143   return true;
144 }
145
146 /// getSetCCSwappedOperands - Return the operation corresponding to (Y op X)
147 /// when given the operation for (X op Y).
148 ISD::CondCode ISD::getSetCCSwappedOperands(ISD::CondCode Operation) {
149   // To perform this operation, we just need to swap the L and G bits of the
150   // operation.
151   unsigned OldL = (Operation >> 2) & 1;
152   unsigned OldG = (Operation >> 1) & 1;
153   return ISD::CondCode((Operation & ~6) |  // Keep the N, U, E bits
154                        (OldL << 1) |       // New G bit
155                        (OldG << 2));        // New L bit.
156 }
157
158 /// getSetCCInverse - Return the operation corresponding to !(X op Y), where
159 /// 'op' is a valid SetCC operation.
160 ISD::CondCode ISD::getSetCCInverse(ISD::CondCode Op, bool isInteger) {
161   unsigned Operation = Op;
162   if (isInteger)
163     Operation ^= 7;   // Flip L, G, E bits, but not U.
164   else
165     Operation ^= 15;  // Flip all of the condition bits.
166   if (Operation > ISD::SETTRUE2)
167     Operation &= ~8;     // Don't let N and U bits get set.
168   return ISD::CondCode(Operation);
169 }
170
171
172 /// isSignedOp - For an integer comparison, return 1 if the comparison is a
173 /// signed operation and 2 if the result is an unsigned comparison.  Return zero
174 /// if the operation does not depend on the sign of the input (setne and seteq).
175 static int isSignedOp(ISD::CondCode Opcode) {
176   switch (Opcode) {
177   default: assert(0 && "Illegal integer setcc operation!");
178   case ISD::SETEQ:
179   case ISD::SETNE: return 0;
180   case ISD::SETLT:
181   case ISD::SETLE:
182   case ISD::SETGT:
183   case ISD::SETGE: return 1;
184   case ISD::SETULT:
185   case ISD::SETULE:
186   case ISD::SETUGT:
187   case ISD::SETUGE: return 2;
188   }
189 }
190
191 /// getSetCCOrOperation - Return the result of a logical OR between different
192 /// comparisons of identical values: ((X op1 Y) | (X op2 Y)).  This function
193 /// returns SETCC_INVALID if it is not possible to represent the resultant
194 /// comparison.
195 ISD::CondCode ISD::getSetCCOrOperation(ISD::CondCode Op1, ISD::CondCode Op2,
196                                        bool isInteger) {
197   if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3)
198     // Cannot fold a signed integer setcc with an unsigned integer setcc.
199     return ISD::SETCC_INVALID;
200
201   unsigned Op = Op1 | Op2;  // Combine all of the condition bits.
202
203   // If the N and U bits get set then the resultant comparison DOES suddenly
204   // care about orderedness, and is true when ordered.
205   if (Op > ISD::SETTRUE2)
206     Op &= ~16;     // Clear the U bit if the N bit is set.
207   
208   // Canonicalize illegal integer setcc's.
209   if (isInteger && Op == ISD::SETUNE)  // e.g. SETUGT | SETULT
210     Op = ISD::SETNE;
211   
212   return ISD::CondCode(Op);
213 }
214
215 /// getSetCCAndOperation - Return the result of a logical AND between different
216 /// comparisons of identical values: ((X op1 Y) & (X op2 Y)).  This
217 /// function returns zero if it is not possible to represent the resultant
218 /// comparison.
219 ISD::CondCode ISD::getSetCCAndOperation(ISD::CondCode Op1, ISD::CondCode Op2,
220                                         bool isInteger) {
221   if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3)
222     // Cannot fold a signed setcc with an unsigned setcc.
223     return ISD::SETCC_INVALID;
224
225   // Combine all of the condition bits.
226   ISD::CondCode Result = ISD::CondCode(Op1 & Op2);
227   
228   // Canonicalize illegal integer setcc's.
229   if (isInteger) {
230     switch (Result) {
231     default: break;
232     case ISD::SETUO : Result = ISD::SETFALSE; break;  // SETUGT & SETULT
233     case ISD::SETUEQ: Result = ISD::SETEQ   ; break;  // SETUGE & SETULE
234     case ISD::SETOLT: Result = ISD::SETULT  ; break;  // SETULT & SETNE
235     case ISD::SETOGT: Result = ISD::SETUGT  ; break;  // SETUGT & SETNE
236     }
237   }
238   
239   return Result;
240 }
241
242 const TargetMachine &SelectionDAG::getTarget() const {
243   return TLI.getTargetMachine();
244 }
245
246 //===----------------------------------------------------------------------===//
247 //                           SDNode Profile Support
248 //===----------------------------------------------------------------------===//
249
250 /// AddNodeIDOpcode - Add the node opcode to the NodeID data.
251 ///
252 static void AddNodeIDOpcode(FoldingSetNodeID &ID, unsigned OpC)  {
253   ID.AddInteger(OpC);
254 }
255
256 /// AddNodeIDValueTypes - Value type lists are intern'd so we can represent them
257 /// solely with their pointer.
258 void AddNodeIDValueTypes(FoldingSetNodeID &ID, SDVTList VTList) {
259   ID.AddPointer(VTList.VTs);  
260 }
261
262 /// AddNodeIDOperands - Various routines for adding operands to the NodeID data.
263 ///
264 static void AddNodeIDOperands(FoldingSetNodeID &ID,
265                               const SDOperand *Ops, unsigned NumOps) {
266   for (; NumOps; --NumOps, ++Ops) {
267     ID.AddPointer(Ops->Val);
268     ID.AddInteger(Ops->ResNo);
269   }
270 }
271
272 static void AddNodeIDNode(FoldingSetNodeID &ID,
273                           unsigned short OpC, SDVTList VTList, 
274                           const SDOperand *OpList, unsigned N) {
275   AddNodeIDOpcode(ID, OpC);
276   AddNodeIDValueTypes(ID, VTList);
277   AddNodeIDOperands(ID, OpList, N);
278 }
279
280 /// AddNodeIDNode - Generic routine for adding a nodes info to the NodeID
281 /// data.
282 static void AddNodeIDNode(FoldingSetNodeID &ID, SDNode *N) {
283   AddNodeIDOpcode(ID, N->getOpcode());
284   // Add the return value info.
285   AddNodeIDValueTypes(ID, N->getVTList());
286   // Add the operand info.
287   AddNodeIDOperands(ID, N->op_begin(), N->getNumOperands());
288
289   // Handle SDNode leafs with special info.
290   switch (N->getOpcode()) {
291   default: break;  // Normal nodes don't need extra info.
292   case ISD::TargetConstant:
293   case ISD::Constant:
294     ID.AddInteger(cast<ConstantSDNode>(N)->getValue());
295     break;
296   case ISD::TargetConstantFP:
297   case ISD::ConstantFP:
298     ID.AddDouble(cast<ConstantFPSDNode>(N)->getValue());
299     break;
300   case ISD::TargetGlobalAddress:
301   case ISD::GlobalAddress:
302   case ISD::TargetGlobalTLSAddress:
303   case ISD::GlobalTLSAddress: {
304     GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(N);
305     ID.AddPointer(GA->getGlobal());
306     ID.AddInteger(GA->getOffset());
307     break;
308   }
309   case ISD::BasicBlock:
310     ID.AddPointer(cast<BasicBlockSDNode>(N)->getBasicBlock());
311     break;
312   case ISD::Register:
313     ID.AddInteger(cast<RegisterSDNode>(N)->getReg());
314     break;
315   case ISD::SRCVALUE: {
316     SrcValueSDNode *SV = cast<SrcValueSDNode>(N);
317     ID.AddPointer(SV->getValue());
318     ID.AddInteger(SV->getOffset());
319     break;
320   }
321   case ISD::FrameIndex:
322   case ISD::TargetFrameIndex:
323     ID.AddInteger(cast<FrameIndexSDNode>(N)->getIndex());
324     break;
325   case ISD::JumpTable:
326   case ISD::TargetJumpTable:
327     ID.AddInteger(cast<JumpTableSDNode>(N)->getIndex());
328     break;
329   case ISD::ConstantPool:
330   case ISD::TargetConstantPool: {
331     ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(N);
332     ID.AddInteger(CP->getAlignment());
333     ID.AddInteger(CP->getOffset());
334     if (CP->isMachineConstantPoolEntry())
335       CP->getMachineCPVal()->AddSelectionDAGCSEId(ID);
336     else
337       ID.AddPointer(CP->getConstVal());
338     break;
339   }
340   case ISD::LOAD: {
341     LoadSDNode *LD = cast<LoadSDNode>(N);
342     ID.AddInteger(LD->getAddressingMode());
343     ID.AddInteger(LD->getExtensionType());
344     ID.AddInteger(LD->getLoadedVT());
345     ID.AddPointer(LD->getSrcValue());
346     ID.AddInteger(LD->getSrcValueOffset());
347     ID.AddInteger(LD->getAlignment());
348     ID.AddInteger(LD->isVolatile());
349     break;
350   }
351   case ISD::STORE: {
352     StoreSDNode *ST = cast<StoreSDNode>(N);
353     ID.AddInteger(ST->getAddressingMode());
354     ID.AddInteger(ST->isTruncatingStore());
355     ID.AddInteger(ST->getStoredVT());
356     ID.AddPointer(ST->getSrcValue());
357     ID.AddInteger(ST->getSrcValueOffset());
358     ID.AddInteger(ST->getAlignment());
359     ID.AddInteger(ST->isVolatile());
360     break;
361   }
362   }
363 }
364
365 //===----------------------------------------------------------------------===//
366 //                              SelectionDAG Class
367 //===----------------------------------------------------------------------===//
368
369 /// RemoveDeadNodes - This method deletes all unreachable nodes in the
370 /// SelectionDAG.
371 void SelectionDAG::RemoveDeadNodes() {
372   // Create a dummy node (which is not added to allnodes), that adds a reference
373   // to the root node, preventing it from being deleted.
374   HandleSDNode Dummy(getRoot());
375
376   SmallVector<SDNode*, 128> DeadNodes;
377   
378   // Add all obviously-dead nodes to the DeadNodes worklist.
379   for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I)
380     if (I->use_empty())
381       DeadNodes.push_back(I);
382
383   // Process the worklist, deleting the nodes and adding their uses to the
384   // worklist.
385   while (!DeadNodes.empty()) {
386     SDNode *N = DeadNodes.back();
387     DeadNodes.pop_back();
388     
389     // Take the node out of the appropriate CSE map.
390     RemoveNodeFromCSEMaps(N);
391
392     // Next, brutally remove the operand list.  This is safe to do, as there are
393     // no cycles in the graph.
394     for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
395       SDNode *Operand = I->Val;
396       Operand->removeUser(N);
397       
398       // Now that we removed this operand, see if there are no uses of it left.
399       if (Operand->use_empty())
400         DeadNodes.push_back(Operand);
401     }
402     if (N->OperandsNeedDelete)
403       delete[] N->OperandList;
404     N->OperandList = 0;
405     N->NumOperands = 0;
406     
407     // Finally, remove N itself.
408     AllNodes.erase(N);
409   }
410   
411   // If the root changed (e.g. it was a dead load, update the root).
412   setRoot(Dummy.getValue());
413 }
414
415 void SelectionDAG::RemoveDeadNode(SDNode *N, std::vector<SDNode*> &Deleted) {
416   SmallVector<SDNode*, 16> DeadNodes;
417   DeadNodes.push_back(N);
418
419   // Process the worklist, deleting the nodes and adding their uses to the
420   // worklist.
421   while (!DeadNodes.empty()) {
422     SDNode *N = DeadNodes.back();
423     DeadNodes.pop_back();
424     
425     // Take the node out of the appropriate CSE map.
426     RemoveNodeFromCSEMaps(N);
427
428     // Next, brutally remove the operand list.  This is safe to do, as there are
429     // no cycles in the graph.
430     for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
431       SDNode *Operand = I->Val;
432       Operand->removeUser(N);
433       
434       // Now that we removed this operand, see if there are no uses of it left.
435       if (Operand->use_empty())
436         DeadNodes.push_back(Operand);
437     }
438     if (N->OperandsNeedDelete)
439       delete[] N->OperandList;
440     N->OperandList = 0;
441     N->NumOperands = 0;
442     
443     // Finally, remove N itself.
444     Deleted.push_back(N);
445     AllNodes.erase(N);
446   }
447 }
448
449 void SelectionDAG::DeleteNode(SDNode *N) {
450   assert(N->use_empty() && "Cannot delete a node that is not dead!");
451
452   // First take this out of the appropriate CSE map.
453   RemoveNodeFromCSEMaps(N);
454
455   // Finally, remove uses due to operands of this node, remove from the 
456   // AllNodes list, and delete the node.
457   DeleteNodeNotInCSEMaps(N);
458 }
459
460 void SelectionDAG::DeleteNodeNotInCSEMaps(SDNode *N) {
461
462   // Remove it from the AllNodes list.
463   AllNodes.remove(N);
464     
465   // Drop all of the operands and decrement used nodes use counts.
466   for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I)
467     I->Val->removeUser(N);
468   if (N->OperandsNeedDelete)
469     delete[] N->OperandList;
470   N->OperandList = 0;
471   N->NumOperands = 0;
472   
473   delete N;
474 }
475
476 /// RemoveNodeFromCSEMaps - Take the specified node out of the CSE map that
477 /// correspond to it.  This is useful when we're about to delete or repurpose
478 /// the node.  We don't want future request for structurally identical nodes
479 /// to return N anymore.
480 void SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
481   bool Erased = false;
482   switch (N->getOpcode()) {
483   case ISD::HANDLENODE: return;  // noop.
484   case ISD::STRING:
485     Erased = StringNodes.erase(cast<StringSDNode>(N)->getValue());
486     break;
487   case ISD::CONDCODE:
488     assert(CondCodeNodes[cast<CondCodeSDNode>(N)->get()] &&
489            "Cond code doesn't exist!");
490     Erased = CondCodeNodes[cast<CondCodeSDNode>(N)->get()] != 0;
491     CondCodeNodes[cast<CondCodeSDNode>(N)->get()] = 0;
492     break;
493   case ISD::ExternalSymbol:
494     Erased = ExternalSymbols.erase(cast<ExternalSymbolSDNode>(N)->getSymbol());
495     break;
496   case ISD::TargetExternalSymbol:
497     Erased =
498       TargetExternalSymbols.erase(cast<ExternalSymbolSDNode>(N)->getSymbol());
499     break;
500   case ISD::VALUETYPE:
501     Erased = ValueTypeNodes[cast<VTSDNode>(N)->getVT()] != 0;
502     ValueTypeNodes[cast<VTSDNode>(N)->getVT()] = 0;
503     break;
504   default:
505     // Remove it from the CSE Map.
506     Erased = CSEMap.RemoveNode(N);
507     break;
508   }
509 #ifndef NDEBUG
510   // Verify that the node was actually in one of the CSE maps, unless it has a 
511   // flag result (which cannot be CSE'd) or is one of the special cases that are
512   // not subject to CSE.
513   if (!Erased && N->getValueType(N->getNumValues()-1) != MVT::Flag &&
514       !N->isTargetOpcode()) {
515     N->dump(this);
516     cerr << "\n";
517     assert(0 && "Node is not in map!");
518   }
519 #endif
520 }
521
522 /// AddNonLeafNodeToCSEMaps - Add the specified node back to the CSE maps.  It
523 /// has been taken out and modified in some way.  If the specified node already
524 /// exists in the CSE maps, do not modify the maps, but return the existing node
525 /// instead.  If it doesn't exist, add it and return null.
526 ///
527 SDNode *SelectionDAG::AddNonLeafNodeToCSEMaps(SDNode *N) {
528   assert(N->getNumOperands() && "This is a leaf node!");
529   if (N->getOpcode() == ISD::HANDLENODE || N->getValueType(0) == MVT::Flag)
530     return 0;    // Never add these nodes.
531   
532   // Check that remaining values produced are not flags.
533   for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
534     if (N->getValueType(i) == MVT::Flag)
535       return 0;   // Never CSE anything that produces a flag.
536   
537   SDNode *New = CSEMap.GetOrInsertNode(N);
538   if (New != N) return New;  // Node already existed.
539   return 0;
540 }
541
542 /// FindModifiedNodeSlot - Find a slot for the specified node if its operands
543 /// were replaced with those specified.  If this node is never memoized, 
544 /// return null, otherwise return a pointer to the slot it would take.  If a
545 /// node already exists with these operands, the slot will be non-null.
546 SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, SDOperand Op,
547                                            void *&InsertPos) {
548   if (N->getOpcode() == ISD::HANDLENODE || N->getValueType(0) == MVT::Flag)
549     return 0;    // Never add these nodes.
550   
551   // Check that remaining values produced are not flags.
552   for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
553     if (N->getValueType(i) == MVT::Flag)
554       return 0;   // Never CSE anything that produces a flag.
555   
556   SDOperand Ops[] = { Op };
557   FoldingSetNodeID ID;
558   AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, 1);
559   return CSEMap.FindNodeOrInsertPos(ID, InsertPos);
560 }
561
562 /// FindModifiedNodeSlot - Find a slot for the specified node if its operands
563 /// were replaced with those specified.  If this node is never memoized, 
564 /// return null, otherwise return a pointer to the slot it would take.  If a
565 /// node already exists with these operands, the slot will be non-null.
566 SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, 
567                                            SDOperand Op1, SDOperand Op2,
568                                            void *&InsertPos) {
569   if (N->getOpcode() == ISD::HANDLENODE || N->getValueType(0) == MVT::Flag)
570     return 0;    // Never add these nodes.
571   
572   // Check that remaining values produced are not flags.
573   for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
574     if (N->getValueType(i) == MVT::Flag)
575       return 0;   // Never CSE anything that produces a flag.
576                                               
577   SDOperand Ops[] = { Op1, Op2 };
578   FoldingSetNodeID ID;
579   AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, 2);
580   return CSEMap.FindNodeOrInsertPos(ID, InsertPos);
581 }
582
583
584 /// FindModifiedNodeSlot - Find a slot for the specified node if its operands
585 /// were replaced with those specified.  If this node is never memoized, 
586 /// return null, otherwise return a pointer to the slot it would take.  If a
587 /// node already exists with these operands, the slot will be non-null.
588 SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, 
589                                            const SDOperand *Ops,unsigned NumOps,
590                                            void *&InsertPos) {
591   if (N->getOpcode() == ISD::HANDLENODE || N->getValueType(0) == MVT::Flag)
592     return 0;    // Never add these nodes.
593   
594   // Check that remaining values produced are not flags.
595   for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
596     if (N->getValueType(i) == MVT::Flag)
597       return 0;   // Never CSE anything that produces a flag.
598   
599   FoldingSetNodeID ID;
600   AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops, NumOps);
601   
602   if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(N)) {
603     ID.AddInteger(LD->getAddressingMode());
604     ID.AddInteger(LD->getExtensionType());
605     ID.AddInteger(LD->getLoadedVT());
606     ID.AddPointer(LD->getSrcValue());
607     ID.AddInteger(LD->getSrcValueOffset());
608     ID.AddInteger(LD->getAlignment());
609     ID.AddInteger(LD->isVolatile());
610   } else if (const StoreSDNode *ST = dyn_cast<StoreSDNode>(N)) {
611     ID.AddInteger(ST->getAddressingMode());
612     ID.AddInteger(ST->isTruncatingStore());
613     ID.AddInteger(ST->getStoredVT());
614     ID.AddPointer(ST->getSrcValue());
615     ID.AddInteger(ST->getSrcValueOffset());
616     ID.AddInteger(ST->getAlignment());
617     ID.AddInteger(ST->isVolatile());
618   }
619   
620   return CSEMap.FindNodeOrInsertPos(ID, InsertPos);
621 }
622
623
624 SelectionDAG::~SelectionDAG() {
625   while (!AllNodes.empty()) {
626     SDNode *N = AllNodes.begin();
627     N->SetNextInBucket(0);
628     if (N->OperandsNeedDelete)
629       delete [] N->OperandList;
630     N->OperandList = 0;
631     N->NumOperands = 0;
632     AllNodes.pop_front();
633   }
634 }
635
636 SDOperand SelectionDAG::getZeroExtendInReg(SDOperand Op, MVT::ValueType VT) {
637   if (Op.getValueType() == VT) return Op;
638   int64_t Imm = ~0ULL >> (64-MVT::getSizeInBits(VT));
639   return getNode(ISD::AND, Op.getValueType(), Op,
640                  getConstant(Imm, Op.getValueType()));
641 }
642
643 SDOperand SelectionDAG::getString(const std::string &Val) {
644   StringSDNode *&N = StringNodes[Val];
645   if (!N) {
646     N = new StringSDNode(Val);
647     AllNodes.push_back(N);
648   }
649   return SDOperand(N, 0);
650 }
651
652 SDOperand SelectionDAG::getConstant(uint64_t Val, MVT::ValueType VT, bool isT) {
653   assert(MVT::isInteger(VT) && "Cannot create FP integer constant!");
654   assert(!MVT::isVector(VT) && "Cannot create Vector ConstantSDNodes!");
655   
656   // Mask out any bits that are not valid for this constant.
657   Val &= MVT::getIntVTBitMask(VT);
658
659   unsigned Opc = isT ? ISD::TargetConstant : ISD::Constant;
660   FoldingSetNodeID ID;
661   AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
662   ID.AddInteger(Val);
663   void *IP = 0;
664   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
665     return SDOperand(E, 0);
666   SDNode *N = new ConstantSDNode(isT, Val, VT);
667   CSEMap.InsertNode(N, IP);
668   AllNodes.push_back(N);
669   return SDOperand(N, 0);
670 }
671
672
673 SDOperand SelectionDAG::getConstantFP(double Val, MVT::ValueType VT,
674                                       bool isTarget) {
675   assert(MVT::isFloatingPoint(VT) && "Cannot create integer FP constant!");
676   if (VT == MVT::f32)
677     Val = (float)Val;  // Mask out extra precision.
678
679   // Do the map lookup using the actual bit pattern for the floating point
680   // value, so that we don't have problems with 0.0 comparing equal to -0.0, and
681   // we don't have issues with SNANs.
682   unsigned Opc = isTarget ? ISD::TargetConstantFP : ISD::ConstantFP;
683   FoldingSetNodeID ID;
684   AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
685   ID.AddDouble(Val);
686   void *IP = 0;
687   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
688     return SDOperand(E, 0);
689   SDNode *N = new ConstantFPSDNode(isTarget, Val, VT);
690   CSEMap.InsertNode(N, IP);
691   AllNodes.push_back(N);
692   return SDOperand(N, 0);
693 }
694
695 SDOperand SelectionDAG::getGlobalAddress(const GlobalValue *GV,
696                                          MVT::ValueType VT, int Offset,
697                                          bool isTargetGA) {
698   const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV);
699   unsigned Opc;
700   if (GVar && GVar->isThreadLocal())
701     Opc = isTargetGA ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress;
702   else
703     Opc = isTargetGA ? ISD::TargetGlobalAddress : ISD::GlobalAddress;
704   FoldingSetNodeID ID;
705   AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
706   ID.AddPointer(GV);
707   ID.AddInteger(Offset);
708   void *IP = 0;
709   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
710    return SDOperand(E, 0);
711   SDNode *N = new GlobalAddressSDNode(isTargetGA, GV, VT, Offset);
712   CSEMap.InsertNode(N, IP);
713   AllNodes.push_back(N);
714   return SDOperand(N, 0);
715 }
716
717 SDOperand SelectionDAG::getFrameIndex(int FI, MVT::ValueType VT,
718                                       bool isTarget) {
719   unsigned Opc = isTarget ? ISD::TargetFrameIndex : ISD::FrameIndex;
720   FoldingSetNodeID ID;
721   AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
722   ID.AddInteger(FI);
723   void *IP = 0;
724   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
725     return SDOperand(E, 0);
726   SDNode *N = new FrameIndexSDNode(FI, VT, isTarget);
727   CSEMap.InsertNode(N, IP);
728   AllNodes.push_back(N);
729   return SDOperand(N, 0);
730 }
731
732 SDOperand SelectionDAG::getJumpTable(int JTI, MVT::ValueType VT, bool isTarget){
733   unsigned Opc = isTarget ? ISD::TargetJumpTable : ISD::JumpTable;
734   FoldingSetNodeID ID;
735   AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
736   ID.AddInteger(JTI);
737   void *IP = 0;
738   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
739     return SDOperand(E, 0);
740   SDNode *N = new JumpTableSDNode(JTI, VT, isTarget);
741   CSEMap.InsertNode(N, IP);
742   AllNodes.push_back(N);
743   return SDOperand(N, 0);
744 }
745
746 SDOperand SelectionDAG::getConstantPool(Constant *C, MVT::ValueType VT,
747                                         unsigned Alignment, int Offset,
748                                         bool isTarget) {
749   unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
750   FoldingSetNodeID ID;
751   AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
752   ID.AddInteger(Alignment);
753   ID.AddInteger(Offset);
754   ID.AddPointer(C);
755   void *IP = 0;
756   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
757     return SDOperand(E, 0);
758   SDNode *N = new ConstantPoolSDNode(isTarget, C, VT, Offset, Alignment);
759   CSEMap.InsertNode(N, IP);
760   AllNodes.push_back(N);
761   return SDOperand(N, 0);
762 }
763
764
765 SDOperand SelectionDAG::getConstantPool(MachineConstantPoolValue *C,
766                                         MVT::ValueType VT,
767                                         unsigned Alignment, int Offset,
768                                         bool isTarget) {
769   unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
770   FoldingSetNodeID ID;
771   AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
772   ID.AddInteger(Alignment);
773   ID.AddInteger(Offset);
774   C->AddSelectionDAGCSEId(ID);
775   void *IP = 0;
776   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
777     return SDOperand(E, 0);
778   SDNode *N = new ConstantPoolSDNode(isTarget, C, VT, Offset, Alignment);
779   CSEMap.InsertNode(N, IP);
780   AllNodes.push_back(N);
781   return SDOperand(N, 0);
782 }
783
784
785 SDOperand SelectionDAG::getBasicBlock(MachineBasicBlock *MBB) {
786   FoldingSetNodeID ID;
787   AddNodeIDNode(ID, ISD::BasicBlock, getVTList(MVT::Other), 0, 0);
788   ID.AddPointer(MBB);
789   void *IP = 0;
790   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
791     return SDOperand(E, 0);
792   SDNode *N = new BasicBlockSDNode(MBB);
793   CSEMap.InsertNode(N, IP);
794   AllNodes.push_back(N);
795   return SDOperand(N, 0);
796 }
797
798 SDOperand SelectionDAG::getValueType(MVT::ValueType VT) {
799   if ((unsigned)VT >= ValueTypeNodes.size())
800     ValueTypeNodes.resize(VT+1);
801   if (ValueTypeNodes[VT] == 0) {
802     ValueTypeNodes[VT] = new VTSDNode(VT);
803     AllNodes.push_back(ValueTypeNodes[VT]);
804   }
805
806   return SDOperand(ValueTypeNodes[VT], 0);
807 }
808
809 SDOperand SelectionDAG::getExternalSymbol(const char *Sym, MVT::ValueType VT) {
810   SDNode *&N = ExternalSymbols[Sym];
811   if (N) return SDOperand(N, 0);
812   N = new ExternalSymbolSDNode(false, Sym, VT);
813   AllNodes.push_back(N);
814   return SDOperand(N, 0);
815 }
816
817 SDOperand SelectionDAG::getTargetExternalSymbol(const char *Sym,
818                                                 MVT::ValueType VT) {
819   SDNode *&N = TargetExternalSymbols[Sym];
820   if (N) return SDOperand(N, 0);
821   N = new ExternalSymbolSDNode(true, Sym, VT);
822   AllNodes.push_back(N);
823   return SDOperand(N, 0);
824 }
825
826 SDOperand SelectionDAG::getCondCode(ISD::CondCode Cond) {
827   if ((unsigned)Cond >= CondCodeNodes.size())
828     CondCodeNodes.resize(Cond+1);
829   
830   if (CondCodeNodes[Cond] == 0) {
831     CondCodeNodes[Cond] = new CondCodeSDNode(Cond);
832     AllNodes.push_back(CondCodeNodes[Cond]);
833   }
834   return SDOperand(CondCodeNodes[Cond], 0);
835 }
836
837 SDOperand SelectionDAG::getRegister(unsigned RegNo, MVT::ValueType VT) {
838   FoldingSetNodeID ID;
839   AddNodeIDNode(ID, ISD::Register, getVTList(VT), 0, 0);
840   ID.AddInteger(RegNo);
841   void *IP = 0;
842   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
843     return SDOperand(E, 0);
844   SDNode *N = new RegisterSDNode(RegNo, VT);
845   CSEMap.InsertNode(N, IP);
846   AllNodes.push_back(N);
847   return SDOperand(N, 0);
848 }
849
850 SDOperand SelectionDAG::getSrcValue(const Value *V, int Offset) {
851   assert((!V || isa<PointerType>(V->getType())) &&
852          "SrcValue is not a pointer?");
853
854   FoldingSetNodeID ID;
855   AddNodeIDNode(ID, ISD::SRCVALUE, getVTList(MVT::Other), 0, 0);
856   ID.AddPointer(V);
857   ID.AddInteger(Offset);
858   void *IP = 0;
859   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
860     return SDOperand(E, 0);
861   SDNode *N = new SrcValueSDNode(V, Offset);
862   CSEMap.InsertNode(N, IP);
863   AllNodes.push_back(N);
864   return SDOperand(N, 0);
865 }
866
867 SDOperand SelectionDAG::FoldSetCC(MVT::ValueType VT, SDOperand N1,
868                                   SDOperand N2, ISD::CondCode Cond) {
869   // These setcc operations always fold.
870   switch (Cond) {
871   default: break;
872   case ISD::SETFALSE:
873   case ISD::SETFALSE2: return getConstant(0, VT);
874   case ISD::SETTRUE:
875   case ISD::SETTRUE2:  return getConstant(1, VT);
876     
877   case ISD::SETOEQ:
878   case ISD::SETOGT:
879   case ISD::SETOGE:
880   case ISD::SETOLT:
881   case ISD::SETOLE:
882   case ISD::SETONE:
883   case ISD::SETO:
884   case ISD::SETUO:
885   case ISD::SETUEQ:
886   case ISD::SETUNE:
887     assert(!MVT::isInteger(N1.getValueType()) && "Illegal setcc for integer!");
888     break;
889   }
890   
891   if (ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val)) {
892     uint64_t C2 = N2C->getValue();
893     if (ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val)) {
894       uint64_t C1 = N1C->getValue();
895       
896       // Sign extend the operands if required
897       if (ISD::isSignedIntSetCC(Cond)) {
898         C1 = N1C->getSignExtended();
899         C2 = N2C->getSignExtended();
900       }
901       
902       switch (Cond) {
903       default: assert(0 && "Unknown integer setcc!");
904       case ISD::SETEQ:  return getConstant(C1 == C2, VT);
905       case ISD::SETNE:  return getConstant(C1 != C2, VT);
906       case ISD::SETULT: return getConstant(C1 <  C2, VT);
907       case ISD::SETUGT: return getConstant(C1 >  C2, VT);
908       case ISD::SETULE: return getConstant(C1 <= C2, VT);
909       case ISD::SETUGE: return getConstant(C1 >= C2, VT);
910       case ISD::SETLT:  return getConstant((int64_t)C1 <  (int64_t)C2, VT);
911       case ISD::SETGT:  return getConstant((int64_t)C1 >  (int64_t)C2, VT);
912       case ISD::SETLE:  return getConstant((int64_t)C1 <= (int64_t)C2, VT);
913       case ISD::SETGE:  return getConstant((int64_t)C1 >= (int64_t)C2, VT);
914       }
915     }
916   }
917   if (ConstantFPSDNode *N1C = dyn_cast<ConstantFPSDNode>(N1.Val))
918     if (ConstantFPSDNode *N2C = dyn_cast<ConstantFPSDNode>(N2.Val)) {
919       double C1 = N1C->getValue(), C2 = N2C->getValue();
920       
921       switch (Cond) {
922       default: break; // FIXME: Implement the rest of these!
923       case ISD::SETEQ:  return getConstant(C1 == C2, VT);
924       case ISD::SETNE:  return getConstant(C1 != C2, VT);
925       case ISD::SETLT:  return getConstant(C1 < C2, VT);
926       case ISD::SETGT:  return getConstant(C1 > C2, VT);
927       case ISD::SETLE:  return getConstant(C1 <= C2, VT);
928       case ISD::SETGE:  return getConstant(C1 >= C2, VT);
929       }
930     } else {
931       // Ensure that the constant occurs on the RHS.
932       return getSetCC(VT, N2, N1, ISD::getSetCCSwappedOperands(Cond));
933     }
934       
935   // Could not fold it.
936   return SDOperand();
937 }
938
939 /// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero.  We use
940 /// this predicate to simplify operations downstream.  Mask is known to be zero
941 /// for bits that V cannot have.
942 bool SelectionDAG::MaskedValueIsZero(SDOperand Op, uint64_t Mask, 
943                                      unsigned Depth) const {
944   // The masks are not wide enough to represent this type!  Should use APInt.
945   if (Op.getValueType() == MVT::i128)
946     return false;
947   
948   uint64_t KnownZero, KnownOne;
949   ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
950   assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
951   return (KnownZero & Mask) == Mask;
952 }
953
954 /// ComputeMaskedBits - Determine which of the bits specified in Mask are
955 /// known to be either zero or one and return them in the KnownZero/KnownOne
956 /// bitsets.  This code only analyzes bits in Mask, in order to short-circuit
957 /// processing.
958 void SelectionDAG::ComputeMaskedBits(SDOperand Op, uint64_t Mask, 
959                                      uint64_t &KnownZero, uint64_t &KnownOne,
960                                      unsigned Depth) const {
961   KnownZero = KnownOne = 0;   // Don't know anything.
962   if (Depth == 6 || Mask == 0)
963     return;  // Limit search depth.
964   
965   // The masks are not wide enough to represent this type!  Should use APInt.
966   if (Op.getValueType() == MVT::i128)
967     return;
968   
969   uint64_t KnownZero2, KnownOne2;
970
971   switch (Op.getOpcode()) {
972   case ISD::Constant:
973     // We know all of the bits for a constant!
974     KnownOne = cast<ConstantSDNode>(Op)->getValue() & Mask;
975     KnownZero = ~KnownOne & Mask;
976     return;
977   case ISD::AND:
978     // If either the LHS or the RHS are Zero, the result is zero.
979     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
980     Mask &= ~KnownZero;
981     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
982     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
983     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
984
985     // Output known-1 bits are only known if set in both the LHS & RHS.
986     KnownOne &= KnownOne2;
987     // Output known-0 are known to be clear if zero in either the LHS | RHS.
988     KnownZero |= KnownZero2;
989     return;
990   case ISD::OR:
991     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
992     Mask &= ~KnownOne;
993     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
994     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
995     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
996     
997     // Output known-0 bits are only known if clear in both the LHS & RHS.
998     KnownZero &= KnownZero2;
999     // Output known-1 are known to be set if set in either the LHS | RHS.
1000     KnownOne |= KnownOne2;
1001     return;
1002   case ISD::XOR: {
1003     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1004     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
1005     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
1006     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
1007     
1008     // Output known-0 bits are known if clear or set in both the LHS & RHS.
1009     uint64_t KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
1010     // Output known-1 are known to be set if set in only one of the LHS, RHS.
1011     KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
1012     KnownZero = KnownZeroOut;
1013     return;
1014   }
1015   case ISD::SELECT:
1016     ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero, KnownOne, Depth+1);
1017     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero2, KnownOne2, Depth+1);
1018     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
1019     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
1020     
1021     // Only known if known in both the LHS and RHS.
1022     KnownOne &= KnownOne2;
1023     KnownZero &= KnownZero2;
1024     return;
1025   case ISD::SELECT_CC:
1026     ComputeMaskedBits(Op.getOperand(3), Mask, KnownZero, KnownOne, Depth+1);
1027     ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero2, KnownOne2, Depth+1);
1028     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
1029     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
1030     
1031     // Only known if known in both the LHS and RHS.
1032     KnownOne &= KnownOne2;
1033     KnownZero &= KnownZero2;
1034     return;
1035   case ISD::SETCC:
1036     // If we know the result of a setcc has the top bits zero, use this info.
1037     if (TLI.getSetCCResultContents() == TargetLowering::ZeroOrOneSetCCResult)
1038       KnownZero |= (MVT::getIntVTBitMask(Op.getValueType()) ^ 1ULL);
1039     return;
1040   case ISD::SHL:
1041     // (shl X, C1) & C2 == 0   iff   (X & C2 >>u C1) == 0
1042     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1043       ComputeMaskedBits(Op.getOperand(0), Mask >> SA->getValue(),
1044                         KnownZero, KnownOne, Depth+1);
1045       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
1046       KnownZero <<= SA->getValue();
1047       KnownOne  <<= SA->getValue();
1048       KnownZero |= (1ULL << SA->getValue())-1;  // low bits known zero.
1049     }
1050     return;
1051   case ISD::SRL:
1052     // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
1053     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1054       MVT::ValueType VT = Op.getValueType();
1055       unsigned ShAmt = SA->getValue();
1056
1057       uint64_t TypeMask = MVT::getIntVTBitMask(VT);
1058       ComputeMaskedBits(Op.getOperand(0), (Mask << ShAmt) & TypeMask,
1059                         KnownZero, KnownOne, Depth+1);
1060       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
1061       KnownZero &= TypeMask;
1062       KnownOne  &= TypeMask;
1063       KnownZero >>= ShAmt;
1064       KnownOne  >>= ShAmt;
1065
1066       uint64_t HighBits = (1ULL << ShAmt)-1;
1067       HighBits <<= MVT::getSizeInBits(VT)-ShAmt;
1068       KnownZero |= HighBits;  // High bits known zero.
1069     }
1070     return;
1071   case ISD::SRA:
1072     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1073       MVT::ValueType VT = Op.getValueType();
1074       unsigned ShAmt = SA->getValue();
1075
1076       // Compute the new bits that are at the top now.
1077       uint64_t TypeMask = MVT::getIntVTBitMask(VT);
1078
1079       uint64_t InDemandedMask = (Mask << ShAmt) & TypeMask;
1080       // If any of the demanded bits are produced by the sign extension, we also
1081       // demand the input sign bit.
1082       uint64_t HighBits = (1ULL << ShAmt)-1;
1083       HighBits <<= MVT::getSizeInBits(VT) - ShAmt;
1084       if (HighBits & Mask)
1085         InDemandedMask |= MVT::getIntVTSignBit(VT);
1086       
1087       ComputeMaskedBits(Op.getOperand(0), InDemandedMask, KnownZero, KnownOne,
1088                         Depth+1);
1089       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
1090       KnownZero &= TypeMask;
1091       KnownOne  &= TypeMask;
1092       KnownZero >>= ShAmt;
1093       KnownOne  >>= ShAmt;
1094       
1095       // Handle the sign bits.
1096       uint64_t SignBit = MVT::getIntVTSignBit(VT);
1097       SignBit >>= ShAmt;  // Adjust to where it is now in the mask.
1098       
1099       if (KnownZero & SignBit) {       
1100         KnownZero |= HighBits;  // New bits are known zero.
1101       } else if (KnownOne & SignBit) {
1102         KnownOne  |= HighBits;  // New bits are known one.
1103       }
1104     }
1105     return;
1106   case ISD::SIGN_EXTEND_INREG: {
1107     MVT::ValueType EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
1108     
1109     // Sign extension.  Compute the demanded bits in the result that are not 
1110     // present in the input.
1111     uint64_t NewBits = ~MVT::getIntVTBitMask(EVT) & Mask;
1112
1113     uint64_t InSignBit = MVT::getIntVTSignBit(EVT);
1114     int64_t InputDemandedBits = Mask & MVT::getIntVTBitMask(EVT);
1115     
1116     // If the sign extended bits are demanded, we know that the sign
1117     // bit is demanded.
1118     if (NewBits)
1119       InputDemandedBits |= InSignBit;
1120     
1121     ComputeMaskedBits(Op.getOperand(0), InputDemandedBits,
1122                       KnownZero, KnownOne, Depth+1);
1123     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
1124     
1125     // If the sign bit of the input is known set or clear, then we know the
1126     // top bits of the result.
1127     if (KnownZero & InSignBit) {          // Input sign bit known clear
1128       KnownZero |= NewBits;
1129       KnownOne  &= ~NewBits;
1130     } else if (KnownOne & InSignBit) {    // Input sign bit known set
1131       KnownOne  |= NewBits;
1132       KnownZero &= ~NewBits;
1133     } else {                              // Input sign bit unknown
1134       KnownZero &= ~NewBits;
1135       KnownOne  &= ~NewBits;
1136     }
1137     return;
1138   }
1139   case ISD::CTTZ:
1140   case ISD::CTLZ:
1141   case ISD::CTPOP: {
1142     MVT::ValueType VT = Op.getValueType();
1143     unsigned LowBits = Log2_32(MVT::getSizeInBits(VT))+1;
1144     KnownZero = ~((1ULL << LowBits)-1) & MVT::getIntVTBitMask(VT);
1145     KnownOne  = 0;
1146     return;
1147   }
1148   case ISD::LOAD: {
1149     if (ISD::isZEXTLoad(Op.Val)) {
1150       LoadSDNode *LD = cast<LoadSDNode>(Op);
1151       MVT::ValueType VT = LD->getLoadedVT();
1152       KnownZero |= ~MVT::getIntVTBitMask(VT) & Mask;
1153     }
1154     return;
1155   }
1156   case ISD::ZERO_EXTEND: {
1157     uint64_t InMask  = MVT::getIntVTBitMask(Op.getOperand(0).getValueType());
1158     uint64_t NewBits = (~InMask) & Mask;
1159     ComputeMaskedBits(Op.getOperand(0), Mask & InMask, KnownZero, 
1160                       KnownOne, Depth+1);
1161     KnownZero |= NewBits & Mask;
1162     KnownOne  &= ~NewBits;
1163     return;
1164   }
1165   case ISD::SIGN_EXTEND: {
1166     MVT::ValueType InVT = Op.getOperand(0).getValueType();
1167     unsigned InBits    = MVT::getSizeInBits(InVT);
1168     uint64_t InMask    = MVT::getIntVTBitMask(InVT);
1169     uint64_t InSignBit = 1ULL << (InBits-1);
1170     uint64_t NewBits   = (~InMask) & Mask;
1171     uint64_t InDemandedBits = Mask & InMask;
1172
1173     // If any of the sign extended bits are demanded, we know that the sign
1174     // bit is demanded.
1175     if (NewBits & Mask)
1176       InDemandedBits |= InSignBit;
1177     
1178     ComputeMaskedBits(Op.getOperand(0), InDemandedBits, KnownZero, 
1179                       KnownOne, Depth+1);
1180     // If the sign bit is known zero or one, the  top bits match.
1181     if (KnownZero & InSignBit) {
1182       KnownZero |= NewBits;
1183       KnownOne  &= ~NewBits;
1184     } else if (KnownOne & InSignBit) {
1185       KnownOne  |= NewBits;
1186       KnownZero &= ~NewBits;
1187     } else {   // Otherwise, top bits aren't known.
1188       KnownOne  &= ~NewBits;
1189       KnownZero &= ~NewBits;
1190     }
1191     return;
1192   }
1193   case ISD::ANY_EXTEND: {
1194     MVT::ValueType VT = Op.getOperand(0).getValueType();
1195     ComputeMaskedBits(Op.getOperand(0), Mask & MVT::getIntVTBitMask(VT),
1196                       KnownZero, KnownOne, Depth+1);
1197     return;
1198   }
1199   case ISD::TRUNCATE: {
1200     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
1201     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
1202     uint64_t OutMask = MVT::getIntVTBitMask(Op.getValueType());
1203     KnownZero &= OutMask;
1204     KnownOne &= OutMask;
1205     break;
1206   }
1207   case ISD::AssertZext: {
1208     MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
1209     uint64_t InMask = MVT::getIntVTBitMask(VT);
1210     ComputeMaskedBits(Op.getOperand(0), Mask & InMask, KnownZero, 
1211                       KnownOne, Depth+1);
1212     KnownZero |= (~InMask) & Mask;
1213     return;
1214   }
1215   case ISD::ADD: {
1216     // If either the LHS or the RHS are Zero, the result is zero.
1217     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1218     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
1219     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
1220     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
1221     
1222     // Output known-0 bits are known if clear or set in both the low clear bits
1223     // common to both LHS & RHS.  For example, 8+(X<<3) is known to have the
1224     // low 3 bits clear.
1225     uint64_t KnownZeroOut = std::min(CountTrailingZeros_64(~KnownZero), 
1226                                      CountTrailingZeros_64(~KnownZero2));
1227     
1228     KnownZero = (1ULL << KnownZeroOut) - 1;
1229     KnownOne = 0;
1230     return;
1231   }
1232   case ISD::SUB: {
1233     ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0));
1234     if (!CLHS) return;
1235
1236     // We know that the top bits of C-X are clear if X contains less bits
1237     // than C (i.e. no wrap-around can happen).  For example, 20-X is
1238     // positive if we can prove that X is >= 0 and < 16.
1239     MVT::ValueType VT = CLHS->getValueType(0);
1240     if ((CLHS->getValue() & MVT::getIntVTSignBit(VT)) == 0) {  // sign bit clear
1241       unsigned NLZ = CountLeadingZeros_64(CLHS->getValue()+1);
1242       uint64_t MaskV = (1ULL << (63-NLZ))-1; // NLZ can't be 64 with no sign bit
1243       MaskV = ~MaskV & MVT::getIntVTBitMask(VT);
1244       ComputeMaskedBits(Op.getOperand(1), MaskV, KnownZero, KnownOne, Depth+1);
1245
1246       // If all of the MaskV bits are known to be zero, then we know the output
1247       // top bits are zero, because we now know that the output is from [0-C].
1248       if ((KnownZero & MaskV) == MaskV) {
1249         unsigned NLZ2 = CountLeadingZeros_64(CLHS->getValue());
1250         KnownZero = ~((1ULL << (64-NLZ2))-1) & Mask;  // Top bits known zero.
1251         KnownOne = 0;   // No one bits known.
1252       } else {
1253         KnownZero = KnownOne = 0;  // Otherwise, nothing known.
1254       }
1255     }
1256     return;
1257   }
1258   default:
1259     // Allow the target to implement this method for its nodes.
1260     if (Op.getOpcode() >= ISD::BUILTIN_OP_END) {
1261   case ISD::INTRINSIC_WO_CHAIN:
1262   case ISD::INTRINSIC_W_CHAIN:
1263   case ISD::INTRINSIC_VOID:
1264       TLI.computeMaskedBitsForTargetNode(Op, Mask, KnownZero, KnownOne, *this);
1265     }
1266     return;
1267   }
1268 }
1269
1270 /// ComputeNumSignBits - Return the number of times the sign bit of the
1271 /// register is replicated into the other bits.  We know that at least 1 bit
1272 /// is always equal to the sign bit (itself), but other cases can give us
1273 /// information.  For example, immediately after an "SRA X, 2", we know that
1274 /// the top 3 bits are all equal to each other, so we return 3.
1275 unsigned SelectionDAG::ComputeNumSignBits(SDOperand Op, unsigned Depth) const{
1276   MVT::ValueType VT = Op.getValueType();
1277   assert(MVT::isInteger(VT) && "Invalid VT!");
1278   unsigned VTBits = MVT::getSizeInBits(VT);
1279   unsigned Tmp, Tmp2;
1280   
1281   if (Depth == 6)
1282     return 1;  // Limit search depth.
1283
1284   switch (Op.getOpcode()) {
1285   default: break;
1286   case ISD::AssertSext:
1287     Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1288     return VTBits-Tmp+1;
1289   case ISD::AssertZext:
1290     Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1291     return VTBits-Tmp;
1292     
1293   case ISD::Constant: {
1294     uint64_t Val = cast<ConstantSDNode>(Op)->getValue();
1295     // If negative, invert the bits, then look at it.
1296     if (Val & MVT::getIntVTSignBit(VT))
1297       Val = ~Val;
1298     
1299     // Shift the bits so they are the leading bits in the int64_t.
1300     Val <<= 64-VTBits;
1301     
1302     // Return # leading zeros.  We use 'min' here in case Val was zero before
1303     // shifting.  We don't want to return '64' as for an i32 "0".
1304     return std::min(VTBits, CountLeadingZeros_64(Val));
1305   }
1306     
1307   case ISD::SIGN_EXTEND:
1308     Tmp = VTBits-MVT::getSizeInBits(Op.getOperand(0).getValueType());
1309     return ComputeNumSignBits(Op.getOperand(0), Depth+1) + Tmp;
1310     
1311   case ISD::SIGN_EXTEND_INREG:
1312     // Max of the input and what this extends.
1313     Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1314     Tmp = VTBits-Tmp+1;
1315     
1316     Tmp2 = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1317     return std::max(Tmp, Tmp2);
1318
1319   case ISD::SRA:
1320     Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1321     // SRA X, C   -> adds C sign bits.
1322     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1323       Tmp += C->getValue();
1324       if (Tmp > VTBits) Tmp = VTBits;
1325     }
1326     return Tmp;
1327   case ISD::SHL:
1328     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1329       // shl destroys sign bits.
1330       Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1331       if (C->getValue() >= VTBits ||      // Bad shift.
1332           C->getValue() >= Tmp) break;    // Shifted all sign bits out.
1333       return Tmp - C->getValue();
1334     }
1335     break;
1336   case ISD::AND:
1337   case ISD::OR:
1338   case ISD::XOR:    // NOT is handled here.
1339     // Logical binary ops preserve the number of sign bits.
1340     Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1341     if (Tmp == 1) return 1;  // Early out.
1342     Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1343     return std::min(Tmp, Tmp2);
1344
1345   case ISD::SELECT:
1346     Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1347     if (Tmp == 1) return 1;  // Early out.
1348     Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1349     return std::min(Tmp, Tmp2);
1350     
1351   case ISD::SETCC:
1352     // If setcc returns 0/-1, all bits are sign bits.
1353     if (TLI.getSetCCResultContents() ==
1354         TargetLowering::ZeroOrNegativeOneSetCCResult)
1355       return VTBits;
1356     break;
1357   case ISD::ROTL:
1358   case ISD::ROTR:
1359     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1360       unsigned RotAmt = C->getValue() & (VTBits-1);
1361       
1362       // Handle rotate right by N like a rotate left by 32-N.
1363       if (Op.getOpcode() == ISD::ROTR)
1364         RotAmt = (VTBits-RotAmt) & (VTBits-1);
1365
1366       // If we aren't rotating out all of the known-in sign bits, return the
1367       // number that are left.  This handles rotl(sext(x), 1) for example.
1368       Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1369       if (Tmp > RotAmt+1) return Tmp-RotAmt;
1370     }
1371     break;
1372   case ISD::ADD:
1373     // Add can have at most one carry bit.  Thus we know that the output
1374     // is, at worst, one more bit than the inputs.
1375     Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1376     if (Tmp == 1) return 1;  // Early out.
1377       
1378     // Special case decrementing a value (ADD X, -1):
1379     if (ConstantSDNode *CRHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
1380       if (CRHS->isAllOnesValue()) {
1381         uint64_t KnownZero, KnownOne;
1382         uint64_t Mask = MVT::getIntVTBitMask(VT);
1383         ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
1384         
1385         // If the input is known to be 0 or 1, the output is 0/-1, which is all
1386         // sign bits set.
1387         if ((KnownZero|1) == Mask)
1388           return VTBits;
1389         
1390         // If we are subtracting one from a positive number, there is no carry
1391         // out of the result.
1392         if (KnownZero & MVT::getIntVTSignBit(VT))
1393           return Tmp;
1394       }
1395       
1396     Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1397     if (Tmp2 == 1) return 1;
1398       return std::min(Tmp, Tmp2)-1;
1399     break;
1400     
1401   case ISD::SUB:
1402     Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1403     if (Tmp2 == 1) return 1;
1404       
1405     // Handle NEG.
1406     if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
1407       if (CLHS->getValue() == 0) {
1408         uint64_t KnownZero, KnownOne;
1409         uint64_t Mask = MVT::getIntVTBitMask(VT);
1410         ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1411         // If the input is known to be 0 or 1, the output is 0/-1, which is all
1412         // sign bits set.
1413         if ((KnownZero|1) == Mask)
1414           return VTBits;
1415         
1416         // If the input is known to be positive (the sign bit is known clear),
1417         // the output of the NEG has the same number of sign bits as the input.
1418         if (KnownZero & MVT::getIntVTSignBit(VT))
1419           return Tmp2;
1420         
1421         // Otherwise, we treat this like a SUB.
1422       }
1423     
1424     // Sub can have at most one carry bit.  Thus we know that the output
1425     // is, at worst, one more bit than the inputs.
1426     Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1427     if (Tmp == 1) return 1;  // Early out.
1428       return std::min(Tmp, Tmp2)-1;
1429     break;
1430   case ISD::TRUNCATE:
1431     // FIXME: it's tricky to do anything useful for this, but it is an important
1432     // case for targets like X86.
1433     break;
1434   }
1435   
1436   // Handle LOADX separately here. EXTLOAD case will fallthrough.
1437   if (Op.getOpcode() == ISD::LOAD) {
1438     LoadSDNode *LD = cast<LoadSDNode>(Op);
1439     unsigned ExtType = LD->getExtensionType();
1440     switch (ExtType) {
1441     default: break;
1442     case ISD::SEXTLOAD:    // '17' bits known
1443       Tmp = MVT::getSizeInBits(LD->getLoadedVT());
1444       return VTBits-Tmp+1;
1445     case ISD::ZEXTLOAD:    // '16' bits known
1446       Tmp = MVT::getSizeInBits(LD->getLoadedVT());
1447       return VTBits-Tmp;
1448     }
1449   }
1450
1451   // Allow the target to implement this method for its nodes.
1452   if (Op.getOpcode() >= ISD::BUILTIN_OP_END ||
1453       Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN || 
1454       Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
1455       Op.getOpcode() == ISD::INTRINSIC_VOID) {
1456     unsigned NumBits = TLI.ComputeNumSignBitsForTargetNode(Op, Depth);
1457     if (NumBits > 1) return NumBits;
1458   }
1459   
1460   // Finally, if we can prove that the top bits of the result are 0's or 1's,
1461   // use this information.
1462   uint64_t KnownZero, KnownOne;
1463   uint64_t Mask = MVT::getIntVTBitMask(VT);
1464   ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
1465   
1466   uint64_t SignBit = MVT::getIntVTSignBit(VT);
1467   if (KnownZero & SignBit) {        // SignBit is 0
1468     Mask = KnownZero;
1469   } else if (KnownOne & SignBit) {  // SignBit is 1;
1470     Mask = KnownOne;
1471   } else {
1472     // Nothing known.
1473     return 1;
1474   }
1475   
1476   // Okay, we know that the sign bit in Mask is set.  Use CLZ to determine
1477   // the number of identical bits in the top of the input value.
1478   Mask ^= ~0ULL;
1479   Mask <<= 64-VTBits;
1480   // Return # leading zeros.  We use 'min' here in case Val was zero before
1481   // shifting.  We don't want to return '64' as for an i32 "0".
1482   return std::min(VTBits, CountLeadingZeros_64(Mask));
1483 }
1484
1485
1486 /// getNode - Gets or creates the specified node.
1487 ///
1488 SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT) {
1489   FoldingSetNodeID ID;
1490   AddNodeIDNode(ID, Opcode, getVTList(VT), 0, 0);
1491   void *IP = 0;
1492   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1493     return SDOperand(E, 0);
1494   SDNode *N = new SDNode(Opcode, SDNode::getSDVTList(VT));
1495   CSEMap.InsertNode(N, IP);
1496   
1497   AllNodes.push_back(N);
1498   return SDOperand(N, 0);
1499 }
1500
1501 SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1502                                 SDOperand Operand) {
1503   unsigned Tmp1;
1504   // Constant fold unary operations with an integer constant operand.
1505   if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Operand.Val)) {
1506     uint64_t Val = C->getValue();
1507     switch (Opcode) {
1508     default: break;
1509     case ISD::SIGN_EXTEND: return getConstant(C->getSignExtended(), VT);
1510     case ISD::ANY_EXTEND:
1511     case ISD::ZERO_EXTEND: return getConstant(Val, VT);
1512     case ISD::TRUNCATE:    return getConstant(Val, VT);
1513     case ISD::SINT_TO_FP:  return getConstantFP(C->getSignExtended(), VT);
1514     case ISD::UINT_TO_FP:  return getConstantFP(C->getValue(), VT);
1515     case ISD::BIT_CONVERT:
1516       if (VT == MVT::f32 && C->getValueType(0) == MVT::i32)
1517         return getConstantFP(BitsToFloat(Val), VT);
1518       else if (VT == MVT::f64 && C->getValueType(0) == MVT::i64)
1519         return getConstantFP(BitsToDouble(Val), VT);
1520       break;
1521     case ISD::BSWAP:
1522       switch(VT) {
1523       default: assert(0 && "Invalid bswap!"); break;
1524       case MVT::i16: return getConstant(ByteSwap_16((unsigned short)Val), VT);
1525       case MVT::i32: return getConstant(ByteSwap_32((unsigned)Val), VT);
1526       case MVT::i64: return getConstant(ByteSwap_64(Val), VT);
1527       }
1528       break;
1529     case ISD::CTPOP:
1530       switch(VT) {
1531       default: assert(0 && "Invalid ctpop!"); break;
1532       case MVT::i1: return getConstant(Val != 0, VT);
1533       case MVT::i8: 
1534         Tmp1 = (unsigned)Val & 0xFF;
1535         return getConstant(CountPopulation_32(Tmp1), VT);
1536       case MVT::i16:
1537         Tmp1 = (unsigned)Val & 0xFFFF;
1538         return getConstant(CountPopulation_32(Tmp1), VT);
1539       case MVT::i32:
1540         return getConstant(CountPopulation_32((unsigned)Val), VT);
1541       case MVT::i64:
1542         return getConstant(CountPopulation_64(Val), VT);
1543       }
1544     case ISD::CTLZ:
1545       switch(VT) {
1546       default: assert(0 && "Invalid ctlz!"); break;
1547       case MVT::i1: return getConstant(Val == 0, VT);
1548       case MVT::i8: 
1549         Tmp1 = (unsigned)Val & 0xFF;
1550         return getConstant(CountLeadingZeros_32(Tmp1)-24, VT);
1551       case MVT::i16:
1552         Tmp1 = (unsigned)Val & 0xFFFF;
1553         return getConstant(CountLeadingZeros_32(Tmp1)-16, VT);
1554       case MVT::i32:
1555         return getConstant(CountLeadingZeros_32((unsigned)Val), VT);
1556       case MVT::i64:
1557         return getConstant(CountLeadingZeros_64(Val), VT);
1558       }
1559     case ISD::CTTZ:
1560       switch(VT) {
1561       default: assert(0 && "Invalid cttz!"); break;
1562       case MVT::i1: return getConstant(Val == 0, VT);
1563       case MVT::i8: 
1564         Tmp1 = (unsigned)Val | 0x100;
1565         return getConstant(CountTrailingZeros_32(Tmp1), VT);
1566       case MVT::i16:
1567         Tmp1 = (unsigned)Val | 0x10000;
1568         return getConstant(CountTrailingZeros_32(Tmp1), VT);
1569       case MVT::i32:
1570         return getConstant(CountTrailingZeros_32((unsigned)Val), VT);
1571       case MVT::i64:
1572         return getConstant(CountTrailingZeros_64(Val), VT);
1573       }
1574     }
1575   }
1576
1577   // Constant fold unary operations with an floating point constant operand.
1578   if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Operand.Val))
1579     switch (Opcode) {
1580     case ISD::FNEG:
1581       return getConstantFP(-C->getValue(), VT);
1582     case ISD::FABS:
1583       return getConstantFP(fabs(C->getValue()), VT);
1584     case ISD::FP_ROUND:
1585     case ISD::FP_EXTEND:
1586       return getConstantFP(C->getValue(), VT);
1587     case ISD::FP_TO_SINT:
1588       return getConstant((int64_t)C->getValue(), VT);
1589     case ISD::FP_TO_UINT:
1590       return getConstant((uint64_t)C->getValue(), VT);
1591     case ISD::BIT_CONVERT:
1592       if (VT == MVT::i32 && C->getValueType(0) == MVT::f32)
1593         return getConstant(FloatToBits(C->getValue()), VT);
1594       else if (VT == MVT::i64 && C->getValueType(0) == MVT::f64)
1595         return getConstant(DoubleToBits(C->getValue()), VT);
1596       break;
1597     }
1598
1599   unsigned OpOpcode = Operand.Val->getOpcode();
1600   switch (Opcode) {
1601   case ISD::TokenFactor:
1602     return Operand;         // Factor of one node?  No factor.
1603   case ISD::FP_ROUND:
1604   case ISD::FP_EXTEND:
1605     assert(MVT::isFloatingPoint(VT) &&
1606            MVT::isFloatingPoint(Operand.getValueType()) && "Invalid FP cast!");
1607     break;
1608   case ISD::SIGN_EXTEND:
1609     assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1610            "Invalid SIGN_EXTEND!");
1611     if (Operand.getValueType() == VT) return Operand;   // noop extension
1612     assert(Operand.getValueType() < VT && "Invalid sext node, dst < src!");
1613     if (OpOpcode == ISD::SIGN_EXTEND || OpOpcode == ISD::ZERO_EXTEND)
1614       return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1615     break;
1616   case ISD::ZERO_EXTEND:
1617     assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1618            "Invalid ZERO_EXTEND!");
1619     if (Operand.getValueType() == VT) return Operand;   // noop extension
1620     assert(Operand.getValueType() < VT && "Invalid zext node, dst < src!");
1621     if (OpOpcode == ISD::ZERO_EXTEND)   // (zext (zext x)) -> (zext x)
1622       return getNode(ISD::ZERO_EXTEND, VT, Operand.Val->getOperand(0));
1623     break;
1624   case ISD::ANY_EXTEND:
1625     assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1626            "Invalid ANY_EXTEND!");
1627     if (Operand.getValueType() == VT) return Operand;   // noop extension
1628     assert(Operand.getValueType() < VT && "Invalid anyext node, dst < src!");
1629     if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND)
1630       // (ext (zext x)) -> (zext x)  and  (ext (sext x)) -> (sext x)
1631       return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1632     break;
1633   case ISD::TRUNCATE:
1634     assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1635            "Invalid TRUNCATE!");
1636     if (Operand.getValueType() == VT) return Operand;   // noop truncate
1637     assert(Operand.getValueType() > VT && "Invalid truncate node, src < dst!");
1638     if (OpOpcode == ISD::TRUNCATE)
1639       return getNode(ISD::TRUNCATE, VT, Operand.Val->getOperand(0));
1640     else if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND ||
1641              OpOpcode == ISD::ANY_EXTEND) {
1642       // If the source is smaller than the dest, we still need an extend.
1643       if (Operand.Val->getOperand(0).getValueType() < VT)
1644         return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1645       else if (Operand.Val->getOperand(0).getValueType() > VT)
1646         return getNode(ISD::TRUNCATE, VT, Operand.Val->getOperand(0));
1647       else
1648         return Operand.Val->getOperand(0);
1649     }
1650     break;
1651   case ISD::BIT_CONVERT:
1652     // Basic sanity checking.
1653     assert(MVT::getSizeInBits(VT) == MVT::getSizeInBits(Operand.getValueType())
1654            && "Cannot BIT_CONVERT between types of different sizes!");
1655     if (VT == Operand.getValueType()) return Operand;  // noop conversion.
1656     if (OpOpcode == ISD::BIT_CONVERT)  // bitconv(bitconv(x)) -> bitconv(x)
1657       return getNode(ISD::BIT_CONVERT, VT, Operand.getOperand(0));
1658     if (OpOpcode == ISD::UNDEF)
1659       return getNode(ISD::UNDEF, VT);
1660     break;
1661   case ISD::SCALAR_TO_VECTOR:
1662     assert(MVT::isVector(VT) && !MVT::isVector(Operand.getValueType()) &&
1663            MVT::getVectorElementType(VT) == Operand.getValueType() &&
1664            "Illegal SCALAR_TO_VECTOR node!");
1665     break;
1666   case ISD::FNEG:
1667     if (OpOpcode == ISD::FSUB)   // -(X-Y) -> (Y-X)
1668       return getNode(ISD::FSUB, VT, Operand.Val->getOperand(1),
1669                      Operand.Val->getOperand(0));
1670     if (OpOpcode == ISD::FNEG)  // --X -> X
1671       return Operand.Val->getOperand(0);
1672     break;
1673   case ISD::FABS:
1674     if (OpOpcode == ISD::FNEG)  // abs(-X) -> abs(X)
1675       return getNode(ISD::FABS, VT, Operand.Val->getOperand(0));
1676     break;
1677   }
1678
1679   SDNode *N;
1680   SDVTList VTs = getVTList(VT);
1681   if (VT != MVT::Flag) { // Don't CSE flag producing nodes
1682     FoldingSetNodeID ID;
1683     SDOperand Ops[1] = { Operand };
1684     AddNodeIDNode(ID, Opcode, VTs, Ops, 1);
1685     void *IP = 0;
1686     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1687       return SDOperand(E, 0);
1688     N = new UnarySDNode(Opcode, VTs, Operand);
1689     CSEMap.InsertNode(N, IP);
1690   } else {
1691     N = new UnarySDNode(Opcode, VTs, Operand);
1692   }
1693   AllNodes.push_back(N);
1694   return SDOperand(N, 0);
1695 }
1696
1697
1698
1699 SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1700                                 SDOperand N1, SDOperand N2) {
1701 #ifndef NDEBUG
1702   switch (Opcode) {
1703   case ISD::TokenFactor:
1704     assert(VT == MVT::Other && N1.getValueType() == MVT::Other &&
1705            N2.getValueType() == MVT::Other && "Invalid token factor!");
1706     break;
1707   case ISD::AND:
1708   case ISD::OR:
1709   case ISD::XOR:
1710   case ISD::UDIV:
1711   case ISD::UREM:
1712   case ISD::MULHU:
1713   case ISD::MULHS:
1714     assert(MVT::isInteger(VT) && "This operator does not apply to FP types!");
1715     // fall through
1716   case ISD::ADD:
1717   case ISD::SUB:
1718   case ISD::MUL:
1719   case ISD::SDIV:
1720   case ISD::SREM:
1721     assert(MVT::isInteger(N1.getValueType()) && "Should use F* for FP ops");
1722     // fall through.
1723   case ISD::FADD:
1724   case ISD::FSUB:
1725   case ISD::FMUL:
1726   case ISD::FDIV:
1727   case ISD::FREM:
1728     assert(N1.getValueType() == N2.getValueType() &&
1729            N1.getValueType() == VT && "Binary operator types must match!");
1730     break;
1731   case ISD::FCOPYSIGN:   // N1 and result must match.  N1/N2 need not match.
1732     assert(N1.getValueType() == VT &&
1733            MVT::isFloatingPoint(N1.getValueType()) && 
1734            MVT::isFloatingPoint(N2.getValueType()) &&
1735            "Invalid FCOPYSIGN!");
1736     break;
1737   case ISD::SHL:
1738   case ISD::SRA:
1739   case ISD::SRL:
1740   case ISD::ROTL:
1741   case ISD::ROTR:
1742     assert(VT == N1.getValueType() &&
1743            "Shift operators return type must be the same as their first arg");
1744     assert(MVT::isInteger(VT) && MVT::isInteger(N2.getValueType()) &&
1745            VT != MVT::i1 && "Shifts only work on integers");
1746     break;
1747   case ISD::FP_ROUND_INREG: {
1748     MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
1749     assert(VT == N1.getValueType() && "Not an inreg round!");
1750     assert(MVT::isFloatingPoint(VT) && MVT::isFloatingPoint(EVT) &&
1751            "Cannot FP_ROUND_INREG integer types");
1752     assert(EVT <= VT && "Not rounding down!");
1753     break;
1754   }
1755   case ISD::AssertSext:
1756   case ISD::AssertZext:
1757   case ISD::SIGN_EXTEND_INREG: {
1758     MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
1759     assert(VT == N1.getValueType() && "Not an inreg extend!");
1760     assert(MVT::isInteger(VT) && MVT::isInteger(EVT) &&
1761            "Cannot *_EXTEND_INREG FP types");
1762     assert(EVT <= VT && "Not extending!");
1763   }
1764
1765   default: break;
1766   }
1767 #endif
1768
1769   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val);
1770   ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val);
1771   if (N1C) {
1772     if (Opcode == ISD::SIGN_EXTEND_INREG) {
1773       int64_t Val = N1C->getValue();
1774       unsigned FromBits = MVT::getSizeInBits(cast<VTSDNode>(N2)->getVT());
1775       Val <<= 64-FromBits;
1776       Val >>= 64-FromBits;
1777       return getConstant(Val, VT);
1778     }
1779     
1780     if (N2C) {
1781       uint64_t C1 = N1C->getValue(), C2 = N2C->getValue();
1782       switch (Opcode) {
1783       case ISD::ADD: return getConstant(C1 + C2, VT);
1784       case ISD::SUB: return getConstant(C1 - C2, VT);
1785       case ISD::MUL: return getConstant(C1 * C2, VT);
1786       case ISD::UDIV:
1787         if (C2) return getConstant(C1 / C2, VT);
1788         break;
1789       case ISD::UREM :
1790         if (C2) return getConstant(C1 % C2, VT);
1791         break;
1792       case ISD::SDIV :
1793         if (C2) return getConstant(N1C->getSignExtended() /
1794                                    N2C->getSignExtended(), VT);
1795         break;
1796       case ISD::SREM :
1797         if (C2) return getConstant(N1C->getSignExtended() %
1798                                    N2C->getSignExtended(), VT);
1799         break;
1800       case ISD::AND  : return getConstant(C1 & C2, VT);
1801       case ISD::OR   : return getConstant(C1 | C2, VT);
1802       case ISD::XOR  : return getConstant(C1 ^ C2, VT);
1803       case ISD::SHL  : return getConstant(C1 << C2, VT);
1804       case ISD::SRL  : return getConstant(C1 >> C2, VT);
1805       case ISD::SRA  : return getConstant(N1C->getSignExtended() >>(int)C2, VT);
1806       case ISD::ROTL : 
1807         return getConstant((C1 << C2) | (C1 >> (MVT::getSizeInBits(VT) - C2)),
1808                            VT);
1809       case ISD::ROTR : 
1810         return getConstant((C1 >> C2) | (C1 << (MVT::getSizeInBits(VT) - C2)), 
1811                            VT);
1812       default: break;
1813       }
1814     } else {      // Cannonicalize constant to RHS if commutative
1815       if (isCommutativeBinOp(Opcode)) {
1816         std::swap(N1C, N2C);
1817         std::swap(N1, N2);
1818       }
1819     }
1820   }
1821
1822   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1.Val);
1823   ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2.Val);
1824   if (N1CFP) {
1825     if (N2CFP) {
1826       double C1 = N1CFP->getValue(), C2 = N2CFP->getValue();
1827       switch (Opcode) {
1828       case ISD::FADD: return getConstantFP(C1 + C2, VT);
1829       case ISD::FSUB: return getConstantFP(C1 - C2, VT);
1830       case ISD::FMUL: return getConstantFP(C1 * C2, VT);
1831       case ISD::FDIV:
1832         if (C2) return getConstantFP(C1 / C2, VT);
1833         break;
1834       case ISD::FREM :
1835         if (C2) return getConstantFP(fmod(C1, C2), VT);
1836         break;
1837       case ISD::FCOPYSIGN: {
1838         union {
1839           double   F;
1840           uint64_t I;
1841         } u1;
1842         u1.F = C1;
1843         if (int64_t(DoubleToBits(C2)) < 0)  // Sign bit of RHS set?
1844           u1.I |= 1ULL << 63;      // Set the sign bit of the LHS.
1845         else 
1846           u1.I &= (1ULL << 63)-1;  // Clear the sign bit of the LHS.
1847         return getConstantFP(u1.F, VT);
1848       }
1849       default: break;
1850       }
1851     } else {      // Cannonicalize constant to RHS if commutative
1852       if (isCommutativeBinOp(Opcode)) {
1853         std::swap(N1CFP, N2CFP);
1854         std::swap(N1, N2);
1855       }
1856     }
1857   }
1858   
1859   // Canonicalize an UNDEF to the RHS, even over a constant.
1860   if (N1.getOpcode() == ISD::UNDEF) {
1861     if (isCommutativeBinOp(Opcode)) {
1862       std::swap(N1, N2);
1863     } else {
1864       switch (Opcode) {
1865       case ISD::FP_ROUND_INREG:
1866       case ISD::SIGN_EXTEND_INREG:
1867       case ISD::SUB:
1868       case ISD::FSUB:
1869       case ISD::FDIV:
1870       case ISD::FREM:
1871       case ISD::SRA:
1872         return N1;     // fold op(undef, arg2) -> undef
1873       case ISD::UDIV:
1874       case ISD::SDIV:
1875       case ISD::UREM:
1876       case ISD::SREM:
1877       case ISD::SRL:
1878       case ISD::SHL:
1879         if (!MVT::isVector(VT)) 
1880           return getConstant(0, VT);    // fold op(undef, arg2) -> 0
1881         // For vectors, we can't easily build an all zero vector, just return
1882         // the LHS.
1883         return N2;
1884       }
1885     }
1886   }
1887   
1888   // Fold a bunch of operators when the RHS is undef. 
1889   if (N2.getOpcode() == ISD::UNDEF) {
1890     switch (Opcode) {
1891     case ISD::ADD:
1892     case ISD::ADDC:
1893     case ISD::ADDE:
1894     case ISD::SUB:
1895     case ISD::FADD:
1896     case ISD::FSUB:
1897     case ISD::FMUL:
1898     case ISD::FDIV:
1899     case ISD::FREM:
1900     case ISD::UDIV:
1901     case ISD::SDIV:
1902     case ISD::UREM:
1903     case ISD::SREM:
1904     case ISD::XOR:
1905       return N2;       // fold op(arg1, undef) -> undef
1906     case ISD::MUL: 
1907     case ISD::AND:
1908     case ISD::SRL:
1909     case ISD::SHL:
1910       if (!MVT::isVector(VT)) 
1911         return getConstant(0, VT);  // fold op(arg1, undef) -> 0
1912       // For vectors, we can't easily build an all zero vector, just return
1913       // the LHS.
1914       return N1;
1915     case ISD::OR:
1916       if (!MVT::isVector(VT)) 
1917         return getConstant(MVT::getIntVTBitMask(VT), VT);
1918       // For vectors, we can't easily build an all one vector, just return
1919       // the LHS.
1920       return N1;
1921     case ISD::SRA:
1922       return N1;
1923     }
1924   }
1925
1926   // Fold operations.
1927   switch (Opcode) {
1928   case ISD::TokenFactor:
1929     // Fold trivial token factors.
1930     if (N1.getOpcode() == ISD::EntryToken) return N2;
1931     if (N2.getOpcode() == ISD::EntryToken) return N1;
1932     break;
1933       
1934   case ISD::AND:
1935     // (X & 0) -> 0.  This commonly occurs when legalizing i64 values, so it's
1936     // worth handling here.
1937     if (N2C && N2C->getValue() == 0)
1938       return N2;
1939     break;
1940   case ISD::OR:
1941   case ISD::XOR:
1942     // (X ^| 0) -> X.  This commonly occurs when legalizing i64 values, so it's
1943     // worth handling here.
1944     if (N2C && N2C->getValue() == 0)
1945       return N1;
1946     break;
1947   case ISD::FP_ROUND_INREG:
1948     if (cast<VTSDNode>(N2)->getVT() == VT) return N1;  // Not actually rounding.
1949     break;
1950   case ISD::SIGN_EXTEND_INREG: {
1951     MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
1952     if (EVT == VT) return N1;  // Not actually extending
1953     break;
1954   }
1955   case ISD::EXTRACT_ELEMENT:
1956     assert(N2C && (unsigned)N2C->getValue() < 2 && "Bad EXTRACT_ELEMENT!");
1957     
1958     // EXTRACT_ELEMENT of BUILD_PAIR is often formed while legalize is expanding
1959     // 64-bit integers into 32-bit parts.  Instead of building the extract of
1960     // the BUILD_PAIR, only to have legalize rip it apart, just do it now. 
1961     if (N1.getOpcode() == ISD::BUILD_PAIR)
1962       return N1.getOperand(N2C->getValue());
1963     
1964     // EXTRACT_ELEMENT of a constant int is also very common.
1965     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) {
1966       unsigned Shift = MVT::getSizeInBits(VT) * N2C->getValue();
1967       return getConstant(C->getValue() >> Shift, VT);
1968     }
1969     break;
1970
1971   // FIXME: figure out how to safely handle things like
1972   // int foo(int x) { return 1 << (x & 255); }
1973   // int bar() { return foo(256); }
1974 #if 0
1975   case ISD::SHL:
1976   case ISD::SRL:
1977   case ISD::SRA:
1978     if (N2.getOpcode() == ISD::SIGN_EXTEND_INREG &&
1979         cast<VTSDNode>(N2.getOperand(1))->getVT() != MVT::i1)
1980       return getNode(Opcode, VT, N1, N2.getOperand(0));
1981     else if (N2.getOpcode() == ISD::AND)
1982       if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N2.getOperand(1))) {
1983         // If the and is only masking out bits that cannot effect the shift,
1984         // eliminate the and.
1985         unsigned NumBits = MVT::getSizeInBits(VT);
1986         if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1)
1987           return getNode(Opcode, VT, N1, N2.getOperand(0));
1988       }
1989     break;
1990 #endif
1991   }
1992
1993   // Memoize this node if possible.
1994   SDNode *N;
1995   SDVTList VTs = getVTList(VT);
1996   if (VT != MVT::Flag) {
1997     SDOperand Ops[] = { N1, N2 };
1998     FoldingSetNodeID ID;
1999     AddNodeIDNode(ID, Opcode, VTs, Ops, 2);
2000     void *IP = 0;
2001     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2002       return SDOperand(E, 0);
2003     N = new BinarySDNode(Opcode, VTs, N1, N2);
2004     CSEMap.InsertNode(N, IP);
2005   } else {
2006     N = new BinarySDNode(Opcode, VTs, N1, N2);
2007   }
2008
2009   AllNodes.push_back(N);
2010   return SDOperand(N, 0);
2011 }
2012
2013 SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2014                                 SDOperand N1, SDOperand N2, SDOperand N3) {
2015   // Perform various simplifications.
2016   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val);
2017   ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val);
2018   switch (Opcode) {
2019   case ISD::SETCC: {
2020     // Use FoldSetCC to simplify SETCC's.
2021     SDOperand Simp = FoldSetCC(VT, N1, N2, cast<CondCodeSDNode>(N3)->get());
2022     if (Simp.Val) return Simp;
2023     break;
2024   }
2025   case ISD::SELECT:
2026     if (N1C)
2027       if (N1C->getValue())
2028         return N2;             // select true, X, Y -> X
2029       else
2030         return N3;             // select false, X, Y -> Y
2031
2032     if (N2 == N3) return N2;   // select C, X, X -> X
2033     break;
2034   case ISD::BRCOND:
2035     if (N2C)
2036       if (N2C->getValue()) // Unconditional branch
2037         return getNode(ISD::BR, MVT::Other, N1, N3);
2038       else
2039         return N1;         // Never-taken branch
2040     break;
2041   case ISD::VECTOR_SHUFFLE:
2042     assert(VT == N1.getValueType() && VT == N2.getValueType() &&
2043            MVT::isVector(VT) && MVT::isVector(N3.getValueType()) &&
2044            N3.getOpcode() == ISD::BUILD_VECTOR &&
2045            MVT::getVectorNumElements(VT) == N3.getNumOperands() &&
2046            "Illegal VECTOR_SHUFFLE node!");
2047     break;
2048   case ISD::VBIT_CONVERT:
2049     // Fold vbit_convert nodes from a type to themselves.
2050     if (N1.getValueType() == MVT::Vector) {
2051       assert(isa<ConstantSDNode>(*(N1.Val->op_end()-2)) &&
2052              isa<VTSDNode>(*(N1.Val->op_end()-1)) && "Malformed vector input!");
2053       if (*(N1.Val->op_end()-2) == N2 && *(N1.Val->op_end()-1) == N3)
2054         return N1;
2055     }
2056     break;
2057   }
2058
2059   // Memoize node if it doesn't produce a flag.
2060   SDNode *N;
2061   SDVTList VTs = getVTList(VT);
2062   if (VT != MVT::Flag) {
2063     SDOperand Ops[] = { N1, N2, N3 };
2064     FoldingSetNodeID ID;
2065     AddNodeIDNode(ID, Opcode, VTs, Ops, 3);
2066     void *IP = 0;
2067     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2068       return SDOperand(E, 0);
2069     N = new TernarySDNode(Opcode, VTs, N1, N2, N3);
2070     CSEMap.InsertNode(N, IP);
2071   } else {
2072     N = new TernarySDNode(Opcode, VTs, N1, N2, N3);
2073   }
2074   AllNodes.push_back(N);
2075   return SDOperand(N, 0);
2076 }
2077
2078 SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2079                                 SDOperand N1, SDOperand N2, SDOperand N3,
2080                                 SDOperand N4) {
2081   SDOperand Ops[] = { N1, N2, N3, N4 };
2082   return getNode(Opcode, VT, Ops, 4);
2083 }
2084
2085 SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2086                                 SDOperand N1, SDOperand N2, SDOperand N3,
2087                                 SDOperand N4, SDOperand N5) {
2088   SDOperand Ops[] = { N1, N2, N3, N4, N5 };
2089   return getNode(Opcode, VT, Ops, 5);
2090 }
2091
2092 SDOperand SelectionDAG::getLoad(MVT::ValueType VT,
2093                                 SDOperand Chain, SDOperand Ptr,
2094                                 const Value *SV, int SVOffset,
2095                                 bool isVolatile, unsigned Alignment) {
2096   if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2097     const Type *Ty = 0;
2098     if (VT != MVT::Vector && VT != MVT::iPTR) {
2099       Ty = MVT::getTypeForValueType(VT);
2100     } else if (SV) {
2101       const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2102       assert(PT && "Value for load must be a pointer");
2103       Ty = PT->getElementType();
2104     }  
2105     assert(Ty && "Could not get type information for load");
2106     Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2107   }
2108   SDVTList VTs = getVTList(VT, MVT::Other);
2109   SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2110   SDOperand Ops[] = { Chain, Ptr, Undef };
2111   FoldingSetNodeID ID;
2112   AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
2113   ID.AddInteger(ISD::UNINDEXED);
2114   ID.AddInteger(ISD::NON_EXTLOAD);
2115   ID.AddInteger(VT);
2116   ID.AddPointer(SV);
2117   ID.AddInteger(SVOffset);
2118   ID.AddInteger(Alignment);
2119   ID.AddInteger(isVolatile);
2120   void *IP = 0;
2121   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2122     return SDOperand(E, 0);
2123   SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED,
2124                              ISD::NON_EXTLOAD, VT, SV, SVOffset, Alignment,
2125                              isVolatile);
2126   CSEMap.InsertNode(N, IP);
2127   AllNodes.push_back(N);
2128   return SDOperand(N, 0);
2129 }
2130
2131 SDOperand SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, MVT::ValueType VT,
2132                                    SDOperand Chain, SDOperand Ptr,
2133                                    const Value *SV,
2134                                    int SVOffset, MVT::ValueType EVT,
2135                                    bool isVolatile, unsigned Alignment) {
2136   // If they are asking for an extending load from/to the same thing, return a
2137   // normal load.
2138   if (VT == EVT)
2139     ExtType = ISD::NON_EXTLOAD;
2140
2141   if (MVT::isVector(VT))
2142     assert(EVT == MVT::getVectorElementType(VT) && "Invalid vector extload!");
2143   else
2144     assert(EVT < VT && "Should only be an extending load, not truncating!");
2145   assert((ExtType == ISD::EXTLOAD || MVT::isInteger(VT)) &&
2146          "Cannot sign/zero extend a FP/Vector load!");
2147   assert(MVT::isInteger(VT) == MVT::isInteger(EVT) &&
2148          "Cannot convert from FP to Int or Int -> FP!");
2149
2150   if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2151     const Type *Ty = 0;
2152     if (VT != MVT::Vector && VT != MVT::iPTR) {
2153       Ty = MVT::getTypeForValueType(VT);
2154     } else if (SV) {
2155       const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2156       assert(PT && "Value for load must be a pointer");
2157       Ty = PT->getElementType();
2158     }  
2159     assert(Ty && "Could not get type information for load");
2160     Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2161   }
2162   SDVTList VTs = getVTList(VT, MVT::Other);
2163   SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2164   SDOperand Ops[] = { Chain, Ptr, Undef };
2165   FoldingSetNodeID ID;
2166   AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
2167   ID.AddInteger(ISD::UNINDEXED);
2168   ID.AddInteger(ExtType);
2169   ID.AddInteger(EVT);
2170   ID.AddPointer(SV);
2171   ID.AddInteger(SVOffset);
2172   ID.AddInteger(Alignment);
2173   ID.AddInteger(isVolatile);
2174   void *IP = 0;
2175   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2176     return SDOperand(E, 0);
2177   SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED, ExtType, EVT,
2178                              SV, SVOffset, Alignment, isVolatile);
2179   CSEMap.InsertNode(N, IP);
2180   AllNodes.push_back(N);
2181   return SDOperand(N, 0);
2182 }
2183
2184 SDOperand
2185 SelectionDAG::getIndexedLoad(SDOperand OrigLoad, SDOperand Base,
2186                              SDOperand Offset, ISD::MemIndexedMode AM) {
2187   LoadSDNode *LD = cast<LoadSDNode>(OrigLoad);
2188   assert(LD->getOffset().getOpcode() == ISD::UNDEF &&
2189          "Load is already a indexed load!");
2190   MVT::ValueType VT = OrigLoad.getValueType();
2191   SDVTList VTs = getVTList(VT, Base.getValueType(), MVT::Other);
2192   SDOperand Ops[] = { LD->getChain(), Base, Offset };
2193   FoldingSetNodeID ID;
2194   AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
2195   ID.AddInteger(AM);
2196   ID.AddInteger(LD->getExtensionType());
2197   ID.AddInteger(LD->getLoadedVT());
2198   ID.AddPointer(LD->getSrcValue());
2199   ID.AddInteger(LD->getSrcValueOffset());
2200   ID.AddInteger(LD->getAlignment());
2201   ID.AddInteger(LD->isVolatile());
2202   void *IP = 0;
2203   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2204     return SDOperand(E, 0);
2205   SDNode *N = new LoadSDNode(Ops, VTs, AM,
2206                              LD->getExtensionType(), LD->getLoadedVT(),
2207                              LD->getSrcValue(), LD->getSrcValueOffset(),
2208                              LD->getAlignment(), LD->isVolatile());
2209   CSEMap.InsertNode(N, IP);
2210   AllNodes.push_back(N);
2211   return SDOperand(N, 0);
2212 }
2213
2214 SDOperand SelectionDAG::getVecLoad(unsigned Count, MVT::ValueType EVT,
2215                                    SDOperand Chain, SDOperand Ptr,
2216                                    SDOperand SV) {
2217   SDOperand Ops[] = { Chain, Ptr, SV, getConstant(Count, MVT::i32), 
2218                       getValueType(EVT) };
2219   return getNode(ISD::VLOAD, getVTList(MVT::Vector, MVT::Other), Ops, 5);
2220 }
2221
2222 SDOperand SelectionDAG::getStore(SDOperand Chain, SDOperand Val,
2223                                  SDOperand Ptr, const Value *SV, int SVOffset,
2224                                  bool isVolatile, unsigned Alignment) {
2225   MVT::ValueType VT = Val.getValueType();
2226
2227   if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2228     const Type *Ty = 0;
2229     if (VT != MVT::Vector && VT != MVT::iPTR) {
2230       Ty = MVT::getTypeForValueType(VT);
2231     } else if (SV) {
2232       const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2233       assert(PT && "Value for store must be a pointer");
2234       Ty = PT->getElementType();
2235     }
2236     assert(Ty && "Could not get type information for store");
2237     Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2238   }
2239   SDVTList VTs = getVTList(MVT::Other);
2240   SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2241   SDOperand Ops[] = { Chain, Val, Ptr, Undef };
2242   FoldingSetNodeID ID;
2243   AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
2244   ID.AddInteger(ISD::UNINDEXED);
2245   ID.AddInteger(false);
2246   ID.AddInteger(VT);
2247   ID.AddPointer(SV);
2248   ID.AddInteger(SVOffset);
2249   ID.AddInteger(Alignment);
2250   ID.AddInteger(isVolatile);
2251   void *IP = 0;
2252   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2253     return SDOperand(E, 0);
2254   SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, false,
2255                               VT, SV, SVOffset, Alignment, isVolatile);
2256   CSEMap.InsertNode(N, IP);
2257   AllNodes.push_back(N);
2258   return SDOperand(N, 0);
2259 }
2260
2261 SDOperand SelectionDAG::getTruncStore(SDOperand Chain, SDOperand Val,
2262                                       SDOperand Ptr, const Value *SV,
2263                                       int SVOffset, MVT::ValueType SVT,
2264                                       bool isVolatile, unsigned Alignment) {
2265   MVT::ValueType VT = Val.getValueType();
2266   bool isTrunc = VT != SVT;
2267
2268   assert(VT > SVT && "Not a truncation?");
2269   assert(MVT::isInteger(VT) == MVT::isInteger(SVT) &&
2270          "Can't do FP-INT conversion!");
2271
2272   if (Alignment == 0) { // Ensure that codegen never sees alignment 0
2273     const Type *Ty = 0;
2274     if (VT != MVT::Vector && VT != MVT::iPTR) {
2275       Ty = MVT::getTypeForValueType(VT);
2276     } else if (SV) {
2277       const PointerType *PT = dyn_cast<PointerType>(SV->getType());
2278       assert(PT && "Value for store must be a pointer");
2279       Ty = PT->getElementType();
2280     }
2281     assert(Ty && "Could not get type information for store");
2282     Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
2283   }
2284   SDVTList VTs = getVTList(MVT::Other);
2285   SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
2286   SDOperand Ops[] = { Chain, Val, Ptr, Undef };
2287   FoldingSetNodeID ID;
2288   AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
2289   ID.AddInteger(ISD::UNINDEXED);
2290   ID.AddInteger(isTrunc);
2291   ID.AddInteger(SVT);
2292   ID.AddPointer(SV);
2293   ID.AddInteger(SVOffset);
2294   ID.AddInteger(Alignment);
2295   ID.AddInteger(isVolatile);
2296   void *IP = 0;
2297   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2298     return SDOperand(E, 0);
2299   SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, isTrunc,
2300                               SVT, SV, SVOffset, Alignment, isVolatile);
2301   CSEMap.InsertNode(N, IP);
2302   AllNodes.push_back(N);
2303   return SDOperand(N, 0);
2304 }
2305
2306 SDOperand
2307 SelectionDAG::getIndexedStore(SDOperand OrigStore, SDOperand Base,
2308                               SDOperand Offset, ISD::MemIndexedMode AM) {
2309   StoreSDNode *ST = cast<StoreSDNode>(OrigStore);
2310   assert(ST->getOffset().getOpcode() == ISD::UNDEF &&
2311          "Store is already a indexed store!");
2312   SDVTList VTs = getVTList(Base.getValueType(), MVT::Other);
2313   SDOperand Ops[] = { ST->getChain(), ST->getValue(), Base, Offset };
2314   FoldingSetNodeID ID;
2315   AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
2316   ID.AddInteger(AM);
2317   ID.AddInteger(ST->isTruncatingStore());
2318   ID.AddInteger(ST->getStoredVT());
2319   ID.AddPointer(ST->getSrcValue());
2320   ID.AddInteger(ST->getSrcValueOffset());
2321   ID.AddInteger(ST->getAlignment());
2322   ID.AddInteger(ST->isVolatile());
2323   void *IP = 0;
2324   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2325     return SDOperand(E, 0);
2326   SDNode *N = new StoreSDNode(Ops, VTs, AM,
2327                               ST->isTruncatingStore(), ST->getStoredVT(),
2328                               ST->getSrcValue(), ST->getSrcValueOffset(),
2329                               ST->getAlignment(), ST->isVolatile());
2330   CSEMap.InsertNode(N, IP);
2331   AllNodes.push_back(N);
2332   return SDOperand(N, 0);
2333 }
2334
2335 SDOperand SelectionDAG::getVAArg(MVT::ValueType VT,
2336                                  SDOperand Chain, SDOperand Ptr,
2337                                  SDOperand SV) {
2338   SDOperand Ops[] = { Chain, Ptr, SV };
2339   return getNode(ISD::VAARG, getVTList(VT, MVT::Other), Ops, 3);
2340 }
2341
2342 SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
2343                                 const SDOperand *Ops, unsigned NumOps) {
2344   switch (NumOps) {
2345   case 0: return getNode(Opcode, VT);
2346   case 1: return getNode(Opcode, VT, Ops[0]);
2347   case 2: return getNode(Opcode, VT, Ops[0], Ops[1]);
2348   case 3: return getNode(Opcode, VT, Ops[0], Ops[1], Ops[2]);
2349   default: break;
2350   }
2351   
2352   switch (Opcode) {
2353   default: break;
2354   case ISD::SELECT_CC: {
2355     assert(NumOps == 5 && "SELECT_CC takes 5 operands!");
2356     assert(Ops[0].getValueType() == Ops[1].getValueType() &&
2357            "LHS and RHS of condition must have same type!");
2358     assert(Ops[2].getValueType() == Ops[3].getValueType() &&
2359            "True and False arms of SelectCC must have same type!");
2360     assert(Ops[2].getValueType() == VT &&
2361            "select_cc node must be of same type as true and false value!");
2362     break;
2363   }
2364   case ISD::BR_CC: {
2365     assert(NumOps == 5 && "BR_CC takes 5 operands!");
2366     assert(Ops[2].getValueType() == Ops[3].getValueType() &&
2367            "LHS/RHS of comparison should match types!");
2368     break;
2369   }
2370   }
2371
2372   // Memoize nodes.
2373   SDNode *N;
2374   SDVTList VTs = getVTList(VT);
2375   if (VT != MVT::Flag) {
2376     FoldingSetNodeID ID;
2377     AddNodeIDNode(ID, Opcode, VTs, Ops, NumOps);
2378     void *IP = 0;
2379     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2380       return SDOperand(E, 0);
2381     N = new SDNode(Opcode, VTs, Ops, NumOps);
2382     CSEMap.InsertNode(N, IP);
2383   } else {
2384     N = new SDNode(Opcode, VTs, Ops, NumOps);
2385   }
2386   AllNodes.push_back(N);
2387   return SDOperand(N, 0);
2388 }
2389
2390 SDOperand SelectionDAG::getNode(unsigned Opcode,
2391                                 std::vector<MVT::ValueType> &ResultTys,
2392                                 const SDOperand *Ops, unsigned NumOps) {
2393   return getNode(Opcode, getNodeValueTypes(ResultTys), ResultTys.size(),
2394                  Ops, NumOps);
2395 }
2396
2397 SDOperand SelectionDAG::getNode(unsigned Opcode,
2398                                 const MVT::ValueType *VTs, unsigned NumVTs,
2399                                 const SDOperand *Ops, unsigned NumOps) {
2400   if (NumVTs == 1)
2401     return getNode(Opcode, VTs[0], Ops, NumOps);
2402   return getNode(Opcode, makeVTList(VTs, NumVTs), Ops, NumOps);
2403 }  
2404   
2405 SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
2406                                 const SDOperand *Ops, unsigned NumOps) {
2407   if (VTList.NumVTs == 1)
2408     return getNode(Opcode, VTList.VTs[0], Ops, NumOps);
2409
2410   switch (Opcode) {
2411   // FIXME: figure out how to safely handle things like
2412   // int foo(int x) { return 1 << (x & 255); }
2413   // int bar() { return foo(256); }
2414 #if 0
2415   case ISD::SRA_PARTS:
2416   case ISD::SRL_PARTS:
2417   case ISD::SHL_PARTS:
2418     if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG &&
2419         cast<VTSDNode>(N3.getOperand(1))->getVT() != MVT::i1)
2420       return getNode(Opcode, VT, N1, N2, N3.getOperand(0));
2421     else if (N3.getOpcode() == ISD::AND)
2422       if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N3.getOperand(1))) {
2423         // If the and is only masking out bits that cannot effect the shift,
2424         // eliminate the and.
2425         unsigned NumBits = MVT::getSizeInBits(VT)*2;
2426         if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1)
2427           return getNode(Opcode, VT, N1, N2, N3.getOperand(0));
2428       }
2429     break;
2430 #endif
2431   }
2432
2433   // Memoize the node unless it returns a flag.
2434   SDNode *N;
2435   if (VTList.VTs[VTList.NumVTs-1] != MVT::Flag) {
2436     FoldingSetNodeID ID;
2437     AddNodeIDNode(ID, Opcode, VTList, Ops, NumOps);
2438     void *IP = 0;
2439     if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
2440       return SDOperand(E, 0);
2441     if (NumOps == 1)
2442       N = new UnarySDNode(Opcode, VTList, Ops[0]);
2443     else if (NumOps == 2)
2444       N = new BinarySDNode(Opcode, VTList, Ops[0], Ops[1]);
2445     else if (NumOps == 3)
2446       N = new TernarySDNode(Opcode, VTList, Ops[0], Ops[1], Ops[2]);
2447     else
2448       N = new SDNode(Opcode, VTList, Ops, NumOps);
2449     CSEMap.InsertNode(N, IP);
2450   } else {
2451     if (NumOps == 1)
2452       N = new UnarySDNode(Opcode, VTList, Ops[0]);
2453     else if (NumOps == 2)
2454       N = new BinarySDNode(Opcode, VTList, Ops[0], Ops[1]);
2455     else if (NumOps == 3)
2456       N = new TernarySDNode(Opcode, VTList, Ops[0], Ops[1], Ops[2]);
2457     else
2458       N = new SDNode(Opcode, VTList, Ops, NumOps);
2459   }
2460   AllNodes.push_back(N);
2461   return SDOperand(N, 0);
2462 }
2463
2464 SDVTList SelectionDAG::getVTList(MVT::ValueType VT) {
2465   return makeVTList(SDNode::getValueTypeList(VT), 1);
2466 }
2467
2468 SDVTList SelectionDAG::getVTList(MVT::ValueType VT1, MVT::ValueType VT2) {
2469   for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
2470        E = VTList.end(); I != E; ++I) {
2471     if (I->size() == 2 && (*I)[0] == VT1 && (*I)[1] == VT2)
2472       return makeVTList(&(*I)[0], 2);
2473   }
2474   std::vector<MVT::ValueType> V;
2475   V.push_back(VT1);
2476   V.push_back(VT2);
2477   VTList.push_front(V);
2478   return makeVTList(&(*VTList.begin())[0], 2);
2479 }
2480 SDVTList SelectionDAG::getVTList(MVT::ValueType VT1, MVT::ValueType VT2,
2481                                  MVT::ValueType VT3) {
2482   for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
2483        E = VTList.end(); I != E; ++I) {
2484     if (I->size() == 3 && (*I)[0] == VT1 && (*I)[1] == VT2 &&
2485         (*I)[2] == VT3)
2486       return makeVTList(&(*I)[0], 3);
2487   }
2488   std::vector<MVT::ValueType> V;
2489   V.push_back(VT1);
2490   V.push_back(VT2);
2491   V.push_back(VT3);
2492   VTList.push_front(V);
2493   return makeVTList(&(*VTList.begin())[0], 3);
2494 }
2495
2496 SDVTList SelectionDAG::getVTList(const MVT::ValueType *VTs, unsigned NumVTs) {
2497   switch (NumVTs) {
2498     case 0: assert(0 && "Cannot have nodes without results!");
2499     case 1: return makeVTList(SDNode::getValueTypeList(VTs[0]), 1);
2500     case 2: return getVTList(VTs[0], VTs[1]);
2501     case 3: return getVTList(VTs[0], VTs[1], VTs[2]);
2502     default: break;
2503   }
2504
2505   for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
2506        E = VTList.end(); I != E; ++I) {
2507     if (I->size() != NumVTs || VTs[0] != (*I)[0] || VTs[1] != (*I)[1]) continue;
2508    
2509     bool NoMatch = false;
2510     for (unsigned i = 2; i != NumVTs; ++i)
2511       if (VTs[i] != (*I)[i]) {
2512         NoMatch = true;
2513         break;
2514       }
2515     if (!NoMatch)
2516       return makeVTList(&*I->begin(), NumVTs);
2517   }
2518   
2519   VTList.push_front(std::vector<MVT::ValueType>(VTs, VTs+NumVTs));
2520   return makeVTList(&*VTList.begin()->begin(), NumVTs);
2521 }
2522
2523
2524 /// UpdateNodeOperands - *Mutate* the specified node in-place to have the
2525 /// specified operands.  If the resultant node already exists in the DAG,
2526 /// this does not modify the specified node, instead it returns the node that
2527 /// already exists.  If the resultant node does not exist in the DAG, the
2528 /// input node is returned.  As a degenerate case, if you specify the same
2529 /// input operands as the node already has, the input node is returned.
2530 SDOperand SelectionDAG::
2531 UpdateNodeOperands(SDOperand InN, SDOperand Op) {
2532   SDNode *N = InN.Val;
2533   assert(N->getNumOperands() == 1 && "Update with wrong number of operands");
2534   
2535   // Check to see if there is no change.
2536   if (Op == N->getOperand(0)) return InN;
2537   
2538   // See if the modified node already exists.
2539   void *InsertPos = 0;
2540   if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos))
2541     return SDOperand(Existing, InN.ResNo);
2542   
2543   // Nope it doesn't.  Remove the node from it's current place in the maps.
2544   if (InsertPos)
2545     RemoveNodeFromCSEMaps(N);
2546   
2547   // Now we update the operands.
2548   N->OperandList[0].Val->removeUser(N);
2549   Op.Val->addUser(N);
2550   N->OperandList[0] = Op;
2551   
2552   // If this gets put into a CSE map, add it.
2553   if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2554   return InN;
2555 }
2556
2557 SDOperand SelectionDAG::
2558 UpdateNodeOperands(SDOperand InN, SDOperand Op1, SDOperand Op2) {
2559   SDNode *N = InN.Val;
2560   assert(N->getNumOperands() == 2 && "Update with wrong number of operands");
2561   
2562   // Check to see if there is no change.
2563   if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1))
2564     return InN;   // No operands changed, just return the input node.
2565   
2566   // See if the modified node already exists.
2567   void *InsertPos = 0;
2568   if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos))
2569     return SDOperand(Existing, InN.ResNo);
2570   
2571   // Nope it doesn't.  Remove the node from it's current place in the maps.
2572   if (InsertPos)
2573     RemoveNodeFromCSEMaps(N);
2574   
2575   // Now we update the operands.
2576   if (N->OperandList[0] != Op1) {
2577     N->OperandList[0].Val->removeUser(N);
2578     Op1.Val->addUser(N);
2579     N->OperandList[0] = Op1;
2580   }
2581   if (N->OperandList[1] != Op2) {
2582     N->OperandList[1].Val->removeUser(N);
2583     Op2.Val->addUser(N);
2584     N->OperandList[1] = Op2;
2585   }
2586   
2587   // If this gets put into a CSE map, add it.
2588   if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2589   return InN;
2590 }
2591
2592 SDOperand SelectionDAG::
2593 UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2, SDOperand Op3) {
2594   SDOperand Ops[] = { Op1, Op2, Op3 };
2595   return UpdateNodeOperands(N, Ops, 3);
2596 }
2597
2598 SDOperand SelectionDAG::
2599 UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2, 
2600                    SDOperand Op3, SDOperand Op4) {
2601   SDOperand Ops[] = { Op1, Op2, Op3, Op4 };
2602   return UpdateNodeOperands(N, Ops, 4);
2603 }
2604
2605 SDOperand SelectionDAG::
2606 UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2,
2607                    SDOperand Op3, SDOperand Op4, SDOperand Op5) {
2608   SDOperand Ops[] = { Op1, Op2, Op3, Op4, Op5 };
2609   return UpdateNodeOperands(N, Ops, 5);
2610 }
2611
2612
2613 SDOperand SelectionDAG::
2614 UpdateNodeOperands(SDOperand InN, SDOperand *Ops, unsigned NumOps) {
2615   SDNode *N = InN.Val;
2616   assert(N->getNumOperands() == NumOps &&
2617          "Update with wrong number of operands");
2618   
2619   // Check to see if there is no change.
2620   bool AnyChange = false;
2621   for (unsigned i = 0; i != NumOps; ++i) {
2622     if (Ops[i] != N->getOperand(i)) {
2623       AnyChange = true;
2624       break;
2625     }
2626   }
2627   
2628   // No operands changed, just return the input node.
2629   if (!AnyChange) return InN;
2630   
2631   // See if the modified node already exists.
2632   void *InsertPos = 0;
2633   if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, NumOps, InsertPos))
2634     return SDOperand(Existing, InN.ResNo);
2635   
2636   // Nope it doesn't.  Remove the node from it's current place in the maps.
2637   if (InsertPos)
2638     RemoveNodeFromCSEMaps(N);
2639   
2640   // Now we update the operands.
2641   for (unsigned i = 0; i != NumOps; ++i) {
2642     if (N->OperandList[i] != Ops[i]) {
2643       N->OperandList[i].Val->removeUser(N);
2644       Ops[i].Val->addUser(N);
2645       N->OperandList[i] = Ops[i];
2646     }
2647   }
2648
2649   // If this gets put into a CSE map, add it.
2650   if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2651   return InN;
2652 }
2653
2654
2655 /// MorphNodeTo - This frees the operands of the current node, resets the
2656 /// opcode, types, and operands to the specified value.  This should only be
2657 /// used by the SelectionDAG class.
2658 void SDNode::MorphNodeTo(unsigned Opc, SDVTList L,
2659                          const SDOperand *Ops, unsigned NumOps) {
2660   NodeType = Opc;
2661   ValueList = L.VTs;
2662   NumValues = L.NumVTs;
2663   
2664   // Clear the operands list, updating used nodes to remove this from their
2665   // use list.
2666   for (op_iterator I = op_begin(), E = op_end(); I != E; ++I)
2667     I->Val->removeUser(this);
2668   
2669   // If NumOps is larger than the # of operands we currently have, reallocate
2670   // the operand list.
2671   if (NumOps > NumOperands) {
2672     if (OperandsNeedDelete)
2673       delete [] OperandList;
2674     OperandList = new SDOperand[NumOps];
2675     OperandsNeedDelete = true;
2676   }
2677   
2678   // Assign the new operands.
2679   NumOperands = NumOps;
2680   
2681   for (unsigned i = 0, e = NumOps; i != e; ++i) {
2682     OperandList[i] = Ops[i];
2683     SDNode *N = OperandList[i].Val;
2684     N->Uses.push_back(this);
2685   }
2686 }
2687
2688 /// SelectNodeTo - These are used for target selectors to *mutate* the
2689 /// specified node to have the specified return type, Target opcode, and
2690 /// operands.  Note that target opcodes are stored as
2691 /// ISD::BUILTIN_OP_END+TargetOpcode in the node opcode field.
2692 ///
2693 /// Note that SelectNodeTo returns the resultant node.  If there is already a
2694 /// node of the specified opcode and operands, it returns that node instead of
2695 /// the current one.
2696 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2697                                    MVT::ValueType VT) {
2698   SDVTList VTs = getVTList(VT);
2699   FoldingSetNodeID ID;
2700   AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, 0, 0);
2701   void *IP = 0;
2702   if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2703     return ON;
2704    
2705   RemoveNodeFromCSEMaps(N);
2706   
2707   N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, 0, 0);
2708
2709   CSEMap.InsertNode(N, IP);
2710   return N;
2711 }
2712
2713 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2714                                    MVT::ValueType VT, SDOperand Op1) {
2715   // If an identical node already exists, use it.
2716   SDVTList VTs = getVTList(VT);
2717   SDOperand Ops[] = { Op1 };
2718   
2719   FoldingSetNodeID ID;
2720   AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 1);
2721   void *IP = 0;
2722   if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2723     return ON;
2724                                        
2725   RemoveNodeFromCSEMaps(N);
2726   N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 1);
2727   CSEMap.InsertNode(N, IP);
2728   return N;
2729 }
2730
2731 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2732                                    MVT::ValueType VT, SDOperand Op1,
2733                                    SDOperand Op2) {
2734   // If an identical node already exists, use it.
2735   SDVTList VTs = getVTList(VT);
2736   SDOperand Ops[] = { Op1, Op2 };
2737   
2738   FoldingSetNodeID ID;
2739   AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
2740   void *IP = 0;
2741   if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2742     return ON;
2743                                        
2744   RemoveNodeFromCSEMaps(N);
2745   
2746   N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
2747   
2748   CSEMap.InsertNode(N, IP);   // Memoize the new node.
2749   return N;
2750 }
2751
2752 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2753                                    MVT::ValueType VT, SDOperand Op1,
2754                                    SDOperand Op2, SDOperand Op3) {
2755   // If an identical node already exists, use it.
2756   SDVTList VTs = getVTList(VT);
2757   SDOperand Ops[] = { Op1, Op2, Op3 };
2758   FoldingSetNodeID ID;
2759   AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
2760   void *IP = 0;
2761   if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2762     return ON;
2763                                        
2764   RemoveNodeFromCSEMaps(N);
2765   
2766   N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
2767
2768   CSEMap.InsertNode(N, IP);   // Memoize the new node.
2769   return N;
2770 }
2771
2772 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2773                                    MVT::ValueType VT, const SDOperand *Ops,
2774                                    unsigned NumOps) {
2775   // If an identical node already exists, use it.
2776   SDVTList VTs = getVTList(VT);
2777   FoldingSetNodeID ID;
2778   AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, NumOps);
2779   void *IP = 0;
2780   if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2781     return ON;
2782                                        
2783   RemoveNodeFromCSEMaps(N);
2784   N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, NumOps);
2785   
2786   CSEMap.InsertNode(N, IP);   // Memoize the new node.
2787   return N;
2788 }
2789
2790 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc, 
2791                                    MVT::ValueType VT1, MVT::ValueType VT2,
2792                                    SDOperand Op1, SDOperand Op2) {
2793   SDVTList VTs = getVTList(VT1, VT2);
2794   FoldingSetNodeID ID;
2795   SDOperand Ops[] = { Op1, Op2 };
2796   AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
2797   void *IP = 0;
2798   if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2799     return ON;
2800
2801   RemoveNodeFromCSEMaps(N);
2802   N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
2803   CSEMap.InsertNode(N, IP);   // Memoize the new node.
2804   return N;
2805 }
2806
2807 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2808                                    MVT::ValueType VT1, MVT::ValueType VT2,
2809                                    SDOperand Op1, SDOperand Op2, 
2810                                    SDOperand Op3) {
2811   // If an identical node already exists, use it.
2812   SDVTList VTs = getVTList(VT1, VT2);
2813   SDOperand Ops[] = { Op1, Op2, Op3 };
2814   FoldingSetNodeID ID;
2815   AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
2816   void *IP = 0;
2817   if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2818     return ON;
2819
2820   RemoveNodeFromCSEMaps(N);
2821
2822   N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
2823   CSEMap.InsertNode(N, IP);   // Memoize the new node.
2824   return N;
2825 }
2826
2827
2828 /// getTargetNode - These are used for target selectors to create a new node
2829 /// with specified return type(s), target opcode, and operands.
2830 ///
2831 /// Note that getTargetNode returns the resultant node.  If there is already a
2832 /// node of the specified opcode and operands, it returns that node instead of
2833 /// the current one.
2834 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT) {
2835   return getNode(ISD::BUILTIN_OP_END+Opcode, VT).Val;
2836 }
2837 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
2838                                     SDOperand Op1) {
2839   return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1).Val;
2840 }
2841 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
2842                                     SDOperand Op1, SDOperand Op2) {
2843   return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1, Op2).Val;
2844 }
2845 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
2846                                     SDOperand Op1, SDOperand Op2,
2847                                     SDOperand Op3) {
2848   return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1, Op2, Op3).Val;
2849 }
2850 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
2851                                     const SDOperand *Ops, unsigned NumOps) {
2852   return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Ops, NumOps).Val;
2853 }
2854 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2855                                     MVT::ValueType VT2, SDOperand Op1) {
2856   const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
2857   return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, &Op1, 1).Val;
2858 }
2859 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2860                                     MVT::ValueType VT2, SDOperand Op1,
2861                                     SDOperand Op2) {
2862   const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
2863   SDOperand Ops[] = { Op1, Op2 };
2864   return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, 2).Val;
2865 }
2866 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2867                                     MVT::ValueType VT2, SDOperand Op1,
2868                                     SDOperand Op2, SDOperand Op3) {
2869   const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
2870   SDOperand Ops[] = { Op1, Op2, Op3 };
2871   return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, 3).Val;
2872 }
2873 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1, 
2874                                     MVT::ValueType VT2,
2875                                     const SDOperand *Ops, unsigned NumOps) {
2876   const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
2877   return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, NumOps).Val;
2878 }
2879 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2880                                     MVT::ValueType VT2, MVT::ValueType VT3,
2881                                     SDOperand Op1, SDOperand Op2) {
2882   const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
2883   SDOperand Ops[] = { Op1, Op2 };
2884   return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 2).Val;
2885 }
2886 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2887                                     MVT::ValueType VT2, MVT::ValueType VT3,
2888                                     SDOperand Op1, SDOperand Op2,
2889                                     SDOperand Op3) {
2890   const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
2891   SDOperand Ops[] = { Op1, Op2, Op3 };
2892   return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 3).Val;
2893 }
2894 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1, 
2895                                     MVT::ValueType VT2, MVT::ValueType VT3,
2896                                     const SDOperand *Ops, unsigned NumOps) {
2897   const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
2898   return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, NumOps).Val;
2899 }
2900
2901 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
2902 /// This can cause recursive merging of nodes in the DAG.
2903 ///
2904 /// This version assumes From/To have a single result value.
2905 ///
2906 void SelectionDAG::ReplaceAllUsesWith(SDOperand FromN, SDOperand ToN,
2907                                       std::vector<SDNode*> *Deleted) {
2908   SDNode *From = FromN.Val, *To = ToN.Val;
2909   assert(From->getNumValues() == 1 && To->getNumValues() == 1 &&
2910          "Cannot replace with this method!");
2911   assert(From != To && "Cannot replace uses of with self");
2912   
2913   while (!From->use_empty()) {
2914     // Process users until they are all gone.
2915     SDNode *U = *From->use_begin();
2916     
2917     // This node is about to morph, remove its old self from the CSE maps.
2918     RemoveNodeFromCSEMaps(U);
2919     
2920     for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
2921          I != E; ++I)
2922       if (I->Val == From) {
2923         From->removeUser(U);
2924         I->Val = To;
2925         To->addUser(U);
2926       }
2927
2928     // Now that we have modified U, add it back to the CSE maps.  If it already
2929     // exists there, recursively merge the results together.
2930     if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
2931       ReplaceAllUsesWith(U, Existing, Deleted);
2932       // U is now dead.
2933       if (Deleted) Deleted->push_back(U);
2934       DeleteNodeNotInCSEMaps(U);
2935     }
2936   }
2937 }
2938
2939 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
2940 /// This can cause recursive merging of nodes in the DAG.
2941 ///
2942 /// This version assumes From/To have matching types and numbers of result
2943 /// values.
2944 ///
2945 void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To,
2946                                       std::vector<SDNode*> *Deleted) {
2947   assert(From != To && "Cannot replace uses of with self");
2948   assert(From->getNumValues() == To->getNumValues() &&
2949          "Cannot use this version of ReplaceAllUsesWith!");
2950   if (From->getNumValues() == 1) {  // If possible, use the faster version.
2951     ReplaceAllUsesWith(SDOperand(From, 0), SDOperand(To, 0), Deleted);
2952     return;
2953   }
2954   
2955   while (!From->use_empty()) {
2956     // Process users until they are all gone.
2957     SDNode *U = *From->use_begin();
2958     
2959     // This node is about to morph, remove its old self from the CSE maps.
2960     RemoveNodeFromCSEMaps(U);
2961     
2962     for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
2963          I != E; ++I)
2964       if (I->Val == From) {
2965         From->removeUser(U);
2966         I->Val = To;
2967         To->addUser(U);
2968       }
2969         
2970     // Now that we have modified U, add it back to the CSE maps.  If it already
2971     // exists there, recursively merge the results together.
2972     if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
2973       ReplaceAllUsesWith(U, Existing, Deleted);
2974       // U is now dead.
2975       if (Deleted) Deleted->push_back(U);
2976       DeleteNodeNotInCSEMaps(U);
2977     }
2978   }
2979 }
2980
2981 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
2982 /// This can cause recursive merging of nodes in the DAG.
2983 ///
2984 /// This version can replace From with any result values.  To must match the
2985 /// number and types of values returned by From.
2986 void SelectionDAG::ReplaceAllUsesWith(SDNode *From,
2987                                       const SDOperand *To,
2988                                       std::vector<SDNode*> *Deleted) {
2989   if (From->getNumValues() == 1 && To[0].Val->getNumValues() == 1) {
2990     // Degenerate case handled above.
2991     ReplaceAllUsesWith(SDOperand(From, 0), To[0], Deleted);
2992     return;
2993   }
2994
2995   while (!From->use_empty()) {
2996     // Process users until they are all gone.
2997     SDNode *U = *From->use_begin();
2998     
2999     // This node is about to morph, remove its old self from the CSE maps.
3000     RemoveNodeFromCSEMaps(U);
3001     
3002     for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
3003          I != E; ++I)
3004       if (I->Val == From) {
3005         const SDOperand &ToOp = To[I->ResNo];
3006         From->removeUser(U);
3007         *I = ToOp;
3008         ToOp.Val->addUser(U);
3009       }
3010         
3011     // Now that we have modified U, add it back to the CSE maps.  If it already
3012     // exists there, recursively merge the results together.
3013     if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
3014       ReplaceAllUsesWith(U, Existing, Deleted);
3015       // U is now dead.
3016       if (Deleted) Deleted->push_back(U);
3017       DeleteNodeNotInCSEMaps(U);
3018     }
3019   }
3020 }
3021
3022 /// ReplaceAllUsesOfValueWith - Replace any uses of From with To, leaving
3023 /// uses of other values produced by From.Val alone.  The Deleted vector is
3024 /// handled the same was as for ReplaceAllUsesWith.
3025 void SelectionDAG::ReplaceAllUsesOfValueWith(SDOperand From, SDOperand To,
3026                                              std::vector<SDNode*> &Deleted) {
3027   assert(From != To && "Cannot replace a value with itself");
3028   // Handle the simple, trivial, case efficiently.
3029   if (From.Val->getNumValues() == 1 && To.Val->getNumValues() == 1) {
3030     ReplaceAllUsesWith(From, To, &Deleted);
3031     return;
3032   }
3033   
3034   // Get all of the users of From.Val.  We want these in a nice,
3035   // deterministically ordered and uniqued set, so we use a SmallSetVector.
3036   SmallSetVector<SDNode*, 16> Users(From.Val->use_begin(), From.Val->use_end());
3037
3038   while (!Users.empty()) {
3039     // We know that this user uses some value of From.  If it is the right
3040     // value, update it.
3041     SDNode *User = Users.back();
3042     Users.pop_back();
3043     
3044     for (SDOperand *Op = User->OperandList,
3045          *E = User->OperandList+User->NumOperands; Op != E; ++Op) {
3046       if (*Op == From) {
3047         // Okay, we know this user needs to be updated.  Remove its old self
3048         // from the CSE maps.
3049         RemoveNodeFromCSEMaps(User);
3050         
3051         // Update all operands that match "From".
3052         for (; Op != E; ++Op) {
3053           if (*Op == From) {
3054             From.Val->removeUser(User);
3055             *Op = To;
3056             To.Val->addUser(User);
3057           }
3058         }
3059                    
3060         // Now that we have modified User, add it back to the CSE maps.  If it
3061         // already exists there, recursively merge the results together.
3062         if (SDNode *Existing = AddNonLeafNodeToCSEMaps(User)) {
3063           unsigned NumDeleted = Deleted.size();
3064           ReplaceAllUsesWith(User, Existing, &Deleted);
3065           
3066           // User is now dead.
3067           Deleted.push_back(User);
3068           DeleteNodeNotInCSEMaps(User);
3069           
3070           // We have to be careful here, because ReplaceAllUsesWith could have
3071           // deleted a user of From, which means there may be dangling pointers
3072           // in the "Users" setvector.  Scan over the deleted node pointers and
3073           // remove them from the setvector.
3074           for (unsigned i = NumDeleted, e = Deleted.size(); i != e; ++i)
3075             Users.remove(Deleted[i]);
3076         }
3077         break;   // Exit the operand scanning loop.
3078       }
3079     }
3080   }
3081 }
3082
3083
3084 /// AssignNodeIds - Assign a unique node id for each node in the DAG based on
3085 /// their allnodes order. It returns the maximum id.
3086 unsigned SelectionDAG::AssignNodeIds() {
3087   unsigned Id = 0;
3088   for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I){
3089     SDNode *N = I;
3090     N->setNodeId(Id++);
3091   }
3092   return Id;
3093 }
3094
3095 /// AssignTopologicalOrder - Assign a unique node id for each node in the DAG
3096 /// based on their topological order. It returns the maximum id and a vector
3097 /// of the SDNodes* in assigned order by reference.
3098 unsigned SelectionDAG::AssignTopologicalOrder(std::vector<SDNode*> &TopOrder) {
3099   unsigned DAGSize = AllNodes.size();
3100   std::vector<unsigned> InDegree(DAGSize);
3101   std::vector<SDNode*> Sources;
3102
3103   // Use a two pass approach to avoid using a std::map which is slow.
3104   unsigned Id = 0;
3105   for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ++I){
3106     SDNode *N = I;
3107     N->setNodeId(Id++);
3108     unsigned Degree = N->use_size();
3109     InDegree[N->getNodeId()] = Degree;
3110     if (Degree == 0)
3111       Sources.push_back(N);
3112   }
3113
3114   TopOrder.clear();
3115   while (!Sources.empty()) {
3116     SDNode *N = Sources.back();
3117     Sources.pop_back();
3118     TopOrder.push_back(N);
3119     for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
3120       SDNode *P = I->Val;
3121       unsigned Degree = --InDegree[P->getNodeId()];
3122       if (Degree == 0)
3123         Sources.push_back(P);
3124     }
3125   }
3126
3127   // Second pass, assign the actual topological order as node ids.
3128   Id = 0;
3129   for (std::vector<SDNode*>::iterator TI = TopOrder.begin(),TE = TopOrder.end();
3130        TI != TE; ++TI)
3131     (*TI)->setNodeId(Id++);
3132
3133   return Id;
3134 }
3135
3136
3137
3138 //===----------------------------------------------------------------------===//
3139 //                              SDNode Class
3140 //===----------------------------------------------------------------------===//
3141
3142 // Out-of-line virtual method to give class a home.
3143 void SDNode::ANCHOR() {}
3144 void UnarySDNode::ANCHOR() {}
3145 void BinarySDNode::ANCHOR() {}
3146 void TernarySDNode::ANCHOR() {}
3147 void HandleSDNode::ANCHOR() {}
3148 void StringSDNode::ANCHOR() {}
3149 void ConstantSDNode::ANCHOR() {}
3150 void ConstantFPSDNode::ANCHOR() {}
3151 void GlobalAddressSDNode::ANCHOR() {}
3152 void FrameIndexSDNode::ANCHOR() {}
3153 void JumpTableSDNode::ANCHOR() {}
3154 void ConstantPoolSDNode::ANCHOR() {}
3155 void BasicBlockSDNode::ANCHOR() {}
3156 void SrcValueSDNode::ANCHOR() {}
3157 void RegisterSDNode::ANCHOR() {}
3158 void ExternalSymbolSDNode::ANCHOR() {}
3159 void CondCodeSDNode::ANCHOR() {}
3160 void VTSDNode::ANCHOR() {}
3161 void LoadSDNode::ANCHOR() {}
3162 void StoreSDNode::ANCHOR() {}
3163
3164 HandleSDNode::~HandleSDNode() {
3165   SDVTList VTs = { 0, 0 };
3166   MorphNodeTo(ISD::HANDLENODE, VTs, 0, 0);  // Drops operand uses.
3167 }
3168
3169 GlobalAddressSDNode::GlobalAddressSDNode(bool isTarget, const GlobalValue *GA,
3170                                          MVT::ValueType VT, int o)
3171   : SDNode(isa<GlobalVariable>(GA) &&
3172            dyn_cast<GlobalVariable>(GA)->isThreadLocal() ?
3173            // Thread Local
3174            (isTarget ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress) :
3175            // Non Thread Local
3176            (isTarget ? ISD::TargetGlobalAddress : ISD::GlobalAddress),
3177            getSDVTList(VT)), Offset(o) {
3178   TheGlobal = const_cast<GlobalValue*>(GA);
3179 }
3180
3181 /// Profile - Gather unique data for the node.
3182 ///
3183 void SDNode::Profile(FoldingSetNodeID &ID) {
3184   AddNodeIDNode(ID, this);
3185 }
3186
3187 /// getValueTypeList - Return a pointer to the specified value type.
3188 ///
3189 MVT::ValueType *SDNode::getValueTypeList(MVT::ValueType VT) {
3190   static MVT::ValueType VTs[MVT::LAST_VALUETYPE];
3191   VTs[VT] = VT;
3192   return &VTs[VT];
3193 }
3194   
3195 /// hasNUsesOfValue - Return true if there are exactly NUSES uses of the
3196 /// indicated value.  This method ignores uses of other values defined by this
3197 /// operation.
3198 bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const {
3199   assert(Value < getNumValues() && "Bad value!");
3200
3201   // If there is only one value, this is easy.
3202   if (getNumValues() == 1)
3203     return use_size() == NUses;
3204   if (Uses.size() < NUses) return false;
3205
3206   SDOperand TheValue(const_cast<SDNode *>(this), Value);
3207
3208   SmallPtrSet<SDNode*, 32> UsersHandled;
3209
3210   for (SDNode::use_iterator UI = Uses.begin(), E = Uses.end(); UI != E; ++UI) {
3211     SDNode *User = *UI;
3212     if (User->getNumOperands() == 1 ||
3213         UsersHandled.insert(User))     // First time we've seen this?
3214       for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i)
3215         if (User->getOperand(i) == TheValue) {
3216           if (NUses == 0)
3217             return false;   // too many uses
3218           --NUses;
3219         }
3220   }
3221
3222   // Found exactly the right number of uses?
3223   return NUses == 0;
3224 }
3225
3226
3227 /// isOnlyUse - Return true if this node is the only use of N.
3228 ///
3229 bool SDNode::isOnlyUse(SDNode *N) const {
3230   bool Seen = false;
3231   for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {
3232     SDNode *User = *I;
3233     if (User == this)
3234       Seen = true;
3235     else
3236       return false;
3237   }
3238
3239   return Seen;
3240 }
3241
3242 /// isOperand - Return true if this node is an operand of N.
3243 ///
3244 bool SDOperand::isOperand(SDNode *N) const {
3245   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
3246     if (*this == N->getOperand(i))
3247       return true;
3248   return false;
3249 }
3250
3251 bool SDNode::isOperand(SDNode *N) const {
3252   for (unsigned i = 0, e = N->NumOperands; i != e; ++i)
3253     if (this == N->OperandList[i].Val)
3254       return true;
3255   return false;
3256 }
3257
3258 static void findPredecessor(SDNode *N, const SDNode *P, bool &found,
3259                             SmallPtrSet<SDNode *, 32> &Visited) {
3260   if (found || !Visited.insert(N))
3261     return;
3262
3263   for (unsigned i = 0, e = N->getNumOperands(); !found && i != e; ++i) {
3264     SDNode *Op = N->getOperand(i).Val;
3265     if (Op == P) {
3266       found = true;
3267       return;
3268     }
3269     findPredecessor(Op, P, found, Visited);
3270   }
3271 }
3272
3273 /// isPredecessor - Return true if this node is a predecessor of N. This node
3274 /// is either an operand of N or it can be reached by recursively traversing
3275 /// up the operands.
3276 /// NOTE: this is an expensive method. Use it carefully.
3277 bool SDNode::isPredecessor(SDNode *N) const {
3278   SmallPtrSet<SDNode *, 32> Visited;
3279   bool found = false;
3280   findPredecessor(N, this, found, Visited);
3281   return found;
3282 }
3283
3284 uint64_t SDNode::getConstantOperandVal(unsigned Num) const {
3285   assert(Num < NumOperands && "Invalid child # of SDNode!");
3286   return cast<ConstantSDNode>(OperandList[Num])->getValue();
3287 }
3288
3289 std::string SDNode::getOperationName(const SelectionDAG *G) const {
3290   switch (getOpcode()) {
3291   default:
3292     if (getOpcode() < ISD::BUILTIN_OP_END)
3293       return "<<Unknown DAG Node>>";
3294     else {
3295       if (G) {
3296         if (const TargetInstrInfo *TII = G->getTarget().getInstrInfo())
3297           if (getOpcode()-ISD::BUILTIN_OP_END < TII->getNumOpcodes())
3298             return TII->getName(getOpcode()-ISD::BUILTIN_OP_END);
3299
3300         TargetLowering &TLI = G->getTargetLoweringInfo();
3301         const char *Name =
3302           TLI.getTargetNodeName(getOpcode());
3303         if (Name) return Name;
3304       }
3305
3306       return "<<Unknown Target Node>>";
3307     }
3308    
3309   case ISD::PCMARKER:      return "PCMarker";
3310   case ISD::READCYCLECOUNTER: return "ReadCycleCounter";
3311   case ISD::SRCVALUE:      return "SrcValue";
3312   case ISD::EntryToken:    return "EntryToken";
3313   case ISD::TokenFactor:   return "TokenFactor";
3314   case ISD::AssertSext:    return "AssertSext";
3315   case ISD::AssertZext:    return "AssertZext";
3316
3317   case ISD::STRING:        return "String";
3318   case ISD::BasicBlock:    return "BasicBlock";
3319   case ISD::VALUETYPE:     return "ValueType";
3320   case ISD::Register:      return "Register";
3321
3322   case ISD::Constant:      return "Constant";
3323   case ISD::ConstantFP:    return "ConstantFP";
3324   case ISD::GlobalAddress: return "GlobalAddress";
3325   case ISD::GlobalTLSAddress: return "GlobalTLSAddress";
3326   case ISD::FrameIndex:    return "FrameIndex";
3327   case ISD::JumpTable:     return "JumpTable";
3328   case ISD::GLOBAL_OFFSET_TABLE: return "GLOBAL_OFFSET_TABLE";
3329   case ISD::RETURNADDR: return "RETURNADDR";
3330   case ISD::FRAMEADDR: return "FRAMEADDR";
3331   case ISD::EXCEPTIONADDR: return "EXCEPTIONADDR";
3332   case ISD::EHSELECTION: return "EHSELECTION";
3333   case ISD::ConstantPool:  return "ConstantPool";
3334   case ISD::ExternalSymbol: return "ExternalSymbol";
3335   case ISD::INTRINSIC_WO_CHAIN: {
3336     unsigned IID = cast<ConstantSDNode>(getOperand(0))->getValue();
3337     return Intrinsic::getName((Intrinsic::ID)IID);
3338   }
3339   case ISD::INTRINSIC_VOID:
3340   case ISD::INTRINSIC_W_CHAIN: {
3341     unsigned IID = cast<ConstantSDNode>(getOperand(1))->getValue();
3342     return Intrinsic::getName((Intrinsic::ID)IID);
3343   }
3344
3345   case ISD::BUILD_VECTOR:   return "BUILD_VECTOR";
3346   case ISD::TargetConstant: return "TargetConstant";
3347   case ISD::TargetConstantFP:return "TargetConstantFP";
3348   case ISD::TargetGlobalAddress: return "TargetGlobalAddress";
3349   case ISD::TargetGlobalTLSAddress: return "TargetGlobalTLSAddress";
3350   case ISD::TargetFrameIndex: return "TargetFrameIndex";
3351   case ISD::TargetJumpTable:  return "TargetJumpTable";
3352   case ISD::TargetConstantPool:  return "TargetConstantPool";
3353   case ISD::TargetExternalSymbol: return "TargetExternalSymbol";
3354
3355   case ISD::CopyToReg:     return "CopyToReg";
3356   case ISD::CopyFromReg:   return "CopyFromReg";
3357   case ISD::UNDEF:         return "undef";
3358   case ISD::MERGE_VALUES:  return "mergevalues";
3359   case ISD::INLINEASM:     return "inlineasm";
3360   case ISD::LABEL:         return "label";
3361   case ISD::HANDLENODE:    return "handlenode";
3362   case ISD::FORMAL_ARGUMENTS: return "formal_arguments";
3363   case ISD::CALL:          return "call";
3364     
3365   // Unary operators
3366   case ISD::FABS:   return "fabs";
3367   case ISD::FNEG:   return "fneg";
3368   case ISD::FSQRT:  return "fsqrt";
3369   case ISD::FSIN:   return "fsin";
3370   case ISD::FCOS:   return "fcos";
3371   case ISD::FPOWI:  return "fpowi";
3372
3373   // Binary operators
3374   case ISD::ADD:    return "add";
3375   case ISD::SUB:    return "sub";
3376   case ISD::MUL:    return "mul";
3377   case ISD::MULHU:  return "mulhu";
3378   case ISD::MULHS:  return "mulhs";
3379   case ISD::SDIV:   return "sdiv";
3380   case ISD::UDIV:   return "udiv";
3381   case ISD::SREM:   return "srem";
3382   case ISD::UREM:   return "urem";
3383   case ISD::AND:    return "and";
3384   case ISD::OR:     return "or";
3385   case ISD::XOR:    return "xor";
3386   case ISD::SHL:    return "shl";
3387   case ISD::SRA:    return "sra";
3388   case ISD::SRL:    return "srl";
3389   case ISD::ROTL:   return "rotl";
3390   case ISD::ROTR:   return "rotr";
3391   case ISD::FADD:   return "fadd";
3392   case ISD::FSUB:   return "fsub";
3393   case ISD::FMUL:   return "fmul";
3394   case ISD::FDIV:   return "fdiv";
3395   case ISD::FREM:   return "frem";
3396   case ISD::FCOPYSIGN: return "fcopysign";
3397   case ISD::VADD:   return "vadd";
3398   case ISD::VSUB:   return "vsub";
3399   case ISD::VMUL:   return "vmul";
3400   case ISD::VSDIV:  return "vsdiv";
3401   case ISD::VUDIV:  return "vudiv";
3402   case ISD::VAND:   return "vand";
3403   case ISD::VOR:    return "vor";
3404   case ISD::VXOR:   return "vxor";
3405
3406   case ISD::SETCC:       return "setcc";
3407   case ISD::SELECT:      return "select";
3408   case ISD::SELECT_CC:   return "select_cc";
3409   case ISD::VSELECT:     return "vselect";
3410   case ISD::INSERT_VECTOR_ELT:   return "insert_vector_elt";
3411   case ISD::VINSERT_VECTOR_ELT:  return "vinsert_vector_elt";
3412   case ISD::EXTRACT_VECTOR_ELT:  return "extract_vector_elt";
3413   case ISD::VEXTRACT_VECTOR_ELT: return "vextract_vector_elt";
3414   case ISD::VCONCAT_VECTORS:     return "vconcat_vectors";
3415   case ISD::VEXTRACT_SUBVECTOR:  return "vextract_subvector";
3416   case ISD::SCALAR_TO_VECTOR:    return "scalar_to_vector";
3417   case ISD::VBUILD_VECTOR:       return "vbuild_vector";
3418   case ISD::VECTOR_SHUFFLE:      return "vector_shuffle";
3419   case ISD::VVECTOR_SHUFFLE:     return "vvector_shuffle";
3420   case ISD::VBIT_CONVERT:        return "vbit_convert";
3421   case ISD::CARRY_FALSE:         return "carry_false";
3422   case ISD::ADDC:        return "addc";
3423   case ISD::ADDE:        return "adde";
3424   case ISD::SUBC:        return "subc";
3425   case ISD::SUBE:        return "sube";
3426   case ISD::SHL_PARTS:   return "shl_parts";
3427   case ISD::SRA_PARTS:   return "sra_parts";
3428   case ISD::SRL_PARTS:   return "srl_parts";
3429
3430   // Conversion operators.
3431   case ISD::SIGN_EXTEND: return "sign_extend";
3432   case ISD::ZERO_EXTEND: return "zero_extend";
3433   case ISD::ANY_EXTEND:  return "any_extend";
3434   case ISD::SIGN_EXTEND_INREG: return "sign_extend_inreg";
3435   case ISD::TRUNCATE:    return "truncate";
3436   case ISD::FP_ROUND:    return "fp_round";
3437   case ISD::FP_ROUND_INREG: return "fp_round_inreg";
3438   case ISD::FP_EXTEND:   return "fp_extend";
3439
3440   case ISD::SINT_TO_FP:  return "sint_to_fp";
3441   case ISD::UINT_TO_FP:  return "uint_to_fp";
3442   case ISD::FP_TO_SINT:  return "fp_to_sint";
3443   case ISD::FP_TO_UINT:  return "fp_to_uint";
3444   case ISD::BIT_CONVERT: return "bit_convert";
3445
3446     // Control flow instructions
3447   case ISD::BR:      return "br";
3448   case ISD::BRIND:   return "brind";
3449   case ISD::BR_JT:   return "br_jt";
3450   case ISD::BRCOND:  return "brcond";
3451   case ISD::BR_CC:   return "br_cc";
3452   case ISD::RET:     return "ret";
3453   case ISD::CALLSEQ_START:  return "callseq_start";
3454   case ISD::CALLSEQ_END:    return "callseq_end";
3455
3456     // Other operators
3457   case ISD::LOAD:               return "load";
3458   case ISD::STORE:              return "store";
3459   case ISD::VLOAD:              return "vload";
3460   case ISD::VAARG:              return "vaarg";
3461   case ISD::VACOPY:             return "vacopy";
3462   case ISD::VAEND:              return "vaend";
3463   case ISD::VASTART:            return "vastart";
3464   case ISD::DYNAMIC_STACKALLOC: return "dynamic_stackalloc";
3465   case ISD::EXTRACT_ELEMENT:    return "extract_element";
3466   case ISD::BUILD_PAIR:         return "build_pair";
3467   case ISD::STACKSAVE:          return "stacksave";
3468   case ISD::STACKRESTORE:       return "stackrestore";
3469     
3470   // Block memory operations.
3471   case ISD::MEMSET:  return "memset";
3472   case ISD::MEMCPY:  return "memcpy";
3473   case ISD::MEMMOVE: return "memmove";
3474
3475   // Bit manipulation
3476   case ISD::BSWAP:   return "bswap";
3477   case ISD::CTPOP:   return "ctpop";
3478   case ISD::CTTZ:    return "cttz";
3479   case ISD::CTLZ:    return "ctlz";
3480
3481   // Debug info
3482   case ISD::LOCATION: return "location";
3483   case ISD::DEBUG_LOC: return "debug_loc";
3484
3485   case ISD::CONDCODE:
3486     switch (cast<CondCodeSDNode>(this)->get()) {
3487     default: assert(0 && "Unknown setcc condition!");
3488     case ISD::SETOEQ:  return "setoeq";
3489     case ISD::SETOGT:  return "setogt";
3490     case ISD::SETOGE:  return "setoge";
3491     case ISD::SETOLT:  return "setolt";
3492     case ISD::SETOLE:  return "setole";
3493     case ISD::SETONE:  return "setone";
3494
3495     case ISD::SETO:    return "seto";
3496     case ISD::SETUO:   return "setuo";
3497     case ISD::SETUEQ:  return "setue";
3498     case ISD::SETUGT:  return "setugt";
3499     case ISD::SETUGE:  return "setuge";
3500     case ISD::SETULT:  return "setult";
3501     case ISD::SETULE:  return "setule";
3502     case ISD::SETUNE:  return "setune";
3503
3504     case ISD::SETEQ:   return "seteq";
3505     case ISD::SETGT:   return "setgt";
3506     case ISD::SETGE:   return "setge";
3507     case ISD::SETLT:   return "setlt";
3508     case ISD::SETLE:   return "setle";
3509     case ISD::SETNE:   return "setne";
3510     }
3511   }
3512 }
3513
3514 const char *SDNode::getIndexedModeName(ISD::MemIndexedMode AM) {
3515   switch (AM) {
3516   default:
3517     return "";
3518   case ISD::PRE_INC:
3519     return "<pre-inc>";
3520   case ISD::PRE_DEC:
3521     return "<pre-dec>";
3522   case ISD::POST_INC:
3523     return "<post-inc>";
3524   case ISD::POST_DEC:
3525     return "<post-dec>";
3526   }
3527 }
3528
3529 void SDNode::dump() const { dump(0); }
3530 void SDNode::dump(const SelectionDAG *G) const {
3531   cerr << (void*)this << ": ";
3532
3533   for (unsigned i = 0, e = getNumValues(); i != e; ++i) {
3534     if (i) cerr << ",";
3535     if (getValueType(i) == MVT::Other)
3536       cerr << "ch";
3537     else
3538       cerr << MVT::getValueTypeString(getValueType(i));
3539   }
3540   cerr << " = " << getOperationName(G);
3541
3542   cerr << " ";
3543   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
3544     if (i) cerr << ", ";
3545     cerr << (void*)getOperand(i).Val;
3546     if (unsigned RN = getOperand(i).ResNo)
3547       cerr << ":" << RN;
3548   }
3549
3550   if (const ConstantSDNode *CSDN = dyn_cast<ConstantSDNode>(this)) {
3551     cerr << "<" << CSDN->getValue() << ">";
3552   } else if (const ConstantFPSDNode *CSDN = dyn_cast<ConstantFPSDNode>(this)) {
3553     cerr << "<" << CSDN->getValue() << ">";
3554   } else if (const GlobalAddressSDNode *GADN =
3555              dyn_cast<GlobalAddressSDNode>(this)) {
3556     int offset = GADN->getOffset();
3557     cerr << "<";
3558     WriteAsOperand(*cerr.stream(), GADN->getGlobal()) << ">";
3559     if (offset > 0)
3560       cerr << " + " << offset;
3561     else
3562       cerr << " " << offset;
3563   } else if (const FrameIndexSDNode *FIDN = dyn_cast<FrameIndexSDNode>(this)) {
3564     cerr << "<" << FIDN->getIndex() << ">";
3565   } else if (const JumpTableSDNode *JTDN = dyn_cast<JumpTableSDNode>(this)) {
3566     cerr << "<" << JTDN->getIndex() << ">";
3567   } else if (const ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(this)){
3568     int offset = CP->getOffset();
3569     if (CP->isMachineConstantPoolEntry())
3570       cerr << "<" << *CP->getMachineCPVal() << ">";
3571     else
3572       cerr << "<" << *CP->getConstVal() << ">";
3573     if (offset > 0)
3574       cerr << " + " << offset;
3575     else
3576       cerr << " " << offset;
3577   } else if (const BasicBlockSDNode *BBDN = dyn_cast<BasicBlockSDNode>(this)) {
3578     cerr << "<";
3579     const Value *LBB = (const Value*)BBDN->getBasicBlock()->getBasicBlock();
3580     if (LBB)
3581       cerr << LBB->getName() << " ";
3582     cerr << (const void*)BBDN->getBasicBlock() << ">";
3583   } else if (const RegisterSDNode *R = dyn_cast<RegisterSDNode>(this)) {
3584     if (G && R->getReg() && MRegisterInfo::isPhysicalRegister(R->getReg())) {
3585       cerr << " " <<G->getTarget().getRegisterInfo()->getName(R->getReg());
3586     } else {
3587       cerr << " #" << R->getReg();
3588     }
3589   } else if (const ExternalSymbolSDNode *ES =
3590              dyn_cast<ExternalSymbolSDNode>(this)) {
3591     cerr << "'" << ES->getSymbol() << "'";
3592   } else if (const SrcValueSDNode *M = dyn_cast<SrcValueSDNode>(this)) {
3593     if (M->getValue())
3594       cerr << "<" << M->getValue() << ":" << M->getOffset() << ">";
3595     else
3596       cerr << "<null:" << M->getOffset() << ">";
3597   } else if (const VTSDNode *N = dyn_cast<VTSDNode>(this)) {
3598     cerr << ":" << MVT::getValueTypeString(N->getVT());
3599   } else if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(this)) {
3600     bool doExt = true;
3601     switch (LD->getExtensionType()) {
3602     default: doExt = false; break;
3603     case ISD::EXTLOAD:
3604       cerr << " <anyext ";
3605       break;
3606     case ISD::SEXTLOAD:
3607       cerr << " <sext ";
3608       break;
3609     case ISD::ZEXTLOAD:
3610       cerr << " <zext ";
3611       break;
3612     }
3613     if (doExt)
3614       cerr << MVT::getValueTypeString(LD->getLoadedVT()) << ">";
3615
3616     const char *AM = getIndexedModeName(LD->getAddressingMode());
3617     if (AM != "")
3618       cerr << " " << AM;
3619   } else if (const StoreSDNode *ST = dyn_cast<StoreSDNode>(this)) {
3620     if (ST->isTruncatingStore())
3621       cerr << " <trunc "
3622            << MVT::getValueTypeString(ST->getStoredVT()) << ">";
3623
3624     const char *AM = getIndexedModeName(ST->getAddressingMode());
3625     if (AM != "")
3626       cerr << " " << AM;
3627   }
3628 }
3629
3630 static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {
3631   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
3632     if (N->getOperand(i).Val->hasOneUse())
3633       DumpNodes(N->getOperand(i).Val, indent+2, G);
3634     else
3635       cerr << "\n" << std::string(indent+2, ' ')
3636            << (void*)N->getOperand(i).Val << ": <multiple use>";
3637
3638
3639   cerr << "\n" << std::string(indent, ' ');
3640   N->dump(G);
3641 }
3642
3643 void SelectionDAG::dump() const {
3644   cerr << "SelectionDAG has " << AllNodes.size() << " nodes:";
3645   std::vector<const SDNode*> Nodes;
3646   for (allnodes_const_iterator I = allnodes_begin(), E = allnodes_end();
3647        I != E; ++I)
3648     Nodes.push_back(I);
3649   
3650   std::sort(Nodes.begin(), Nodes.end());
3651
3652   for (unsigned i = 0, e = Nodes.size(); i != e; ++i) {
3653     if (!Nodes[i]->hasOneUse() && Nodes[i] != getRoot().Val)
3654       DumpNodes(Nodes[i], 2, this);
3655   }
3656
3657   if (getRoot().Val) DumpNodes(getRoot().Val, 2, this);
3658
3659   cerr << "\n\n";
3660 }
3661
3662 const Type *ConstantPoolSDNode::getType() const {
3663   if (isMachineConstantPoolEntry())
3664     return Val.MachineCPVal->getType();
3665   return Val.ConstVal->getType();
3666 }