SelectionDAG.cpp revision 51eaa86758338d5935c0eff0469c418b1256aba7
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>
34using namespace llvm;
35
36/// makeVTList - Return an instance of the SDVTList struct initialized with the
37/// specified members.
38static 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.
51bool 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.
61bool 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.
109bool 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).
148ISD::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.
160ISD::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).
175static 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.
195ISD::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.
219ISD::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
242const 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///
252static 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.
258void AddNodeIDValueTypes(FoldingSetNodeID &ID, SDVTList VTList) {
259  ID.AddPointer(VTList.VTs);
260}
261
262/// AddNodeIDOperands - Various routines for adding operands to the NodeID data.
263///
264static 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
272static 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.
282static 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.
371void 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
415void 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
449void 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
460void 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.
480void 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();
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///
527SDNode *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.
546SDNode *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.
566SDNode *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.
588SDNode *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
624SelectionDAG::~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
636SDOperand 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
643SDOperand 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
652SDOperand 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
673SDOperand 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
695SDOperand 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
717SDOperand 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
732SDOperand 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
746SDOperand 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
765SDOperand 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
785SDOperand 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
798SDOperand 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
809SDOperand 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
817SDOperand 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
826SDOperand 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
837SDOperand 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
850SDOperand 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
867SDOperand 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
940/// getNode - Gets or creates the specified node.
941///
942SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT) {
943  FoldingSetNodeID ID;
944  AddNodeIDNode(ID, Opcode, getVTList(VT), 0, 0);
945  void *IP = 0;
946  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
947    return SDOperand(E, 0);
948  SDNode *N = new SDNode(Opcode, SDNode::getSDVTList(VT));
949  CSEMap.InsertNode(N, IP);
950
951  AllNodes.push_back(N);
952  return SDOperand(N, 0);
953}
954
955SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
956                                SDOperand Operand) {
957  unsigned Tmp1;
958  // Constant fold unary operations with an integer constant operand.
959  if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Operand.Val)) {
960    uint64_t Val = C->getValue();
961    switch (Opcode) {
962    default: break;
963    case ISD::SIGN_EXTEND: return getConstant(C->getSignExtended(), VT);
964    case ISD::ANY_EXTEND:
965    case ISD::ZERO_EXTEND: return getConstant(Val, VT);
966    case ISD::TRUNCATE:    return getConstant(Val, VT);
967    case ISD::SINT_TO_FP:  return getConstantFP(C->getSignExtended(), VT);
968    case ISD::UINT_TO_FP:  return getConstantFP(C->getValue(), VT);
969    case ISD::BIT_CONVERT:
970      if (VT == MVT::f32 && C->getValueType(0) == MVT::i32)
971        return getConstantFP(BitsToFloat(Val), VT);
972      else if (VT == MVT::f64 && C->getValueType(0) == MVT::i64)
973        return getConstantFP(BitsToDouble(Val), VT);
974      break;
975    case ISD::BSWAP:
976      switch(VT) {
977      default: assert(0 && "Invalid bswap!"); break;
978      case MVT::i16: return getConstant(ByteSwap_16((unsigned short)Val), VT);
979      case MVT::i32: return getConstant(ByteSwap_32((unsigned)Val), VT);
980      case MVT::i64: return getConstant(ByteSwap_64(Val), VT);
981      }
982      break;
983    case ISD::CTPOP:
984      switch(VT) {
985      default: assert(0 && "Invalid ctpop!"); break;
986      case MVT::i1: return getConstant(Val != 0, VT);
987      case MVT::i8:
988        Tmp1 = (unsigned)Val & 0xFF;
989        return getConstant(CountPopulation_32(Tmp1), VT);
990      case MVT::i16:
991        Tmp1 = (unsigned)Val & 0xFFFF;
992        return getConstant(CountPopulation_32(Tmp1), VT);
993      case MVT::i32:
994        return getConstant(CountPopulation_32((unsigned)Val), VT);
995      case MVT::i64:
996        return getConstant(CountPopulation_64(Val), VT);
997      }
998    case ISD::CTLZ:
999      switch(VT) {
1000      default: assert(0 && "Invalid ctlz!"); break;
1001      case MVT::i1: return getConstant(Val == 0, VT);
1002      case MVT::i8:
1003        Tmp1 = (unsigned)Val & 0xFF;
1004        return getConstant(CountLeadingZeros_32(Tmp1)-24, VT);
1005      case MVT::i16:
1006        Tmp1 = (unsigned)Val & 0xFFFF;
1007        return getConstant(CountLeadingZeros_32(Tmp1)-16, VT);
1008      case MVT::i32:
1009        return getConstant(CountLeadingZeros_32((unsigned)Val), VT);
1010      case MVT::i64:
1011        return getConstant(CountLeadingZeros_64(Val), VT);
1012      }
1013    case ISD::CTTZ:
1014      switch(VT) {
1015      default: assert(0 && "Invalid cttz!"); break;
1016      case MVT::i1: return getConstant(Val == 0, VT);
1017      case MVT::i8:
1018        Tmp1 = (unsigned)Val | 0x100;
1019        return getConstant(CountTrailingZeros_32(Tmp1), VT);
1020      case MVT::i16:
1021        Tmp1 = (unsigned)Val | 0x10000;
1022        return getConstant(CountTrailingZeros_32(Tmp1), VT);
1023      case MVT::i32:
1024        return getConstant(CountTrailingZeros_32((unsigned)Val), VT);
1025      case MVT::i64:
1026        return getConstant(CountTrailingZeros_64(Val), VT);
1027      }
1028    }
1029  }
1030
1031  // Constant fold unary operations with an floating point constant operand.
1032  if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Operand.Val))
1033    switch (Opcode) {
1034    case ISD::FNEG:
1035      return getConstantFP(-C->getValue(), VT);
1036    case ISD::FABS:
1037      return getConstantFP(fabs(C->getValue()), VT);
1038    case ISD::FP_ROUND:
1039    case ISD::FP_EXTEND:
1040      return getConstantFP(C->getValue(), VT);
1041    case ISD::FP_TO_SINT:
1042      return getConstant((int64_t)C->getValue(), VT);
1043    case ISD::FP_TO_UINT:
1044      return getConstant((uint64_t)C->getValue(), VT);
1045    case ISD::BIT_CONVERT:
1046      if (VT == MVT::i32 && C->getValueType(0) == MVT::f32)
1047        return getConstant(FloatToBits(C->getValue()), VT);
1048      else if (VT == MVT::i64 && C->getValueType(0) == MVT::f64)
1049        return getConstant(DoubleToBits(C->getValue()), VT);
1050      break;
1051    }
1052
1053  unsigned OpOpcode = Operand.Val->getOpcode();
1054  switch (Opcode) {
1055  case ISD::TokenFactor:
1056    return Operand;         // Factor of one node?  No factor.
1057  case ISD::FP_ROUND:
1058  case ISD::FP_EXTEND:
1059    assert(MVT::isFloatingPoint(VT) &&
1060           MVT::isFloatingPoint(Operand.getValueType()) && "Invalid FP cast!");
1061    break;
1062  case ISD::SIGN_EXTEND:
1063    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1064           "Invalid SIGN_EXTEND!");
1065    if (Operand.getValueType() == VT) return Operand;   // noop extension
1066    assert(Operand.getValueType() < VT && "Invalid sext node, dst < src!");
1067    if (OpOpcode == ISD::SIGN_EXTEND || OpOpcode == ISD::ZERO_EXTEND)
1068      return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1069    break;
1070  case ISD::ZERO_EXTEND:
1071    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1072           "Invalid ZERO_EXTEND!");
1073    if (Operand.getValueType() == VT) return Operand;   // noop extension
1074    assert(Operand.getValueType() < VT && "Invalid zext node, dst < src!");
1075    if (OpOpcode == ISD::ZERO_EXTEND)   // (zext (zext x)) -> (zext x)
1076      return getNode(ISD::ZERO_EXTEND, VT, Operand.Val->getOperand(0));
1077    break;
1078  case ISD::ANY_EXTEND:
1079    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1080           "Invalid ANY_EXTEND!");
1081    if (Operand.getValueType() == VT) return Operand;   // noop extension
1082    assert(Operand.getValueType() < VT && "Invalid anyext node, dst < src!");
1083    if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND)
1084      // (ext (zext x)) -> (zext x)  and  (ext (sext x)) -> (sext x)
1085      return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1086    break;
1087  case ISD::TRUNCATE:
1088    assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
1089           "Invalid TRUNCATE!");
1090    if (Operand.getValueType() == VT) return Operand;   // noop truncate
1091    assert(Operand.getValueType() > VT && "Invalid truncate node, src < dst!");
1092    if (OpOpcode == ISD::TRUNCATE)
1093      return getNode(ISD::TRUNCATE, VT, Operand.Val->getOperand(0));
1094    else if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND ||
1095             OpOpcode == ISD::ANY_EXTEND) {
1096      // If the source is smaller than the dest, we still need an extend.
1097      if (Operand.Val->getOperand(0).getValueType() < VT)
1098        return getNode(OpOpcode, VT, Operand.Val->getOperand(0));
1099      else if (Operand.Val->getOperand(0).getValueType() > VT)
1100        return getNode(ISD::TRUNCATE, VT, Operand.Val->getOperand(0));
1101      else
1102        return Operand.Val->getOperand(0);
1103    }
1104    break;
1105  case ISD::BIT_CONVERT:
1106    // Basic sanity checking.
1107    assert(MVT::getSizeInBits(VT) == MVT::getSizeInBits(Operand.getValueType())
1108           && "Cannot BIT_CONVERT between types of different sizes!");
1109    if (VT == Operand.getValueType()) return Operand;  // noop conversion.
1110    if (OpOpcode == ISD::BIT_CONVERT)  // bitconv(bitconv(x)) -> bitconv(x)
1111      return getNode(ISD::BIT_CONVERT, VT, Operand.getOperand(0));
1112    if (OpOpcode == ISD::UNDEF)
1113      return getNode(ISD::UNDEF, VT);
1114    break;
1115  case ISD::SCALAR_TO_VECTOR:
1116    assert(MVT::isVector(VT) && !MVT::isVector(Operand.getValueType()) &&
1117           MVT::getVectorElementType(VT) == Operand.getValueType() &&
1118           "Illegal SCALAR_TO_VECTOR node!");
1119    break;
1120  case ISD::FNEG:
1121    if (OpOpcode == ISD::FSUB)   // -(X-Y) -> (Y-X)
1122      return getNode(ISD::FSUB, VT, Operand.Val->getOperand(1),
1123                     Operand.Val->getOperand(0));
1124    if (OpOpcode == ISD::FNEG)  // --X -> X
1125      return Operand.Val->getOperand(0);
1126    break;
1127  case ISD::FABS:
1128    if (OpOpcode == ISD::FNEG)  // abs(-X) -> abs(X)
1129      return getNode(ISD::FABS, VT, Operand.Val->getOperand(0));
1130    break;
1131  }
1132
1133  SDNode *N;
1134  SDVTList VTs = getVTList(VT);
1135  if (VT != MVT::Flag) { // Don't CSE flag producing nodes
1136    FoldingSetNodeID ID;
1137    SDOperand Ops[1] = { Operand };
1138    AddNodeIDNode(ID, Opcode, VTs, Ops, 1);
1139    void *IP = 0;
1140    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1141      return SDOperand(E, 0);
1142    N = new UnarySDNode(Opcode, VTs, Operand);
1143    CSEMap.InsertNode(N, IP);
1144  } else {
1145    N = new UnarySDNode(Opcode, VTs, Operand);
1146  }
1147  AllNodes.push_back(N);
1148  return SDOperand(N, 0);
1149}
1150
1151
1152
1153SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1154                                SDOperand N1, SDOperand N2) {
1155#ifndef NDEBUG
1156  switch (Opcode) {
1157  case ISD::TokenFactor:
1158    assert(VT == MVT::Other && N1.getValueType() == MVT::Other &&
1159           N2.getValueType() == MVT::Other && "Invalid token factor!");
1160    break;
1161  case ISD::AND:
1162  case ISD::OR:
1163  case ISD::XOR:
1164  case ISD::UDIV:
1165  case ISD::UREM:
1166  case ISD::MULHU:
1167  case ISD::MULHS:
1168    assert(MVT::isInteger(VT) && "This operator does not apply to FP types!");
1169    // fall through
1170  case ISD::ADD:
1171  case ISD::SUB:
1172  case ISD::MUL:
1173  case ISD::SDIV:
1174  case ISD::SREM:
1175    assert(MVT::isInteger(N1.getValueType()) && "Should use F* for FP ops");
1176    // fall through.
1177  case ISD::FADD:
1178  case ISD::FSUB:
1179  case ISD::FMUL:
1180  case ISD::FDIV:
1181  case ISD::FREM:
1182    assert(N1.getValueType() == N2.getValueType() &&
1183           N1.getValueType() == VT && "Binary operator types must match!");
1184    break;
1185  case ISD::FCOPYSIGN:   // N1 and result must match.  N1/N2 need not match.
1186    assert(N1.getValueType() == VT &&
1187           MVT::isFloatingPoint(N1.getValueType()) &&
1188           MVT::isFloatingPoint(N2.getValueType()) &&
1189           "Invalid FCOPYSIGN!");
1190    break;
1191  case ISD::SHL:
1192  case ISD::SRA:
1193  case ISD::SRL:
1194  case ISD::ROTL:
1195  case ISD::ROTR:
1196    assert(VT == N1.getValueType() &&
1197           "Shift operators return type must be the same as their first arg");
1198    assert(MVT::isInteger(VT) && MVT::isInteger(N2.getValueType()) &&
1199           VT != MVT::i1 && "Shifts only work on integers");
1200    break;
1201  case ISD::FP_ROUND_INREG: {
1202    MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
1203    assert(VT == N1.getValueType() && "Not an inreg round!");
1204    assert(MVT::isFloatingPoint(VT) && MVT::isFloatingPoint(EVT) &&
1205           "Cannot FP_ROUND_INREG integer types");
1206    assert(EVT <= VT && "Not rounding down!");
1207    break;
1208  }
1209  case ISD::AssertSext:
1210  case ISD::AssertZext:
1211  case ISD::SIGN_EXTEND_INREG: {
1212    MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
1213    assert(VT == N1.getValueType() && "Not an inreg extend!");
1214    assert(MVT::isInteger(VT) && MVT::isInteger(EVT) &&
1215           "Cannot *_EXTEND_INREG FP types");
1216    assert(EVT <= VT && "Not extending!");
1217  }
1218
1219  default: break;
1220  }
1221#endif
1222
1223  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val);
1224  ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val);
1225  if (N1C) {
1226    if (Opcode == ISD::SIGN_EXTEND_INREG) {
1227      int64_t Val = N1C->getValue();
1228      unsigned FromBits = MVT::getSizeInBits(cast<VTSDNode>(N2)->getVT());
1229      Val <<= 64-FromBits;
1230      Val >>= 64-FromBits;
1231      return getConstant(Val, VT);
1232    }
1233
1234    if (N2C) {
1235      uint64_t C1 = N1C->getValue(), C2 = N2C->getValue();
1236      switch (Opcode) {
1237      case ISD::ADD: return getConstant(C1 + C2, VT);
1238      case ISD::SUB: return getConstant(C1 - C2, VT);
1239      case ISD::MUL: return getConstant(C1 * C2, VT);
1240      case ISD::UDIV:
1241        if (C2) return getConstant(C1 / C2, VT);
1242        break;
1243      case ISD::UREM :
1244        if (C2) return getConstant(C1 % C2, VT);
1245        break;
1246      case ISD::SDIV :
1247        if (C2) return getConstant(N1C->getSignExtended() /
1248                                   N2C->getSignExtended(), VT);
1249        break;
1250      case ISD::SREM :
1251        if (C2) return getConstant(N1C->getSignExtended() %
1252                                   N2C->getSignExtended(), VT);
1253        break;
1254      case ISD::AND  : return getConstant(C1 & C2, VT);
1255      case ISD::OR   : return getConstant(C1 | C2, VT);
1256      case ISD::XOR  : return getConstant(C1 ^ C2, VT);
1257      case ISD::SHL  : return getConstant(C1 << C2, VT);
1258      case ISD::SRL  : return getConstant(C1 >> C2, VT);
1259      case ISD::SRA  : return getConstant(N1C->getSignExtended() >>(int)C2, VT);
1260      case ISD::ROTL :
1261        return getConstant((C1 << C2) | (C1 >> (MVT::getSizeInBits(VT) - C2)),
1262                           VT);
1263      case ISD::ROTR :
1264        return getConstant((C1 >> C2) | (C1 << (MVT::getSizeInBits(VT) - C2)),
1265                           VT);
1266      default: break;
1267      }
1268    } else {      // Cannonicalize constant to RHS if commutative
1269      if (isCommutativeBinOp(Opcode)) {
1270        std::swap(N1C, N2C);
1271        std::swap(N1, N2);
1272      }
1273    }
1274  }
1275
1276  ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1.Val);
1277  ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2.Val);
1278  if (N1CFP) {
1279    if (N2CFP) {
1280      double C1 = N1CFP->getValue(), C2 = N2CFP->getValue();
1281      switch (Opcode) {
1282      case ISD::FADD: return getConstantFP(C1 + C2, VT);
1283      case ISD::FSUB: return getConstantFP(C1 - C2, VT);
1284      case ISD::FMUL: return getConstantFP(C1 * C2, VT);
1285      case ISD::FDIV:
1286        if (C2) return getConstantFP(C1 / C2, VT);
1287        break;
1288      case ISD::FREM :
1289        if (C2) return getConstantFP(fmod(C1, C2), VT);
1290        break;
1291      case ISD::FCOPYSIGN: {
1292        union {
1293          double   F;
1294          uint64_t I;
1295        } u1;
1296        u1.F = C1;
1297        if (int64_t(DoubleToBits(C2)) < 0)  // Sign bit of RHS set?
1298          u1.I |= 1ULL << 63;      // Set the sign bit of the LHS.
1299        else
1300          u1.I &= (1ULL << 63)-1;  // Clear the sign bit of the LHS.
1301        return getConstantFP(u1.F, VT);
1302      }
1303      default: break;
1304      }
1305    } else {      // Cannonicalize constant to RHS if commutative
1306      if (isCommutativeBinOp(Opcode)) {
1307        std::swap(N1CFP, N2CFP);
1308        std::swap(N1, N2);
1309      }
1310    }
1311  }
1312
1313  // Canonicalize an UNDEF to the RHS, even over a constant.
1314  if (N1.getOpcode() == ISD::UNDEF) {
1315    if (isCommutativeBinOp(Opcode)) {
1316      std::swap(N1, N2);
1317    } else {
1318      switch (Opcode) {
1319      case ISD::FP_ROUND_INREG:
1320      case ISD::SIGN_EXTEND_INREG:
1321      case ISD::SUB:
1322      case ISD::FSUB:
1323      case ISD::FDIV:
1324      case ISD::FREM:
1325      case ISD::SRA:
1326        return N1;     // fold op(undef, arg2) -> undef
1327      case ISD::UDIV:
1328      case ISD::SDIV:
1329      case ISD::UREM:
1330      case ISD::SREM:
1331      case ISD::SRL:
1332      case ISD::SHL:
1333        if (!MVT::isVector(VT))
1334          return getConstant(0, VT);    // fold op(undef, arg2) -> 0
1335        // For vectors, we can't easily build an all zero vector, just return
1336        // the LHS.
1337        return N2;
1338      }
1339    }
1340  }
1341
1342  // Fold a bunch of operators when the RHS is undef.
1343  if (N2.getOpcode() == ISD::UNDEF) {
1344    switch (Opcode) {
1345    case ISD::ADD:
1346    case ISD::ADDC:
1347    case ISD::ADDE:
1348    case ISD::SUB:
1349    case ISD::FADD:
1350    case ISD::FSUB:
1351    case ISD::FMUL:
1352    case ISD::FDIV:
1353    case ISD::FREM:
1354    case ISD::UDIV:
1355    case ISD::SDIV:
1356    case ISD::UREM:
1357    case ISD::SREM:
1358    case ISD::XOR:
1359      return N2;       // fold op(arg1, undef) -> undef
1360    case ISD::MUL:
1361    case ISD::AND:
1362    case ISD::SRL:
1363    case ISD::SHL:
1364      if (!MVT::isVector(VT))
1365        return getConstant(0, VT);  // fold op(arg1, undef) -> 0
1366      // For vectors, we can't easily build an all zero vector, just return
1367      // the LHS.
1368      return N1;
1369    case ISD::OR:
1370      if (!MVT::isVector(VT))
1371        return getConstant(MVT::getIntVTBitMask(VT), VT);
1372      // For vectors, we can't easily build an all one vector, just return
1373      // the LHS.
1374      return N1;
1375    case ISD::SRA:
1376      return N1;
1377    }
1378  }
1379
1380  // Fold operations.
1381  switch (Opcode) {
1382  case ISD::TokenFactor:
1383    // Fold trivial token factors.
1384    if (N1.getOpcode() == ISD::EntryToken) return N2;
1385    if (N2.getOpcode() == ISD::EntryToken) return N1;
1386    break;
1387
1388  case ISD::AND:
1389    // (X & 0) -> 0.  This commonly occurs when legalizing i64 values, so it's
1390    // worth handling here.
1391    if (N2C && N2C->getValue() == 0)
1392      return N2;
1393    break;
1394  case ISD::OR:
1395  case ISD::XOR:
1396    // (X ^| 0) -> X.  This commonly occurs when legalizing i64 values, so it's
1397    // worth handling here.
1398    if (N2C && N2C->getValue() == 0)
1399      return N1;
1400    break;
1401  case ISD::FP_ROUND_INREG:
1402    if (cast<VTSDNode>(N2)->getVT() == VT) return N1;  // Not actually rounding.
1403    break;
1404  case ISD::SIGN_EXTEND_INREG: {
1405    MVT::ValueType EVT = cast<VTSDNode>(N2)->getVT();
1406    if (EVT == VT) return N1;  // Not actually extending
1407    break;
1408  }
1409  case ISD::EXTRACT_ELEMENT:
1410    assert(N2C && (unsigned)N2C->getValue() < 2 && "Bad EXTRACT_ELEMENT!");
1411
1412    // EXTRACT_ELEMENT of BUILD_PAIR is often formed while legalize is expanding
1413    // 64-bit integers into 32-bit parts.  Instead of building the extract of
1414    // the BUILD_PAIR, only to have legalize rip it apart, just do it now.
1415    if (N1.getOpcode() == ISD::BUILD_PAIR)
1416      return N1.getOperand(N2C->getValue());
1417
1418    // EXTRACT_ELEMENT of a constant int is also very common.
1419    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) {
1420      unsigned Shift = MVT::getSizeInBits(VT) * N2C->getValue();
1421      return getConstant(C->getValue() >> Shift, VT);
1422    }
1423    break;
1424
1425  // FIXME: figure out how to safely handle things like
1426  // int foo(int x) { return 1 << (x & 255); }
1427  // int bar() { return foo(256); }
1428#if 0
1429  case ISD::SHL:
1430  case ISD::SRL:
1431  case ISD::SRA:
1432    if (N2.getOpcode() == ISD::SIGN_EXTEND_INREG &&
1433        cast<VTSDNode>(N2.getOperand(1))->getVT() != MVT::i1)
1434      return getNode(Opcode, VT, N1, N2.getOperand(0));
1435    else if (N2.getOpcode() == ISD::AND)
1436      if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N2.getOperand(1))) {
1437        // If the and is only masking out bits that cannot effect the shift,
1438        // eliminate the and.
1439        unsigned NumBits = MVT::getSizeInBits(VT);
1440        if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1)
1441          return getNode(Opcode, VT, N1, N2.getOperand(0));
1442      }
1443    break;
1444#endif
1445  }
1446
1447  // Memoize this node if possible.
1448  SDNode *N;
1449  SDVTList VTs = getVTList(VT);
1450  if (VT != MVT::Flag) {
1451    SDOperand Ops[] = { N1, N2 };
1452    FoldingSetNodeID ID;
1453    AddNodeIDNode(ID, Opcode, VTs, Ops, 2);
1454    void *IP = 0;
1455    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1456      return SDOperand(E, 0);
1457    N = new BinarySDNode(Opcode, VTs, N1, N2);
1458    CSEMap.InsertNode(N, IP);
1459  } else {
1460    N = new BinarySDNode(Opcode, VTs, N1, N2);
1461  }
1462
1463  AllNodes.push_back(N);
1464  return SDOperand(N, 0);
1465}
1466
1467SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1468                                SDOperand N1, SDOperand N2, SDOperand N3) {
1469  // Perform various simplifications.
1470  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val);
1471  ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.Val);
1472  switch (Opcode) {
1473  case ISD::SETCC: {
1474    // Use FoldSetCC to simplify SETCC's.
1475    SDOperand Simp = FoldSetCC(VT, N1, N2, cast<CondCodeSDNode>(N3)->get());
1476    if (Simp.Val) return Simp;
1477    break;
1478  }
1479  case ISD::SELECT:
1480    if (N1C)
1481      if (N1C->getValue())
1482        return N2;             // select true, X, Y -> X
1483      else
1484        return N3;             // select false, X, Y -> Y
1485
1486    if (N2 == N3) return N2;   // select C, X, X -> X
1487    break;
1488  case ISD::BRCOND:
1489    if (N2C)
1490      if (N2C->getValue()) // Unconditional branch
1491        return getNode(ISD::BR, MVT::Other, N1, N3);
1492      else
1493        return N1;         // Never-taken branch
1494    break;
1495  case ISD::VECTOR_SHUFFLE:
1496    assert(VT == N1.getValueType() && VT == N2.getValueType() &&
1497           MVT::isVector(VT) && MVT::isVector(N3.getValueType()) &&
1498           N3.getOpcode() == ISD::BUILD_VECTOR &&
1499           MVT::getVectorNumElements(VT) == N3.getNumOperands() &&
1500           "Illegal VECTOR_SHUFFLE node!");
1501    break;
1502  case ISD::VBIT_CONVERT:
1503    // Fold vbit_convert nodes from a type to themselves.
1504    if (N1.getValueType() == MVT::Vector) {
1505      assert(isa<ConstantSDNode>(*(N1.Val->op_end()-2)) &&
1506             isa<VTSDNode>(*(N1.Val->op_end()-1)) && "Malformed vector input!");
1507      if (*(N1.Val->op_end()-2) == N2 && *(N1.Val->op_end()-1) == N3)
1508        return N1;
1509    }
1510    break;
1511  }
1512
1513  // Memoize node if it doesn't produce a flag.
1514  SDNode *N;
1515  SDVTList VTs = getVTList(VT);
1516  if (VT != MVT::Flag) {
1517    SDOperand Ops[] = { N1, N2, N3 };
1518    FoldingSetNodeID ID;
1519    AddNodeIDNode(ID, Opcode, VTs, Ops, 3);
1520    void *IP = 0;
1521    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1522      return SDOperand(E, 0);
1523    N = new TernarySDNode(Opcode, VTs, N1, N2, N3);
1524    CSEMap.InsertNode(N, IP);
1525  } else {
1526    N = new TernarySDNode(Opcode, VTs, N1, N2, N3);
1527  }
1528  AllNodes.push_back(N);
1529  return SDOperand(N, 0);
1530}
1531
1532SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1533                                SDOperand N1, SDOperand N2, SDOperand N3,
1534                                SDOperand N4) {
1535  SDOperand Ops[] = { N1, N2, N3, N4 };
1536  return getNode(Opcode, VT, Ops, 4);
1537}
1538
1539SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1540                                SDOperand N1, SDOperand N2, SDOperand N3,
1541                                SDOperand N4, SDOperand N5) {
1542  SDOperand Ops[] = { N1, N2, N3, N4, N5 };
1543  return getNode(Opcode, VT, Ops, 5);
1544}
1545
1546SDOperand SelectionDAG::getLoad(MVT::ValueType VT,
1547                                SDOperand Chain, SDOperand Ptr,
1548                                const Value *SV, int SVOffset,
1549                                bool isVolatile, unsigned Alignment) {
1550  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
1551    const Type *Ty = 0;
1552    if (VT != MVT::Vector && VT != MVT::iPTR) {
1553      Ty = MVT::getTypeForValueType(VT);
1554    } else if (SV) {
1555      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
1556      assert(PT && "Value for load must be a pointer");
1557      Ty = PT->getElementType();
1558    }
1559    assert(Ty && "Could not get type information for load");
1560    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
1561  }
1562  SDVTList VTs = getVTList(VT, MVT::Other);
1563  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
1564  SDOperand Ops[] = { Chain, Ptr, Undef };
1565  FoldingSetNodeID ID;
1566  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
1567  ID.AddInteger(ISD::UNINDEXED);
1568  ID.AddInteger(ISD::NON_EXTLOAD);
1569  ID.AddInteger(VT);
1570  ID.AddPointer(SV);
1571  ID.AddInteger(SVOffset);
1572  ID.AddInteger(Alignment);
1573  ID.AddInteger(isVolatile);
1574  void *IP = 0;
1575  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1576    return SDOperand(E, 0);
1577  SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED,
1578                             ISD::NON_EXTLOAD, VT, SV, SVOffset, Alignment,
1579                             isVolatile);
1580  CSEMap.InsertNode(N, IP);
1581  AllNodes.push_back(N);
1582  return SDOperand(N, 0);
1583}
1584
1585SDOperand SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, MVT::ValueType VT,
1586                                   SDOperand Chain, SDOperand Ptr,
1587                                   const Value *SV,
1588                                   int SVOffset, MVT::ValueType EVT,
1589                                   bool isVolatile, unsigned Alignment) {
1590  // If they are asking for an extending load from/to the same thing, return a
1591  // normal load.
1592  if (VT == EVT)
1593    ExtType = ISD::NON_EXTLOAD;
1594
1595  if (MVT::isVector(VT))
1596    assert(EVT == MVT::getVectorElementType(VT) && "Invalid vector extload!");
1597  else
1598    assert(EVT < VT && "Should only be an extending load, not truncating!");
1599  assert((ExtType == ISD::EXTLOAD || MVT::isInteger(VT)) &&
1600         "Cannot sign/zero extend a FP/Vector load!");
1601  assert(MVT::isInteger(VT) == MVT::isInteger(EVT) &&
1602         "Cannot convert from FP to Int or Int -> FP!");
1603
1604  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
1605    const Type *Ty = 0;
1606    if (VT != MVT::Vector && VT != MVT::iPTR) {
1607      Ty = MVT::getTypeForValueType(VT);
1608    } else if (SV) {
1609      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
1610      assert(PT && "Value for load must be a pointer");
1611      Ty = PT->getElementType();
1612    }
1613    assert(Ty && "Could not get type information for load");
1614    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
1615  }
1616  SDVTList VTs = getVTList(VT, MVT::Other);
1617  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
1618  SDOperand Ops[] = { Chain, Ptr, Undef };
1619  FoldingSetNodeID ID;
1620  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
1621  ID.AddInteger(ISD::UNINDEXED);
1622  ID.AddInteger(ExtType);
1623  ID.AddInteger(EVT);
1624  ID.AddPointer(SV);
1625  ID.AddInteger(SVOffset);
1626  ID.AddInteger(Alignment);
1627  ID.AddInteger(isVolatile);
1628  void *IP = 0;
1629  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1630    return SDOperand(E, 0);
1631  SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED, ExtType, EVT,
1632                             SV, SVOffset, Alignment, isVolatile);
1633  CSEMap.InsertNode(N, IP);
1634  AllNodes.push_back(N);
1635  return SDOperand(N, 0);
1636}
1637
1638SDOperand
1639SelectionDAG::getIndexedLoad(SDOperand OrigLoad, SDOperand Base,
1640                             SDOperand Offset, ISD::MemIndexedMode AM) {
1641  LoadSDNode *LD = cast<LoadSDNode>(OrigLoad);
1642  assert(LD->getOffset().getOpcode() == ISD::UNDEF &&
1643         "Load is already a indexed load!");
1644  MVT::ValueType VT = OrigLoad.getValueType();
1645  SDVTList VTs = getVTList(VT, Base.getValueType(), MVT::Other);
1646  SDOperand Ops[] = { LD->getChain(), Base, Offset };
1647  FoldingSetNodeID ID;
1648  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
1649  ID.AddInteger(AM);
1650  ID.AddInteger(LD->getExtensionType());
1651  ID.AddInteger(LD->getLoadedVT());
1652  ID.AddPointer(LD->getSrcValue());
1653  ID.AddInteger(LD->getSrcValueOffset());
1654  ID.AddInteger(LD->getAlignment());
1655  ID.AddInteger(LD->isVolatile());
1656  void *IP = 0;
1657  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1658    return SDOperand(E, 0);
1659  SDNode *N = new LoadSDNode(Ops, VTs, AM,
1660                             LD->getExtensionType(), LD->getLoadedVT(),
1661                             LD->getSrcValue(), LD->getSrcValueOffset(),
1662                             LD->getAlignment(), LD->isVolatile());
1663  CSEMap.InsertNode(N, IP);
1664  AllNodes.push_back(N);
1665  return SDOperand(N, 0);
1666}
1667
1668SDOperand SelectionDAG::getVecLoad(unsigned Count, MVT::ValueType EVT,
1669                                   SDOperand Chain, SDOperand Ptr,
1670                                   SDOperand SV) {
1671  SDOperand Ops[] = { Chain, Ptr, SV, getConstant(Count, MVT::i32),
1672                      getValueType(EVT) };
1673  return getNode(ISD::VLOAD, getVTList(MVT::Vector, MVT::Other), Ops, 5);
1674}
1675
1676SDOperand SelectionDAG::getStore(SDOperand Chain, SDOperand Val,
1677                                 SDOperand Ptr, const Value *SV, int SVOffset,
1678                                 bool isVolatile, unsigned Alignment) {
1679  MVT::ValueType VT = Val.getValueType();
1680
1681  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
1682    const Type *Ty = 0;
1683    if (VT != MVT::Vector && VT != MVT::iPTR) {
1684      Ty = MVT::getTypeForValueType(VT);
1685    } else if (SV) {
1686      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
1687      assert(PT && "Value for store must be a pointer");
1688      Ty = PT->getElementType();
1689    }
1690    assert(Ty && "Could not get type information for store");
1691    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
1692  }
1693  SDVTList VTs = getVTList(MVT::Other);
1694  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
1695  SDOperand Ops[] = { Chain, Val, Ptr, Undef };
1696  FoldingSetNodeID ID;
1697  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
1698  ID.AddInteger(ISD::UNINDEXED);
1699  ID.AddInteger(false);
1700  ID.AddInteger(VT);
1701  ID.AddPointer(SV);
1702  ID.AddInteger(SVOffset);
1703  ID.AddInteger(Alignment);
1704  ID.AddInteger(isVolatile);
1705  void *IP = 0;
1706  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1707    return SDOperand(E, 0);
1708  SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, false,
1709                              VT, SV, SVOffset, Alignment, isVolatile);
1710  CSEMap.InsertNode(N, IP);
1711  AllNodes.push_back(N);
1712  return SDOperand(N, 0);
1713}
1714
1715SDOperand SelectionDAG::getTruncStore(SDOperand Chain, SDOperand Val,
1716                                      SDOperand Ptr, const Value *SV,
1717                                      int SVOffset, MVT::ValueType SVT,
1718                                      bool isVolatile, unsigned Alignment) {
1719  MVT::ValueType VT = Val.getValueType();
1720  bool isTrunc = VT != SVT;
1721
1722  assert(VT > SVT && "Not a truncation?");
1723  assert(MVT::isInteger(VT) == MVT::isInteger(SVT) &&
1724         "Can't do FP-INT conversion!");
1725
1726  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
1727    const Type *Ty = 0;
1728    if (VT != MVT::Vector && VT != MVT::iPTR) {
1729      Ty = MVT::getTypeForValueType(VT);
1730    } else if (SV) {
1731      const PointerType *PT = dyn_cast<PointerType>(SV->getType());
1732      assert(PT && "Value for store must be a pointer");
1733      Ty = PT->getElementType();
1734    }
1735    assert(Ty && "Could not get type information for store");
1736    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
1737  }
1738  SDVTList VTs = getVTList(MVT::Other);
1739  SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
1740  SDOperand Ops[] = { Chain, Val, Ptr, Undef };
1741  FoldingSetNodeID ID;
1742  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
1743  ID.AddInteger(ISD::UNINDEXED);
1744  ID.AddInteger(isTrunc);
1745  ID.AddInteger(SVT);
1746  ID.AddPointer(SV);
1747  ID.AddInteger(SVOffset);
1748  ID.AddInteger(Alignment);
1749  ID.AddInteger(isVolatile);
1750  void *IP = 0;
1751  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1752    return SDOperand(E, 0);
1753  SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, isTrunc,
1754                              SVT, SV, SVOffset, Alignment, isVolatile);
1755  CSEMap.InsertNode(N, IP);
1756  AllNodes.push_back(N);
1757  return SDOperand(N, 0);
1758}
1759
1760SDOperand
1761SelectionDAG::getIndexedStore(SDOperand OrigStore, SDOperand Base,
1762                              SDOperand Offset, ISD::MemIndexedMode AM) {
1763  StoreSDNode *ST = cast<StoreSDNode>(OrigStore);
1764  assert(ST->getOffset().getOpcode() == ISD::UNDEF &&
1765         "Store is already a indexed store!");
1766  SDVTList VTs = getVTList(Base.getValueType(), MVT::Other);
1767  SDOperand Ops[] = { ST->getChain(), ST->getValue(), Base, Offset };
1768  FoldingSetNodeID ID;
1769  AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
1770  ID.AddInteger(AM);
1771  ID.AddInteger(ST->isTruncatingStore());
1772  ID.AddInteger(ST->getStoredVT());
1773  ID.AddPointer(ST->getSrcValue());
1774  ID.AddInteger(ST->getSrcValueOffset());
1775  ID.AddInteger(ST->getAlignment());
1776  ID.AddInteger(ST->isVolatile());
1777  void *IP = 0;
1778  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1779    return SDOperand(E, 0);
1780  SDNode *N = new StoreSDNode(Ops, VTs, AM,
1781                              ST->isTruncatingStore(), ST->getStoredVT(),
1782                              ST->getSrcValue(), ST->getSrcValueOffset(),
1783                              ST->getAlignment(), ST->isVolatile());
1784  CSEMap.InsertNode(N, IP);
1785  AllNodes.push_back(N);
1786  return SDOperand(N, 0);
1787}
1788
1789SDOperand SelectionDAG::getVAArg(MVT::ValueType VT,
1790                                 SDOperand Chain, SDOperand Ptr,
1791                                 SDOperand SV) {
1792  SDOperand Ops[] = { Chain, Ptr, SV };
1793  return getNode(ISD::VAARG, getVTList(VT, MVT::Other), Ops, 3);
1794}
1795
1796SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
1797                                const SDOperand *Ops, unsigned NumOps) {
1798  switch (NumOps) {
1799  case 0: return getNode(Opcode, VT);
1800  case 1: return getNode(Opcode, VT, Ops[0]);
1801  case 2: return getNode(Opcode, VT, Ops[0], Ops[1]);
1802  case 3: return getNode(Opcode, VT, Ops[0], Ops[1], Ops[2]);
1803  default: break;
1804  }
1805
1806  switch (Opcode) {
1807  default: break;
1808  case ISD::SELECT_CC: {
1809    assert(NumOps == 5 && "SELECT_CC takes 5 operands!");
1810    assert(Ops[0].getValueType() == Ops[1].getValueType() &&
1811           "LHS and RHS of condition must have same type!");
1812    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
1813           "True and False arms of SelectCC must have same type!");
1814    assert(Ops[2].getValueType() == VT &&
1815           "select_cc node must be of same type as true and false value!");
1816    break;
1817  }
1818  case ISD::BR_CC: {
1819    assert(NumOps == 5 && "BR_CC takes 5 operands!");
1820    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
1821           "LHS/RHS of comparison should match types!");
1822    break;
1823  }
1824  }
1825
1826  // Memoize nodes.
1827  SDNode *N;
1828  SDVTList VTs = getVTList(VT);
1829  if (VT != MVT::Flag) {
1830    FoldingSetNodeID ID;
1831    AddNodeIDNode(ID, Opcode, VTs, Ops, NumOps);
1832    void *IP = 0;
1833    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1834      return SDOperand(E, 0);
1835    N = new SDNode(Opcode, VTs, Ops, NumOps);
1836    CSEMap.InsertNode(N, IP);
1837  } else {
1838    N = new SDNode(Opcode, VTs, Ops, NumOps);
1839  }
1840  AllNodes.push_back(N);
1841  return SDOperand(N, 0);
1842}
1843
1844SDOperand SelectionDAG::getNode(unsigned Opcode,
1845                                std::vector<MVT::ValueType> &ResultTys,
1846                                const SDOperand *Ops, unsigned NumOps) {
1847  return getNode(Opcode, getNodeValueTypes(ResultTys), ResultTys.size(),
1848                 Ops, NumOps);
1849}
1850
1851SDOperand SelectionDAG::getNode(unsigned Opcode,
1852                                const MVT::ValueType *VTs, unsigned NumVTs,
1853                                const SDOperand *Ops, unsigned NumOps) {
1854  if (NumVTs == 1)
1855    return getNode(Opcode, VTs[0], Ops, NumOps);
1856  return getNode(Opcode, makeVTList(VTs, NumVTs), Ops, NumOps);
1857}
1858
1859SDOperand SelectionDAG::getNode(unsigned Opcode, SDVTList VTList,
1860                                const SDOperand *Ops, unsigned NumOps) {
1861  if (VTList.NumVTs == 1)
1862    return getNode(Opcode, VTList.VTs[0], Ops, NumOps);
1863
1864  switch (Opcode) {
1865  // FIXME: figure out how to safely handle things like
1866  // int foo(int x) { return 1 << (x & 255); }
1867  // int bar() { return foo(256); }
1868#if 0
1869  case ISD::SRA_PARTS:
1870  case ISD::SRL_PARTS:
1871  case ISD::SHL_PARTS:
1872    if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG &&
1873        cast<VTSDNode>(N3.getOperand(1))->getVT() != MVT::i1)
1874      return getNode(Opcode, VT, N1, N2, N3.getOperand(0));
1875    else if (N3.getOpcode() == ISD::AND)
1876      if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N3.getOperand(1))) {
1877        // If the and is only masking out bits that cannot effect the shift,
1878        // eliminate the and.
1879        unsigned NumBits = MVT::getSizeInBits(VT)*2;
1880        if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1)
1881          return getNode(Opcode, VT, N1, N2, N3.getOperand(0));
1882      }
1883    break;
1884#endif
1885  }
1886
1887  // Memoize the node unless it returns a flag.
1888  SDNode *N;
1889  if (VTList.VTs[VTList.NumVTs-1] != MVT::Flag) {
1890    FoldingSetNodeID ID;
1891    AddNodeIDNode(ID, Opcode, VTList, Ops, NumOps);
1892    void *IP = 0;
1893    if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
1894      return SDOperand(E, 0);
1895    if (NumOps == 1)
1896      N = new UnarySDNode(Opcode, VTList, Ops[0]);
1897    else if (NumOps == 2)
1898      N = new BinarySDNode(Opcode, VTList, Ops[0], Ops[1]);
1899    else if (NumOps == 3)
1900      N = new TernarySDNode(Opcode, VTList, Ops[0], Ops[1], Ops[2]);
1901    else
1902      N = new SDNode(Opcode, VTList, Ops, NumOps);
1903    CSEMap.InsertNode(N, IP);
1904  } else {
1905    if (NumOps == 1)
1906      N = new UnarySDNode(Opcode, VTList, Ops[0]);
1907    else if (NumOps == 2)
1908      N = new BinarySDNode(Opcode, VTList, Ops[0], Ops[1]);
1909    else if (NumOps == 3)
1910      N = new TernarySDNode(Opcode, VTList, Ops[0], Ops[1], Ops[2]);
1911    else
1912      N = new SDNode(Opcode, VTList, Ops, NumOps);
1913  }
1914  AllNodes.push_back(N);
1915  return SDOperand(N, 0);
1916}
1917
1918SDVTList SelectionDAG::getVTList(MVT::ValueType VT) {
1919  return makeVTList(SDNode::getValueTypeList(VT), 1);
1920}
1921
1922SDVTList SelectionDAG::getVTList(MVT::ValueType VT1, MVT::ValueType VT2) {
1923  for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
1924       E = VTList.end(); I != E; ++I) {
1925    if (I->size() == 2 && (*I)[0] == VT1 && (*I)[1] == VT2)
1926      return makeVTList(&(*I)[0], 2);
1927  }
1928  std::vector<MVT::ValueType> V;
1929  V.push_back(VT1);
1930  V.push_back(VT2);
1931  VTList.push_front(V);
1932  return makeVTList(&(*VTList.begin())[0], 2);
1933}
1934SDVTList SelectionDAG::getVTList(MVT::ValueType VT1, MVT::ValueType VT2,
1935                                 MVT::ValueType VT3) {
1936  for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
1937       E = VTList.end(); I != E; ++I) {
1938    if (I->size() == 3 && (*I)[0] == VT1 && (*I)[1] == VT2 &&
1939        (*I)[2] == VT3)
1940      return makeVTList(&(*I)[0], 3);
1941  }
1942  std::vector<MVT::ValueType> V;
1943  V.push_back(VT1);
1944  V.push_back(VT2);
1945  V.push_back(VT3);
1946  VTList.push_front(V);
1947  return makeVTList(&(*VTList.begin())[0], 3);
1948}
1949
1950SDVTList SelectionDAG::getVTList(const MVT::ValueType *VTs, unsigned NumVTs) {
1951  switch (NumVTs) {
1952    case 0: assert(0 && "Cannot have nodes without results!");
1953    case 1: return makeVTList(SDNode::getValueTypeList(VTs[0]), 1);
1954    case 2: return getVTList(VTs[0], VTs[1]);
1955    case 3: return getVTList(VTs[0], VTs[1], VTs[2]);
1956    default: break;
1957  }
1958
1959  for (std::list<std::vector<MVT::ValueType> >::iterator I = VTList.begin(),
1960       E = VTList.end(); I != E; ++I) {
1961    if (I->size() != NumVTs || VTs[0] != (*I)[0] || VTs[1] != (*I)[1]) continue;
1962
1963    bool NoMatch = false;
1964    for (unsigned i = 2; i != NumVTs; ++i)
1965      if (VTs[i] != (*I)[i]) {
1966        NoMatch = true;
1967        break;
1968      }
1969    if (!NoMatch)
1970      return makeVTList(&*I->begin(), NumVTs);
1971  }
1972
1973  VTList.push_front(std::vector<MVT::ValueType>(VTs, VTs+NumVTs));
1974  return makeVTList(&*VTList.begin()->begin(), NumVTs);
1975}
1976
1977
1978/// UpdateNodeOperands - *Mutate* the specified node in-place to have the
1979/// specified operands.  If the resultant node already exists in the DAG,
1980/// this does not modify the specified node, instead it returns the node that
1981/// already exists.  If the resultant node does not exist in the DAG, the
1982/// input node is returned.  As a degenerate case, if you specify the same
1983/// input operands as the node already has, the input node is returned.
1984SDOperand SelectionDAG::
1985UpdateNodeOperands(SDOperand InN, SDOperand Op) {
1986  SDNode *N = InN.Val;
1987  assert(N->getNumOperands() == 1 && "Update with wrong number of operands");
1988
1989  // Check to see if there is no change.
1990  if (Op == N->getOperand(0)) return InN;
1991
1992  // See if the modified node already exists.
1993  void *InsertPos = 0;
1994  if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos))
1995    return SDOperand(Existing, InN.ResNo);
1996
1997  // Nope it doesn't.  Remove the node from it's current place in the maps.
1998  if (InsertPos)
1999    RemoveNodeFromCSEMaps(N);
2000
2001  // Now we update the operands.
2002  N->OperandList[0].Val->removeUser(N);
2003  Op.Val->addUser(N);
2004  N->OperandList[0] = Op;
2005
2006  // If this gets put into a CSE map, add it.
2007  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2008  return InN;
2009}
2010
2011SDOperand SelectionDAG::
2012UpdateNodeOperands(SDOperand InN, SDOperand Op1, SDOperand Op2) {
2013  SDNode *N = InN.Val;
2014  assert(N->getNumOperands() == 2 && "Update with wrong number of operands");
2015
2016  // Check to see if there is no change.
2017  if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1))
2018    return InN;   // No operands changed, just return the input node.
2019
2020  // See if the modified node already exists.
2021  void *InsertPos = 0;
2022  if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos))
2023    return SDOperand(Existing, InN.ResNo);
2024
2025  // Nope it doesn't.  Remove the node from it's current place in the maps.
2026  if (InsertPos)
2027    RemoveNodeFromCSEMaps(N);
2028
2029  // Now we update the operands.
2030  if (N->OperandList[0] != Op1) {
2031    N->OperandList[0].Val->removeUser(N);
2032    Op1.Val->addUser(N);
2033    N->OperandList[0] = Op1;
2034  }
2035  if (N->OperandList[1] != Op2) {
2036    N->OperandList[1].Val->removeUser(N);
2037    Op2.Val->addUser(N);
2038    N->OperandList[1] = Op2;
2039  }
2040
2041  // If this gets put into a CSE map, add it.
2042  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2043  return InN;
2044}
2045
2046SDOperand SelectionDAG::
2047UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2, SDOperand Op3) {
2048  SDOperand Ops[] = { Op1, Op2, Op3 };
2049  return UpdateNodeOperands(N, Ops, 3);
2050}
2051
2052SDOperand SelectionDAG::
2053UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2,
2054                   SDOperand Op3, SDOperand Op4) {
2055  SDOperand Ops[] = { Op1, Op2, Op3, Op4 };
2056  return UpdateNodeOperands(N, Ops, 4);
2057}
2058
2059SDOperand SelectionDAG::
2060UpdateNodeOperands(SDOperand N, SDOperand Op1, SDOperand Op2,
2061                   SDOperand Op3, SDOperand Op4, SDOperand Op5) {
2062  SDOperand Ops[] = { Op1, Op2, Op3, Op4, Op5 };
2063  return UpdateNodeOperands(N, Ops, 5);
2064}
2065
2066
2067SDOperand SelectionDAG::
2068UpdateNodeOperands(SDOperand InN, SDOperand *Ops, unsigned NumOps) {
2069  SDNode *N = InN.Val;
2070  assert(N->getNumOperands() == NumOps &&
2071         "Update with wrong number of operands");
2072
2073  // Check to see if there is no change.
2074  bool AnyChange = false;
2075  for (unsigned i = 0; i != NumOps; ++i) {
2076    if (Ops[i] != N->getOperand(i)) {
2077      AnyChange = true;
2078      break;
2079    }
2080  }
2081
2082  // No operands changed, just return the input node.
2083  if (!AnyChange) return InN;
2084
2085  // See if the modified node already exists.
2086  void *InsertPos = 0;
2087  if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, NumOps, InsertPos))
2088    return SDOperand(Existing, InN.ResNo);
2089
2090  // Nope it doesn't.  Remove the node from it's current place in the maps.
2091  if (InsertPos)
2092    RemoveNodeFromCSEMaps(N);
2093
2094  // Now we update the operands.
2095  for (unsigned i = 0; i != NumOps; ++i) {
2096    if (N->OperandList[i] != Ops[i]) {
2097      N->OperandList[i].Val->removeUser(N);
2098      Ops[i].Val->addUser(N);
2099      N->OperandList[i] = Ops[i];
2100    }
2101  }
2102
2103  // If this gets put into a CSE map, add it.
2104  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
2105  return InN;
2106}
2107
2108
2109/// MorphNodeTo - This frees the operands of the current node, resets the
2110/// opcode, types, and operands to the specified value.  This should only be
2111/// used by the SelectionDAG class.
2112void SDNode::MorphNodeTo(unsigned Opc, SDVTList L,
2113                         const SDOperand *Ops, unsigned NumOps) {
2114  NodeType = Opc;
2115  ValueList = L.VTs;
2116  NumValues = L.NumVTs;
2117
2118  // Clear the operands list, updating used nodes to remove this from their
2119  // use list.
2120  for (op_iterator I = op_begin(), E = op_end(); I != E; ++I)
2121    I->Val->removeUser(this);
2122
2123  // If NumOps is larger than the # of operands we currently have, reallocate
2124  // the operand list.
2125  if (NumOps > NumOperands) {
2126    if (OperandsNeedDelete)
2127      delete [] OperandList;
2128    OperandList = new SDOperand[NumOps];
2129    OperandsNeedDelete = true;
2130  }
2131
2132  // Assign the new operands.
2133  NumOperands = NumOps;
2134
2135  for (unsigned i = 0, e = NumOps; i != e; ++i) {
2136    OperandList[i] = Ops[i];
2137    SDNode *N = OperandList[i].Val;
2138    N->Uses.push_back(this);
2139  }
2140}
2141
2142/// SelectNodeTo - These are used for target selectors to *mutate* the
2143/// specified node to have the specified return type, Target opcode, and
2144/// operands.  Note that target opcodes are stored as
2145/// ISD::BUILTIN_OP_END+TargetOpcode in the node opcode field.
2146///
2147/// Note that SelectNodeTo returns the resultant node.  If there is already a
2148/// node of the specified opcode and operands, it returns that node instead of
2149/// the current one.
2150SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2151                                   MVT::ValueType VT) {
2152  SDVTList VTs = getVTList(VT);
2153  FoldingSetNodeID ID;
2154  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, 0, 0);
2155  void *IP = 0;
2156  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2157    return ON;
2158
2159  RemoveNodeFromCSEMaps(N);
2160
2161  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, 0, 0);
2162
2163  CSEMap.InsertNode(N, IP);
2164  return N;
2165}
2166
2167SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2168                                   MVT::ValueType VT, SDOperand Op1) {
2169  // If an identical node already exists, use it.
2170  SDVTList VTs = getVTList(VT);
2171  SDOperand Ops[] = { Op1 };
2172
2173  FoldingSetNodeID ID;
2174  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 1);
2175  void *IP = 0;
2176  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2177    return ON;
2178
2179  RemoveNodeFromCSEMaps(N);
2180  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 1);
2181  CSEMap.InsertNode(N, IP);
2182  return N;
2183}
2184
2185SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2186                                   MVT::ValueType VT, SDOperand Op1,
2187                                   SDOperand Op2) {
2188  // If an identical node already exists, use it.
2189  SDVTList VTs = getVTList(VT);
2190  SDOperand Ops[] = { Op1, Op2 };
2191
2192  FoldingSetNodeID ID;
2193  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
2194  void *IP = 0;
2195  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2196    return ON;
2197
2198  RemoveNodeFromCSEMaps(N);
2199
2200  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
2201
2202  CSEMap.InsertNode(N, IP);   // Memoize the new node.
2203  return N;
2204}
2205
2206SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2207                                   MVT::ValueType VT, SDOperand Op1,
2208                                   SDOperand Op2, SDOperand Op3) {
2209  // If an identical node already exists, use it.
2210  SDVTList VTs = getVTList(VT);
2211  SDOperand Ops[] = { Op1, Op2, Op3 };
2212  FoldingSetNodeID ID;
2213  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
2214  void *IP = 0;
2215  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2216    return ON;
2217
2218  RemoveNodeFromCSEMaps(N);
2219
2220  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
2221
2222  CSEMap.InsertNode(N, IP);   // Memoize the new node.
2223  return N;
2224}
2225
2226SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2227                                   MVT::ValueType VT, const SDOperand *Ops,
2228                                   unsigned NumOps) {
2229  // If an identical node already exists, use it.
2230  SDVTList VTs = getVTList(VT);
2231  FoldingSetNodeID ID;
2232  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, NumOps);
2233  void *IP = 0;
2234  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2235    return ON;
2236
2237  RemoveNodeFromCSEMaps(N);
2238  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, NumOps);
2239
2240  CSEMap.InsertNode(N, IP);   // Memoize the new node.
2241  return N;
2242}
2243
2244SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2245                                   MVT::ValueType VT1, MVT::ValueType VT2,
2246                                   SDOperand Op1, SDOperand Op2) {
2247  SDVTList VTs = getVTList(VT1, VT2);
2248  FoldingSetNodeID ID;
2249  SDOperand Ops[] = { Op1, Op2 };
2250  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
2251  void *IP = 0;
2252  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2253    return ON;
2254
2255  RemoveNodeFromCSEMaps(N);
2256  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 2);
2257  CSEMap.InsertNode(N, IP);   // Memoize the new node.
2258  return N;
2259}
2260
2261SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
2262                                   MVT::ValueType VT1, MVT::ValueType VT2,
2263                                   SDOperand Op1, SDOperand Op2,
2264                                   SDOperand Op3) {
2265  // If an identical node already exists, use it.
2266  SDVTList VTs = getVTList(VT1, VT2);
2267  SDOperand Ops[] = { Op1, Op2, Op3 };
2268  FoldingSetNodeID ID;
2269  AddNodeIDNode(ID, ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
2270  void *IP = 0;
2271  if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
2272    return ON;
2273
2274  RemoveNodeFromCSEMaps(N);
2275
2276  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs, Ops, 3);
2277  CSEMap.InsertNode(N, IP);   // Memoize the new node.
2278  return N;
2279}
2280
2281
2282/// getTargetNode - These are used for target selectors to create a new node
2283/// with specified return type(s), target opcode, and operands.
2284///
2285/// Note that getTargetNode returns the resultant node.  If there is already a
2286/// node of the specified opcode and operands, it returns that node instead of
2287/// the current one.
2288SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT) {
2289  return getNode(ISD::BUILTIN_OP_END+Opcode, VT).Val;
2290}
2291SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
2292                                    SDOperand Op1) {
2293  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1).Val;
2294}
2295SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
2296                                    SDOperand Op1, SDOperand Op2) {
2297  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1, Op2).Val;
2298}
2299SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
2300                                    SDOperand Op1, SDOperand Op2,
2301                                    SDOperand Op3) {
2302  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Op1, Op2, Op3).Val;
2303}
2304SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT,
2305                                    const SDOperand *Ops, unsigned NumOps) {
2306  return getNode(ISD::BUILTIN_OP_END+Opcode, VT, Ops, NumOps).Val;
2307}
2308SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2309                                    MVT::ValueType VT2, SDOperand Op1) {
2310  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
2311  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, &Op1, 1).Val;
2312}
2313SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2314                                    MVT::ValueType VT2, SDOperand Op1,
2315                                    SDOperand Op2) {
2316  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
2317  SDOperand Ops[] = { Op1, Op2 };
2318  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, 2).Val;
2319}
2320SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2321                                    MVT::ValueType VT2, SDOperand Op1,
2322                                    SDOperand Op2, SDOperand Op3) {
2323  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
2324  SDOperand Ops[] = { Op1, Op2, Op3 };
2325  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, 3).Val;
2326}
2327SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2328                                    MVT::ValueType VT2,
2329                                    const SDOperand *Ops, unsigned NumOps) {
2330  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2);
2331  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 2, Ops, NumOps).Val;
2332}
2333SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2334                                    MVT::ValueType VT2, MVT::ValueType VT3,
2335                                    SDOperand Op1, SDOperand Op2) {
2336  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
2337  SDOperand Ops[] = { Op1, Op2 };
2338  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 2).Val;
2339}
2340SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2341                                    MVT::ValueType VT2, MVT::ValueType VT3,
2342                                    SDOperand Op1, SDOperand Op2,
2343                                    SDOperand Op3) {
2344  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
2345  SDOperand Ops[] = { Op1, Op2, Op3 };
2346  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 3).Val;
2347}
2348SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
2349                                    MVT::ValueType VT2, MVT::ValueType VT3,
2350                                    const SDOperand *Ops, unsigned NumOps) {
2351  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
2352  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, NumOps).Val;
2353}
2354
2355/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
2356/// This can cause recursive merging of nodes in the DAG.
2357///
2358/// This version assumes From/To have a single result value.
2359///
2360void SelectionDAG::ReplaceAllUsesWith(SDOperand FromN, SDOperand ToN,
2361                                      std::vector<SDNode*> *Deleted) {
2362  SDNode *From = FromN.Val, *To = ToN.Val;
2363  assert(From->getNumValues() == 1 && To->getNumValues() == 1 &&
2364         "Cannot replace with this method!");
2365  assert(From != To && "Cannot replace uses of with self");
2366
2367  while (!From->use_empty()) {
2368    // Process users until they are all gone.
2369    SDNode *U = *From->use_begin();
2370
2371    // This node is about to morph, remove its old self from the CSE maps.
2372    RemoveNodeFromCSEMaps(U);
2373
2374    for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
2375         I != E; ++I)
2376      if (I->Val == From) {
2377        From->removeUser(U);
2378        I->Val = To;
2379        To->addUser(U);
2380      }
2381
2382    // Now that we have modified U, add it back to the CSE maps.  If it already
2383    // exists there, recursively merge the results together.
2384    if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
2385      ReplaceAllUsesWith(U, Existing, Deleted);
2386      // U is now dead.
2387      if (Deleted) Deleted->push_back(U);
2388      DeleteNodeNotInCSEMaps(U);
2389    }
2390  }
2391}
2392
2393/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
2394/// This can cause recursive merging of nodes in the DAG.
2395///
2396/// This version assumes From/To have matching types and numbers of result
2397/// values.
2398///
2399void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To,
2400                                      std::vector<SDNode*> *Deleted) {
2401  assert(From != To && "Cannot replace uses of with self");
2402  assert(From->getNumValues() == To->getNumValues() &&
2403         "Cannot use this version of ReplaceAllUsesWith!");
2404  if (From->getNumValues() == 1) {  // If possible, use the faster version.
2405    ReplaceAllUsesWith(SDOperand(From, 0), SDOperand(To, 0), Deleted);
2406    return;
2407  }
2408
2409  while (!From->use_empty()) {
2410    // Process users until they are all gone.
2411    SDNode *U = *From->use_begin();
2412
2413    // This node is about to morph, remove its old self from the CSE maps.
2414    RemoveNodeFromCSEMaps(U);
2415
2416    for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
2417         I != E; ++I)
2418      if (I->Val == From) {
2419        From->removeUser(U);
2420        I->Val = To;
2421        To->addUser(U);
2422      }
2423
2424    // Now that we have modified U, add it back to the CSE maps.  If it already
2425    // exists there, recursively merge the results together.
2426    if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
2427      ReplaceAllUsesWith(U, Existing, Deleted);
2428      // U is now dead.
2429      if (Deleted) Deleted->push_back(U);
2430      DeleteNodeNotInCSEMaps(U);
2431    }
2432  }
2433}
2434
2435/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
2436/// This can cause recursive merging of nodes in the DAG.
2437///
2438/// This version can replace From with any result values.  To must match the
2439/// number and types of values returned by From.
2440void SelectionDAG::ReplaceAllUsesWith(SDNode *From,
2441                                      const SDOperand *To,
2442                                      std::vector<SDNode*> *Deleted) {
2443  if (From->getNumValues() == 1 && To[0].Val->getNumValues() == 1) {
2444    // Degenerate case handled above.
2445    ReplaceAllUsesWith(SDOperand(From, 0), To[0], Deleted);
2446    return;
2447  }
2448
2449  while (!From->use_empty()) {
2450    // Process users until they are all gone.
2451    SDNode *U = *From->use_begin();
2452
2453    // This node is about to morph, remove its old self from the CSE maps.
2454    RemoveNodeFromCSEMaps(U);
2455
2456    for (SDOperand *I = U->OperandList, *E = U->OperandList+U->NumOperands;
2457         I != E; ++I)
2458      if (I->Val == From) {
2459        const SDOperand &ToOp = To[I->ResNo];
2460        From->removeUser(U);
2461        *I = ToOp;
2462        ToOp.Val->addUser(U);
2463      }
2464
2465    // Now that we have modified U, add it back to the CSE maps.  If it already
2466    // exists there, recursively merge the results together.
2467    if (SDNode *Existing = AddNonLeafNodeToCSEMaps(U)) {
2468      ReplaceAllUsesWith(U, Existing, Deleted);
2469      // U is now dead.
2470      if (Deleted) Deleted->push_back(U);
2471      DeleteNodeNotInCSEMaps(U);
2472    }
2473  }
2474}
2475
2476/// ReplaceAllUsesOfValueWith - Replace any uses of From with To, leaving
2477/// uses of other values produced by From.Val alone.  The Deleted vector is
2478/// handled the same was as for ReplaceAllUsesWith.
2479void SelectionDAG::ReplaceAllUsesOfValueWith(SDOperand From, SDOperand To,
2480                                             std::vector<SDNode*> &Deleted) {
2481  assert(From != To && "Cannot replace a value with itself");
2482  // Handle the simple, trivial, case efficiently.
2483  if (From.Val->getNumValues() == 1 && To.Val->getNumValues() == 1) {
2484    ReplaceAllUsesWith(From, To, &Deleted);
2485    return;
2486  }
2487
2488  // Get all of the users of From.Val.  We want these in a nice,
2489  // deterministically ordered and uniqued set, so we use a SmallSetVector.
2490  SmallSetVector<SDNode*, 16> Users(From.Val->use_begin(), From.Val->use_end());
2491
2492  while (!Users.empty()) {
2493    // We know that this user uses some value of From.  If it is the right
2494    // value, update it.
2495    SDNode *User = Users.back();
2496    Users.pop_back();
2497
2498    for (SDOperand *Op = User->OperandList,
2499         *E = User->OperandList+User->NumOperands; Op != E; ++Op) {
2500      if (*Op == From) {
2501        // Okay, we know this user needs to be updated.  Remove its old self
2502        // from the CSE maps.
2503        RemoveNodeFromCSEMaps(User);
2504
2505        // Update all operands that match "From".
2506        for (; Op != E; ++Op) {
2507          if (*Op == From) {
2508            From.Val->removeUser(User);
2509            *Op = To;
2510            To.Val->addUser(User);
2511          }
2512        }
2513
2514        // Now that we have modified User, add it back to the CSE maps.  If it
2515        // already exists there, recursively merge the results together.
2516        if (SDNode *Existing = AddNonLeafNodeToCSEMaps(User)) {
2517          unsigned NumDeleted = Deleted.size();
2518          ReplaceAllUsesWith(User, Existing, &Deleted);
2519
2520          // User is now dead.
2521          Deleted.push_back(User);
2522          DeleteNodeNotInCSEMaps(User);
2523
2524          // We have to be careful here, because ReplaceAllUsesWith could have
2525          // deleted a user of From, which means there may be dangling pointers
2526          // in the "Users" setvector.  Scan over the deleted node pointers and
2527          // remove them from the setvector.
2528          for (unsigned i = NumDeleted, e = Deleted.size(); i != e; ++i)
2529            Users.remove(Deleted[i]);
2530        }
2531        break;   // Exit the operand scanning loop.
2532      }
2533    }
2534  }
2535}
2536
2537
2538/// AssignNodeIds - Assign a unique node id for each node in the DAG based on
2539/// their allnodes order. It returns the maximum id.
2540unsigned SelectionDAG::AssignNodeIds() {
2541  unsigned Id = 0;
2542  for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I){
2543    SDNode *N = I;
2544    N->setNodeId(Id++);
2545  }
2546  return Id;
2547}
2548
2549/// AssignTopologicalOrder - Assign a unique node id for each node in the DAG
2550/// based on their topological order. It returns the maximum id and a vector
2551/// of the SDNodes* in assigned order by reference.
2552unsigned SelectionDAG::AssignTopologicalOrder(std::vector<SDNode*> &TopOrder) {
2553  unsigned DAGSize = AllNodes.size();
2554  std::vector<unsigned> InDegree(DAGSize);
2555  std::vector<SDNode*> Sources;
2556
2557  // Use a two pass approach to avoid using a std::map which is slow.
2558  unsigned Id = 0;
2559  for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ++I){
2560    SDNode *N = I;
2561    N->setNodeId(Id++);
2562    unsigned Degree = N->use_size();
2563    InDegree[N->getNodeId()] = Degree;
2564    if (Degree == 0)
2565      Sources.push_back(N);
2566  }
2567
2568  TopOrder.clear();
2569  while (!Sources.empty()) {
2570    SDNode *N = Sources.back();
2571    Sources.pop_back();
2572    TopOrder.push_back(N);
2573    for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
2574      SDNode *P = I->Val;
2575      unsigned Degree = --InDegree[P->getNodeId()];
2576      if (Degree == 0)
2577        Sources.push_back(P);
2578    }
2579  }
2580
2581  // Second pass, assign the actual topological order as node ids.
2582  Id = 0;
2583  for (std::vector<SDNode*>::iterator TI = TopOrder.begin(),TE = TopOrder.end();
2584       TI != TE; ++TI)
2585    (*TI)->setNodeId(Id++);
2586
2587  return Id;
2588}
2589
2590
2591
2592//===----------------------------------------------------------------------===//
2593//                              SDNode Class
2594//===----------------------------------------------------------------------===//
2595
2596// Out-of-line virtual method to give class a home.
2597void SDNode::ANCHOR() {}
2598void UnarySDNode::ANCHOR() {}
2599void BinarySDNode::ANCHOR() {}
2600void TernarySDNode::ANCHOR() {}
2601void HandleSDNode::ANCHOR() {}
2602void StringSDNode::ANCHOR() {}
2603void ConstantSDNode::ANCHOR() {}
2604void ConstantFPSDNode::ANCHOR() {}
2605void GlobalAddressSDNode::ANCHOR() {}
2606void FrameIndexSDNode::ANCHOR() {}
2607void JumpTableSDNode::ANCHOR() {}
2608void ConstantPoolSDNode::ANCHOR() {}
2609void BasicBlockSDNode::ANCHOR() {}
2610void SrcValueSDNode::ANCHOR() {}
2611void RegisterSDNode::ANCHOR() {}
2612void ExternalSymbolSDNode::ANCHOR() {}
2613void CondCodeSDNode::ANCHOR() {}
2614void VTSDNode::ANCHOR() {}
2615void LoadSDNode::ANCHOR() {}
2616void StoreSDNode::ANCHOR() {}
2617
2618HandleSDNode::~HandleSDNode() {
2619  SDVTList VTs = { 0, 0 };
2620  MorphNodeTo(ISD::HANDLENODE, VTs, 0, 0);  // Drops operand uses.
2621}
2622
2623GlobalAddressSDNode::GlobalAddressSDNode(bool isTarget, const GlobalValue *GA,
2624                                         MVT::ValueType VT, int o)
2625  : SDNode(isa<GlobalVariable>(GA) &&
2626           dyn_cast<GlobalVariable>(GA)->isThreadLocal() ?
2627           // Thread Local
2628           (isTarget ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress) :
2629           // Non Thread Local
2630           (isTarget ? ISD::TargetGlobalAddress : ISD::GlobalAddress),
2631           getSDVTList(VT)), Offset(o) {
2632  TheGlobal = const_cast<GlobalValue*>(GA);
2633}
2634
2635/// Profile - Gather unique data for the node.
2636///
2637void SDNode::Profile(FoldingSetNodeID &ID) {
2638  AddNodeIDNode(ID, this);
2639}
2640
2641/// getValueTypeList - Return a pointer to the specified value type.
2642///
2643MVT::ValueType *SDNode::getValueTypeList(MVT::ValueType VT) {
2644  static MVT::ValueType VTs[MVT::LAST_VALUETYPE];
2645  VTs[VT] = VT;
2646  return &VTs[VT];
2647}
2648
2649/// hasNUsesOfValue - Return true if there are exactly NUSES uses of the
2650/// indicated value.  This method ignores uses of other values defined by this
2651/// operation.
2652bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const {
2653  assert(Value < getNumValues() && "Bad value!");
2654
2655  // If there is only one value, this is easy.
2656  if (getNumValues() == 1)
2657    return use_size() == NUses;
2658  if (Uses.size() < NUses) return false;
2659
2660  SDOperand TheValue(const_cast<SDNode *>(this), Value);
2661
2662  SmallPtrSet<SDNode*, 32> UsersHandled;
2663
2664  for (SDNode::use_iterator UI = Uses.begin(), E = Uses.end(); UI != E; ++UI) {
2665    SDNode *User = *UI;
2666    if (User->getNumOperands() == 1 ||
2667        UsersHandled.insert(User))     // First time we've seen this?
2668      for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i)
2669        if (User->getOperand(i) == TheValue) {
2670          if (NUses == 0)
2671            return false;   // too many uses
2672          --NUses;
2673        }
2674  }
2675
2676  // Found exactly the right number of uses?
2677  return NUses == 0;
2678}
2679
2680
2681/// isOnlyUse - Return true if this node is the only use of N.
2682///
2683bool SDNode::isOnlyUse(SDNode *N) const {
2684  bool Seen = false;
2685  for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {
2686    SDNode *User = *I;
2687    if (User == this)
2688      Seen = true;
2689    else
2690      return false;
2691  }
2692
2693  return Seen;
2694}
2695
2696/// isOperand - Return true if this node is an operand of N.
2697///
2698bool SDOperand::isOperand(SDNode *N) const {
2699  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
2700    if (*this == N->getOperand(i))
2701      return true;
2702  return false;
2703}
2704
2705bool SDNode::isOperand(SDNode *N) const {
2706  for (unsigned i = 0, e = N->NumOperands; i != e; ++i)
2707    if (this == N->OperandList[i].Val)
2708      return true;
2709  return false;
2710}
2711
2712static void findPredecessor(SDNode *N, const SDNode *P, bool &found,
2713                            SmallPtrSet<SDNode *, 32> &Visited) {
2714  if (found || !Visited.insert(N))
2715    return;
2716
2717  for (unsigned i = 0, e = N->getNumOperands(); !found && i != e; ++i) {
2718    SDNode *Op = N->getOperand(i).Val;
2719    if (Op == P) {
2720      found = true;
2721      return;
2722    }
2723    findPredecessor(Op, P, found, Visited);
2724  }
2725}
2726
2727/// isPredecessor - Return true if this node is a predecessor of N. This node
2728/// is either an operand of N or it can be reached by recursively traversing
2729/// up the operands.
2730/// NOTE: this is an expensive method. Use it carefully.
2731bool SDNode::isPredecessor(SDNode *N) const {
2732  SmallPtrSet<SDNode *, 32> Visited;
2733  bool found = false;
2734  findPredecessor(N, this, found, Visited);
2735  return found;
2736}
2737
2738uint64_t SDNode::getConstantOperandVal(unsigned Num) const {
2739  assert(Num < NumOperands && "Invalid child # of SDNode!");
2740  return cast<ConstantSDNode>(OperandList[Num])->getValue();
2741}
2742
2743std::string SDNode::getOperationName(const SelectionDAG *G) const {
2744  switch (getOpcode()) {
2745  default:
2746    if (getOpcode() < ISD::BUILTIN_OP_END)
2747      return "<<Unknown DAG Node>>";
2748    else {
2749      if (G) {
2750        if (const TargetInstrInfo *TII = G->getTarget().getInstrInfo())
2751          if (getOpcode()-ISD::BUILTIN_OP_END < TII->getNumOpcodes())
2752            return TII->getName(getOpcode()-ISD::BUILTIN_OP_END);
2753
2754        TargetLowering &TLI = G->getTargetLoweringInfo();
2755        const char *Name =
2756          TLI.getTargetNodeName(getOpcode());
2757        if (Name) return Name;
2758      }
2759
2760      return "<<Unknown Target Node>>";
2761    }
2762
2763  case ISD::PCMARKER:      return "PCMarker";
2764  case ISD::READCYCLECOUNTER: return "ReadCycleCounter";
2765  case ISD::SRCVALUE:      return "SrcValue";
2766  case ISD::EntryToken:    return "EntryToken";
2767  case ISD::TokenFactor:   return "TokenFactor";
2768  case ISD::AssertSext:    return "AssertSext";
2769  case ISD::AssertZext:    return "AssertZext";
2770
2771  case ISD::STRING:        return "String";
2772  case ISD::BasicBlock:    return "BasicBlock";
2773  case ISD::VALUETYPE:     return "ValueType";
2774  case ISD::Register:      return "Register";
2775
2776  case ISD::Constant:      return "Constant";
2777  case ISD::ConstantFP:    return "ConstantFP";
2778  case ISD::GlobalAddress: return "GlobalAddress";
2779  case ISD::GlobalTLSAddress: return "GlobalTLSAddress";
2780  case ISD::FrameIndex:    return "FrameIndex";
2781  case ISD::JumpTable:     return "JumpTable";
2782  case ISD::GLOBAL_OFFSET_TABLE: return "GLOBAL_OFFSET_TABLE";
2783  case ISD::RETURNADDR: return "RETURNADDR";
2784  case ISD::FRAMEADDR: return "FRAMEADDR";
2785  case ISD::EXCEPTIONADDR: return "EXCEPTIONADDR";
2786  case ISD::EHSELECTION: return "EHSELECTION";
2787  case ISD::ConstantPool:  return "ConstantPool";
2788  case ISD::ExternalSymbol: return "ExternalSymbol";
2789  case ISD::INTRINSIC_WO_CHAIN: {
2790    unsigned IID = cast<ConstantSDNode>(getOperand(0))->getValue();
2791    return Intrinsic::getName((Intrinsic::ID)IID);
2792  }
2793  case ISD::INTRINSIC_VOID:
2794  case ISD::INTRINSIC_W_CHAIN: {
2795    unsigned IID = cast<ConstantSDNode>(getOperand(1))->getValue();
2796    return Intrinsic::getName((Intrinsic::ID)IID);
2797  }
2798
2799  case ISD::BUILD_VECTOR:   return "BUILD_VECTOR";
2800  case ISD::TargetConstant: return "TargetConstant";
2801  case ISD::TargetConstantFP:return "TargetConstantFP";
2802  case ISD::TargetGlobalAddress: return "TargetGlobalAddress";
2803  case ISD::TargetGlobalTLSAddress: return "TargetGlobalTLSAddress";
2804  case ISD::TargetFrameIndex: return "TargetFrameIndex";
2805  case ISD::TargetJumpTable:  return "TargetJumpTable";
2806  case ISD::TargetConstantPool:  return "TargetConstantPool";
2807  case ISD::TargetExternalSymbol: return "TargetExternalSymbol";
2808
2809  case ISD::CopyToReg:     return "CopyToReg";
2810  case ISD::CopyFromReg:   return "CopyFromReg";
2811  case ISD::UNDEF:         return "undef";
2812  case ISD::MERGE_VALUES:  return "mergevalues";
2813  case ISD::INLINEASM:     return "inlineasm";
2814  case ISD::LABEL:         return "label";
2815  case ISD::HANDLENODE:    return "handlenode";
2816  case ISD::FORMAL_ARGUMENTS: return "formal_arguments";
2817  case ISD::CALL:          return "call";
2818
2819  // Unary operators
2820  case ISD::FABS:   return "fabs";
2821  case ISD::FNEG:   return "fneg";
2822  case ISD::FSQRT:  return "fsqrt";
2823  case ISD::FSIN:   return "fsin";
2824  case ISD::FCOS:   return "fcos";
2825  case ISD::FPOWI:  return "fpowi";
2826
2827  // Binary operators
2828  case ISD::ADD:    return "add";
2829  case ISD::SUB:    return "sub";
2830  case ISD::MUL:    return "mul";
2831  case ISD::MULHU:  return "mulhu";
2832  case ISD::MULHS:  return "mulhs";
2833  case ISD::SDIV:   return "sdiv";
2834  case ISD::UDIV:   return "udiv";
2835  case ISD::SREM:   return "srem";
2836  case ISD::UREM:   return "urem";
2837  case ISD::AND:    return "and";
2838  case ISD::OR:     return "or";
2839  case ISD::XOR:    return "xor";
2840  case ISD::SHL:    return "shl";
2841  case ISD::SRA:    return "sra";
2842  case ISD::SRL:    return "srl";
2843  case ISD::ROTL:   return "rotl";
2844  case ISD::ROTR:   return "rotr";
2845  case ISD::FADD:   return "fadd";
2846  case ISD::FSUB:   return "fsub";
2847  case ISD::FMUL:   return "fmul";
2848  case ISD::FDIV:   return "fdiv";
2849  case ISD::FREM:   return "frem";
2850  case ISD::FCOPYSIGN: return "fcopysign";
2851  case ISD::VADD:   return "vadd";
2852  case ISD::VSUB:   return "vsub";
2853  case ISD::VMUL:   return "vmul";
2854  case ISD::VSDIV:  return "vsdiv";
2855  case ISD::VUDIV:  return "vudiv";
2856  case ISD::VAND:   return "vand";
2857  case ISD::VOR:    return "vor";
2858  case ISD::VXOR:   return "vxor";
2859
2860  case ISD::SETCC:       return "setcc";
2861  case ISD::SELECT:      return "select";
2862  case ISD::SELECT_CC:   return "select_cc";
2863  case ISD::VSELECT:     return "vselect";
2864  case ISD::INSERT_VECTOR_ELT:   return "insert_vector_elt";
2865  case ISD::VINSERT_VECTOR_ELT:  return "vinsert_vector_elt";
2866  case ISD::EXTRACT_VECTOR_ELT:  return "extract_vector_elt";
2867  case ISD::VEXTRACT_VECTOR_ELT: return "vextract_vector_elt";
2868  case ISD::VCONCAT_VECTORS:     return "vconcat_vectors";
2869  case ISD::VEXTRACT_SUBVECTOR:  return "vextract_subvector";
2870  case ISD::SCALAR_TO_VECTOR:    return "scalar_to_vector";
2871  case ISD::VBUILD_VECTOR:       return "vbuild_vector";
2872  case ISD::VECTOR_SHUFFLE:      return "vector_shuffle";
2873  case ISD::VVECTOR_SHUFFLE:     return "vvector_shuffle";
2874  case ISD::VBIT_CONVERT:        return "vbit_convert";
2875  case ISD::CARRY_FALSE:         return "carry_false";
2876  case ISD::ADDC:        return "addc";
2877  case ISD::ADDE:        return "adde";
2878  case ISD::SUBC:        return "subc";
2879  case ISD::SUBE:        return "sube";
2880  case ISD::SHL_PARTS:   return "shl_parts";
2881  case ISD::SRA_PARTS:   return "sra_parts";
2882  case ISD::SRL_PARTS:   return "srl_parts";
2883
2884  // Conversion operators.
2885  case ISD::SIGN_EXTEND: return "sign_extend";
2886  case ISD::ZERO_EXTEND: return "zero_extend";
2887  case ISD::ANY_EXTEND:  return "any_extend";
2888  case ISD::SIGN_EXTEND_INREG: return "sign_extend_inreg";
2889  case ISD::TRUNCATE:    return "truncate";
2890  case ISD::FP_ROUND:    return "fp_round";
2891  case ISD::FP_ROUND_INREG: return "fp_round_inreg";
2892  case ISD::FP_EXTEND:   return "fp_extend";
2893
2894  case ISD::SINT_TO_FP:  return "sint_to_fp";
2895  case ISD::UINT_TO_FP:  return "uint_to_fp";
2896  case ISD::FP_TO_SINT:  return "fp_to_sint";
2897  case ISD::FP_TO_UINT:  return "fp_to_uint";
2898  case ISD::BIT_CONVERT: return "bit_convert";
2899
2900    // Control flow instructions
2901  case ISD::BR:      return "br";
2902  case ISD::BRIND:   return "brind";
2903  case ISD::BR_JT:   return "br_jt";
2904  case ISD::BRCOND:  return "brcond";
2905  case ISD::BR_CC:   return "br_cc";
2906  case ISD::RET:     return "ret";
2907  case ISD::CALLSEQ_START:  return "callseq_start";
2908  case ISD::CALLSEQ_END:    return "callseq_end";
2909
2910    // Other operators
2911  case ISD::LOAD:               return "load";
2912  case ISD::STORE:              return "store";
2913  case ISD::VLOAD:              return "vload";
2914  case ISD::VAARG:              return "vaarg";
2915  case ISD::VACOPY:             return "vacopy";
2916  case ISD::VAEND:              return "vaend";
2917  case ISD::VASTART:            return "vastart";
2918  case ISD::DYNAMIC_STACKALLOC: return "dynamic_stackalloc";
2919  case ISD::EXTRACT_ELEMENT:    return "extract_element";
2920  case ISD::BUILD_PAIR:         return "build_pair";
2921  case ISD::STACKSAVE:          return "stacksave";
2922  case ISD::STACKRESTORE:       return "stackrestore";
2923
2924  // Block memory operations.
2925  case ISD::MEMSET:  return "memset";
2926  case ISD::MEMCPY:  return "memcpy";
2927  case ISD::MEMMOVE: return "memmove";
2928
2929  // Bit manipulation
2930  case ISD::BSWAP:   return "bswap";
2931  case ISD::CTPOP:   return "ctpop";
2932  case ISD::CTTZ:    return "cttz";
2933  case ISD::CTLZ:    return "ctlz";
2934
2935  // Debug info
2936  case ISD::LOCATION: return "location";
2937  case ISD::DEBUG_LOC: return "debug_loc";
2938
2939  case ISD::CONDCODE:
2940    switch (cast<CondCodeSDNode>(this)->get()) {
2941    default: assert(0 && "Unknown setcc condition!");
2942    case ISD::SETOEQ:  return "setoeq";
2943    case ISD::SETOGT:  return "setogt";
2944    case ISD::SETOGE:  return "setoge";
2945    case ISD::SETOLT:  return "setolt";
2946    case ISD::SETOLE:  return "setole";
2947    case ISD::SETONE:  return "setone";
2948
2949    case ISD::SETO:    return "seto";
2950    case ISD::SETUO:   return "setuo";
2951    case ISD::SETUEQ:  return "setue";
2952    case ISD::SETUGT:  return "setugt";
2953    case ISD::SETUGE:  return "setuge";
2954    case ISD::SETULT:  return "setult";
2955    case ISD::SETULE:  return "setule";
2956    case ISD::SETUNE:  return "setune";
2957
2958    case ISD::SETEQ:   return "seteq";
2959    case ISD::SETGT:   return "setgt";
2960    case ISD::SETGE:   return "setge";
2961    case ISD::SETLT:   return "setlt";
2962    case ISD::SETLE:   return "setle";
2963    case ISD::SETNE:   return "setne";
2964    }
2965  }
2966}
2967
2968const char *SDNode::getIndexedModeName(ISD::MemIndexedMode AM) {
2969  switch (AM) {
2970  default:
2971    return "";
2972  case ISD::PRE_INC:
2973    return "<pre-inc>";
2974  case ISD::PRE_DEC:
2975    return "<pre-dec>";
2976  case ISD::POST_INC:
2977    return "<post-inc>";
2978  case ISD::POST_DEC:
2979    return "<post-dec>";
2980  }
2981}
2982
2983void SDNode::dump() const { dump(0); }
2984void SDNode::dump(const SelectionDAG *G) const {
2985  cerr << (void*)this << ": ";
2986
2987  for (unsigned i = 0, e = getNumValues(); i != e; ++i) {
2988    if (i) cerr << ",";
2989    if (getValueType(i) == MVT::Other)
2990      cerr << "ch";
2991    else
2992      cerr << MVT::getValueTypeString(getValueType(i));
2993  }
2994  cerr << " = " << getOperationName(G);
2995
2996  cerr << " ";
2997  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
2998    if (i) cerr << ", ";
2999    cerr << (void*)getOperand(i).Val;
3000    if (unsigned RN = getOperand(i).ResNo)
3001      cerr << ":" << RN;
3002  }
3003
3004  if (const ConstantSDNode *CSDN = dyn_cast<ConstantSDNode>(this)) {
3005    cerr << "<" << CSDN->getValue() << ">";
3006  } else if (const ConstantFPSDNode *CSDN = dyn_cast<ConstantFPSDNode>(this)) {
3007    cerr << "<" << CSDN->getValue() << ">";
3008  } else if (const GlobalAddressSDNode *GADN =
3009             dyn_cast<GlobalAddressSDNode>(this)) {
3010    int offset = GADN->getOffset();
3011    cerr << "<";
3012    WriteAsOperand(*cerr.stream(), GADN->getGlobal()) << ">";
3013    if (offset > 0)
3014      cerr << " + " << offset;
3015    else
3016      cerr << " " << offset;
3017  } else if (const FrameIndexSDNode *FIDN = dyn_cast<FrameIndexSDNode>(this)) {
3018    cerr << "<" << FIDN->getIndex() << ">";
3019  } else if (const JumpTableSDNode *JTDN = dyn_cast<JumpTableSDNode>(this)) {
3020    cerr << "<" << JTDN->getIndex() << ">";
3021  } else if (const ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(this)){
3022    int offset = CP->getOffset();
3023    if (CP->isMachineConstantPoolEntry())
3024      cerr << "<" << *CP->getMachineCPVal() << ">";
3025    else
3026      cerr << "<" << *CP->getConstVal() << ">";
3027    if (offset > 0)
3028      cerr << " + " << offset;
3029    else
3030      cerr << " " << offset;
3031  } else if (const BasicBlockSDNode *BBDN = dyn_cast<BasicBlockSDNode>(this)) {
3032    cerr << "<";
3033    const Value *LBB = (const Value*)BBDN->getBasicBlock()->getBasicBlock();
3034    if (LBB)
3035      cerr << LBB->getName() << " ";
3036    cerr << (const void*)BBDN->getBasicBlock() << ">";
3037  } else if (const RegisterSDNode *R = dyn_cast<RegisterSDNode>(this)) {
3038    if (G && R->getReg() && MRegisterInfo::isPhysicalRegister(R->getReg())) {
3039      cerr << " " <<G->getTarget().getRegisterInfo()->getName(R->getReg());
3040    } else {
3041      cerr << " #" << R->getReg();
3042    }
3043  } else if (const ExternalSymbolSDNode *ES =
3044             dyn_cast<ExternalSymbolSDNode>(this)) {
3045    cerr << "'" << ES->getSymbol() << "'";
3046  } else if (const SrcValueSDNode *M = dyn_cast<SrcValueSDNode>(this)) {
3047    if (M->getValue())
3048      cerr << "<" << M->getValue() << ":" << M->getOffset() << ">";
3049    else
3050      cerr << "<null:" << M->getOffset() << ">";
3051  } else if (const VTSDNode *N = dyn_cast<VTSDNode>(this)) {
3052    cerr << ":" << MVT::getValueTypeString(N->getVT());
3053  } else if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(this)) {
3054    bool doExt = true;
3055    switch (LD->getExtensionType()) {
3056    default: doExt = false; break;
3057    case ISD::EXTLOAD:
3058      cerr << " <anyext ";
3059      break;
3060    case ISD::SEXTLOAD:
3061      cerr << " <sext ";
3062      break;
3063    case ISD::ZEXTLOAD:
3064      cerr << " <zext ";
3065      break;
3066    }
3067    if (doExt)
3068      cerr << MVT::getValueTypeString(LD->getLoadedVT()) << ">";
3069
3070    const char *AM = getIndexedModeName(LD->getAddressingMode());
3071    if (AM != "")
3072      cerr << " " << AM;
3073  } else if (const StoreSDNode *ST = dyn_cast<StoreSDNode>(this)) {
3074    if (ST->isTruncatingStore())
3075      cerr << " <trunc "
3076           << MVT::getValueTypeString(ST->getStoredVT()) << ">";
3077
3078    const char *AM = getIndexedModeName(ST->getAddressingMode());
3079    if (AM != "")
3080      cerr << " " << AM;
3081  }
3082}
3083
3084static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {
3085  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
3086    if (N->getOperand(i).Val->hasOneUse())
3087      DumpNodes(N->getOperand(i).Val, indent+2, G);
3088    else
3089      cerr << "\n" << std::string(indent+2, ' ')
3090           << (void*)N->getOperand(i).Val << ": <multiple use>";
3091
3092
3093  cerr << "\n" << std::string(indent, ' ');
3094  N->dump(G);
3095}
3096
3097void SelectionDAG::dump() const {
3098  cerr << "SelectionDAG has " << AllNodes.size() << " nodes:";
3099  std::vector<const SDNode*> Nodes;
3100  for (allnodes_const_iterator I = allnodes_begin(), E = allnodes_end();
3101       I != E; ++I)
3102    Nodes.push_back(I);
3103
3104  std::sort(Nodes.begin(), Nodes.end());
3105
3106  for (unsigned i = 0, e = Nodes.size(); i != e; ++i) {
3107    if (!Nodes[i]->hasOneUse() && Nodes[i] != getRoot().Val)
3108      DumpNodes(Nodes[i], 2, this);
3109  }
3110
3111  if (getRoot().Val) DumpNodes(getRoot().Val, 2, this);
3112
3113  cerr << "\n\n";
3114}
3115
3116const Type *ConstantPoolSDNode::getType() const {
3117  if (isMachineConstantPoolEntry())
3118    return Val.MachineCPVal->getType();
3119  return Val.ConstVal->getType();
3120}
3121