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