LegalizeDAG.cpp revision ef12057737229452c17983faa20857dba441ef05
1//===-- LegalizeDAG.cpp - Implement SelectionDAG::Legalize ----------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the SelectionDAG::Legalize method.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/CodeGen/SelectionDAG.h"
15#include "llvm/CodeGen/MachineFunction.h"
16#include "llvm/CodeGen/MachineFrameInfo.h"
17#include "llvm/CodeGen/MachineJumpTableInfo.h"
18#include "llvm/CodeGen/MachineModuleInfo.h"
19#include "llvm/CodeGen/PseudoSourceValue.h"
20#include "llvm/Target/TargetFrameInfo.h"
21#include "llvm/Target/TargetLowering.h"
22#include "llvm/Target/TargetData.h"
23#include "llvm/Target/TargetMachine.h"
24#include "llvm/Target/TargetOptions.h"
25#include "llvm/CallingConv.h"
26#include "llvm/Constants.h"
27#include "llvm/DerivedTypes.h"
28#include "llvm/Support/CommandLine.h"
29#include "llvm/Support/Compiler.h"
30#include "llvm/Support/MathExtras.h"
31#include "llvm/ADT/DenseMap.h"
32#include "llvm/ADT/SmallVector.h"
33#include "llvm/ADT/SmallPtrSet.h"
34#include <map>
35using namespace llvm;
36
37#ifndef NDEBUG
38static cl::opt<bool>
39ViewLegalizeDAGs("view-legalize-dags", cl::Hidden,
40                 cl::desc("Pop up a window to show dags before legalize"));
41#else
42static const bool ViewLegalizeDAGs = 0;
43#endif
44
45//===----------------------------------------------------------------------===//
46/// SelectionDAGLegalize - This takes an arbitrary SelectionDAG as input and
47/// hacks on it until the target machine can handle it.  This involves
48/// eliminating value sizes the machine cannot handle (promoting small sizes to
49/// large sizes or splitting up large values into small values) as well as
50/// eliminating operations the machine cannot handle.
51///
52/// This code also does a small amount of optimization and recognition of idioms
53/// as part of its processing.  For example, if a target does not support a
54/// 'setcc' instruction efficiently, but does support 'brcc' instruction, this
55/// will attempt merge setcc and brc instructions into brcc's.
56///
57namespace {
58class VISIBILITY_HIDDEN SelectionDAGLegalize {
59  TargetLowering &TLI;
60  SelectionDAG &DAG;
61
62  // Libcall insertion helpers.
63
64  /// LastCALLSEQ_END - This keeps track of the CALLSEQ_END node that has been
65  /// legalized.  We use this to ensure that calls are properly serialized
66  /// against each other, including inserted libcalls.
67  SDOperand LastCALLSEQ_END;
68
69  /// IsLegalizingCall - This member is used *only* for purposes of providing
70  /// helpful assertions that a libcall isn't created while another call is
71  /// being legalized (which could lead to non-serialized call sequences).
72  bool IsLegalizingCall;
73
74  enum LegalizeAction {
75    Legal,      // The target natively supports this operation.
76    Promote,    // This operation should be executed in a larger type.
77    Expand      // Try to expand this to other ops, otherwise use a libcall.
78  };
79
80  /// ValueTypeActions - This is a bitvector that contains two bits for each
81  /// value type, where the two bits correspond to the LegalizeAction enum.
82  /// This can be queried with "getTypeAction(VT)".
83  TargetLowering::ValueTypeActionImpl ValueTypeActions;
84
85  /// LegalizedNodes - For nodes that are of legal width, and that have more
86  /// than one use, this map indicates what regularized operand to use.  This
87  /// allows us to avoid legalizing the same thing more than once.
88  DenseMap<SDOperand, SDOperand> LegalizedNodes;
89
90  /// PromotedNodes - For nodes that are below legal width, and that have more
91  /// than one use, this map indicates what promoted value to use.  This allows
92  /// us to avoid promoting the same thing more than once.
93  DenseMap<SDOperand, SDOperand> PromotedNodes;
94
95  /// ExpandedNodes - For nodes that need to be expanded this map indicates
96  /// which which operands are the expanded version of the input.  This allows
97  /// us to avoid expanding the same node more than once.
98  DenseMap<SDOperand, std::pair<SDOperand, SDOperand> > ExpandedNodes;
99
100  /// SplitNodes - For vector nodes that need to be split, this map indicates
101  /// which which operands are the split version of the input.  This allows us
102  /// to avoid splitting the same node more than once.
103  std::map<SDOperand, std::pair<SDOperand, SDOperand> > SplitNodes;
104
105  /// ScalarizedNodes - For nodes that need to be converted from vector types to
106  /// scalar types, this contains the mapping of ones we have already
107  /// processed to the result.
108  std::map<SDOperand, SDOperand> ScalarizedNodes;
109
110  void AddLegalizedOperand(SDOperand From, SDOperand To) {
111    LegalizedNodes.insert(std::make_pair(From, To));
112    // If someone requests legalization of the new node, return itself.
113    if (From != To)
114      LegalizedNodes.insert(std::make_pair(To, To));
115  }
116  void AddPromotedOperand(SDOperand From, SDOperand To) {
117    bool isNew = PromotedNodes.insert(std::make_pair(From, To));
118    assert(isNew && "Got into the map somehow?");
119    // If someone requests legalization of the new node, return itself.
120    LegalizedNodes.insert(std::make_pair(To, To));
121  }
122
123public:
124
125  SelectionDAGLegalize(SelectionDAG &DAG);
126
127  /// getTypeAction - Return how we should legalize values of this type, either
128  /// it is already legal or we need to expand it into multiple registers of
129  /// smaller integer type, or we need to promote it to a larger type.
130  LegalizeAction getTypeAction(MVT::ValueType VT) const {
131    return (LegalizeAction)ValueTypeActions.getTypeAction(VT);
132  }
133
134  /// isTypeLegal - Return true if this type is legal on this target.
135  ///
136  bool isTypeLegal(MVT::ValueType VT) const {
137    return getTypeAction(VT) == Legal;
138  }
139
140  void LegalizeDAG();
141
142private:
143  /// HandleOp - Legalize, Promote, or Expand the specified operand as
144  /// appropriate for its type.
145  void HandleOp(SDOperand Op);
146
147  /// LegalizeOp - We know that the specified value has a legal type.
148  /// Recursively ensure that the operands have legal types, then return the
149  /// result.
150  SDOperand LegalizeOp(SDOperand O);
151
152  /// UnrollVectorOp - We know that the given vector has a legal type, however
153  /// the operation it performs is not legal and is an operation that we have
154  /// no way of lowering.  "Unroll" the vector, splitting out the scalars and
155  /// operating on each element individually.
156  SDOperand UnrollVectorOp(SDOperand O);
157
158  /// PromoteOp - Given an operation that produces a value in an invalid type,
159  /// promote it to compute the value into a larger type.  The produced value
160  /// will have the correct bits for the low portion of the register, but no
161  /// guarantee is made about the top bits: it may be zero, sign-extended, or
162  /// garbage.
163  SDOperand PromoteOp(SDOperand O);
164
165  /// ExpandOp - Expand the specified SDOperand into its two component pieces
166  /// Lo&Hi.  Note that the Op MUST be an expanded type.  As a result of this,
167  /// the LegalizeNodes map is filled in for any results that are not expanded,
168  /// the ExpandedNodes map is filled in for any results that are expanded, and
169  /// the Lo/Hi values are returned.   This applies to integer types and Vector
170  /// types.
171  void ExpandOp(SDOperand O, SDOperand &Lo, SDOperand &Hi);
172
173  /// SplitVectorOp - Given an operand of vector type, break it down into
174  /// two smaller values.
175  void SplitVectorOp(SDOperand O, SDOperand &Lo, SDOperand &Hi);
176
177  /// ScalarizeVectorOp - Given an operand of single-element vector type
178  /// (e.g. v1f32), convert it into the equivalent operation that returns a
179  /// scalar (e.g. f32) value.
180  SDOperand ScalarizeVectorOp(SDOperand O);
181
182  /// isShuffleLegal - Return true if a vector shuffle is legal with the
183  /// specified mask and type.  Targets can specify exactly which masks they
184  /// support and the code generator is tasked with not creating illegal masks.
185  ///
186  /// Note that this will also return true for shuffles that are promoted to a
187  /// different type.
188  ///
189  /// If this is a legal shuffle, this method returns the (possibly promoted)
190  /// build_vector Mask.  If it's not a legal shuffle, it returns null.
191  SDNode *isShuffleLegal(MVT::ValueType VT, SDOperand Mask) const;
192
193  bool LegalizeAllNodesNotLeadingTo(SDNode *N, SDNode *Dest,
194                                    SmallPtrSet<SDNode*, 32> &NodesLeadingTo);
195
196  void LegalizeSetCCOperands(SDOperand &LHS, SDOperand &RHS, SDOperand &CC);
197
198  SDOperand ExpandLibCall(const char *Name, SDNode *Node, bool isSigned,
199                          SDOperand &Hi);
200  SDOperand ExpandIntToFP(bool isSigned, MVT::ValueType DestTy,
201                          SDOperand Source);
202
203  SDOperand EmitStackConvert(SDOperand SrcOp, MVT::ValueType SlotVT,
204                             MVT::ValueType DestVT);
205  SDOperand ExpandBUILD_VECTOR(SDNode *Node);
206  SDOperand ExpandSCALAR_TO_VECTOR(SDNode *Node);
207  SDOperand ExpandLegalINT_TO_FP(bool isSigned,
208                                 SDOperand LegalOp,
209                                 MVT::ValueType DestVT);
210  SDOperand PromoteLegalINT_TO_FP(SDOperand LegalOp, MVT::ValueType DestVT,
211                                  bool isSigned);
212  SDOperand PromoteLegalFP_TO_INT(SDOperand LegalOp, MVT::ValueType DestVT,
213                                  bool isSigned);
214
215  SDOperand ExpandBSWAP(SDOperand Op);
216  SDOperand ExpandBitCount(unsigned Opc, SDOperand Op);
217  bool ExpandShift(unsigned Opc, SDOperand Op, SDOperand Amt,
218                   SDOperand &Lo, SDOperand &Hi);
219  void ExpandShiftParts(unsigned NodeOp, SDOperand Op, SDOperand Amt,
220                        SDOperand &Lo, SDOperand &Hi);
221
222  SDOperand ExpandEXTRACT_SUBVECTOR(SDOperand Op);
223  SDOperand ExpandEXTRACT_VECTOR_ELT(SDOperand Op);
224};
225}
226
227/// isVectorShuffleLegal - Return true if a vector shuffle is legal with the
228/// specified mask and type.  Targets can specify exactly which masks they
229/// support and the code generator is tasked with not creating illegal masks.
230///
231/// Note that this will also return true for shuffles that are promoted to a
232/// different type.
233SDNode *SelectionDAGLegalize::isShuffleLegal(MVT::ValueType VT,
234                                             SDOperand Mask) const {
235  switch (TLI.getOperationAction(ISD::VECTOR_SHUFFLE, VT)) {
236  default: return 0;
237  case TargetLowering::Legal:
238  case TargetLowering::Custom:
239    break;
240  case TargetLowering::Promote: {
241    // If this is promoted to a different type, convert the shuffle mask and
242    // ask if it is legal in the promoted type!
243    MVT::ValueType NVT = TLI.getTypeToPromoteTo(ISD::VECTOR_SHUFFLE, VT);
244
245    // If we changed # elements, change the shuffle mask.
246    unsigned NumEltsGrowth =
247      MVT::getVectorNumElements(NVT) / MVT::getVectorNumElements(VT);
248    assert(NumEltsGrowth && "Cannot promote to vector type with fewer elts!");
249    if (NumEltsGrowth > 1) {
250      // Renumber the elements.
251      SmallVector<SDOperand, 8> Ops;
252      for (unsigned i = 0, e = Mask.getNumOperands(); i != e; ++i) {
253        SDOperand InOp = Mask.getOperand(i);
254        for (unsigned j = 0; j != NumEltsGrowth; ++j) {
255          if (InOp.getOpcode() == ISD::UNDEF)
256            Ops.push_back(DAG.getNode(ISD::UNDEF, MVT::i32));
257          else {
258            unsigned InEltNo = cast<ConstantSDNode>(InOp)->getValue();
259            Ops.push_back(DAG.getConstant(InEltNo*NumEltsGrowth+j, MVT::i32));
260          }
261        }
262      }
263      Mask = DAG.getNode(ISD::BUILD_VECTOR, NVT, &Ops[0], Ops.size());
264    }
265    VT = NVT;
266    break;
267  }
268  }
269  return TLI.isShuffleMaskLegal(Mask, VT) ? Mask.Val : 0;
270}
271
272SelectionDAGLegalize::SelectionDAGLegalize(SelectionDAG &dag)
273  : TLI(dag.getTargetLoweringInfo()), DAG(dag),
274    ValueTypeActions(TLI.getValueTypeActions()) {
275  assert(MVT::LAST_VALUETYPE <= 32 &&
276         "Too many value types for ValueTypeActions to hold!");
277}
278
279/// ComputeTopDownOrdering - Compute a top-down ordering of the dag, where Order
280/// contains all of a nodes operands before it contains the node.
281static void ComputeTopDownOrdering(SelectionDAG &DAG,
282                                   SmallVector<SDNode*, 64> &Order) {
283
284  DenseMap<SDNode*, unsigned> Visited;
285  std::vector<SDNode*> Worklist;
286  Worklist.reserve(128);
287
288  // Compute ordering from all of the leaves in the graphs, those (like the
289  // entry node) that have no operands.
290  for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(),
291       E = DAG.allnodes_end(); I != E; ++I) {
292    if (I->getNumOperands() == 0) {
293      Visited[I] = 0 - 1U;
294      Worklist.push_back(I);
295    }
296  }
297
298  while (!Worklist.empty()) {
299    SDNode *N = Worklist.back();
300    Worklist.pop_back();
301
302    if (++Visited[N] != N->getNumOperands())
303      continue;  // Haven't visited all operands yet
304
305    Order.push_back(N);
306
307    // Now that we have N in, add anything that uses it if all of their operands
308    // are now done.
309    for (SDNode::use_iterator UI = N->use_begin(), E = N->use_end();
310         UI != E; ++UI)
311      Worklist.push_back(*UI);
312  }
313
314  assert(Order.size() == Visited.size() &&
315         Order.size() ==
316         (unsigned)std::distance(DAG.allnodes_begin(), DAG.allnodes_end()) &&
317         "Error: DAG is cyclic!");
318}
319
320
321void SelectionDAGLegalize::LegalizeDAG() {
322  LastCALLSEQ_END = DAG.getEntryNode();
323  IsLegalizingCall = false;
324
325  // The legalize process is inherently a bottom-up recursive process (users
326  // legalize their uses before themselves).  Given infinite stack space, we
327  // could just start legalizing on the root and traverse the whole graph.  In
328  // practice however, this causes us to run out of stack space on large basic
329  // blocks.  To avoid this problem, compute an ordering of the nodes where each
330  // node is only legalized after all of its operands are legalized.
331  SmallVector<SDNode*, 64> Order;
332  ComputeTopDownOrdering(DAG, Order);
333
334  for (unsigned i = 0, e = Order.size(); i != e; ++i)
335    HandleOp(SDOperand(Order[i], 0));
336
337  // Finally, it's possible the root changed.  Get the new root.
338  SDOperand OldRoot = DAG.getRoot();
339  assert(LegalizedNodes.count(OldRoot) && "Root didn't get legalized?");
340  DAG.setRoot(LegalizedNodes[OldRoot]);
341
342  ExpandedNodes.clear();
343  LegalizedNodes.clear();
344  PromotedNodes.clear();
345  SplitNodes.clear();
346  ScalarizedNodes.clear();
347
348  // Remove dead nodes now.
349  DAG.RemoveDeadNodes();
350}
351
352
353/// FindCallEndFromCallStart - Given a chained node that is part of a call
354/// sequence, find the CALLSEQ_END node that terminates the call sequence.
355static SDNode *FindCallEndFromCallStart(SDNode *Node) {
356  if (Node->getOpcode() == ISD::CALLSEQ_END)
357    return Node;
358  if (Node->use_empty())
359    return 0;   // No CallSeqEnd
360
361  // The chain is usually at the end.
362  SDOperand TheChain(Node, Node->getNumValues()-1);
363  if (TheChain.getValueType() != MVT::Other) {
364    // Sometimes it's at the beginning.
365    TheChain = SDOperand(Node, 0);
366    if (TheChain.getValueType() != MVT::Other) {
367      // Otherwise, hunt for it.
368      for (unsigned i = 1, e = Node->getNumValues(); i != e; ++i)
369        if (Node->getValueType(i) == MVT::Other) {
370          TheChain = SDOperand(Node, i);
371          break;
372        }
373
374      // Otherwise, we walked into a node without a chain.
375      if (TheChain.getValueType() != MVT::Other)
376        return 0;
377    }
378  }
379
380  for (SDNode::use_iterator UI = Node->use_begin(),
381       E = Node->use_end(); UI != E; ++UI) {
382
383    // Make sure to only follow users of our token chain.
384    SDNode *User = *UI;
385    for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i)
386      if (User->getOperand(i) == TheChain)
387        if (SDNode *Result = FindCallEndFromCallStart(User))
388          return Result;
389  }
390  return 0;
391}
392
393/// FindCallStartFromCallEnd - Given a chained node that is part of a call
394/// sequence, find the CALLSEQ_START node that initiates the call sequence.
395static SDNode *FindCallStartFromCallEnd(SDNode *Node) {
396  assert(Node && "Didn't find callseq_start for a call??");
397  if (Node->getOpcode() == ISD::CALLSEQ_START) return Node;
398
399  assert(Node->getOperand(0).getValueType() == MVT::Other &&
400         "Node doesn't have a token chain argument!");
401  return FindCallStartFromCallEnd(Node->getOperand(0).Val);
402}
403
404/// LegalizeAllNodesNotLeadingTo - Recursively walk the uses of N, looking to
405/// see if any uses can reach Dest.  If no dest operands can get to dest,
406/// legalize them, legalize ourself, and return false, otherwise, return true.
407///
408/// Keep track of the nodes we fine that actually do lead to Dest in
409/// NodesLeadingTo.  This avoids retraversing them exponential number of times.
410///
411bool SelectionDAGLegalize::LegalizeAllNodesNotLeadingTo(SDNode *N, SDNode *Dest,
412                                     SmallPtrSet<SDNode*, 32> &NodesLeadingTo) {
413  if (N == Dest) return true;  // N certainly leads to Dest :)
414
415  // If we've already processed this node and it does lead to Dest, there is no
416  // need to reprocess it.
417  if (NodesLeadingTo.count(N)) return true;
418
419  // If the first result of this node has been already legalized, then it cannot
420  // reach N.
421  switch (getTypeAction(N->getValueType(0))) {
422  case Legal:
423    if (LegalizedNodes.count(SDOperand(N, 0))) return false;
424    break;
425  case Promote:
426    if (PromotedNodes.count(SDOperand(N, 0))) return false;
427    break;
428  case Expand:
429    if (ExpandedNodes.count(SDOperand(N, 0))) return false;
430    break;
431  }
432
433  // Okay, this node has not already been legalized.  Check and legalize all
434  // operands.  If none lead to Dest, then we can legalize this node.
435  bool OperandsLeadToDest = false;
436  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
437    OperandsLeadToDest |=     // If an operand leads to Dest, so do we.
438      LegalizeAllNodesNotLeadingTo(N->getOperand(i).Val, Dest, NodesLeadingTo);
439
440  if (OperandsLeadToDest) {
441    NodesLeadingTo.insert(N);
442    return true;
443  }
444
445  // Okay, this node looks safe, legalize it and return false.
446  HandleOp(SDOperand(N, 0));
447  return false;
448}
449
450/// HandleOp - Legalize, Promote, or Expand the specified operand as
451/// appropriate for its type.
452void SelectionDAGLegalize::HandleOp(SDOperand Op) {
453  MVT::ValueType VT = Op.getValueType();
454  switch (getTypeAction(VT)) {
455  default: assert(0 && "Bad type action!");
456  case Legal:   (void)LegalizeOp(Op); break;
457  case Promote: (void)PromoteOp(Op); break;
458  case Expand:
459    if (!MVT::isVector(VT)) {
460      // If this is an illegal scalar, expand it into its two component
461      // pieces.
462      SDOperand X, Y;
463      if (Op.getOpcode() == ISD::TargetConstant)
464        break;  // Allow illegal target nodes.
465      ExpandOp(Op, X, Y);
466    } else if (MVT::getVectorNumElements(VT) == 1) {
467      // If this is an illegal single element vector, convert it to a
468      // scalar operation.
469      (void)ScalarizeVectorOp(Op);
470    } else {
471      // Otherwise, this is an illegal multiple element vector.
472      // Split it in half and legalize both parts.
473      SDOperand X, Y;
474      SplitVectorOp(Op, X, Y);
475    }
476    break;
477  }
478}
479
480/// ExpandConstantFP - Expands the ConstantFP node to an integer constant or
481/// a load from the constant pool.
482static SDOperand ExpandConstantFP(ConstantFPSDNode *CFP, bool UseCP,
483                                  SelectionDAG &DAG, TargetLowering &TLI) {
484  bool Extend = false;
485
486  // If a FP immediate is precise when represented as a float and if the
487  // target can do an extending load from float to double, we put it into
488  // the constant pool as a float, even if it's is statically typed as a
489  // double.
490  MVT::ValueType VT = CFP->getValueType(0);
491  ConstantFP *LLVMC = ConstantFP::get(MVT::getTypeForValueType(VT),
492                                      CFP->getValueAPF());
493  if (!UseCP) {
494    if (VT!=MVT::f64 && VT!=MVT::f32)
495      assert(0 && "Invalid type expansion");
496    return DAG.getConstant(LLVMC->getValueAPF().convertToAPInt().getZExtValue(),
497                           (VT == MVT::f64) ? MVT::i64 : MVT::i32);
498  }
499
500  MVT::ValueType OrigVT = VT;
501  MVT::ValueType SVT = VT;
502  while (SVT != MVT::f32) {
503    SVT = (unsigned)SVT - 1;
504    if (CFP->isValueValidForType(SVT, CFP->getValueAPF()) &&
505        // Only do this if the target has a native EXTLOAD instruction from
506        // smaller type.
507        TLI.isLoadXLegal(ISD::EXTLOAD, SVT)) {
508      const Type *SType = MVT::getTypeForValueType(SVT);
509      LLVMC = cast<ConstantFP>(ConstantExpr::getFPTrunc(LLVMC, SType));
510      VT = SVT;
511      Extend = true;
512    }
513  }
514
515  SDOperand CPIdx = DAG.getConstantPool(LLVMC, TLI.getPointerTy());
516  if (Extend)
517    return DAG.getExtLoad(ISD::EXTLOAD, OrigVT, DAG.getEntryNode(),
518                          CPIdx, PseudoSourceValue::getConstantPool(),
519                          0, VT);
520  return DAG.getLoad(OrigVT, DAG.getEntryNode(), CPIdx,
521                     PseudoSourceValue::getConstantPool(), 0);
522}
523
524
525/// ExpandFCOPYSIGNToBitwiseOps - Expands fcopysign to a series of bitwise
526/// operations.
527static
528SDOperand ExpandFCOPYSIGNToBitwiseOps(SDNode *Node, MVT::ValueType NVT,
529                                      SelectionDAG &DAG, TargetLowering &TLI) {
530  MVT::ValueType VT = Node->getValueType(0);
531  MVT::ValueType SrcVT = Node->getOperand(1).getValueType();
532  assert((SrcVT == MVT::f32 || SrcVT == MVT::f64) &&
533         "fcopysign expansion only supported for f32 and f64");
534  MVT::ValueType SrcNVT = (SrcVT == MVT::f64) ? MVT::i64 : MVT::i32;
535
536  // First get the sign bit of second operand.
537  SDOperand Mask1 = (SrcVT == MVT::f64)
538    ? DAG.getConstantFP(BitsToDouble(1ULL << 63), SrcVT)
539    : DAG.getConstantFP(BitsToFloat(1U << 31), SrcVT);
540  Mask1 = DAG.getNode(ISD::BIT_CONVERT, SrcNVT, Mask1);
541  SDOperand SignBit= DAG.getNode(ISD::BIT_CONVERT, SrcNVT, Node->getOperand(1));
542  SignBit = DAG.getNode(ISD::AND, SrcNVT, SignBit, Mask1);
543  // Shift right or sign-extend it if the two operands have different types.
544  int SizeDiff = MVT::getSizeInBits(SrcNVT) - MVT::getSizeInBits(NVT);
545  if (SizeDiff > 0) {
546    SignBit = DAG.getNode(ISD::SRL, SrcNVT, SignBit,
547                          DAG.getConstant(SizeDiff, TLI.getShiftAmountTy()));
548    SignBit = DAG.getNode(ISD::TRUNCATE, NVT, SignBit);
549  } else if (SizeDiff < 0)
550    SignBit = DAG.getNode(ISD::SIGN_EXTEND, NVT, SignBit);
551
552  // Clear the sign bit of first operand.
553  SDOperand Mask2 = (VT == MVT::f64)
554    ? DAG.getConstantFP(BitsToDouble(~(1ULL << 63)), VT)
555    : DAG.getConstantFP(BitsToFloat(~(1U << 31)), VT);
556  Mask2 = DAG.getNode(ISD::BIT_CONVERT, NVT, Mask2);
557  SDOperand Result = DAG.getNode(ISD::BIT_CONVERT, NVT, Node->getOperand(0));
558  Result = DAG.getNode(ISD::AND, NVT, Result, Mask2);
559
560  // Or the value with the sign bit.
561  Result = DAG.getNode(ISD::OR, NVT, Result, SignBit);
562  return Result;
563}
564
565/// ExpandUnalignedStore - Expands an unaligned store to 2 half-size stores.
566static
567SDOperand ExpandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG,
568                               TargetLowering &TLI) {
569  SDOperand Chain = ST->getChain();
570  SDOperand Ptr = ST->getBasePtr();
571  SDOperand Val = ST->getValue();
572  MVT::ValueType VT = Val.getValueType();
573  int Alignment = ST->getAlignment();
574  int SVOffset = ST->getSrcValueOffset();
575  if (MVT::isFloatingPoint(ST->getMemoryVT()) ||
576      MVT::isVector(ST->getMemoryVT())) {
577    // Expand to a bitconvert of the value to the integer type of the
578    // same size, then a (misaligned) int store.
579    MVT::ValueType intVT;
580    if (MVT::is128BitVector(VT) || VT == MVT::ppcf128 || VT == MVT::f128)
581      intVT = MVT::i128;
582    else if (MVT::is64BitVector(VT) || VT==MVT::f64)
583      intVT = MVT::i64;
584    else if (VT==MVT::f32)
585      intVT = MVT::i32;
586    else
587      assert(0 && "Unaligned store of unsupported type");
588
589    SDOperand Result = DAG.getNode(ISD::BIT_CONVERT, intVT, Val);
590    return DAG.getStore(Chain, Result, Ptr, ST->getSrcValue(),
591                        SVOffset, ST->isVolatile(), Alignment);
592  }
593  assert(MVT::isInteger(ST->getMemoryVT()) &&
594         !MVT::isVector(ST->getMemoryVT()) &&
595         "Unaligned store of unknown type.");
596  // Get the half-size VT
597  MVT::ValueType NewStoredVT = ST->getMemoryVT() - 1;
598  int NumBits = MVT::getSizeInBits(NewStoredVT);
599  int IncrementSize = NumBits / 8;
600
601  // Divide the stored value in two parts.
602  SDOperand ShiftAmount = DAG.getConstant(NumBits, TLI.getShiftAmountTy());
603  SDOperand Lo = Val;
604  SDOperand Hi = DAG.getNode(ISD::SRL, VT, Val, ShiftAmount);
605
606  // Store the two parts
607  SDOperand Store1, Store2;
608  Store1 = DAG.getTruncStore(Chain, TLI.isLittleEndian()?Lo:Hi, Ptr,
609                             ST->getSrcValue(), SVOffset, NewStoredVT,
610                             ST->isVolatile(), Alignment);
611  Ptr = DAG.getNode(ISD::ADD, Ptr.getValueType(), Ptr,
612                    DAG.getConstant(IncrementSize, TLI.getPointerTy()));
613  Alignment = MinAlign(Alignment, IncrementSize);
614  Store2 = DAG.getTruncStore(Chain, TLI.isLittleEndian()?Hi:Lo, Ptr,
615                             ST->getSrcValue(), SVOffset + IncrementSize,
616                             NewStoredVT, ST->isVolatile(), Alignment);
617
618  return DAG.getNode(ISD::TokenFactor, MVT::Other, Store1, Store2);
619}
620
621/// ExpandUnalignedLoad - Expands an unaligned load to 2 half-size loads.
622static
623SDOperand ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
624                              TargetLowering &TLI) {
625  int SVOffset = LD->getSrcValueOffset();
626  SDOperand Chain = LD->getChain();
627  SDOperand Ptr = LD->getBasePtr();
628  MVT::ValueType VT = LD->getValueType(0);
629  MVT::ValueType LoadedVT = LD->getMemoryVT();
630  if (MVT::isFloatingPoint(VT) || MVT::isVector(VT)) {
631    // Expand to a (misaligned) integer load of the same size,
632    // then bitconvert to floating point or vector.
633    MVT::ValueType intVT;
634    if (MVT::is128BitVector(LoadedVT) ||
635         LoadedVT == MVT::ppcf128 || LoadedVT == MVT::f128)
636      intVT = MVT::i128;
637    else if (MVT::is64BitVector(LoadedVT) || LoadedVT == MVT::f64)
638      intVT = MVT::i64;
639    else if (LoadedVT == MVT::f32)
640      intVT = MVT::i32;
641    else
642      assert(0 && "Unaligned load of unsupported type");
643
644    SDOperand newLoad = DAG.getLoad(intVT, Chain, Ptr, LD->getSrcValue(),
645                                    SVOffset, LD->isVolatile(),
646                                    LD->getAlignment());
647    SDOperand Result = DAG.getNode(ISD::BIT_CONVERT, LoadedVT, newLoad);
648    if (MVT::isFloatingPoint(VT) && LoadedVT != VT)
649      Result = DAG.getNode(ISD::FP_EXTEND, VT, Result);
650
651    SDOperand Ops[] = { Result, Chain };
652    return DAG.getNode(ISD::MERGE_VALUES, DAG.getVTList(VT, MVT::Other),
653                       Ops, 2);
654  }
655  assert(MVT::isInteger(LoadedVT) && !MVT::isVector(LoadedVT) &&
656         "Unaligned load of unsupported type.");
657
658  // Compute the new VT that is half the size of the old one.  This is an
659  // integer MVT.
660  unsigned NumBits = MVT::getSizeInBits(LoadedVT);
661  MVT::ValueType NewLoadedVT;
662  NewLoadedVT = MVT::getIntegerType(NumBits/2);
663  NumBits >>= 1;
664
665  unsigned Alignment = LD->getAlignment();
666  unsigned IncrementSize = NumBits / 8;
667  ISD::LoadExtType HiExtType = LD->getExtensionType();
668
669  // If the original load is NON_EXTLOAD, the hi part load must be ZEXTLOAD.
670  if (HiExtType == ISD::NON_EXTLOAD)
671    HiExtType = ISD::ZEXTLOAD;
672
673  // Load the value in two parts
674  SDOperand Lo, Hi;
675  if (TLI.isLittleEndian()) {
676    Lo = DAG.getExtLoad(ISD::ZEXTLOAD, VT, Chain, Ptr, LD->getSrcValue(),
677                        SVOffset, NewLoadedVT, LD->isVolatile(), Alignment);
678    Ptr = DAG.getNode(ISD::ADD, Ptr.getValueType(), Ptr,
679                      DAG.getConstant(IncrementSize, TLI.getPointerTy()));
680    Hi = DAG.getExtLoad(HiExtType, VT, Chain, Ptr, LD->getSrcValue(),
681                        SVOffset + IncrementSize, NewLoadedVT, LD->isVolatile(),
682                        MinAlign(Alignment, IncrementSize));
683  } else {
684    Hi = DAG.getExtLoad(HiExtType, VT, Chain, Ptr, LD->getSrcValue(), SVOffset,
685                        NewLoadedVT,LD->isVolatile(), Alignment);
686    Ptr = DAG.getNode(ISD::ADD, Ptr.getValueType(), Ptr,
687                      DAG.getConstant(IncrementSize, TLI.getPointerTy()));
688    Lo = DAG.getExtLoad(ISD::ZEXTLOAD, VT, Chain, Ptr, LD->getSrcValue(),
689                        SVOffset + IncrementSize, NewLoadedVT, LD->isVolatile(),
690                        MinAlign(Alignment, IncrementSize));
691  }
692
693  // aggregate the two parts
694  SDOperand ShiftAmount = DAG.getConstant(NumBits, TLI.getShiftAmountTy());
695  SDOperand Result = DAG.getNode(ISD::SHL, VT, Hi, ShiftAmount);
696  Result = DAG.getNode(ISD::OR, VT, Result, Lo);
697
698  SDOperand TF = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo.getValue(1),
699                             Hi.getValue(1));
700
701  SDOperand Ops[] = { Result, TF };
702  return DAG.getNode(ISD::MERGE_VALUES, DAG.getVTList(VT, MVT::Other), Ops, 2);
703}
704
705/// UnrollVectorOp - We know that the given vector has a legal type, however
706/// the operation it performs is not legal and is an operation that we have
707/// no way of lowering.  "Unroll" the vector, splitting out the scalars and
708/// operating on each element individually.
709SDOperand SelectionDAGLegalize::UnrollVectorOp(SDOperand Op) {
710  MVT::ValueType VT = Op.getValueType();
711  assert(isTypeLegal(VT) &&
712         "Caller should expand or promote operands that are not legal!");
713  assert(Op.Val->getNumValues() == 1 &&
714         "Can't unroll a vector with multiple results!");
715  unsigned NE = MVT::getVectorNumElements(VT);
716  MVT::ValueType EltVT = MVT::getVectorElementType(VT);
717
718  SmallVector<SDOperand, 8> Scalars;
719  SmallVector<SDOperand, 4> Operands(Op.getNumOperands());
720  for (unsigned i = 0; i != NE; ++i) {
721    for (unsigned j = 0; j != Op.getNumOperands(); ++j) {
722      SDOperand Operand = Op.getOperand(j);
723      MVT::ValueType OperandVT = Operand.getValueType();
724      if (MVT::isVector(OperandVT)) {
725        // A vector operand; extract a single element.
726        MVT::ValueType OperandEltVT = MVT::getVectorElementType(OperandVT);
727        Operands[j] = DAG.getNode(ISD::EXTRACT_VECTOR_ELT,
728                                  OperandEltVT,
729                                  Operand,
730                                  DAG.getConstant(i, MVT::i32));
731      } else {
732        // A scalar operand; just use it as is.
733        Operands[j] = Operand;
734      }
735    }
736    Scalars.push_back(DAG.getNode(Op.getOpcode(), EltVT,
737                                  &Operands[0], Operands.size()));
738  }
739
740  return DAG.getNode(ISD::BUILD_VECTOR, VT, &Scalars[0], Scalars.size());
741}
742
743/// GetFPLibCall - Return the right libcall for the given floating point type.
744static RTLIB::Libcall GetFPLibCall(MVT::ValueType VT,
745                                   RTLIB::Libcall Call_F32,
746                                   RTLIB::Libcall Call_F64,
747                                   RTLIB::Libcall Call_F80,
748                                   RTLIB::Libcall Call_PPCF128) {
749  return
750    VT == MVT::f32 ? Call_F32 :
751    VT == MVT::f64 ? Call_F64 :
752    VT == MVT::f80 ? Call_F80 :
753    VT == MVT::ppcf128 ? Call_PPCF128 :
754    RTLIB::UNKNOWN_LIBCALL;
755}
756
757/// LegalizeOp - We know that the specified value has a legal type, and
758/// that its operands are legal.  Now ensure that the operation itself
759/// is legal, recursively ensuring that the operands' operations remain
760/// legal.
761SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
762  if (Op.getOpcode() == ISD::TargetConstant) // Allow illegal target nodes.
763    return Op;
764
765  assert(isTypeLegal(Op.getValueType()) &&
766         "Caller should expand or promote operands that are not legal!");
767  SDNode *Node = Op.Val;
768
769  // If this operation defines any values that cannot be represented in a
770  // register on this target, make sure to expand or promote them.
771  if (Node->getNumValues() > 1) {
772    for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
773      if (getTypeAction(Node->getValueType(i)) != Legal) {
774        HandleOp(Op.getValue(i));
775        assert(LegalizedNodes.count(Op) &&
776               "Handling didn't add legal operands!");
777        return LegalizedNodes[Op];
778      }
779  }
780
781  // Note that LegalizeOp may be reentered even from single-use nodes, which
782  // means that we always must cache transformed nodes.
783  DenseMap<SDOperand, SDOperand>::iterator I = LegalizedNodes.find(Op);
784  if (I != LegalizedNodes.end()) return I->second;
785
786  SDOperand Tmp1, Tmp2, Tmp3, Tmp4;
787  SDOperand Result = Op;
788  bool isCustom = false;
789
790  switch (Node->getOpcode()) {
791  case ISD::FrameIndex:
792  case ISD::EntryToken:
793  case ISD::Register:
794  case ISD::BasicBlock:
795  case ISD::TargetFrameIndex:
796  case ISD::TargetJumpTable:
797  case ISD::TargetConstant:
798  case ISD::TargetConstantFP:
799  case ISD::TargetConstantPool:
800  case ISD::TargetGlobalAddress:
801  case ISD::TargetGlobalTLSAddress:
802  case ISD::TargetExternalSymbol:
803  case ISD::VALUETYPE:
804  case ISD::SRCVALUE:
805  case ISD::MEMOPERAND:
806  case ISD::STRING:
807  case ISD::CONDCODE:
808    // Primitives must all be legal.
809    assert(TLI.isOperationLegal(Node->getOpcode(), Node->getValueType(0)) &&
810           "This must be legal!");
811    break;
812  default:
813    if (Node->getOpcode() >= ISD::BUILTIN_OP_END) {
814      // If this is a target node, legalize it by legalizing the operands then
815      // passing it through.
816      SmallVector<SDOperand, 8> Ops;
817      for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i)
818        Ops.push_back(LegalizeOp(Node->getOperand(i)));
819
820      Result = DAG.UpdateNodeOperands(Result.getValue(0), &Ops[0], Ops.size());
821
822      for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
823        AddLegalizedOperand(Op.getValue(i), Result.getValue(i));
824      return Result.getValue(Op.ResNo);
825    }
826    // Otherwise this is an unhandled builtin node.  splat.
827#ifndef NDEBUG
828    cerr << "NODE: "; Node->dump(&DAG); cerr << "\n";
829#endif
830    assert(0 && "Do not know how to legalize this operator!");
831    abort();
832  case ISD::GLOBAL_OFFSET_TABLE:
833  case ISD::GlobalAddress:
834  case ISD::GlobalTLSAddress:
835  case ISD::ExternalSymbol:
836  case ISD::ConstantPool:
837  case ISD::JumpTable: // Nothing to do.
838    switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) {
839    default: assert(0 && "This action is not supported yet!");
840    case TargetLowering::Custom:
841      Tmp1 = TLI.LowerOperation(Op, DAG);
842      if (Tmp1.Val) Result = Tmp1;
843      // FALLTHROUGH if the target doesn't want to lower this op after all.
844    case TargetLowering::Legal:
845      break;
846    }
847    break;
848  case ISD::FRAMEADDR:
849  case ISD::RETURNADDR:
850    // The only option for these nodes is to custom lower them.  If the target
851    // does not custom lower them, then return zero.
852    Tmp1 = TLI.LowerOperation(Op, DAG);
853    if (Tmp1.Val)
854      Result = Tmp1;
855    else
856      Result = DAG.getConstant(0, TLI.getPointerTy());
857    break;
858  case ISD::FRAME_TO_ARGS_OFFSET: {
859    MVT::ValueType VT = Node->getValueType(0);
860    switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
861    default: assert(0 && "This action is not supported yet!");
862    case TargetLowering::Custom:
863      Result = TLI.LowerOperation(Op, DAG);
864      if (Result.Val) break;
865      // Fall Thru
866    case TargetLowering::Legal:
867      Result = DAG.getConstant(0, VT);
868      break;
869    }
870    }
871    break;
872  case ISD::EXCEPTIONADDR: {
873    Tmp1 = LegalizeOp(Node->getOperand(0));
874    MVT::ValueType VT = Node->getValueType(0);
875    switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
876    default: assert(0 && "This action is not supported yet!");
877    case TargetLowering::Expand: {
878        unsigned Reg = TLI.getExceptionAddressRegister();
879        Result = DAG.getCopyFromReg(Tmp1, Reg, VT);
880      }
881      break;
882    case TargetLowering::Custom:
883      Result = TLI.LowerOperation(Op, DAG);
884      if (Result.Val) break;
885      // Fall Thru
886    case TargetLowering::Legal: {
887      SDOperand Ops[] = { DAG.getConstant(0, VT), Tmp1 };
888      Result = DAG.getNode(ISD::MERGE_VALUES, DAG.getVTList(VT, MVT::Other),
889                           Ops, 2);
890      break;
891    }
892    }
893    }
894    if (Result.Val->getNumValues() == 1) break;
895
896    assert(Result.Val->getNumValues() == 2 &&
897           "Cannot return more than two values!");
898
899    // Since we produced two values, make sure to remember that we
900    // legalized both of them.
901    Tmp1 = LegalizeOp(Result);
902    Tmp2 = LegalizeOp(Result.getValue(1));
903    AddLegalizedOperand(Op.getValue(0), Tmp1);
904    AddLegalizedOperand(Op.getValue(1), Tmp2);
905    return Op.ResNo ? Tmp2 : Tmp1;
906  case ISD::EHSELECTION: {
907    Tmp1 = LegalizeOp(Node->getOperand(0));
908    Tmp2 = LegalizeOp(Node->getOperand(1));
909    MVT::ValueType VT = Node->getValueType(0);
910    switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
911    default: assert(0 && "This action is not supported yet!");
912    case TargetLowering::Expand: {
913        unsigned Reg = TLI.getExceptionSelectorRegister();
914        Result = DAG.getCopyFromReg(Tmp2, Reg, VT);
915      }
916      break;
917    case TargetLowering::Custom:
918      Result = TLI.LowerOperation(Op, DAG);
919      if (Result.Val) break;
920      // Fall Thru
921    case TargetLowering::Legal: {
922      SDOperand Ops[] = { DAG.getConstant(0, VT), Tmp2 };
923      Result = DAG.getNode(ISD::MERGE_VALUES, DAG.getVTList(VT, MVT::Other),
924                           Ops, 2);
925      break;
926    }
927    }
928    }
929    if (Result.Val->getNumValues() == 1) break;
930
931    assert(Result.Val->getNumValues() == 2 &&
932           "Cannot return more than two values!");
933
934    // Since we produced two values, make sure to remember that we
935    // legalized both of them.
936    Tmp1 = LegalizeOp(Result);
937    Tmp2 = LegalizeOp(Result.getValue(1));
938    AddLegalizedOperand(Op.getValue(0), Tmp1);
939    AddLegalizedOperand(Op.getValue(1), Tmp2);
940    return Op.ResNo ? Tmp2 : Tmp1;
941  case ISD::EH_RETURN: {
942    MVT::ValueType VT = Node->getValueType(0);
943    // The only "good" option for this node is to custom lower it.
944    switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
945    default: assert(0 && "This action is not supported at all!");
946    case TargetLowering::Custom:
947      Result = TLI.LowerOperation(Op, DAG);
948      if (Result.Val) break;
949      // Fall Thru
950    case TargetLowering::Legal:
951      // Target does not know, how to lower this, lower to noop
952      Result = LegalizeOp(Node->getOperand(0));
953      break;
954    }
955    }
956    break;
957  case ISD::AssertSext:
958  case ISD::AssertZext:
959    Tmp1 = LegalizeOp(Node->getOperand(0));
960    Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1));
961    break;
962  case ISD::MERGE_VALUES:
963    // Legalize eliminates MERGE_VALUES nodes.
964    Result = Node->getOperand(Op.ResNo);
965    break;
966  case ISD::CopyFromReg:
967    Tmp1 = LegalizeOp(Node->getOperand(0));
968    Result = Op.getValue(0);
969    if (Node->getNumValues() == 2) {
970      Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1));
971    } else {
972      assert(Node->getNumValues() == 3 && "Invalid copyfromreg!");
973      if (Node->getNumOperands() == 3) {
974        Tmp2 = LegalizeOp(Node->getOperand(2));
975        Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1),Tmp2);
976      } else {
977        Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1));
978      }
979      AddLegalizedOperand(Op.getValue(2), Result.getValue(2));
980    }
981    // Since CopyFromReg produces two values, make sure to remember that we
982    // legalized both of them.
983    AddLegalizedOperand(Op.getValue(0), Result);
984    AddLegalizedOperand(Op.getValue(1), Result.getValue(1));
985    return Result.getValue(Op.ResNo);
986  case ISD::UNDEF: {
987    MVT::ValueType VT = Op.getValueType();
988    switch (TLI.getOperationAction(ISD::UNDEF, VT)) {
989    default: assert(0 && "This action is not supported yet!");
990    case TargetLowering::Expand:
991      if (MVT::isInteger(VT))
992        Result = DAG.getConstant(0, VT);
993      else if (MVT::isFloatingPoint(VT))
994        Result = DAG.getConstantFP(APFloat(APInt(MVT::getSizeInBits(VT), 0)),
995                                   VT);
996      else
997        assert(0 && "Unknown value type!");
998      break;
999    case TargetLowering::Legal:
1000      break;
1001    }
1002    break;
1003  }
1004
1005  case ISD::INTRINSIC_W_CHAIN:
1006  case ISD::INTRINSIC_WO_CHAIN:
1007  case ISD::INTRINSIC_VOID: {
1008    SmallVector<SDOperand, 8> Ops;
1009    for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i)
1010      Ops.push_back(LegalizeOp(Node->getOperand(i)));
1011    Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
1012
1013    // Allow the target to custom lower its intrinsics if it wants to.
1014    if (TLI.getOperationAction(Node->getOpcode(), MVT::Other) ==
1015        TargetLowering::Custom) {
1016      Tmp3 = TLI.LowerOperation(Result, DAG);
1017      if (Tmp3.Val) Result = Tmp3;
1018    }
1019
1020    if (Result.Val->getNumValues() == 1) break;
1021
1022    // Must have return value and chain result.
1023    assert(Result.Val->getNumValues() == 2 &&
1024           "Cannot return more than two values!");
1025
1026    // Since loads produce two values, make sure to remember that we
1027    // legalized both of them.
1028    AddLegalizedOperand(SDOperand(Node, 0), Result.getValue(0));
1029    AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1));
1030    return Result.getValue(Op.ResNo);
1031  }
1032
1033  case ISD::LOCATION:
1034    assert(Node->getNumOperands() == 5 && "Invalid LOCATION node!");
1035    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the input chain.
1036
1037    switch (TLI.getOperationAction(ISD::LOCATION, MVT::Other)) {
1038    case TargetLowering::Promote:
1039    default: assert(0 && "This action is not supported yet!");
1040    case TargetLowering::Expand: {
1041      MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
1042      bool useDEBUG_LOC = TLI.isOperationLegal(ISD::DEBUG_LOC, MVT::Other);
1043      bool useLABEL = TLI.isOperationLegal(ISD::LABEL, MVT::Other);
1044
1045      if (MMI && (useDEBUG_LOC || useLABEL)) {
1046        const std::string &FName =
1047          cast<StringSDNode>(Node->getOperand(3))->getValue();
1048        const std::string &DirName =
1049          cast<StringSDNode>(Node->getOperand(4))->getValue();
1050        unsigned SrcFile = MMI->RecordSource(DirName, FName);
1051
1052        SmallVector<SDOperand, 8> Ops;
1053        Ops.push_back(Tmp1);  // chain
1054        SDOperand LineOp = Node->getOperand(1);
1055        SDOperand ColOp = Node->getOperand(2);
1056
1057        if (useDEBUG_LOC) {
1058          Ops.push_back(LineOp);  // line #
1059          Ops.push_back(ColOp);  // col #
1060          Ops.push_back(DAG.getConstant(SrcFile, MVT::i32));  // source file id
1061          Result = DAG.getNode(ISD::DEBUG_LOC, MVT::Other, &Ops[0], Ops.size());
1062        } else {
1063          unsigned Line = cast<ConstantSDNode>(LineOp)->getValue();
1064          unsigned Col = cast<ConstantSDNode>(ColOp)->getValue();
1065          unsigned ID = MMI->RecordSourceLine(Line, Col, SrcFile);
1066          Ops.push_back(DAG.getConstant(ID, MVT::i32));
1067          Ops.push_back(DAG.getConstant(0, MVT::i32)); // a debug label
1068          Result = DAG.getNode(ISD::LABEL, MVT::Other, &Ops[0], Ops.size());
1069        }
1070      } else {
1071        Result = Tmp1;  // chain
1072      }
1073      break;
1074    }
1075    case TargetLowering::Legal:
1076      if (Tmp1 != Node->getOperand(0) ||
1077          getTypeAction(Node->getOperand(1).getValueType()) == Promote) {
1078        SmallVector<SDOperand, 8> Ops;
1079        Ops.push_back(Tmp1);
1080        if (getTypeAction(Node->getOperand(1).getValueType()) == Legal) {
1081          Ops.push_back(Node->getOperand(1));  // line # must be legal.
1082          Ops.push_back(Node->getOperand(2));  // col # must be legal.
1083        } else {
1084          // Otherwise promote them.
1085          Ops.push_back(PromoteOp(Node->getOperand(1)));
1086          Ops.push_back(PromoteOp(Node->getOperand(2)));
1087        }
1088        Ops.push_back(Node->getOperand(3));  // filename must be legal.
1089        Ops.push_back(Node->getOperand(4));  // working dir # must be legal.
1090        Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
1091      }
1092      break;
1093    }
1094    break;
1095
1096  case ISD::DECLARE:
1097    assert(Node->getNumOperands() == 3 && "Invalid DECLARE node!");
1098    switch (TLI.getOperationAction(ISD::DECLARE, MVT::Other)) {
1099    default: assert(0 && "This action is not supported yet!");
1100    case TargetLowering::Legal:
1101      Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1102      Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the address.
1103      Tmp3 = LegalizeOp(Node->getOperand(2));  // Legalize the variable.
1104      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
1105      break;
1106    case TargetLowering::Expand:
1107      Result = LegalizeOp(Node->getOperand(0));
1108      break;
1109    }
1110    break;
1111
1112  case ISD::DEBUG_LOC:
1113    assert(Node->getNumOperands() == 4 && "Invalid DEBUG_LOC node!");
1114    switch (TLI.getOperationAction(ISD::DEBUG_LOC, MVT::Other)) {
1115    default: assert(0 && "This action is not supported yet!");
1116    case TargetLowering::Legal:
1117      Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1118      Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the line #.
1119      Tmp3 = LegalizeOp(Node->getOperand(2));  // Legalize the col #.
1120      Tmp4 = LegalizeOp(Node->getOperand(3));  // Legalize the source file id.
1121      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3, Tmp4);
1122      break;
1123    }
1124    break;
1125
1126  case ISD::LABEL:
1127    assert(Node->getNumOperands() == 3 && "Invalid LABEL node!");
1128    switch (TLI.getOperationAction(ISD::LABEL, MVT::Other)) {
1129    default: assert(0 && "This action is not supported yet!");
1130    case TargetLowering::Legal:
1131      Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1132      Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the label id.
1133      Tmp3 = LegalizeOp(Node->getOperand(2));  // Legalize the "flavor" operand.
1134      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
1135      break;
1136    case TargetLowering::Expand:
1137      Result = LegalizeOp(Node->getOperand(0));
1138      break;
1139    }
1140    break;
1141
1142  case ISD::MEMBARRIER: {
1143    assert(Node->getNumOperands() == 6 && "Invalid MemBarrier node!");
1144    switch (TLI.getOperationAction(ISD::MEMBARRIER, MVT::Other)) {
1145    default: assert(0 && "This action is not supported yet!");
1146    case TargetLowering::Legal: {
1147      SDOperand Ops[6];
1148      Ops[0] = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1149      for (int x = 1; x < 6; ++x) {
1150        Ops[x] = Node->getOperand(x);
1151        if (!isTypeLegal(Ops[x].getValueType()))
1152          Ops[x] = PromoteOp(Ops[x]);
1153      }
1154      Result = DAG.UpdateNodeOperands(Result, &Ops[0], 6);
1155      break;
1156    }
1157    case TargetLowering::Expand:
1158      //There is no libgcc call for this op
1159      Result = Node->getOperand(0);  // Noop
1160    break;
1161    }
1162    break;
1163  }
1164
1165  case ISD::ATOMIC_LCS:
1166  case ISD::ATOMIC_LAS:
1167  case ISD::ATOMIC_SWAP: {
1168    assert(((Node->getNumOperands() == 4 && Node->getOpcode() == ISD::ATOMIC_LCS) ||
1169            (Node->getNumOperands() == 3 && Node->getOpcode() == ISD::ATOMIC_LAS) ||
1170            (Node->getNumOperands() == 3 && Node->getOpcode() == ISD::ATOMIC_SWAP)) &&
1171           "Invalid Atomic node!");
1172    int num = Node->getOpcode() == ISD::ATOMIC_LCS ? 4 : 3;
1173    SDOperand Ops[4];
1174    for (int x = 0; x < num; ++x)
1175      Ops[x] = LegalizeOp(Node->getOperand(x));
1176    Result = DAG.UpdateNodeOperands(Result, &Ops[0], num);
1177
1178    switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) {
1179    default: assert(0 && "This action is not supported yet!");
1180    case TargetLowering::Custom:
1181      Result = TLI.LowerOperation(Result, DAG);
1182      break;
1183    case TargetLowering::Legal:
1184      break;
1185    }
1186    AddLegalizedOperand(SDOperand(Node, 0), Result.getValue(0));
1187    AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1));
1188    return Result.getValue(Op.ResNo);
1189  }
1190
1191  case ISD::Constant: {
1192    ConstantSDNode *CN = cast<ConstantSDNode>(Node);
1193    unsigned opAction =
1194      TLI.getOperationAction(ISD::Constant, CN->getValueType(0));
1195
1196    // We know we don't need to expand constants here, constants only have one
1197    // value and we check that it is fine above.
1198
1199    if (opAction == TargetLowering::Custom) {
1200      Tmp1 = TLI.LowerOperation(Result, DAG);
1201      if (Tmp1.Val)
1202        Result = Tmp1;
1203    }
1204    break;
1205  }
1206  case ISD::ConstantFP: {
1207    // Spill FP immediates to the constant pool if the target cannot directly
1208    // codegen them.  Targets often have some immediate values that can be
1209    // efficiently generated into an FP register without a load.  We explicitly
1210    // leave these constants as ConstantFP nodes for the target to deal with.
1211    ConstantFPSDNode *CFP = cast<ConstantFPSDNode>(Node);
1212
1213    switch (TLI.getOperationAction(ISD::ConstantFP, CFP->getValueType(0))) {
1214    default: assert(0 && "This action is not supported yet!");
1215    case TargetLowering::Legal:
1216      break;
1217    case TargetLowering::Custom:
1218      Tmp3 = TLI.LowerOperation(Result, DAG);
1219      if (Tmp3.Val) {
1220        Result = Tmp3;
1221        break;
1222      }
1223      // FALLTHROUGH
1224    case TargetLowering::Expand: {
1225      // Check to see if this FP immediate is already legal.
1226      bool isLegal = false;
1227      for (TargetLowering::legal_fpimm_iterator I = TLI.legal_fpimm_begin(),
1228             E = TLI.legal_fpimm_end(); I != E; ++I) {
1229        if (CFP->isExactlyValue(*I)) {
1230          isLegal = true;
1231          break;
1232        }
1233      }
1234      // If this is a legal constant, turn it into a TargetConstantFP node.
1235      if (isLegal)
1236        break;
1237      Result = ExpandConstantFP(CFP, true, DAG, TLI);
1238    }
1239    }
1240    break;
1241  }
1242  case ISD::TokenFactor:
1243    if (Node->getNumOperands() == 2) {
1244      Tmp1 = LegalizeOp(Node->getOperand(0));
1245      Tmp2 = LegalizeOp(Node->getOperand(1));
1246      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
1247    } else if (Node->getNumOperands() == 3) {
1248      Tmp1 = LegalizeOp(Node->getOperand(0));
1249      Tmp2 = LegalizeOp(Node->getOperand(1));
1250      Tmp3 = LegalizeOp(Node->getOperand(2));
1251      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
1252    } else {
1253      SmallVector<SDOperand, 8> Ops;
1254      // Legalize the operands.
1255      for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i)
1256        Ops.push_back(LegalizeOp(Node->getOperand(i)));
1257      Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
1258    }
1259    break;
1260
1261  case ISD::FORMAL_ARGUMENTS:
1262  case ISD::CALL:
1263    // The only option for this is to custom lower it.
1264    Tmp3 = TLI.LowerOperation(Result.getValue(0), DAG);
1265    assert(Tmp3.Val && "Target didn't custom lower this node!");
1266
1267    // The number of incoming and outgoing values should match; unless the final
1268    // outgoing value is a flag.
1269    assert((Tmp3.Val->getNumValues() == Result.Val->getNumValues() ||
1270            (Tmp3.Val->getNumValues() == Result.Val->getNumValues() + 1 &&
1271             Tmp3.Val->getValueType(Tmp3.Val->getNumValues() - 1) ==
1272               MVT::Flag)) &&
1273           "Lowering call/formal_arguments produced unexpected # results!");
1274
1275    // Since CALL/FORMAL_ARGUMENTS nodes produce multiple values, make sure to
1276    // remember that we legalized all of them, so it doesn't get relegalized.
1277    for (unsigned i = 0, e = Tmp3.Val->getNumValues(); i != e; ++i) {
1278      if (Tmp3.Val->getValueType(i) == MVT::Flag)
1279        continue;
1280      Tmp1 = LegalizeOp(Tmp3.getValue(i));
1281      if (Op.ResNo == i)
1282        Tmp2 = Tmp1;
1283      AddLegalizedOperand(SDOperand(Node, i), Tmp1);
1284    }
1285    return Tmp2;
1286   case ISD::EXTRACT_SUBREG: {
1287      Tmp1 = LegalizeOp(Node->getOperand(0));
1288      ConstantSDNode *idx = dyn_cast<ConstantSDNode>(Node->getOperand(1));
1289      assert(idx && "Operand must be a constant");
1290      Tmp2 = DAG.getTargetConstant(idx->getValue(), idx->getValueType(0));
1291      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
1292    }
1293    break;
1294  case ISD::INSERT_SUBREG: {
1295      Tmp1 = LegalizeOp(Node->getOperand(0));
1296      Tmp2 = LegalizeOp(Node->getOperand(1));
1297      ConstantSDNode *idx = dyn_cast<ConstantSDNode>(Node->getOperand(2));
1298      assert(idx && "Operand must be a constant");
1299      Tmp3 = DAG.getTargetConstant(idx->getValue(), idx->getValueType(0));
1300      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
1301    }
1302    break;
1303  case ISD::BUILD_VECTOR:
1304    switch (TLI.getOperationAction(ISD::BUILD_VECTOR, Node->getValueType(0))) {
1305    default: assert(0 && "This action is not supported yet!");
1306    case TargetLowering::Custom:
1307      Tmp3 = TLI.LowerOperation(Result, DAG);
1308      if (Tmp3.Val) {
1309        Result = Tmp3;
1310        break;
1311      }
1312      // FALLTHROUGH
1313    case TargetLowering::Expand:
1314      Result = ExpandBUILD_VECTOR(Result.Val);
1315      break;
1316    }
1317    break;
1318  case ISD::INSERT_VECTOR_ELT:
1319    Tmp1 = LegalizeOp(Node->getOperand(0));  // InVec
1320    Tmp3 = LegalizeOp(Node->getOperand(2));  // InEltNo
1321
1322    // The type of the value to insert may not be legal, even though the vector
1323    // type is legal.  Legalize/Promote accordingly.  We do not handle Expand
1324    // here.
1325    switch (getTypeAction(Node->getOperand(1).getValueType())) {
1326    default: assert(0 && "Cannot expand insert element operand");
1327    case Legal:   Tmp2 = LegalizeOp(Node->getOperand(1)); break;
1328    case Promote: Tmp2 = PromoteOp(Node->getOperand(1));  break;
1329    }
1330    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
1331
1332    switch (TLI.getOperationAction(ISD::INSERT_VECTOR_ELT,
1333                                   Node->getValueType(0))) {
1334    default: assert(0 && "This action is not supported yet!");
1335    case TargetLowering::Legal:
1336      break;
1337    case TargetLowering::Custom:
1338      Tmp4 = TLI.LowerOperation(Result, DAG);
1339      if (Tmp4.Val) {
1340        Result = Tmp4;
1341        break;
1342      }
1343      // FALLTHROUGH
1344    case TargetLowering::Expand: {
1345      // If the insert index is a constant, codegen this as a scalar_to_vector,
1346      // then a shuffle that inserts it into the right position in the vector.
1347      if (ConstantSDNode *InsertPos = dyn_cast<ConstantSDNode>(Tmp3)) {
1348        // SCALAR_TO_VECTOR requires that the type of the value being inserted
1349        // match the element type of the vector being created.
1350        if (Tmp2.getValueType() ==
1351            MVT::getVectorElementType(Op.getValueType())) {
1352          SDOperand ScVec = DAG.getNode(ISD::SCALAR_TO_VECTOR,
1353                                        Tmp1.getValueType(), Tmp2);
1354
1355          unsigned NumElts = MVT::getVectorNumElements(Tmp1.getValueType());
1356          MVT::ValueType ShufMaskVT = MVT::getIntVectorWithNumElements(NumElts);
1357          MVT::ValueType ShufMaskEltVT = MVT::getVectorElementType(ShufMaskVT);
1358
1359          // We generate a shuffle of InVec and ScVec, so the shuffle mask
1360          // should be 0,1,2,3,4,5... with the appropriate element replaced with
1361          // elt 0 of the RHS.
1362          SmallVector<SDOperand, 8> ShufOps;
1363          for (unsigned i = 0; i != NumElts; ++i) {
1364            if (i != InsertPos->getValue())
1365              ShufOps.push_back(DAG.getConstant(i, ShufMaskEltVT));
1366            else
1367              ShufOps.push_back(DAG.getConstant(NumElts, ShufMaskEltVT));
1368          }
1369          SDOperand ShufMask = DAG.getNode(ISD::BUILD_VECTOR, ShufMaskVT,
1370                                           &ShufOps[0], ShufOps.size());
1371
1372          Result = DAG.getNode(ISD::VECTOR_SHUFFLE, Tmp1.getValueType(),
1373                               Tmp1, ScVec, ShufMask);
1374          Result = LegalizeOp(Result);
1375          break;
1376        }
1377      }
1378
1379      // If the target doesn't support this, we have to spill the input vector
1380      // to a temporary stack slot, update the element, then reload it.  This is
1381      // badness.  We could also load the value into a vector register (either
1382      // with a "move to register" or "extload into register" instruction, then
1383      // permute it into place, if the idx is a constant and if the idx is
1384      // supported by the target.
1385      MVT::ValueType VT    = Tmp1.getValueType();
1386      MVT::ValueType EltVT = MVT::getVectorElementType(VT);
1387      MVT::ValueType IdxVT = Tmp3.getValueType();
1388      MVT::ValueType PtrVT = TLI.getPointerTy();
1389      SDOperand StackPtr = DAG.CreateStackTemporary(VT);
1390
1391      FrameIndexSDNode *StackPtrFI = cast<FrameIndexSDNode>(StackPtr.Val);
1392      int SPFI = StackPtrFI->getIndex();
1393
1394      // Store the vector.
1395      SDOperand Ch = DAG.getStore(DAG.getEntryNode(), Tmp1, StackPtr,
1396                                  PseudoSourceValue::getFixedStack(),
1397                                  SPFI);
1398
1399      // Truncate or zero extend offset to target pointer type.
1400      unsigned CastOpc = (IdxVT > PtrVT) ? ISD::TRUNCATE : ISD::ZERO_EXTEND;
1401      Tmp3 = DAG.getNode(CastOpc, PtrVT, Tmp3);
1402      // Add the offset to the index.
1403      unsigned EltSize = MVT::getSizeInBits(EltVT)/8;
1404      Tmp3 = DAG.getNode(ISD::MUL, IdxVT, Tmp3,DAG.getConstant(EltSize, IdxVT));
1405      SDOperand StackPtr2 = DAG.getNode(ISD::ADD, IdxVT, Tmp3, StackPtr);
1406      // Store the scalar value.
1407      Ch = DAG.getTruncStore(Ch, Tmp2, StackPtr2,
1408                             PseudoSourceValue::getFixedStack(), SPFI, EltVT);
1409      // Load the updated vector.
1410      Result = DAG.getLoad(VT, Ch, StackPtr,
1411                           PseudoSourceValue::getFixedStack(), SPFI);
1412      break;
1413    }
1414    }
1415    break;
1416  case ISD::SCALAR_TO_VECTOR:
1417    if (!TLI.isTypeLegal(Node->getOperand(0).getValueType())) {
1418      Result = LegalizeOp(ExpandSCALAR_TO_VECTOR(Node));
1419      break;
1420    }
1421
1422    Tmp1 = LegalizeOp(Node->getOperand(0));  // InVal
1423    Result = DAG.UpdateNodeOperands(Result, Tmp1);
1424    switch (TLI.getOperationAction(ISD::SCALAR_TO_VECTOR,
1425                                   Node->getValueType(0))) {
1426    default: assert(0 && "This action is not supported yet!");
1427    case TargetLowering::Legal:
1428      break;
1429    case TargetLowering::Custom:
1430      Tmp3 = TLI.LowerOperation(Result, DAG);
1431      if (Tmp3.Val) {
1432        Result = Tmp3;
1433        break;
1434      }
1435      // FALLTHROUGH
1436    case TargetLowering::Expand:
1437      Result = LegalizeOp(ExpandSCALAR_TO_VECTOR(Node));
1438      break;
1439    }
1440    break;
1441  case ISD::VECTOR_SHUFFLE:
1442    Tmp1 = LegalizeOp(Node->getOperand(0));   // Legalize the input vectors,
1443    Tmp2 = LegalizeOp(Node->getOperand(1));   // but not the shuffle mask.
1444    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Node->getOperand(2));
1445
1446    // Allow targets to custom lower the SHUFFLEs they support.
1447    switch (TLI.getOperationAction(ISD::VECTOR_SHUFFLE,Result.getValueType())) {
1448    default: assert(0 && "Unknown operation action!");
1449    case TargetLowering::Legal:
1450      assert(isShuffleLegal(Result.getValueType(), Node->getOperand(2)) &&
1451             "vector shuffle should not be created if not legal!");
1452      break;
1453    case TargetLowering::Custom:
1454      Tmp3 = TLI.LowerOperation(Result, DAG);
1455      if (Tmp3.Val) {
1456        Result = Tmp3;
1457        break;
1458      }
1459      // FALLTHROUGH
1460    case TargetLowering::Expand: {
1461      MVT::ValueType VT = Node->getValueType(0);
1462      MVT::ValueType EltVT = MVT::getVectorElementType(VT);
1463      MVT::ValueType PtrVT = TLI.getPointerTy();
1464      SDOperand Mask = Node->getOperand(2);
1465      unsigned NumElems = Mask.getNumOperands();
1466      SmallVector<SDOperand,8> Ops;
1467      for (unsigned i = 0; i != NumElems; ++i) {
1468        SDOperand Arg = Mask.getOperand(i);
1469        if (Arg.getOpcode() == ISD::UNDEF) {
1470          Ops.push_back(DAG.getNode(ISD::UNDEF, EltVT));
1471        } else {
1472          assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1473          unsigned Idx = cast<ConstantSDNode>(Arg)->getValue();
1474          if (Idx < NumElems)
1475            Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, EltVT, Tmp1,
1476                                      DAG.getConstant(Idx, PtrVT)));
1477          else
1478            Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, EltVT, Tmp2,
1479                                      DAG.getConstant(Idx - NumElems, PtrVT)));
1480        }
1481      }
1482      Result = DAG.getNode(ISD::BUILD_VECTOR, VT, &Ops[0], Ops.size());
1483      break;
1484    }
1485    case TargetLowering::Promote: {
1486      // Change base type to a different vector type.
1487      MVT::ValueType OVT = Node->getValueType(0);
1488      MVT::ValueType NVT = TLI.getTypeToPromoteTo(Node->getOpcode(), OVT);
1489
1490      // Cast the two input vectors.
1491      Tmp1 = DAG.getNode(ISD::BIT_CONVERT, NVT, Tmp1);
1492      Tmp2 = DAG.getNode(ISD::BIT_CONVERT, NVT, Tmp2);
1493
1494      // Convert the shuffle mask to the right # elements.
1495      Tmp3 = SDOperand(isShuffleLegal(OVT, Node->getOperand(2)), 0);
1496      assert(Tmp3.Val && "Shuffle not legal?");
1497      Result = DAG.getNode(ISD::VECTOR_SHUFFLE, NVT, Tmp1, Tmp2, Tmp3);
1498      Result = DAG.getNode(ISD::BIT_CONVERT, OVT, Result);
1499      break;
1500    }
1501    }
1502    break;
1503
1504  case ISD::EXTRACT_VECTOR_ELT:
1505    Tmp1 = Node->getOperand(0);
1506    Tmp2 = LegalizeOp(Node->getOperand(1));
1507    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
1508    Result = ExpandEXTRACT_VECTOR_ELT(Result);
1509    break;
1510
1511  case ISD::EXTRACT_SUBVECTOR:
1512    Tmp1 = Node->getOperand(0);
1513    Tmp2 = LegalizeOp(Node->getOperand(1));
1514    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
1515    Result = ExpandEXTRACT_SUBVECTOR(Result);
1516    break;
1517
1518  case ISD::CALLSEQ_START: {
1519    SDNode *CallEnd = FindCallEndFromCallStart(Node);
1520
1521    // Recursively Legalize all of the inputs of the call end that do not lead
1522    // to this call start.  This ensures that any libcalls that need be inserted
1523    // are inserted *before* the CALLSEQ_START.
1524    {SmallPtrSet<SDNode*, 32> NodesLeadingTo;
1525    for (unsigned i = 0, e = CallEnd->getNumOperands(); i != e; ++i)
1526      LegalizeAllNodesNotLeadingTo(CallEnd->getOperand(i).Val, Node,
1527                                   NodesLeadingTo);
1528    }
1529
1530    // Now that we legalized all of the inputs (which may have inserted
1531    // libcalls) create the new CALLSEQ_START node.
1532    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1533
1534    // Merge in the last call, to ensure that this call start after the last
1535    // call ended.
1536    if (LastCALLSEQ_END.getOpcode() != ISD::EntryToken) {
1537      Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
1538      Tmp1 = LegalizeOp(Tmp1);
1539    }
1540
1541    // Do not try to legalize the target-specific arguments (#1+).
1542    if (Tmp1 != Node->getOperand(0)) {
1543      SmallVector<SDOperand, 8> Ops(Node->op_begin(), Node->op_end());
1544      Ops[0] = Tmp1;
1545      Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
1546    }
1547
1548    // Remember that the CALLSEQ_START is legalized.
1549    AddLegalizedOperand(Op.getValue(0), Result);
1550    if (Node->getNumValues() == 2)    // If this has a flag result, remember it.
1551      AddLegalizedOperand(Op.getValue(1), Result.getValue(1));
1552
1553    // Now that the callseq_start and all of the non-call nodes above this call
1554    // sequence have been legalized, legalize the call itself.  During this
1555    // process, no libcalls can/will be inserted, guaranteeing that no calls
1556    // can overlap.
1557    assert(!IsLegalizingCall && "Inconsistent sequentialization of calls!");
1558    SDOperand InCallSEQ = LastCALLSEQ_END;
1559    // Note that we are selecting this call!
1560    LastCALLSEQ_END = SDOperand(CallEnd, 0);
1561    IsLegalizingCall = true;
1562
1563    // Legalize the call, starting from the CALLSEQ_END.
1564    LegalizeOp(LastCALLSEQ_END);
1565    assert(!IsLegalizingCall && "CALLSEQ_END should have cleared this!");
1566    return Result;
1567  }
1568  case ISD::CALLSEQ_END:
1569    // If the CALLSEQ_START node hasn't been legalized first, legalize it.  This
1570    // will cause this node to be legalized as well as handling libcalls right.
1571    if (LastCALLSEQ_END.Val != Node) {
1572      LegalizeOp(SDOperand(FindCallStartFromCallEnd(Node), 0));
1573      DenseMap<SDOperand, SDOperand>::iterator I = LegalizedNodes.find(Op);
1574      assert(I != LegalizedNodes.end() &&
1575             "Legalizing the call start should have legalized this node!");
1576      return I->second;
1577    }
1578
1579    // Otherwise, the call start has been legalized and everything is going
1580    // according to plan.  Just legalize ourselves normally here.
1581    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1582    // Do not try to legalize the target-specific arguments (#1+), except for
1583    // an optional flag input.
1584    if (Node->getOperand(Node->getNumOperands()-1).getValueType() != MVT::Flag){
1585      if (Tmp1 != Node->getOperand(0)) {
1586        SmallVector<SDOperand, 8> Ops(Node->op_begin(), Node->op_end());
1587        Ops[0] = Tmp1;
1588        Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
1589      }
1590    } else {
1591      Tmp2 = LegalizeOp(Node->getOperand(Node->getNumOperands()-1));
1592      if (Tmp1 != Node->getOperand(0) ||
1593          Tmp2 != Node->getOperand(Node->getNumOperands()-1)) {
1594        SmallVector<SDOperand, 8> Ops(Node->op_begin(), Node->op_end());
1595        Ops[0] = Tmp1;
1596        Ops.back() = Tmp2;
1597        Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
1598      }
1599    }
1600    assert(IsLegalizingCall && "Call sequence imbalance between start/end?");
1601    // This finishes up call legalization.
1602    IsLegalizingCall = false;
1603
1604    // If the CALLSEQ_END node has a flag, remember that we legalized it.
1605    AddLegalizedOperand(SDOperand(Node, 0), Result.getValue(0));
1606    if (Node->getNumValues() == 2)
1607      AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1));
1608    return Result.getValue(Op.ResNo);
1609  case ISD::DYNAMIC_STACKALLOC: {
1610    MVT::ValueType VT = Node->getValueType(0);
1611    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1612    Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the size.
1613    Tmp3 = LegalizeOp(Node->getOperand(2));  // Legalize the alignment.
1614    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
1615
1616    Tmp1 = Result.getValue(0);
1617    Tmp2 = Result.getValue(1);
1618    switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
1619    default: assert(0 && "This action is not supported yet!");
1620    case TargetLowering::Expand: {
1621      unsigned SPReg = TLI.getStackPointerRegisterToSaveRestore();
1622      assert(SPReg && "Target cannot require DYNAMIC_STACKALLOC expansion and"
1623             " not tell us which reg is the stack pointer!");
1624      SDOperand Chain = Tmp1.getOperand(0);
1625
1626      // Chain the dynamic stack allocation so that it doesn't modify the stack
1627      // pointer when other instructions are using the stack.
1628      Chain = DAG.getCALLSEQ_START(Chain,
1629                                   DAG.getConstant(0, TLI.getPointerTy()));
1630
1631      SDOperand Size  = Tmp2.getOperand(1);
1632      SDOperand SP = DAG.getCopyFromReg(Chain, SPReg, VT);
1633      Chain = SP.getValue(1);
1634      unsigned Align = cast<ConstantSDNode>(Tmp3)->getValue();
1635      unsigned StackAlign =
1636        TLI.getTargetMachine().getFrameInfo()->getStackAlignment();
1637      if (Align > StackAlign)
1638        SP = DAG.getNode(ISD::AND, VT, SP,
1639                         DAG.getConstant(-(uint64_t)Align, VT));
1640      Tmp1 = DAG.getNode(ISD::SUB, VT, SP, Size);       // Value
1641      Chain = DAG.getCopyToReg(Chain, SPReg, Tmp1);     // Output chain
1642
1643      Tmp2 =
1644        DAG.getCALLSEQ_END(Chain,
1645                           DAG.getConstant(0, TLI.getPointerTy()),
1646                           DAG.getConstant(0, TLI.getPointerTy()),
1647                           SDOperand());
1648
1649      Tmp1 = LegalizeOp(Tmp1);
1650      Tmp2 = LegalizeOp(Tmp2);
1651      break;
1652    }
1653    case TargetLowering::Custom:
1654      Tmp3 = TLI.LowerOperation(Tmp1, DAG);
1655      if (Tmp3.Val) {
1656        Tmp1 = LegalizeOp(Tmp3);
1657        Tmp2 = LegalizeOp(Tmp3.getValue(1));
1658      }
1659      break;
1660    case TargetLowering::Legal:
1661      break;
1662    }
1663    // Since this op produce two values, make sure to remember that we
1664    // legalized both of them.
1665    AddLegalizedOperand(SDOperand(Node, 0), Tmp1);
1666    AddLegalizedOperand(SDOperand(Node, 1), Tmp2);
1667    return Op.ResNo ? Tmp2 : Tmp1;
1668  }
1669  case ISD::INLINEASM: {
1670    SmallVector<SDOperand, 8> Ops(Node->op_begin(), Node->op_end());
1671    bool Changed = false;
1672    // Legalize all of the operands of the inline asm, in case they are nodes
1673    // that need to be expanded or something.  Note we skip the asm string and
1674    // all of the TargetConstant flags.
1675    SDOperand Op = LegalizeOp(Ops[0]);
1676    Changed = Op != Ops[0];
1677    Ops[0] = Op;
1678
1679    bool HasInFlag = Ops.back().getValueType() == MVT::Flag;
1680    for (unsigned i = 2, e = Ops.size()-HasInFlag; i < e; ) {
1681      unsigned NumVals = cast<ConstantSDNode>(Ops[i])->getValue() >> 3;
1682      for (++i; NumVals; ++i, --NumVals) {
1683        SDOperand Op = LegalizeOp(Ops[i]);
1684        if (Op != Ops[i]) {
1685          Changed = true;
1686          Ops[i] = Op;
1687        }
1688      }
1689    }
1690
1691    if (HasInFlag) {
1692      Op = LegalizeOp(Ops.back());
1693      Changed |= Op != Ops.back();
1694      Ops.back() = Op;
1695    }
1696
1697    if (Changed)
1698      Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
1699
1700    // INLINE asm returns a chain and flag, make sure to add both to the map.
1701    AddLegalizedOperand(SDOperand(Node, 0), Result.getValue(0));
1702    AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1));
1703    return Result.getValue(Op.ResNo);
1704  }
1705  case ISD::BR:
1706    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1707    // Ensure that libcalls are emitted before a branch.
1708    Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
1709    Tmp1 = LegalizeOp(Tmp1);
1710    LastCALLSEQ_END = DAG.getEntryNode();
1711
1712    Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1));
1713    break;
1714  case ISD::BRIND:
1715    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1716    // Ensure that libcalls are emitted before a branch.
1717    Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
1718    Tmp1 = LegalizeOp(Tmp1);
1719    LastCALLSEQ_END = DAG.getEntryNode();
1720
1721    switch (getTypeAction(Node->getOperand(1).getValueType())) {
1722    default: assert(0 && "Indirect target must be legal type (pointer)!");
1723    case Legal:
1724      Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the condition.
1725      break;
1726    }
1727    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
1728    break;
1729  case ISD::BR_JT:
1730    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1731    // Ensure that libcalls are emitted before a branch.
1732    Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
1733    Tmp1 = LegalizeOp(Tmp1);
1734    LastCALLSEQ_END = DAG.getEntryNode();
1735
1736    Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the jumptable node.
1737    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Node->getOperand(2));
1738
1739    switch (TLI.getOperationAction(ISD::BR_JT, MVT::Other)) {
1740    default: assert(0 && "This action is not supported yet!");
1741    case TargetLowering::Legal: break;
1742    case TargetLowering::Custom:
1743      Tmp1 = TLI.LowerOperation(Result, DAG);
1744      if (Tmp1.Val) Result = Tmp1;
1745      break;
1746    case TargetLowering::Expand: {
1747      SDOperand Chain = Result.getOperand(0);
1748      SDOperand Table = Result.getOperand(1);
1749      SDOperand Index = Result.getOperand(2);
1750
1751      MVT::ValueType PTy = TLI.getPointerTy();
1752      MachineFunction &MF = DAG.getMachineFunction();
1753      unsigned EntrySize = MF.getJumpTableInfo()->getEntrySize();
1754      Index= DAG.getNode(ISD::MUL, PTy, Index, DAG.getConstant(EntrySize, PTy));
1755      SDOperand Addr = DAG.getNode(ISD::ADD, PTy, Index, Table);
1756
1757      SDOperand LD;
1758      switch (EntrySize) {
1759      default: assert(0 && "Size of jump table not supported yet."); break;
1760      case 4: LD = DAG.getLoad(MVT::i32, Chain, Addr,
1761                               PseudoSourceValue::getJumpTable(), 0); break;
1762      case 8: LD = DAG.getLoad(MVT::i64, Chain, Addr,
1763                               PseudoSourceValue::getJumpTable(), 0); break;
1764      }
1765
1766      Addr = LD;
1767      if (TLI.getTargetMachine().getRelocationModel() == Reloc::PIC_) {
1768        // For PIC, the sequence is:
1769        // BRIND(load(Jumptable + index) + RelocBase)
1770        // RelocBase can be JumpTable, GOT or some sort of global base.
1771        if (PTy != MVT::i32)
1772          Addr = DAG.getNode(ISD::SIGN_EXTEND, PTy, Addr);
1773        Addr = DAG.getNode(ISD::ADD, PTy, Addr,
1774                           TLI.getPICJumpTableRelocBase(Table, DAG));
1775      }
1776      Result = DAG.getNode(ISD::BRIND, MVT::Other, LD.getValue(1), Addr);
1777    }
1778    }
1779    break;
1780  case ISD::BRCOND:
1781    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1782    // Ensure that libcalls are emitted before a return.
1783    Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
1784    Tmp1 = LegalizeOp(Tmp1);
1785    LastCALLSEQ_END = DAG.getEntryNode();
1786
1787    switch (getTypeAction(Node->getOperand(1).getValueType())) {
1788    case Expand: assert(0 && "It's impossible to expand bools");
1789    case Legal:
1790      Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the condition.
1791      break;
1792    case Promote: {
1793      Tmp2 = PromoteOp(Node->getOperand(1));  // Promote the condition.
1794
1795      // The top bits of the promoted condition are not necessarily zero, ensure
1796      // that the value is properly zero extended.
1797      unsigned BitWidth = Tmp2.getValueSizeInBits();
1798      if (!DAG.MaskedValueIsZero(Tmp2,
1799                                 APInt::getHighBitsSet(BitWidth, BitWidth-1)))
1800        Tmp2 = DAG.getZeroExtendInReg(Tmp2, MVT::i1);
1801      break;
1802    }
1803    }
1804
1805    // Basic block destination (Op#2) is always legal.
1806    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Node->getOperand(2));
1807
1808    switch (TLI.getOperationAction(ISD::BRCOND, MVT::Other)) {
1809    default: assert(0 && "This action is not supported yet!");
1810    case TargetLowering::Legal: break;
1811    case TargetLowering::Custom:
1812      Tmp1 = TLI.LowerOperation(Result, DAG);
1813      if (Tmp1.Val) Result = Tmp1;
1814      break;
1815    case TargetLowering::Expand:
1816      // Expand brcond's setcc into its constituent parts and create a BR_CC
1817      // Node.
1818      if (Tmp2.getOpcode() == ISD::SETCC) {
1819        Result = DAG.getNode(ISD::BR_CC, MVT::Other, Tmp1, Tmp2.getOperand(2),
1820                             Tmp2.getOperand(0), Tmp2.getOperand(1),
1821                             Node->getOperand(2));
1822      } else {
1823        Result = DAG.getNode(ISD::BR_CC, MVT::Other, Tmp1,
1824                             DAG.getCondCode(ISD::SETNE), Tmp2,
1825                             DAG.getConstant(0, Tmp2.getValueType()),
1826                             Node->getOperand(2));
1827      }
1828      break;
1829    }
1830    break;
1831  case ISD::BR_CC:
1832    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
1833    // Ensure that libcalls are emitted before a branch.
1834    Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
1835    Tmp1 = LegalizeOp(Tmp1);
1836    Tmp2 = Node->getOperand(2);              // LHS
1837    Tmp3 = Node->getOperand(3);              // RHS
1838    Tmp4 = Node->getOperand(1);              // CC
1839
1840    LegalizeSetCCOperands(Tmp2, Tmp3, Tmp4);
1841    LastCALLSEQ_END = DAG.getEntryNode();
1842
1843    // If we didn't get both a LHS and RHS back from LegalizeSetCCOperands,
1844    // the LHS is a legal SETCC itself.  In this case, we need to compare
1845    // the result against zero to select between true and false values.
1846    if (Tmp3.Val == 0) {
1847      Tmp3 = DAG.getConstant(0, Tmp2.getValueType());
1848      Tmp4 = DAG.getCondCode(ISD::SETNE);
1849    }
1850
1851    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp4, Tmp2, Tmp3,
1852                                    Node->getOperand(4));
1853
1854    switch (TLI.getOperationAction(ISD::BR_CC, Tmp3.getValueType())) {
1855    default: assert(0 && "Unexpected action for BR_CC!");
1856    case TargetLowering::Legal: break;
1857    case TargetLowering::Custom:
1858      Tmp4 = TLI.LowerOperation(Result, DAG);
1859      if (Tmp4.Val) Result = Tmp4;
1860      break;
1861    }
1862    break;
1863  case ISD::LOAD: {
1864    LoadSDNode *LD = cast<LoadSDNode>(Node);
1865    Tmp1 = LegalizeOp(LD->getChain());   // Legalize the chain.
1866    Tmp2 = LegalizeOp(LD->getBasePtr()); // Legalize the base pointer.
1867
1868    ISD::LoadExtType ExtType = LD->getExtensionType();
1869    if (ExtType == ISD::NON_EXTLOAD) {
1870      MVT::ValueType VT = Node->getValueType(0);
1871      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, LD->getOffset());
1872      Tmp3 = Result.getValue(0);
1873      Tmp4 = Result.getValue(1);
1874
1875      switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
1876      default: assert(0 && "This action is not supported yet!");
1877      case TargetLowering::Legal:
1878        // If this is an unaligned load and the target doesn't support it,
1879        // expand it.
1880        if (!TLI.allowsUnalignedMemoryAccesses()) {
1881          unsigned ABIAlignment = TLI.getTargetData()->
1882            getABITypeAlignment(MVT::getTypeForValueType(LD->getMemoryVT()));
1883          if (LD->getAlignment() < ABIAlignment){
1884            Result = ExpandUnalignedLoad(cast<LoadSDNode>(Result.Val), DAG,
1885                                         TLI);
1886            Tmp3 = Result.getOperand(0);
1887            Tmp4 = Result.getOperand(1);
1888            Tmp3 = LegalizeOp(Tmp3);
1889            Tmp4 = LegalizeOp(Tmp4);
1890          }
1891        }
1892        break;
1893      case TargetLowering::Custom:
1894        Tmp1 = TLI.LowerOperation(Tmp3, DAG);
1895        if (Tmp1.Val) {
1896          Tmp3 = LegalizeOp(Tmp1);
1897          Tmp4 = LegalizeOp(Tmp1.getValue(1));
1898        }
1899        break;
1900      case TargetLowering::Promote: {
1901        // Only promote a load of vector type to another.
1902        assert(MVT::isVector(VT) && "Cannot promote this load!");
1903        // Change base type to a different vector type.
1904        MVT::ValueType NVT = TLI.getTypeToPromoteTo(Node->getOpcode(), VT);
1905
1906        Tmp1 = DAG.getLoad(NVT, Tmp1, Tmp2, LD->getSrcValue(),
1907                           LD->getSrcValueOffset(),
1908                           LD->isVolatile(), LD->getAlignment());
1909        Tmp3 = LegalizeOp(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp1));
1910        Tmp4 = LegalizeOp(Tmp1.getValue(1));
1911        break;
1912      }
1913      }
1914      // Since loads produce two values, make sure to remember that we
1915      // legalized both of them.
1916      AddLegalizedOperand(SDOperand(Node, 0), Tmp3);
1917      AddLegalizedOperand(SDOperand(Node, 1), Tmp4);
1918      return Op.ResNo ? Tmp4 : Tmp3;
1919    } else {
1920      MVT::ValueType SrcVT = LD->getMemoryVT();
1921      unsigned SrcWidth = MVT::getSizeInBits(SrcVT);
1922      int SVOffset = LD->getSrcValueOffset();
1923      unsigned Alignment = LD->getAlignment();
1924      bool isVolatile = LD->isVolatile();
1925
1926      if (SrcWidth != MVT::getStoreSizeInBits(SrcVT) &&
1927          // Some targets pretend to have an i1 loading operation, and actually
1928          // load an i8.  This trick is correct for ZEXTLOAD because the top 7
1929          // bits are guaranteed to be zero; it helps the optimizers understand
1930          // that these bits are zero.  It is also useful for EXTLOAD, since it
1931          // tells the optimizers that those bits are undefined.  It would be
1932          // nice to have an effective generic way of getting these benefits...
1933          // Until such a way is found, don't insist on promoting i1 here.
1934          (SrcVT != MVT::i1 ||
1935           TLI.getLoadXAction(ExtType, MVT::i1) == TargetLowering::Promote)) {
1936        // Promote to a byte-sized load if not loading an integral number of
1937        // bytes.  For example, promote EXTLOAD:i20 -> EXTLOAD:i24.
1938        unsigned NewWidth = MVT::getStoreSizeInBits(SrcVT);
1939        MVT::ValueType NVT = MVT::getIntegerType(NewWidth);
1940        SDOperand Ch;
1941
1942        // The extra bits are guaranteed to be zero, since we stored them that
1943        // way.  A zext load from NVT thus automatically gives zext from SrcVT.
1944
1945        ISD::LoadExtType NewExtType =
1946          ExtType == ISD::ZEXTLOAD ? ISD::ZEXTLOAD : ISD::EXTLOAD;
1947
1948        Result = DAG.getExtLoad(NewExtType, Node->getValueType(0),
1949                                Tmp1, Tmp2, LD->getSrcValue(), SVOffset,
1950                                NVT, isVolatile, Alignment);
1951
1952        Ch = Result.getValue(1); // The chain.
1953
1954        if (ExtType == ISD::SEXTLOAD)
1955          // Having the top bits zero doesn't help when sign extending.
1956          Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, Result.getValueType(),
1957                               Result, DAG.getValueType(SrcVT));
1958        else if (ExtType == ISD::ZEXTLOAD || NVT == Result.getValueType())
1959          // All the top bits are guaranteed to be zero - inform the optimizers.
1960          Result = DAG.getNode(ISD::AssertZext, Result.getValueType(), Result,
1961                               DAG.getValueType(SrcVT));
1962
1963        Tmp1 = LegalizeOp(Result);
1964        Tmp2 = LegalizeOp(Ch);
1965      } else if (SrcWidth & (SrcWidth - 1)) {
1966        // If not loading a power-of-2 number of bits, expand as two loads.
1967        assert(MVT::isExtendedVT(SrcVT) && !MVT::isVector(SrcVT) &&
1968               "Unsupported extload!");
1969        unsigned RoundWidth = 1 << Log2_32(SrcWidth);
1970        assert(RoundWidth < SrcWidth);
1971        unsigned ExtraWidth = SrcWidth - RoundWidth;
1972        assert(ExtraWidth < RoundWidth);
1973        assert(!(RoundWidth % 8) && !(ExtraWidth % 8) &&
1974               "Load size not an integral number of bytes!");
1975        MVT::ValueType RoundVT = MVT::getIntegerType(RoundWidth);
1976        MVT::ValueType ExtraVT = MVT::getIntegerType(ExtraWidth);
1977        SDOperand Lo, Hi, Ch;
1978        unsigned IncrementSize;
1979
1980        if (TLI.isLittleEndian()) {
1981          // EXTLOAD:i24 -> ZEXTLOAD:i16 | (shl EXTLOAD@+2:i8, 16)
1982          // Load the bottom RoundWidth bits.
1983          Lo = DAG.getExtLoad(ISD::ZEXTLOAD, Node->getValueType(0), Tmp1, Tmp2,
1984                              LD->getSrcValue(), SVOffset, RoundVT, isVolatile,
1985                              Alignment);
1986
1987          // Load the remaining ExtraWidth bits.
1988          IncrementSize = RoundWidth / 8;
1989          Tmp2 = DAG.getNode(ISD::ADD, Tmp2.getValueType(), Tmp2,
1990                             DAG.getIntPtrConstant(IncrementSize));
1991          Hi = DAG.getExtLoad(ExtType, Node->getValueType(0), Tmp1, Tmp2,
1992                              LD->getSrcValue(), SVOffset + IncrementSize,
1993                              ExtraVT, isVolatile,
1994                              MinAlign(Alignment, IncrementSize));
1995
1996          // Build a factor node to remember that this load is independent of the
1997          // other one.
1998          Ch = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo.getValue(1),
1999                           Hi.getValue(1));
2000
2001          // Move the top bits to the right place.
2002          Hi = DAG.getNode(ISD::SHL, Hi.getValueType(), Hi,
2003                           DAG.getConstant(RoundWidth, TLI.getShiftAmountTy()));
2004
2005          // Join the hi and lo parts.
2006          Result = DAG.getNode(ISD::OR, Node->getValueType(0), Lo, Hi);
2007        } else {
2008          // Big endian - avoid unaligned loads.
2009          // EXTLOAD:i24 -> (shl EXTLOAD:i16, 8) | ZEXTLOAD@+2:i8
2010          // Load the top RoundWidth bits.
2011          Hi = DAG.getExtLoad(ExtType, Node->getValueType(0), Tmp1, Tmp2,
2012                              LD->getSrcValue(), SVOffset, RoundVT, isVolatile,
2013                              Alignment);
2014
2015          // Load the remaining ExtraWidth bits.
2016          IncrementSize = RoundWidth / 8;
2017          Tmp2 = DAG.getNode(ISD::ADD, Tmp2.getValueType(), Tmp2,
2018                             DAG.getIntPtrConstant(IncrementSize));
2019          Lo = DAG.getExtLoad(ISD::ZEXTLOAD, Node->getValueType(0), Tmp1, Tmp2,
2020                              LD->getSrcValue(), SVOffset + IncrementSize,
2021                              ExtraVT, isVolatile,
2022                              MinAlign(Alignment, IncrementSize));
2023
2024          // Build a factor node to remember that this load is independent of the
2025          // other one.
2026          Ch = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo.getValue(1),
2027                           Hi.getValue(1));
2028
2029          // Move the top bits to the right place.
2030          Hi = DAG.getNode(ISD::SHL, Hi.getValueType(), Hi,
2031                           DAG.getConstant(ExtraWidth, TLI.getShiftAmountTy()));
2032
2033          // Join the hi and lo parts.
2034          Result = DAG.getNode(ISD::OR, Node->getValueType(0), Lo, Hi);
2035        }
2036
2037        Tmp1 = LegalizeOp(Result);
2038        Tmp2 = LegalizeOp(Ch);
2039      } else {
2040        switch (TLI.getLoadXAction(ExtType, SrcVT)) {
2041        default: assert(0 && "This action is not supported yet!");
2042        case TargetLowering::Custom:
2043          isCustom = true;
2044          // FALLTHROUGH
2045        case TargetLowering::Legal:
2046          Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, LD->getOffset());
2047          Tmp1 = Result.getValue(0);
2048          Tmp2 = Result.getValue(1);
2049
2050          if (isCustom) {
2051            Tmp3 = TLI.LowerOperation(Result, DAG);
2052            if (Tmp3.Val) {
2053              Tmp1 = LegalizeOp(Tmp3);
2054              Tmp2 = LegalizeOp(Tmp3.getValue(1));
2055            }
2056          } else {
2057            // If this is an unaligned load and the target doesn't support it,
2058            // expand it.
2059            if (!TLI.allowsUnalignedMemoryAccesses()) {
2060              unsigned ABIAlignment = TLI.getTargetData()->
2061                getABITypeAlignment(MVT::getTypeForValueType(LD->getMemoryVT()));
2062              if (LD->getAlignment() < ABIAlignment){
2063                Result = ExpandUnalignedLoad(cast<LoadSDNode>(Result.Val), DAG,
2064                                             TLI);
2065                Tmp1 = Result.getOperand(0);
2066                Tmp2 = Result.getOperand(1);
2067                Tmp1 = LegalizeOp(Tmp1);
2068                Tmp2 = LegalizeOp(Tmp2);
2069              }
2070            }
2071          }
2072          break;
2073        case TargetLowering::Expand:
2074          // f64 = EXTLOAD f32 should expand to LOAD, FP_EXTEND
2075          if (SrcVT == MVT::f32 && Node->getValueType(0) == MVT::f64) {
2076            SDOperand Load = DAG.getLoad(SrcVT, Tmp1, Tmp2, LD->getSrcValue(),
2077                                         LD->getSrcValueOffset(),
2078                                         LD->isVolatile(), LD->getAlignment());
2079            Result = DAG.getNode(ISD::FP_EXTEND, Node->getValueType(0), Load);
2080            Tmp1 = LegalizeOp(Result);  // Relegalize new nodes.
2081            Tmp2 = LegalizeOp(Load.getValue(1));
2082            break;
2083          }
2084          assert(ExtType != ISD::EXTLOAD &&"EXTLOAD should always be supported!");
2085          // Turn the unsupported load into an EXTLOAD followed by an explicit
2086          // zero/sign extend inreg.
2087          Result = DAG.getExtLoad(ISD::EXTLOAD, Node->getValueType(0),
2088                                  Tmp1, Tmp2, LD->getSrcValue(),
2089                                  LD->getSrcValueOffset(), SrcVT,
2090                                  LD->isVolatile(), LD->getAlignment());
2091          SDOperand ValRes;
2092          if (ExtType == ISD::SEXTLOAD)
2093            ValRes = DAG.getNode(ISD::SIGN_EXTEND_INREG, Result.getValueType(),
2094                                 Result, DAG.getValueType(SrcVT));
2095          else
2096            ValRes = DAG.getZeroExtendInReg(Result, SrcVT);
2097          Tmp1 = LegalizeOp(ValRes);  // Relegalize new nodes.
2098          Tmp2 = LegalizeOp(Result.getValue(1));  // Relegalize new nodes.
2099          break;
2100        }
2101      }
2102
2103      // Since loads produce two values, make sure to remember that we legalized
2104      // both of them.
2105      AddLegalizedOperand(SDOperand(Node, 0), Tmp1);
2106      AddLegalizedOperand(SDOperand(Node, 1), Tmp2);
2107      return Op.ResNo ? Tmp2 : Tmp1;
2108    }
2109  }
2110  case ISD::EXTRACT_ELEMENT: {
2111    MVT::ValueType OpTy = Node->getOperand(0).getValueType();
2112    switch (getTypeAction(OpTy)) {
2113    default: assert(0 && "EXTRACT_ELEMENT action for type unimplemented!");
2114    case Legal:
2115      if (cast<ConstantSDNode>(Node->getOperand(1))->getValue()) {
2116        // 1 -> Hi
2117        Result = DAG.getNode(ISD::SRL, OpTy, Node->getOperand(0),
2118                             DAG.getConstant(MVT::getSizeInBits(OpTy)/2,
2119                                             TLI.getShiftAmountTy()));
2120        Result = DAG.getNode(ISD::TRUNCATE, Node->getValueType(0), Result);
2121      } else {
2122        // 0 -> Lo
2123        Result = DAG.getNode(ISD::TRUNCATE, Node->getValueType(0),
2124                             Node->getOperand(0));
2125      }
2126      break;
2127    case Expand:
2128      // Get both the low and high parts.
2129      ExpandOp(Node->getOperand(0), Tmp1, Tmp2);
2130      if (cast<ConstantSDNode>(Node->getOperand(1))->getValue())
2131        Result = Tmp2;  // 1 -> Hi
2132      else
2133        Result = Tmp1;  // 0 -> Lo
2134      break;
2135    }
2136    break;
2137  }
2138
2139  case ISD::CopyToReg:
2140    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
2141
2142    assert(isTypeLegal(Node->getOperand(2).getValueType()) &&
2143           "Register type must be legal!");
2144    // Legalize the incoming value (must be a legal type).
2145    Tmp2 = LegalizeOp(Node->getOperand(2));
2146    if (Node->getNumValues() == 1) {
2147      Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1), Tmp2);
2148    } else {
2149      assert(Node->getNumValues() == 2 && "Unknown CopyToReg");
2150      if (Node->getNumOperands() == 4) {
2151        Tmp3 = LegalizeOp(Node->getOperand(3));
2152        Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1), Tmp2,
2153                                        Tmp3);
2154      } else {
2155        Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1),Tmp2);
2156      }
2157
2158      // Since this produces two values, make sure to remember that we legalized
2159      // both of them.
2160      AddLegalizedOperand(SDOperand(Node, 0), Result.getValue(0));
2161      AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1));
2162      return Result;
2163    }
2164    break;
2165
2166  case ISD::RET:
2167    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
2168
2169    // Ensure that libcalls are emitted before a return.
2170    Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
2171    Tmp1 = LegalizeOp(Tmp1);
2172    LastCALLSEQ_END = DAG.getEntryNode();
2173
2174    switch (Node->getNumOperands()) {
2175    case 3:  // ret val
2176      Tmp2 = Node->getOperand(1);
2177      Tmp3 = Node->getOperand(2);  // Signness
2178      switch (getTypeAction(Tmp2.getValueType())) {
2179      case Legal:
2180        Result = DAG.UpdateNodeOperands(Result, Tmp1, LegalizeOp(Tmp2), Tmp3);
2181        break;
2182      case Expand:
2183        if (!MVT::isVector(Tmp2.getValueType())) {
2184          SDOperand Lo, Hi;
2185          ExpandOp(Tmp2, Lo, Hi);
2186
2187          // Big endian systems want the hi reg first.
2188          if (TLI.isBigEndian())
2189            std::swap(Lo, Hi);
2190
2191          if (Hi.Val)
2192            Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, Hi,Tmp3);
2193          else
2194            Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3);
2195          Result = LegalizeOp(Result);
2196        } else {
2197          SDNode *InVal = Tmp2.Val;
2198          int InIx = Tmp2.ResNo;
2199          unsigned NumElems = MVT::getVectorNumElements(InVal->getValueType(InIx));
2200          MVT::ValueType EVT = MVT::getVectorElementType(InVal->getValueType(InIx));
2201
2202          // Figure out if there is a simple type corresponding to this Vector
2203          // type.  If so, convert to the vector type.
2204          MVT::ValueType TVT = MVT::getVectorType(EVT, NumElems);
2205          if (TLI.isTypeLegal(TVT)) {
2206            // Turn this into a return of the vector type.
2207            Tmp2 = LegalizeOp(Tmp2);
2208            Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
2209          } else if (NumElems == 1) {
2210            // Turn this into a return of the scalar type.
2211            Tmp2 = ScalarizeVectorOp(Tmp2);
2212            Tmp2 = LegalizeOp(Tmp2);
2213            Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
2214
2215            // FIXME: Returns of gcc generic vectors smaller than a legal type
2216            // should be returned in integer registers!
2217
2218            // The scalarized value type may not be legal, e.g. it might require
2219            // promotion or expansion.  Relegalize the return.
2220            Result = LegalizeOp(Result);
2221          } else {
2222            // FIXME: Returns of gcc generic vectors larger than a legal vector
2223            // type should be returned by reference!
2224            SDOperand Lo, Hi;
2225            SplitVectorOp(Tmp2, Lo, Hi);
2226            Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, Hi,Tmp3);
2227            Result = LegalizeOp(Result);
2228          }
2229        }
2230        break;
2231      case Promote:
2232        Tmp2 = PromoteOp(Node->getOperand(1));
2233        Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
2234        Result = LegalizeOp(Result);
2235        break;
2236      }
2237      break;
2238    case 1:  // ret void
2239      Result = DAG.UpdateNodeOperands(Result, Tmp1);
2240      break;
2241    default: { // ret <values>
2242      SmallVector<SDOperand, 8> NewValues;
2243      NewValues.push_back(Tmp1);
2244      for (unsigned i = 1, e = Node->getNumOperands(); i < e; i += 2)
2245        switch (getTypeAction(Node->getOperand(i).getValueType())) {
2246        case Legal:
2247          NewValues.push_back(LegalizeOp(Node->getOperand(i)));
2248          NewValues.push_back(Node->getOperand(i+1));
2249          break;
2250        case Expand: {
2251          SDOperand Lo, Hi;
2252          assert(!MVT::isExtendedVT(Node->getOperand(i).getValueType()) &&
2253                 "FIXME: TODO: implement returning non-legal vector types!");
2254          ExpandOp(Node->getOperand(i), Lo, Hi);
2255          NewValues.push_back(Lo);
2256          NewValues.push_back(Node->getOperand(i+1));
2257          if (Hi.Val) {
2258            NewValues.push_back(Hi);
2259            NewValues.push_back(Node->getOperand(i+1));
2260          }
2261          break;
2262        }
2263        case Promote:
2264          assert(0 && "Can't promote multiple return value yet!");
2265        }
2266
2267      if (NewValues.size() == Node->getNumOperands())
2268        Result = DAG.UpdateNodeOperands(Result, &NewValues[0],NewValues.size());
2269      else
2270        Result = DAG.getNode(ISD::RET, MVT::Other,
2271                             &NewValues[0], NewValues.size());
2272      break;
2273    }
2274    }
2275
2276    if (Result.getOpcode() == ISD::RET) {
2277      switch (TLI.getOperationAction(Result.getOpcode(), MVT::Other)) {
2278      default: assert(0 && "This action is not supported yet!");
2279      case TargetLowering::Legal: break;
2280      case TargetLowering::Custom:
2281        Tmp1 = TLI.LowerOperation(Result, DAG);
2282        if (Tmp1.Val) Result = Tmp1;
2283        break;
2284      }
2285    }
2286    break;
2287  case ISD::STORE: {
2288    StoreSDNode *ST = cast<StoreSDNode>(Node);
2289    Tmp1 = LegalizeOp(ST->getChain());    // Legalize the chain.
2290    Tmp2 = LegalizeOp(ST->getBasePtr());  // Legalize the pointer.
2291    int SVOffset = ST->getSrcValueOffset();
2292    unsigned Alignment = ST->getAlignment();
2293    bool isVolatile = ST->isVolatile();
2294
2295    if (!ST->isTruncatingStore()) {
2296      // Turn 'store float 1.0, Ptr' -> 'store int 0x12345678, Ptr'
2297      // FIXME: We shouldn't do this for TargetConstantFP's.
2298      // FIXME: move this to the DAG Combiner!  Note that we can't regress due
2299      // to phase ordering between legalized code and the dag combiner.  This
2300      // probably means that we need to integrate dag combiner and legalizer
2301      // together.
2302      // We generally can't do this one for long doubles.
2303      if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(ST->getValue())) {
2304        if (CFP->getValueType(0) == MVT::f32 &&
2305            getTypeAction(MVT::i32) == Legal) {
2306          Tmp3 = DAG.getConstant((uint32_t)CFP->getValueAPF().
2307                                          convertToAPInt().getZExtValue(),
2308                                  MVT::i32);
2309          Result = DAG.getStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(),
2310                                SVOffset, isVolatile, Alignment);
2311          break;
2312        } else if (CFP->getValueType(0) == MVT::f64) {
2313          // If this target supports 64-bit registers, do a single 64-bit store.
2314          if (getTypeAction(MVT::i64) == Legal) {
2315            Tmp3 = DAG.getConstant(CFP->getValueAPF().convertToAPInt().
2316                                     getZExtValue(), MVT::i64);
2317            Result = DAG.getStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(),
2318                                  SVOffset, isVolatile, Alignment);
2319            break;
2320          } else if (getTypeAction(MVT::i32) == Legal) {
2321            // Otherwise, if the target supports 32-bit registers, use 2 32-bit
2322            // stores.  If the target supports neither 32- nor 64-bits, this
2323            // xform is certainly not worth it.
2324            uint64_t IntVal =CFP->getValueAPF().convertToAPInt().getZExtValue();
2325            SDOperand Lo = DAG.getConstant(uint32_t(IntVal), MVT::i32);
2326            SDOperand Hi = DAG.getConstant(uint32_t(IntVal >>32), MVT::i32);
2327            if (TLI.isBigEndian()) std::swap(Lo, Hi);
2328
2329            Lo = DAG.getStore(Tmp1, Lo, Tmp2, ST->getSrcValue(),
2330                              SVOffset, isVolatile, Alignment);
2331            Tmp2 = DAG.getNode(ISD::ADD, Tmp2.getValueType(), Tmp2,
2332                               DAG.getIntPtrConstant(4));
2333            Hi = DAG.getStore(Tmp1, Hi, Tmp2, ST->getSrcValue(), SVOffset+4,
2334                              isVolatile, MinAlign(Alignment, 4U));
2335
2336            Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo, Hi);
2337            break;
2338          }
2339        }
2340      }
2341
2342      switch (getTypeAction(ST->getMemoryVT())) {
2343      case Legal: {
2344        Tmp3 = LegalizeOp(ST->getValue());
2345        Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp3, Tmp2,
2346                                        ST->getOffset());
2347
2348        MVT::ValueType VT = Tmp3.getValueType();
2349        switch (TLI.getOperationAction(ISD::STORE, VT)) {
2350        default: assert(0 && "This action is not supported yet!");
2351        case TargetLowering::Legal:
2352          // If this is an unaligned store and the target doesn't support it,
2353          // expand it.
2354          if (!TLI.allowsUnalignedMemoryAccesses()) {
2355            unsigned ABIAlignment = TLI.getTargetData()->
2356              getABITypeAlignment(MVT::getTypeForValueType(ST->getMemoryVT()));
2357            if (ST->getAlignment() < ABIAlignment)
2358              Result = ExpandUnalignedStore(cast<StoreSDNode>(Result.Val), DAG,
2359                                            TLI);
2360          }
2361          break;
2362        case TargetLowering::Custom:
2363          Tmp1 = TLI.LowerOperation(Result, DAG);
2364          if (Tmp1.Val) Result = Tmp1;
2365          break;
2366        case TargetLowering::Promote:
2367          assert(MVT::isVector(VT) && "Unknown legal promote case!");
2368          Tmp3 = DAG.getNode(ISD::BIT_CONVERT,
2369                             TLI.getTypeToPromoteTo(ISD::STORE, VT), Tmp3);
2370          Result = DAG.getStore(Tmp1, Tmp3, Tmp2,
2371                                ST->getSrcValue(), SVOffset, isVolatile,
2372                                Alignment);
2373          break;
2374        }
2375        break;
2376      }
2377      case Promote:
2378        // Truncate the value and store the result.
2379        Tmp3 = PromoteOp(ST->getValue());
2380        Result = DAG.getTruncStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(),
2381                                   SVOffset, ST->getMemoryVT(),
2382                                   isVolatile, Alignment);
2383        break;
2384
2385      case Expand:
2386        unsigned IncrementSize = 0;
2387        SDOperand Lo, Hi;
2388
2389        // If this is a vector type, then we have to calculate the increment as
2390        // the product of the element size in bytes, and the number of elements
2391        // in the high half of the vector.
2392        if (MVT::isVector(ST->getValue().getValueType())) {
2393          SDNode *InVal = ST->getValue().Val;
2394          int InIx = ST->getValue().ResNo;
2395          MVT::ValueType InVT = InVal->getValueType(InIx);
2396          unsigned NumElems = MVT::getVectorNumElements(InVT);
2397          MVT::ValueType EVT = MVT::getVectorElementType(InVT);
2398
2399          // Figure out if there is a simple type corresponding to this Vector
2400          // type.  If so, convert to the vector type.
2401          MVT::ValueType TVT = MVT::getVectorType(EVT, NumElems);
2402          if (TLI.isTypeLegal(TVT)) {
2403            // Turn this into a normal store of the vector type.
2404            Tmp3 = LegalizeOp(ST->getValue());
2405            Result = DAG.getStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(),
2406                                  SVOffset, isVolatile, Alignment);
2407            Result = LegalizeOp(Result);
2408            break;
2409          } else if (NumElems == 1) {
2410            // Turn this into a normal store of the scalar type.
2411            Tmp3 = ScalarizeVectorOp(ST->getValue());
2412            Result = DAG.getStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(),
2413                                  SVOffset, isVolatile, Alignment);
2414            // The scalarized value type may not be legal, e.g. it might require
2415            // promotion or expansion.  Relegalize the scalar store.
2416            Result = LegalizeOp(Result);
2417            break;
2418          } else {
2419            SplitVectorOp(ST->getValue(), Lo, Hi);
2420            IncrementSize = MVT::getVectorNumElements(Lo.Val->getValueType(0)) *
2421                            MVT::getSizeInBits(EVT)/8;
2422          }
2423        } else {
2424          ExpandOp(ST->getValue(), Lo, Hi);
2425          IncrementSize = Hi.Val ? MVT::getSizeInBits(Hi.getValueType())/8 : 0;
2426
2427          if (TLI.isBigEndian())
2428            std::swap(Lo, Hi);
2429        }
2430
2431        Lo = DAG.getStore(Tmp1, Lo, Tmp2, ST->getSrcValue(),
2432                          SVOffset, isVolatile, Alignment);
2433
2434        if (Hi.Val == NULL) {
2435          // Must be int <-> float one-to-one expansion.
2436          Result = Lo;
2437          break;
2438        }
2439
2440        Tmp2 = DAG.getNode(ISD::ADD, Tmp2.getValueType(), Tmp2,
2441                           DAG.getIntPtrConstant(IncrementSize));
2442        assert(isTypeLegal(Tmp2.getValueType()) &&
2443               "Pointers must be legal!");
2444        SVOffset += IncrementSize;
2445        Alignment = MinAlign(Alignment, IncrementSize);
2446        Hi = DAG.getStore(Tmp1, Hi, Tmp2, ST->getSrcValue(),
2447                          SVOffset, isVolatile, Alignment);
2448        Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo, Hi);
2449        break;
2450      }
2451    } else {
2452      switch (getTypeAction(ST->getValue().getValueType())) {
2453      case Legal:
2454        Tmp3 = LegalizeOp(ST->getValue());
2455        break;
2456      case Promote:
2457        // We can promote the value, the truncstore will still take care of it.
2458        Tmp3 = PromoteOp(ST->getValue());
2459        break;
2460      case Expand:
2461        // Just store the low part.  This may become a non-trunc store, so make
2462        // sure to use getTruncStore, not UpdateNodeOperands below.
2463        ExpandOp(ST->getValue(), Tmp3, Tmp4);
2464        return DAG.getTruncStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(),
2465                                 SVOffset, MVT::i8, isVolatile, Alignment);
2466      }
2467
2468      MVT::ValueType StVT = ST->getMemoryVT();
2469      unsigned StWidth = MVT::getSizeInBits(StVT);
2470
2471      if (StWidth != MVT::getStoreSizeInBits(StVT)) {
2472        // Promote to a byte-sized store with upper bits zero if not
2473        // storing an integral number of bytes.  For example, promote
2474        // TRUNCSTORE:i1 X -> TRUNCSTORE:i8 (and X, 1)
2475        MVT::ValueType NVT = MVT::getIntegerType(MVT::getStoreSizeInBits(StVT));
2476        Tmp3 = DAG.getZeroExtendInReg(Tmp3, StVT);
2477        Result = DAG.getTruncStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(),
2478                                   SVOffset, NVT, isVolatile, Alignment);
2479      } else if (StWidth & (StWidth - 1)) {
2480        // If not storing a power-of-2 number of bits, expand as two stores.
2481        assert(MVT::isExtendedVT(StVT) && !MVT::isVector(StVT) &&
2482               "Unsupported truncstore!");
2483        unsigned RoundWidth = 1 << Log2_32(StWidth);
2484        assert(RoundWidth < StWidth);
2485        unsigned ExtraWidth = StWidth - RoundWidth;
2486        assert(ExtraWidth < RoundWidth);
2487        assert(!(RoundWidth % 8) && !(ExtraWidth % 8) &&
2488               "Store size not an integral number of bytes!");
2489        MVT::ValueType RoundVT = MVT::getIntegerType(RoundWidth);
2490        MVT::ValueType ExtraVT = MVT::getIntegerType(ExtraWidth);
2491        SDOperand Lo, Hi;
2492        unsigned IncrementSize;
2493
2494        if (TLI.isLittleEndian()) {
2495          // TRUNCSTORE:i24 X -> TRUNCSTORE:i16 X, TRUNCSTORE@+2:i8 (srl X, 16)
2496          // Store the bottom RoundWidth bits.
2497          Lo = DAG.getTruncStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(),
2498                                 SVOffset, RoundVT,
2499                                 isVolatile, Alignment);
2500
2501          // Store the remaining ExtraWidth bits.
2502          IncrementSize = RoundWidth / 8;
2503          Tmp2 = DAG.getNode(ISD::ADD, Tmp2.getValueType(), Tmp2,
2504                             DAG.getIntPtrConstant(IncrementSize));
2505          Hi = DAG.getNode(ISD::SRL, Tmp3.getValueType(), Tmp3,
2506                           DAG.getConstant(RoundWidth, TLI.getShiftAmountTy()));
2507          Hi = DAG.getTruncStore(Tmp1, Hi, Tmp2, ST->getSrcValue(),
2508                                 SVOffset + IncrementSize, ExtraVT, isVolatile,
2509                                 MinAlign(Alignment, IncrementSize));
2510        } else {
2511          // Big endian - avoid unaligned stores.
2512          // TRUNCSTORE:i24 X -> TRUNCSTORE:i16 (srl X, 8), TRUNCSTORE@+2:i8 X
2513          // Store the top RoundWidth bits.
2514          Hi = DAG.getNode(ISD::SRL, Tmp3.getValueType(), Tmp3,
2515                           DAG.getConstant(ExtraWidth, TLI.getShiftAmountTy()));
2516          Hi = DAG.getTruncStore(Tmp1, Hi, Tmp2, ST->getSrcValue(), SVOffset,
2517                                 RoundVT, isVolatile, Alignment);
2518
2519          // Store the remaining ExtraWidth bits.
2520          IncrementSize = RoundWidth / 8;
2521          Tmp2 = DAG.getNode(ISD::ADD, Tmp2.getValueType(), Tmp2,
2522                             DAG.getIntPtrConstant(IncrementSize));
2523          Lo = DAG.getTruncStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(),
2524                                 SVOffset + IncrementSize, ExtraVT, isVolatile,
2525                                 MinAlign(Alignment, IncrementSize));
2526        }
2527
2528        // The order of the stores doesn't matter.
2529        Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo, Hi);
2530      } else {
2531        if (Tmp1 != ST->getChain() || Tmp3 != ST->getValue() ||
2532            Tmp2 != ST->getBasePtr())
2533          Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp3, Tmp2,
2534                                          ST->getOffset());
2535
2536        switch (TLI.getTruncStoreAction(ST->getValue().getValueType(), StVT)) {
2537        default: assert(0 && "This action is not supported yet!");
2538        case TargetLowering::Legal:
2539          // If this is an unaligned store and the target doesn't support it,
2540          // expand it.
2541          if (!TLI.allowsUnalignedMemoryAccesses()) {
2542            unsigned ABIAlignment = TLI.getTargetData()->
2543              getABITypeAlignment(MVT::getTypeForValueType(ST->getMemoryVT()));
2544            if (ST->getAlignment() < ABIAlignment)
2545              Result = ExpandUnalignedStore(cast<StoreSDNode>(Result.Val), DAG,
2546                                            TLI);
2547          }
2548          break;
2549        case TargetLowering::Custom:
2550          Result = TLI.LowerOperation(Result, DAG);
2551          break;
2552        case Expand:
2553          // TRUNCSTORE:i16 i32 -> STORE i16
2554          assert(isTypeLegal(StVT) && "Do not know how to expand this store!");
2555          Tmp3 = DAG.getNode(ISD::TRUNCATE, StVT, Tmp3);
2556          Result = DAG.getStore(Tmp1, Tmp3, Tmp2, ST->getSrcValue(), SVOffset,
2557                                isVolatile, Alignment);
2558          break;
2559        }
2560      }
2561    }
2562    break;
2563  }
2564  case ISD::PCMARKER:
2565    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
2566    Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1));
2567    break;
2568  case ISD::STACKSAVE:
2569    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
2570    Result = DAG.UpdateNodeOperands(Result, Tmp1);
2571    Tmp1 = Result.getValue(0);
2572    Tmp2 = Result.getValue(1);
2573
2574    switch (TLI.getOperationAction(ISD::STACKSAVE, MVT::Other)) {
2575    default: assert(0 && "This action is not supported yet!");
2576    case TargetLowering::Legal: break;
2577    case TargetLowering::Custom:
2578      Tmp3 = TLI.LowerOperation(Result, DAG);
2579      if (Tmp3.Val) {
2580        Tmp1 = LegalizeOp(Tmp3);
2581        Tmp2 = LegalizeOp(Tmp3.getValue(1));
2582      }
2583      break;
2584    case TargetLowering::Expand:
2585      // Expand to CopyFromReg if the target set
2586      // StackPointerRegisterToSaveRestore.
2587      if (unsigned SP = TLI.getStackPointerRegisterToSaveRestore()) {
2588        Tmp1 = DAG.getCopyFromReg(Result.getOperand(0), SP,
2589                                  Node->getValueType(0));
2590        Tmp2 = Tmp1.getValue(1);
2591      } else {
2592        Tmp1 = DAG.getNode(ISD::UNDEF, Node->getValueType(0));
2593        Tmp2 = Node->getOperand(0);
2594      }
2595      break;
2596    }
2597
2598    // Since stacksave produce two values, make sure to remember that we
2599    // legalized both of them.
2600    AddLegalizedOperand(SDOperand(Node, 0), Tmp1);
2601    AddLegalizedOperand(SDOperand(Node, 1), Tmp2);
2602    return Op.ResNo ? Tmp2 : Tmp1;
2603
2604  case ISD::STACKRESTORE:
2605    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
2606    Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the pointer.
2607    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
2608
2609    switch (TLI.getOperationAction(ISD::STACKRESTORE, MVT::Other)) {
2610    default: assert(0 && "This action is not supported yet!");
2611    case TargetLowering::Legal: break;
2612    case TargetLowering::Custom:
2613      Tmp1 = TLI.LowerOperation(Result, DAG);
2614      if (Tmp1.Val) Result = Tmp1;
2615      break;
2616    case TargetLowering::Expand:
2617      // Expand to CopyToReg if the target set
2618      // StackPointerRegisterToSaveRestore.
2619      if (unsigned SP = TLI.getStackPointerRegisterToSaveRestore()) {
2620        Result = DAG.getCopyToReg(Tmp1, SP, Tmp2);
2621      } else {
2622        Result = Tmp1;
2623      }
2624      break;
2625    }
2626    break;
2627
2628  case ISD::READCYCLECOUNTER:
2629    Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain
2630    Result = DAG.UpdateNodeOperands(Result, Tmp1);
2631    switch (TLI.getOperationAction(ISD::READCYCLECOUNTER,
2632                                   Node->getValueType(0))) {
2633    default: assert(0 && "This action is not supported yet!");
2634    case TargetLowering::Legal:
2635      Tmp1 = Result.getValue(0);
2636      Tmp2 = Result.getValue(1);
2637      break;
2638    case TargetLowering::Custom:
2639      Result = TLI.LowerOperation(Result, DAG);
2640      Tmp1 = LegalizeOp(Result.getValue(0));
2641      Tmp2 = LegalizeOp(Result.getValue(1));
2642      break;
2643    }
2644
2645    // Since rdcc produce two values, make sure to remember that we legalized
2646    // both of them.
2647    AddLegalizedOperand(SDOperand(Node, 0), Tmp1);
2648    AddLegalizedOperand(SDOperand(Node, 1), Tmp2);
2649    return Result;
2650
2651  case ISD::SELECT:
2652    switch (getTypeAction(Node->getOperand(0).getValueType())) {
2653    case Expand: assert(0 && "It's impossible to expand bools");
2654    case Legal:
2655      Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the condition.
2656      break;
2657    case Promote: {
2658      Tmp1 = PromoteOp(Node->getOperand(0));  // Promote the condition.
2659      // Make sure the condition is either zero or one.
2660      unsigned BitWidth = Tmp1.getValueSizeInBits();
2661      if (!DAG.MaskedValueIsZero(Tmp1,
2662                                 APInt::getHighBitsSet(BitWidth, BitWidth-1)))
2663        Tmp1 = DAG.getZeroExtendInReg(Tmp1, MVT::i1);
2664      break;
2665    }
2666    }
2667    Tmp2 = LegalizeOp(Node->getOperand(1));   // TrueVal
2668    Tmp3 = LegalizeOp(Node->getOperand(2));   // FalseVal
2669
2670    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
2671
2672    switch (TLI.getOperationAction(ISD::SELECT, Tmp2.getValueType())) {
2673    default: assert(0 && "This action is not supported yet!");
2674    case TargetLowering::Legal: break;
2675    case TargetLowering::Custom: {
2676      Tmp1 = TLI.LowerOperation(Result, DAG);
2677      if (Tmp1.Val) Result = Tmp1;
2678      break;
2679    }
2680    case TargetLowering::Expand:
2681      if (Tmp1.getOpcode() == ISD::SETCC) {
2682        Result = DAG.getSelectCC(Tmp1.getOperand(0), Tmp1.getOperand(1),
2683                              Tmp2, Tmp3,
2684                              cast<CondCodeSDNode>(Tmp1.getOperand(2))->get());
2685      } else {
2686        Result = DAG.getSelectCC(Tmp1,
2687                                 DAG.getConstant(0, Tmp1.getValueType()),
2688                                 Tmp2, Tmp3, ISD::SETNE);
2689      }
2690      break;
2691    case TargetLowering::Promote: {
2692      MVT::ValueType NVT =
2693        TLI.getTypeToPromoteTo(ISD::SELECT, Tmp2.getValueType());
2694      unsigned ExtOp, TruncOp;
2695      if (MVT::isVector(Tmp2.getValueType())) {
2696        ExtOp   = ISD::BIT_CONVERT;
2697        TruncOp = ISD::BIT_CONVERT;
2698      } else if (MVT::isInteger(Tmp2.getValueType())) {
2699        ExtOp   = ISD::ANY_EXTEND;
2700        TruncOp = ISD::TRUNCATE;
2701      } else {
2702        ExtOp   = ISD::FP_EXTEND;
2703        TruncOp = ISD::FP_ROUND;
2704      }
2705      // Promote each of the values to the new type.
2706      Tmp2 = DAG.getNode(ExtOp, NVT, Tmp2);
2707      Tmp3 = DAG.getNode(ExtOp, NVT, Tmp3);
2708      // Perform the larger operation, then round down.
2709      Result = DAG.getNode(ISD::SELECT, NVT, Tmp1, Tmp2,Tmp3);
2710      if (TruncOp != ISD::FP_ROUND)
2711        Result = DAG.getNode(TruncOp, Node->getValueType(0), Result);
2712      else
2713        Result = DAG.getNode(TruncOp, Node->getValueType(0), Result,
2714                             DAG.getIntPtrConstant(0));
2715      break;
2716    }
2717    }
2718    break;
2719  case ISD::SELECT_CC: {
2720    Tmp1 = Node->getOperand(0);               // LHS
2721    Tmp2 = Node->getOperand(1);               // RHS
2722    Tmp3 = LegalizeOp(Node->getOperand(2));   // True
2723    Tmp4 = LegalizeOp(Node->getOperand(3));   // False
2724    SDOperand CC = Node->getOperand(4);
2725
2726    LegalizeSetCCOperands(Tmp1, Tmp2, CC);
2727
2728    // If we didn't get both a LHS and RHS back from LegalizeSetCCOperands,
2729    // the LHS is a legal SETCC itself.  In this case, we need to compare
2730    // the result against zero to select between true and false values.
2731    if (Tmp2.Val == 0) {
2732      Tmp2 = DAG.getConstant(0, Tmp1.getValueType());
2733      CC = DAG.getCondCode(ISD::SETNE);
2734    }
2735    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3, Tmp4, CC);
2736
2737    // Everything is legal, see if we should expand this op or something.
2738    switch (TLI.getOperationAction(ISD::SELECT_CC, Tmp3.getValueType())) {
2739    default: assert(0 && "This action is not supported yet!");
2740    case TargetLowering::Legal: break;
2741    case TargetLowering::Custom:
2742      Tmp1 = TLI.LowerOperation(Result, DAG);
2743      if (Tmp1.Val) Result = Tmp1;
2744      break;
2745    }
2746    break;
2747  }
2748  case ISD::SETCC:
2749    Tmp1 = Node->getOperand(0);
2750    Tmp2 = Node->getOperand(1);
2751    Tmp3 = Node->getOperand(2);
2752    LegalizeSetCCOperands(Tmp1, Tmp2, Tmp3);
2753
2754    // If we had to Expand the SetCC operands into a SELECT node, then it may
2755    // not always be possible to return a true LHS & RHS.  In this case, just
2756    // return the value we legalized, returned in the LHS
2757    if (Tmp2.Val == 0) {
2758      Result = Tmp1;
2759      break;
2760    }
2761
2762    switch (TLI.getOperationAction(ISD::SETCC, Tmp1.getValueType())) {
2763    default: assert(0 && "Cannot handle this action for SETCC yet!");
2764    case TargetLowering::Custom:
2765      isCustom = true;
2766      // FALLTHROUGH.
2767    case TargetLowering::Legal:
2768      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
2769      if (isCustom) {
2770        Tmp4 = TLI.LowerOperation(Result, DAG);
2771        if (Tmp4.Val) Result = Tmp4;
2772      }
2773      break;
2774    case TargetLowering::Promote: {
2775      // First step, figure out the appropriate operation to use.
2776      // Allow SETCC to not be supported for all legal data types
2777      // Mostly this targets FP
2778      MVT::ValueType NewInTy = Node->getOperand(0).getValueType();
2779      MVT::ValueType OldVT = NewInTy; OldVT = OldVT;
2780
2781      // Scan for the appropriate larger type to use.
2782      while (1) {
2783        NewInTy = (MVT::ValueType)(NewInTy+1);
2784
2785        assert(MVT::isInteger(NewInTy) == MVT::isInteger(OldVT) &&
2786               "Fell off of the edge of the integer world");
2787        assert(MVT::isFloatingPoint(NewInTy) == MVT::isFloatingPoint(OldVT) &&
2788               "Fell off of the edge of the floating point world");
2789
2790        // If the target supports SETCC of this type, use it.
2791        if (TLI.isOperationLegal(ISD::SETCC, NewInTy))
2792          break;
2793      }
2794      if (MVT::isInteger(NewInTy))
2795        assert(0 && "Cannot promote Legal Integer SETCC yet");
2796      else {
2797        Tmp1 = DAG.getNode(ISD::FP_EXTEND, NewInTy, Tmp1);
2798        Tmp2 = DAG.getNode(ISD::FP_EXTEND, NewInTy, Tmp2);
2799      }
2800      Tmp1 = LegalizeOp(Tmp1);
2801      Tmp2 = LegalizeOp(Tmp2);
2802      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
2803      Result = LegalizeOp(Result);
2804      break;
2805    }
2806    case TargetLowering::Expand:
2807      // Expand a setcc node into a select_cc of the same condition, lhs, and
2808      // rhs that selects between const 1 (true) and const 0 (false).
2809      MVT::ValueType VT = Node->getValueType(0);
2810      Result = DAG.getNode(ISD::SELECT_CC, VT, Tmp1, Tmp2,
2811                           DAG.getConstant(1, VT), DAG.getConstant(0, VT),
2812                           Tmp3);
2813      break;
2814    }
2815    break;
2816  case ISD::MEMSET:
2817  case ISD::MEMCPY:
2818  case ISD::MEMMOVE: {
2819    Tmp1 = LegalizeOp(Node->getOperand(0));      // Chain
2820    Tmp2 = LegalizeOp(Node->getOperand(1));      // Pointer
2821
2822    if (Node->getOpcode() == ISD::MEMSET) {      // memset = ubyte
2823      switch (getTypeAction(Node->getOperand(2).getValueType())) {
2824      case Expand: assert(0 && "Cannot expand a byte!");
2825      case Legal:
2826        Tmp3 = LegalizeOp(Node->getOperand(2));
2827        break;
2828      case Promote:
2829        Tmp3 = PromoteOp(Node->getOperand(2));
2830        break;
2831      }
2832    } else {
2833      Tmp3 = LegalizeOp(Node->getOperand(2));    // memcpy/move = pointer,
2834    }
2835
2836    SDOperand Tmp4;
2837    switch (getTypeAction(Node->getOperand(3).getValueType())) {
2838    case Expand: {
2839      // Length is too big, just take the lo-part of the length.
2840      SDOperand HiPart;
2841      ExpandOp(Node->getOperand(3), Tmp4, HiPart);
2842      break;
2843    }
2844    case Legal:
2845      Tmp4 = LegalizeOp(Node->getOperand(3));
2846      break;
2847    case Promote:
2848      Tmp4 = PromoteOp(Node->getOperand(3));
2849      break;
2850    }
2851
2852    SDOperand Tmp5;
2853    switch (getTypeAction(Node->getOperand(4).getValueType())) {  // uint
2854    case Expand: assert(0 && "Cannot expand this yet!");
2855    case Legal:
2856      Tmp5 = LegalizeOp(Node->getOperand(4));
2857      break;
2858    case Promote:
2859      Tmp5 = PromoteOp(Node->getOperand(4));
2860      break;
2861    }
2862
2863    SDOperand Tmp6;
2864    switch (getTypeAction(Node->getOperand(5).getValueType())) {  // bool
2865    case Expand: assert(0 && "Cannot expand this yet!");
2866    case Legal:
2867      Tmp6 = LegalizeOp(Node->getOperand(5));
2868      break;
2869    case Promote:
2870      Tmp6 = PromoteOp(Node->getOperand(5));
2871      break;
2872    }
2873
2874    switch (TLI.getOperationAction(Node->getOpcode(), MVT::Other)) {
2875    default: assert(0 && "This action not implemented for this operation!");
2876    case TargetLowering::Custom:
2877      isCustom = true;
2878      // FALLTHROUGH
2879    case TargetLowering::Legal: {
2880      SDOperand Ops[] = { Tmp1, Tmp2, Tmp3, Tmp4, Tmp5, Tmp6 };
2881      Result = DAG.UpdateNodeOperands(Result, Ops, 6);
2882      if (isCustom) {
2883        Tmp1 = TLI.LowerOperation(Result, DAG);
2884        if (Tmp1.Val) Result = Tmp1;
2885      }
2886      break;
2887    }
2888    case TargetLowering::Expand: {
2889      // Otherwise, the target does not support this operation.  Lower the
2890      // operation to an explicit libcall as appropriate.
2891      MVT::ValueType IntPtr = TLI.getPointerTy();
2892      const Type *IntPtrTy = TLI.getTargetData()->getIntPtrType();
2893      TargetLowering::ArgListTy Args;
2894      TargetLowering::ArgListEntry Entry;
2895
2896      const char *FnName = 0;
2897      if (Node->getOpcode() == ISD::MEMSET) {
2898        Entry.Node = Tmp2; Entry.Ty = IntPtrTy;
2899        Args.push_back(Entry);
2900        // Extend the (previously legalized) ubyte argument to be an int value
2901        // for the call.
2902        if (Tmp3.getValueType() > MVT::i32)
2903          Tmp3 = DAG.getNode(ISD::TRUNCATE, MVT::i32, Tmp3);
2904        else
2905          Tmp3 = DAG.getNode(ISD::ZERO_EXTEND, MVT::i32, Tmp3);
2906        Entry.Node = Tmp3; Entry.Ty = Type::Int32Ty; Entry.isSExt = true;
2907        Args.push_back(Entry);
2908        Entry.Node = Tmp4; Entry.Ty = IntPtrTy; Entry.isSExt = false;
2909        Args.push_back(Entry);
2910
2911        FnName = "memset";
2912      } else if (Node->getOpcode() == ISD::MEMCPY ||
2913                 Node->getOpcode() == ISD::MEMMOVE) {
2914        Entry.Ty = IntPtrTy;
2915        Entry.Node = Tmp2; Args.push_back(Entry);
2916        Entry.Node = Tmp3; Args.push_back(Entry);
2917        Entry.Node = Tmp4; Args.push_back(Entry);
2918        FnName = Node->getOpcode() == ISD::MEMMOVE ? "memmove" : "memcpy";
2919      } else {
2920        assert(0 && "Unknown op!");
2921      }
2922
2923      std::pair<SDOperand,SDOperand> CallResult =
2924        TLI.LowerCallTo(Tmp1, Type::VoidTy,
2925                        false, false, false, CallingConv::C, false,
2926                        DAG.getExternalSymbol(FnName, IntPtr), Args, DAG);
2927      Result = CallResult.second;
2928      break;
2929    }
2930    }
2931    break;
2932  }
2933
2934  case ISD::SHL_PARTS:
2935  case ISD::SRA_PARTS:
2936  case ISD::SRL_PARTS: {
2937    SmallVector<SDOperand, 8> Ops;
2938    bool Changed = false;
2939    for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
2940      Ops.push_back(LegalizeOp(Node->getOperand(i)));
2941      Changed |= Ops.back() != Node->getOperand(i);
2942    }
2943    if (Changed)
2944      Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
2945
2946    switch (TLI.getOperationAction(Node->getOpcode(),
2947                                   Node->getValueType(0))) {
2948    default: assert(0 && "This action is not supported yet!");
2949    case TargetLowering::Legal: break;
2950    case TargetLowering::Custom:
2951      Tmp1 = TLI.LowerOperation(Result, DAG);
2952      if (Tmp1.Val) {
2953        SDOperand Tmp2, RetVal(0, 0);
2954        for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i) {
2955          Tmp2 = LegalizeOp(Tmp1.getValue(i));
2956          AddLegalizedOperand(SDOperand(Node, i), Tmp2);
2957          if (i == Op.ResNo)
2958            RetVal = Tmp2;
2959        }
2960        assert(RetVal.Val && "Illegal result number");
2961        return RetVal;
2962      }
2963      break;
2964    }
2965
2966    // Since these produce multiple values, make sure to remember that we
2967    // legalized all of them.
2968    for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
2969      AddLegalizedOperand(SDOperand(Node, i), Result.getValue(i));
2970    return Result.getValue(Op.ResNo);
2971  }
2972
2973    // Binary operators
2974  case ISD::ADD:
2975  case ISD::SUB:
2976  case ISD::MUL:
2977  case ISD::MULHS:
2978  case ISD::MULHU:
2979  case ISD::UDIV:
2980  case ISD::SDIV:
2981  case ISD::AND:
2982  case ISD::OR:
2983  case ISD::XOR:
2984  case ISD::SHL:
2985  case ISD::SRL:
2986  case ISD::SRA:
2987  case ISD::FADD:
2988  case ISD::FSUB:
2989  case ISD::FMUL:
2990  case ISD::FDIV:
2991  case ISD::FPOW:
2992    Tmp1 = LegalizeOp(Node->getOperand(0));   // LHS
2993    switch (getTypeAction(Node->getOperand(1).getValueType())) {
2994    case Expand: assert(0 && "Not possible");
2995    case Legal:
2996      Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the RHS.
2997      break;
2998    case Promote:
2999      Tmp2 = PromoteOp(Node->getOperand(1));  // Promote the RHS.
3000      break;
3001    }
3002
3003    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
3004
3005    switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) {
3006    default: assert(0 && "BinOp legalize operation not supported");
3007    case TargetLowering::Legal: break;
3008    case TargetLowering::Custom:
3009      Tmp1 = TLI.LowerOperation(Result, DAG);
3010      if (Tmp1.Val) Result = Tmp1;
3011      break;
3012    case TargetLowering::Expand: {
3013      MVT::ValueType VT = Op.getValueType();
3014
3015      // See if multiply or divide can be lowered using two-result operations.
3016      SDVTList VTs = DAG.getVTList(VT, VT);
3017      if (Node->getOpcode() == ISD::MUL) {
3018        // We just need the low half of the multiply; try both the signed
3019        // and unsigned forms. If the target supports both SMUL_LOHI and
3020        // UMUL_LOHI, form a preference by checking which forms of plain
3021        // MULH it supports.
3022        bool HasSMUL_LOHI = TLI.isOperationLegal(ISD::SMUL_LOHI, VT);
3023        bool HasUMUL_LOHI = TLI.isOperationLegal(ISD::UMUL_LOHI, VT);
3024        bool HasMULHS = TLI.isOperationLegal(ISD::MULHS, VT);
3025        bool HasMULHU = TLI.isOperationLegal(ISD::MULHU, VT);
3026        unsigned OpToUse = 0;
3027        if (HasSMUL_LOHI && !HasMULHS) {
3028          OpToUse = ISD::SMUL_LOHI;
3029        } else if (HasUMUL_LOHI && !HasMULHU) {
3030          OpToUse = ISD::UMUL_LOHI;
3031        } else if (HasSMUL_LOHI) {
3032          OpToUse = ISD::SMUL_LOHI;
3033        } else if (HasUMUL_LOHI) {
3034          OpToUse = ISD::UMUL_LOHI;
3035        }
3036        if (OpToUse) {
3037          Result = SDOperand(DAG.getNode(OpToUse, VTs, Tmp1, Tmp2).Val, 0);
3038          break;
3039        }
3040      }
3041      if (Node->getOpcode() == ISD::MULHS &&
3042          TLI.isOperationLegal(ISD::SMUL_LOHI, VT)) {
3043        Result = SDOperand(DAG.getNode(ISD::SMUL_LOHI, VTs, Tmp1, Tmp2).Val, 1);
3044        break;
3045      }
3046      if (Node->getOpcode() == ISD::MULHU &&
3047          TLI.isOperationLegal(ISD::UMUL_LOHI, VT)) {
3048        Result = SDOperand(DAG.getNode(ISD::UMUL_LOHI, VTs, Tmp1, Tmp2).Val, 1);
3049        break;
3050      }
3051      if (Node->getOpcode() == ISD::SDIV &&
3052          TLI.isOperationLegal(ISD::SDIVREM, VT)) {
3053        Result = SDOperand(DAG.getNode(ISD::SDIVREM, VTs, Tmp1, Tmp2).Val, 0);
3054        break;
3055      }
3056      if (Node->getOpcode() == ISD::UDIV &&
3057          TLI.isOperationLegal(ISD::UDIVREM, VT)) {
3058        Result = SDOperand(DAG.getNode(ISD::UDIVREM, VTs, Tmp1, Tmp2).Val, 0);
3059        break;
3060      }
3061
3062      // Check to see if we have a libcall for this operator.
3063      RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
3064      bool isSigned = false;
3065      switch (Node->getOpcode()) {
3066      case ISD::UDIV:
3067      case ISD::SDIV:
3068        if (VT == MVT::i32) {
3069          LC = Node->getOpcode() == ISD::UDIV
3070            ? RTLIB::UDIV_I32 : RTLIB::SDIV_I32;
3071          isSigned = Node->getOpcode() == ISD::SDIV;
3072        }
3073        break;
3074      case ISD::FPOW:
3075        LC = GetFPLibCall(VT, RTLIB::POW_F32, RTLIB::POW_F64, RTLIB::POW_F80,
3076                          RTLIB::POW_PPCF128);
3077        break;
3078      default: break;
3079      }
3080      if (LC != RTLIB::UNKNOWN_LIBCALL) {
3081        SDOperand Dummy;
3082        Result = ExpandLibCall(TLI.getLibcallName(LC), Node, isSigned, Dummy);
3083        break;
3084      }
3085
3086      assert(MVT::isVector(Node->getValueType(0)) &&
3087             "Cannot expand this binary operator!");
3088      // Expand the operation into a bunch of nasty scalar code.
3089      Result = LegalizeOp(UnrollVectorOp(Op));
3090      break;
3091    }
3092    case TargetLowering::Promote: {
3093      switch (Node->getOpcode()) {
3094      default:  assert(0 && "Do not know how to promote this BinOp!");
3095      case ISD::AND:
3096      case ISD::OR:
3097      case ISD::XOR: {
3098        MVT::ValueType OVT = Node->getValueType(0);
3099        MVT::ValueType NVT = TLI.getTypeToPromoteTo(Node->getOpcode(), OVT);
3100        assert(MVT::isVector(OVT) && "Cannot promote this BinOp!");
3101        // Bit convert each of the values to the new type.
3102        Tmp1 = DAG.getNode(ISD::BIT_CONVERT, NVT, Tmp1);
3103        Tmp2 = DAG.getNode(ISD::BIT_CONVERT, NVT, Tmp2);
3104        Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1, Tmp2);
3105        // Bit convert the result back the original type.
3106        Result = DAG.getNode(ISD::BIT_CONVERT, OVT, Result);
3107        break;
3108      }
3109      }
3110    }
3111    }
3112    break;
3113
3114  case ISD::SMUL_LOHI:
3115  case ISD::UMUL_LOHI:
3116  case ISD::SDIVREM:
3117  case ISD::UDIVREM:
3118    // These nodes will only be produced by target-specific lowering, so
3119    // they shouldn't be here if they aren't legal.
3120    assert(TLI.isOperationLegal(Node->getOpcode(), Node->getValueType(0)) &&
3121           "This must be legal!");
3122
3123    Tmp1 = LegalizeOp(Node->getOperand(0));   // LHS
3124    Tmp2 = LegalizeOp(Node->getOperand(1));   // RHS
3125    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
3126    break;
3127
3128  case ISD::FCOPYSIGN:  // FCOPYSIGN does not require LHS/RHS to match type!
3129    Tmp1 = LegalizeOp(Node->getOperand(0));   // LHS
3130    switch (getTypeAction(Node->getOperand(1).getValueType())) {
3131      case Expand: assert(0 && "Not possible");
3132      case Legal:
3133        Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the RHS.
3134        break;
3135      case Promote:
3136        Tmp2 = PromoteOp(Node->getOperand(1));  // Promote the RHS.
3137        break;
3138    }
3139
3140    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
3141
3142    switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) {
3143    default: assert(0 && "Operation not supported");
3144    case TargetLowering::Custom:
3145      Tmp1 = TLI.LowerOperation(Result, DAG);
3146      if (Tmp1.Val) Result = Tmp1;
3147      break;
3148    case TargetLowering::Legal: break;
3149    case TargetLowering::Expand: {
3150      // If this target supports fabs/fneg natively and select is cheap,
3151      // do this efficiently.
3152      if (!TLI.isSelectExpensive() &&
3153          TLI.getOperationAction(ISD::FABS, Tmp1.getValueType()) ==
3154          TargetLowering::Legal &&
3155          TLI.getOperationAction(ISD::FNEG, Tmp1.getValueType()) ==
3156          TargetLowering::Legal) {
3157        // Get the sign bit of the RHS.
3158        MVT::ValueType IVT =
3159          Tmp2.getValueType() == MVT::f32 ? MVT::i32 : MVT::i64;
3160        SDOperand SignBit = DAG.getNode(ISD::BIT_CONVERT, IVT, Tmp2);
3161        SignBit = DAG.getSetCC(TLI.getSetCCResultTy(),
3162                               SignBit, DAG.getConstant(0, IVT), ISD::SETLT);
3163        // Get the absolute value of the result.
3164        SDOperand AbsVal = DAG.getNode(ISD::FABS, Tmp1.getValueType(), Tmp1);
3165        // Select between the nabs and abs value based on the sign bit of
3166        // the input.
3167        Result = DAG.getNode(ISD::SELECT, AbsVal.getValueType(), SignBit,
3168                             DAG.getNode(ISD::FNEG, AbsVal.getValueType(),
3169                                         AbsVal),
3170                             AbsVal);
3171        Result = LegalizeOp(Result);
3172        break;
3173      }
3174
3175      // Otherwise, do bitwise ops!
3176      MVT::ValueType NVT =
3177        Node->getValueType(0) == MVT::f32 ? MVT::i32 : MVT::i64;
3178      Result = ExpandFCOPYSIGNToBitwiseOps(Node, NVT, DAG, TLI);
3179      Result = DAG.getNode(ISD::BIT_CONVERT, Node->getValueType(0), Result);
3180      Result = LegalizeOp(Result);
3181      break;
3182    }
3183    }
3184    break;
3185
3186  case ISD::ADDC:
3187  case ISD::SUBC:
3188    Tmp1 = LegalizeOp(Node->getOperand(0));
3189    Tmp2 = LegalizeOp(Node->getOperand(1));
3190    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
3191    // Since this produces two values, make sure to remember that we legalized
3192    // both of them.
3193    AddLegalizedOperand(SDOperand(Node, 0), Result.getValue(0));
3194    AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1));
3195    return Result;
3196
3197  case ISD::ADDE:
3198  case ISD::SUBE:
3199    Tmp1 = LegalizeOp(Node->getOperand(0));
3200    Tmp2 = LegalizeOp(Node->getOperand(1));
3201    Tmp3 = LegalizeOp(Node->getOperand(2));
3202    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
3203    // Since this produces two values, make sure to remember that we legalized
3204    // both of them.
3205    AddLegalizedOperand(SDOperand(Node, 0), Result.getValue(0));
3206    AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1));
3207    return Result;
3208
3209  case ISD::BUILD_PAIR: {
3210    MVT::ValueType PairTy = Node->getValueType(0);
3211    // TODO: handle the case where the Lo and Hi operands are not of legal type
3212    Tmp1 = LegalizeOp(Node->getOperand(0));   // Lo
3213    Tmp2 = LegalizeOp(Node->getOperand(1));   // Hi
3214    switch (TLI.getOperationAction(ISD::BUILD_PAIR, PairTy)) {
3215    case TargetLowering::Promote:
3216    case TargetLowering::Custom:
3217      assert(0 && "Cannot promote/custom this yet!");
3218    case TargetLowering::Legal:
3219      if (Tmp1 != Node->getOperand(0) || Tmp2 != Node->getOperand(1))
3220        Result = DAG.getNode(ISD::BUILD_PAIR, PairTy, Tmp1, Tmp2);
3221      break;
3222    case TargetLowering::Expand:
3223      Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, PairTy, Tmp1);
3224      Tmp2 = DAG.getNode(ISD::ANY_EXTEND, PairTy, Tmp2);
3225      Tmp2 = DAG.getNode(ISD::SHL, PairTy, Tmp2,
3226                         DAG.getConstant(MVT::getSizeInBits(PairTy)/2,
3227                                         TLI.getShiftAmountTy()));
3228      Result = DAG.getNode(ISD::OR, PairTy, Tmp1, Tmp2);
3229      break;
3230    }
3231    break;
3232  }
3233
3234  case ISD::UREM:
3235  case ISD::SREM:
3236  case ISD::FREM:
3237    Tmp1 = LegalizeOp(Node->getOperand(0));   // LHS
3238    Tmp2 = LegalizeOp(Node->getOperand(1));   // RHS
3239
3240    switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) {
3241    case TargetLowering::Promote: assert(0 && "Cannot promote this yet!");
3242    case TargetLowering::Custom:
3243      isCustom = true;
3244      // FALLTHROUGH
3245    case TargetLowering::Legal:
3246      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
3247      if (isCustom) {
3248        Tmp1 = TLI.LowerOperation(Result, DAG);
3249        if (Tmp1.Val) Result = Tmp1;
3250      }
3251      break;
3252    case TargetLowering::Expand: {
3253      unsigned DivOpc= (Node->getOpcode() == ISD::UREM) ? ISD::UDIV : ISD::SDIV;
3254      bool isSigned = DivOpc == ISD::SDIV;
3255      MVT::ValueType VT = Node->getValueType(0);
3256
3257      // See if remainder can be lowered using two-result operations.
3258      SDVTList VTs = DAG.getVTList(VT, VT);
3259      if (Node->getOpcode() == ISD::SREM &&
3260          TLI.isOperationLegal(ISD::SDIVREM, VT)) {
3261        Result = SDOperand(DAG.getNode(ISD::SDIVREM, VTs, Tmp1, Tmp2).Val, 1);
3262        break;
3263      }
3264      if (Node->getOpcode() == ISD::UREM &&
3265          TLI.isOperationLegal(ISD::UDIVREM, VT)) {
3266        Result = SDOperand(DAG.getNode(ISD::UDIVREM, VTs, Tmp1, Tmp2).Val, 1);
3267        break;
3268      }
3269
3270      if (MVT::isInteger(VT)) {
3271        if (TLI.getOperationAction(DivOpc, VT) ==
3272            TargetLowering::Legal) {
3273          // X % Y -> X-X/Y*Y
3274          Result = DAG.getNode(DivOpc, VT, Tmp1, Tmp2);
3275          Result = DAG.getNode(ISD::MUL, VT, Result, Tmp2);
3276          Result = DAG.getNode(ISD::SUB, VT, Tmp1, Result);
3277        } else if (MVT::isVector(VT)) {
3278          Result = LegalizeOp(UnrollVectorOp(Op));
3279        } else {
3280          assert(VT == MVT::i32 &&
3281                 "Cannot expand this binary operator!");
3282          RTLIB::Libcall LC = Node->getOpcode() == ISD::UREM
3283            ? RTLIB::UREM_I32 : RTLIB::SREM_I32;
3284          SDOperand Dummy;
3285          Result = ExpandLibCall(TLI.getLibcallName(LC), Node, isSigned, Dummy);
3286        }
3287      } else {
3288        assert(MVT::isFloatingPoint(VT) &&
3289               "remainder op must have integer or floating-point type");
3290        if (MVT::isVector(VT)) {
3291          Result = LegalizeOp(UnrollVectorOp(Op));
3292        } else {
3293          // Floating point mod -> fmod libcall.
3294          RTLIB::Libcall LC = GetFPLibCall(VT, RTLIB::REM_F32, RTLIB::REM_F64,
3295                                           RTLIB::REM_F80, RTLIB::REM_PPCF128);
3296          SDOperand Dummy;
3297          Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
3298                                 false/*sign irrelevant*/, Dummy);
3299        }
3300      }
3301      break;
3302    }
3303    }
3304    break;
3305  case ISD::VAARG: {
3306    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
3307    Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the pointer.
3308
3309    MVT::ValueType VT = Node->getValueType(0);
3310    switch (TLI.getOperationAction(Node->getOpcode(), MVT::Other)) {
3311    default: assert(0 && "This action is not supported yet!");
3312    case TargetLowering::Custom:
3313      isCustom = true;
3314      // FALLTHROUGH
3315    case TargetLowering::Legal:
3316      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Node->getOperand(2));
3317      Result = Result.getValue(0);
3318      Tmp1 = Result.getValue(1);
3319
3320      if (isCustom) {
3321        Tmp2 = TLI.LowerOperation(Result, DAG);
3322        if (Tmp2.Val) {
3323          Result = LegalizeOp(Tmp2);
3324          Tmp1 = LegalizeOp(Tmp2.getValue(1));
3325        }
3326      }
3327      break;
3328    case TargetLowering::Expand: {
3329      const Value *V = cast<SrcValueSDNode>(Node->getOperand(2))->getValue();
3330      SDOperand VAList = DAG.getLoad(TLI.getPointerTy(), Tmp1, Tmp2, V, 0);
3331      // Increment the pointer, VAList, to the next vaarg
3332      Tmp3 = DAG.getNode(ISD::ADD, TLI.getPointerTy(), VAList,
3333                         DAG.getConstant(MVT::getSizeInBits(VT)/8,
3334                                         TLI.getPointerTy()));
3335      // Store the incremented VAList to the legalized pointer
3336      Tmp3 = DAG.getStore(VAList.getValue(1), Tmp3, Tmp2, V, 0);
3337      // Load the actual argument out of the pointer VAList
3338      Result = DAG.getLoad(VT, Tmp3, VAList, NULL, 0);
3339      Tmp1 = LegalizeOp(Result.getValue(1));
3340      Result = LegalizeOp(Result);
3341      break;
3342    }
3343    }
3344    // Since VAARG produces two values, make sure to remember that we
3345    // legalized both of them.
3346    AddLegalizedOperand(SDOperand(Node, 0), Result);
3347    AddLegalizedOperand(SDOperand(Node, 1), Tmp1);
3348    return Op.ResNo ? Tmp1 : Result;
3349  }
3350
3351  case ISD::VACOPY:
3352    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
3353    Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the dest pointer.
3354    Tmp3 = LegalizeOp(Node->getOperand(2));  // Legalize the source pointer.
3355
3356    switch (TLI.getOperationAction(ISD::VACOPY, MVT::Other)) {
3357    default: assert(0 && "This action is not supported yet!");
3358    case TargetLowering::Custom:
3359      isCustom = true;
3360      // FALLTHROUGH
3361    case TargetLowering::Legal:
3362      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3,
3363                                      Node->getOperand(3), Node->getOperand(4));
3364      if (isCustom) {
3365        Tmp1 = TLI.LowerOperation(Result, DAG);
3366        if (Tmp1.Val) Result = Tmp1;
3367      }
3368      break;
3369    case TargetLowering::Expand:
3370      // This defaults to loading a pointer from the input and storing it to the
3371      // output, returning the chain.
3372      const Value *VD = cast<SrcValueSDNode>(Node->getOperand(3))->getValue();
3373      const Value *VS = cast<SrcValueSDNode>(Node->getOperand(4))->getValue();
3374      Tmp4 = DAG.getLoad(TLI.getPointerTy(), Tmp1, Tmp3, VD, 0);
3375      Result = DAG.getStore(Tmp4.getValue(1), Tmp4, Tmp2, VS, 0);
3376      break;
3377    }
3378    break;
3379
3380  case ISD::VAEND:
3381    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
3382    Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the pointer.
3383
3384    switch (TLI.getOperationAction(ISD::VAEND, MVT::Other)) {
3385    default: assert(0 && "This action is not supported yet!");
3386    case TargetLowering::Custom:
3387      isCustom = true;
3388      // FALLTHROUGH
3389    case TargetLowering::Legal:
3390      Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Node->getOperand(2));
3391      if (isCustom) {
3392        Tmp1 = TLI.LowerOperation(Tmp1, DAG);
3393        if (Tmp1.Val) Result = Tmp1;
3394      }
3395      break;
3396    case TargetLowering::Expand:
3397      Result = Tmp1; // Default to a no-op, return the chain
3398      break;
3399    }
3400    break;
3401
3402  case ISD::VASTART:
3403    Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
3404    Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the pointer.
3405
3406    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Node->getOperand(2));
3407
3408    switch (TLI.getOperationAction(ISD::VASTART, MVT::Other)) {
3409    default: assert(0 && "This action is not supported yet!");
3410    case TargetLowering::Legal: break;
3411    case TargetLowering::Custom:
3412      Tmp1 = TLI.LowerOperation(Result, DAG);
3413      if (Tmp1.Val) Result = Tmp1;
3414      break;
3415    }
3416    break;
3417
3418  case ISD::ROTL:
3419  case ISD::ROTR:
3420    Tmp1 = LegalizeOp(Node->getOperand(0));   // LHS
3421    Tmp2 = LegalizeOp(Node->getOperand(1));   // RHS
3422    Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
3423    switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) {
3424    default:
3425      assert(0 && "ROTL/ROTR legalize operation not supported");
3426      break;
3427    case TargetLowering::Legal:
3428      break;
3429    case TargetLowering::Custom:
3430      Tmp1 = TLI.LowerOperation(Result, DAG);
3431      if (Tmp1.Val) Result = Tmp1;
3432      break;
3433    case TargetLowering::Promote:
3434      assert(0 && "Do not know how to promote ROTL/ROTR");
3435      break;
3436    case TargetLowering::Expand:
3437      assert(0 && "Do not know how to expand ROTL/ROTR");
3438      break;
3439    }
3440    break;
3441
3442  case ISD::BSWAP:
3443    Tmp1 = LegalizeOp(Node->getOperand(0));   // Op
3444    switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) {
3445    case TargetLowering::Custom:
3446      assert(0 && "Cannot custom legalize this yet!");
3447    case TargetLowering::Legal:
3448      Result = DAG.UpdateNodeOperands(Result, Tmp1);
3449      break;
3450    case TargetLowering::Promote: {
3451      MVT::ValueType OVT = Tmp1.getValueType();
3452      MVT::ValueType NVT = TLI.getTypeToPromoteTo(Node->getOpcode(), OVT);
3453      unsigned DiffBits = MVT::getSizeInBits(NVT) - MVT::getSizeInBits(OVT);
3454
3455      Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, NVT, Tmp1);
3456      Tmp1 = DAG.getNode(ISD::BSWAP, NVT, Tmp1);
3457      Result = DAG.getNode(ISD::SRL, NVT, Tmp1,
3458                           DAG.getConstant(DiffBits, TLI.getShiftAmountTy()));
3459      break;
3460    }
3461    case TargetLowering::Expand:
3462      Result = ExpandBSWAP(Tmp1);
3463      break;
3464    }
3465    break;
3466
3467  case ISD::CTPOP:
3468  case ISD::CTTZ:
3469  case ISD::CTLZ:
3470    Tmp1 = LegalizeOp(Node->getOperand(0));   // Op
3471    switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) {
3472    case TargetLowering::Custom:
3473    case TargetLowering::Legal:
3474      Result = DAG.UpdateNodeOperands(Result, Tmp1);
3475      if (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0)) ==
3476          TargetLowering::Custom) {
3477        Tmp1 = TLI.LowerOperation(Result, DAG);
3478        if (Tmp1.Val) {
3479          Result = Tmp1;
3480        }
3481      }
3482      break;
3483    case TargetLowering::Promote: {
3484      MVT::ValueType OVT = Tmp1.getValueType();
3485      MVT::ValueType NVT = TLI.getTypeToPromoteTo(Node->getOpcode(), OVT);
3486
3487      // Zero extend the argument.
3488      Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, NVT, Tmp1);
3489      // Perform the larger operation, then subtract if needed.
3490      Tmp1 = DAG.getNode(Node->getOpcode(), Node->getValueType(0), Tmp1);
3491      switch (Node->getOpcode()) {
3492      case ISD::CTPOP:
3493        Result = Tmp1;
3494        break;
3495      case ISD::CTTZ:
3496        //if Tmp1 == sizeinbits(NVT) then Tmp1 = sizeinbits(Old VT)
3497        Tmp2 = DAG.getSetCC(TLI.getSetCCResultTy(), Tmp1,
3498                            DAG.getConstant(MVT::getSizeInBits(NVT), NVT),
3499                            ISD::SETEQ);
3500        Result = DAG.getNode(ISD::SELECT, NVT, Tmp2,
3501                             DAG.getConstant(MVT::getSizeInBits(OVT),NVT), Tmp1);
3502        break;
3503      case ISD::CTLZ:
3504        // Tmp1 = Tmp1 - (sizeinbits(NVT) - sizeinbits(Old VT))
3505        Result = DAG.getNode(ISD::SUB, NVT, Tmp1,
3506                             DAG.getConstant(MVT::getSizeInBits(NVT) -
3507                                             MVT::getSizeInBits(OVT), NVT));
3508        break;
3509      }
3510      break;
3511    }
3512    case TargetLowering::Expand:
3513      Result = ExpandBitCount(Node->getOpcode(), Tmp1);
3514      break;
3515    }
3516    break;
3517
3518    // Unary operators
3519  case ISD::FABS:
3520  case ISD::FNEG:
3521  case ISD::FSQRT:
3522  case ISD::FSIN:
3523  case ISD::FCOS:
3524    Tmp1 = LegalizeOp(Node->getOperand(0));
3525    switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) {
3526    case TargetLowering::Promote:
3527    case TargetLowering::Custom:
3528     isCustom = true;
3529     // FALLTHROUGH
3530    case TargetLowering::Legal:
3531      Result = DAG.UpdateNodeOperands(Result, Tmp1);
3532      if (isCustom) {
3533        Tmp1 = TLI.LowerOperation(Result, DAG);
3534        if (Tmp1.Val) Result = Tmp1;
3535      }
3536      break;
3537    case TargetLowering::Expand:
3538      switch (Node->getOpcode()) {
3539      default: assert(0 && "Unreachable!");
3540      case ISD::FNEG:
3541        // Expand Y = FNEG(X) ->  Y = SUB -0.0, X
3542        Tmp2 = DAG.getConstantFP(-0.0, Node->getValueType(0));
3543        Result = DAG.getNode(ISD::FSUB, Node->getValueType(0), Tmp2, Tmp1);
3544        break;
3545      case ISD::FABS: {
3546        // Expand Y = FABS(X) -> Y = (X >u 0.0) ? X : fneg(X).
3547        MVT::ValueType VT = Node->getValueType(0);
3548        Tmp2 = DAG.getConstantFP(0.0, VT);
3549        Tmp2 = DAG.getSetCC(TLI.getSetCCResultTy(), Tmp1, Tmp2, ISD::SETUGT);
3550        Tmp3 = DAG.getNode(ISD::FNEG, VT, Tmp1);
3551        Result = DAG.getNode(ISD::SELECT, VT, Tmp2, Tmp1, Tmp3);
3552        break;
3553      }
3554      case ISD::FSQRT:
3555      case ISD::FSIN:
3556      case ISD::FCOS: {
3557        MVT::ValueType VT = Node->getValueType(0);
3558
3559        // Expand unsupported unary vector operators by unrolling them.
3560        if (MVT::isVector(VT)) {
3561          Result = LegalizeOp(UnrollVectorOp(Op));
3562          break;
3563        }
3564
3565        RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
3566        switch(Node->getOpcode()) {
3567        case ISD::FSQRT:
3568          LC = GetFPLibCall(VT, RTLIB::SQRT_F32, RTLIB::SQRT_F64,
3569                            RTLIB::SQRT_F80, RTLIB::SQRT_PPCF128);
3570          break;
3571        case ISD::FSIN:
3572          LC = GetFPLibCall(VT, RTLIB::SIN_F32, RTLIB::SIN_F64,
3573                            RTLIB::SIN_F80, RTLIB::SIN_PPCF128);
3574          break;
3575        case ISD::FCOS:
3576          LC = GetFPLibCall(VT, RTLIB::COS_F32, RTLIB::COS_F64,
3577                            RTLIB::COS_F80, RTLIB::COS_PPCF128);
3578          break;
3579        default: assert(0 && "Unreachable!");
3580        }
3581        SDOperand Dummy;
3582        Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
3583                               false/*sign irrelevant*/, Dummy);
3584        break;
3585      }
3586      }
3587      break;
3588    }
3589    break;
3590  case ISD::FPOWI: {
3591    MVT::ValueType VT = Node->getValueType(0);
3592
3593    // Expand unsupported unary vector operators by unrolling them.
3594    if (MVT::isVector(VT)) {
3595      Result = LegalizeOp(UnrollVectorOp(Op));
3596      break;
3597    }
3598
3599    // We always lower FPOWI into a libcall.  No target support for it yet.
3600    RTLIB::Libcall LC = GetFPLibCall(VT, RTLIB::POWI_F32, RTLIB::POWI_F64,
3601                                     RTLIB::POWI_F80, RTLIB::POWI_PPCF128);
3602    SDOperand Dummy;
3603    Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
3604                           false/*sign irrelevant*/, Dummy);
3605    break;
3606  }
3607  case ISD::BIT_CONVERT:
3608    if (!isTypeLegal(Node->getOperand(0).getValueType())) {
3609      Result = EmitStackConvert(Node->getOperand(0), Node->getValueType(0),
3610                                Node->getValueType(0));
3611    } else if (MVT::isVector(Op.getOperand(0).getValueType())) {
3612      // The input has to be a vector type, we have to either scalarize it, pack
3613      // it, or convert it based on whether the input vector type is legal.
3614      SDNode *InVal = Node->getOperand(0).Val;
3615      int InIx = Node->getOperand(0).ResNo;
3616      unsigned NumElems = MVT::getVectorNumElements(InVal->getValueType(InIx));
3617      MVT::ValueType EVT = MVT::getVectorElementType(InVal->getValueType(InIx));
3618
3619      // Figure out if there is a simple type corresponding to this Vector
3620      // type.  If so, convert to the vector type.
3621      MVT::ValueType TVT = MVT::getVectorType(EVT, NumElems);
3622      if (TLI.isTypeLegal(TVT)) {
3623        // Turn this into a bit convert of the vector input.
3624        Result = DAG.getNode(ISD::BIT_CONVERT, Node->getValueType(0),
3625                             LegalizeOp(Node->getOperand(0)));
3626        break;
3627      } else if (NumElems == 1) {
3628        // Turn this into a bit convert of the scalar input.
3629        Result = DAG.getNode(ISD::BIT_CONVERT, Node->getValueType(0),
3630                             ScalarizeVectorOp(Node->getOperand(0)));
3631        break;
3632      } else {
3633        // FIXME: UNIMP!  Store then reload
3634        assert(0 && "Cast from unsupported vector type not implemented yet!");
3635      }
3636    } else {
3637      switch (TLI.getOperationAction(ISD::BIT_CONVERT,
3638                                     Node->getOperand(0).getValueType())) {
3639      default: assert(0 && "Unknown operation action!");
3640      case TargetLowering::Expand:
3641        Result = EmitStackConvert(Node->getOperand(0), Node->getValueType(0),
3642                                  Node->getValueType(0));
3643        break;
3644      case TargetLowering::Legal:
3645        Tmp1 = LegalizeOp(Node->getOperand(0));
3646        Result = DAG.UpdateNodeOperands(Result, Tmp1);
3647        break;
3648      }
3649    }
3650    break;
3651
3652    // Conversion operators.  The source and destination have different types.
3653  case ISD::SINT_TO_FP:
3654  case ISD::UINT_TO_FP: {
3655    bool isSigned = Node->getOpcode() == ISD::SINT_TO_FP;
3656    switch (getTypeAction(Node->getOperand(0).getValueType())) {
3657    case Legal:
3658      switch (TLI.getOperationAction(Node->getOpcode(),
3659                                     Node->getOperand(0).getValueType())) {
3660      default: assert(0 && "Unknown operation action!");
3661      case TargetLowering::Custom:
3662        isCustom = true;
3663        // FALLTHROUGH
3664      case TargetLowering::Legal:
3665        Tmp1 = LegalizeOp(Node->getOperand(0));
3666        Result = DAG.UpdateNodeOperands(Result, Tmp1);
3667        if (isCustom) {
3668          Tmp1 = TLI.LowerOperation(Result, DAG);
3669          if (Tmp1.Val) Result = Tmp1;
3670        }
3671        break;
3672      case TargetLowering::Expand:
3673        Result = ExpandLegalINT_TO_FP(isSigned,
3674                                      LegalizeOp(Node->getOperand(0)),
3675                                      Node->getValueType(0));
3676        break;
3677      case TargetLowering::Promote:
3678        Result = PromoteLegalINT_TO_FP(LegalizeOp(Node->getOperand(0)),
3679                                       Node->getValueType(0),
3680                                       isSigned);
3681        break;
3682      }
3683      break;
3684    case Expand:
3685      Result = ExpandIntToFP(Node->getOpcode() == ISD::SINT_TO_FP,
3686                             Node->getValueType(0), Node->getOperand(0));
3687      break;
3688    case Promote:
3689      Tmp1 = PromoteOp(Node->getOperand(0));
3690      if (isSigned) {
3691        Tmp1 = DAG.getNode(ISD::SIGN_EXTEND_INREG, Tmp1.getValueType(),
3692                 Tmp1, DAG.getValueType(Node->getOperand(0).getValueType()));
3693      } else {
3694        Tmp1 = DAG.getZeroExtendInReg(Tmp1,
3695                                      Node->getOperand(0).getValueType());
3696      }
3697      Result = DAG.UpdateNodeOperands(Result, Tmp1);
3698      Result = LegalizeOp(Result);  // The 'op' is not necessarily legal!
3699      break;
3700    }
3701    break;
3702  }
3703  case ISD::TRUNCATE:
3704    switch (getTypeAction(Node->getOperand(0).getValueType())) {
3705    case Legal:
3706      Tmp1 = LegalizeOp(Node->getOperand(0));
3707      Result = DAG.UpdateNodeOperands(Result, Tmp1);
3708      break;
3709    case Expand:
3710      ExpandOp(Node->getOperand(0), Tmp1, Tmp2);
3711
3712      // Since the result is legal, we should just be able to truncate the low
3713      // part of the source.
3714      Result = DAG.getNode(ISD::TRUNCATE, Node->getValueType(0), Tmp1);
3715      break;
3716    case Promote:
3717      Result = PromoteOp(Node->getOperand(0));
3718      Result = DAG.getNode(ISD::TRUNCATE, Op.getValueType(), Result);
3719      break;
3720    }
3721    break;
3722
3723  case ISD::FP_TO_SINT:
3724  case ISD::FP_TO_UINT:
3725    switch (getTypeAction(Node->getOperand(0).getValueType())) {
3726    case Legal:
3727      Tmp1 = LegalizeOp(Node->getOperand(0));
3728
3729      switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))){
3730      default: assert(0 && "Unknown operation action!");
3731      case TargetLowering::Custom:
3732        isCustom = true;
3733        // FALLTHROUGH
3734      case TargetLowering::Legal:
3735        Result = DAG.UpdateNodeOperands(Result, Tmp1);
3736        if (isCustom) {
3737          Tmp1 = TLI.LowerOperation(Result, DAG);
3738          if (Tmp1.Val) Result = Tmp1;
3739        }
3740        break;
3741      case TargetLowering::Promote:
3742        Result = PromoteLegalFP_TO_INT(Tmp1, Node->getValueType(0),
3743                                       Node->getOpcode() == ISD::FP_TO_SINT);
3744        break;
3745      case TargetLowering::Expand:
3746        if (Node->getOpcode() == ISD::FP_TO_UINT) {
3747          SDOperand True, False;
3748          MVT::ValueType VT =  Node->getOperand(0).getValueType();
3749          MVT::ValueType NVT = Node->getValueType(0);
3750          const uint64_t zero[] = {0, 0};
3751          APFloat apf = APFloat(APInt(MVT::getSizeInBits(VT), 2, zero));
3752          APInt x = APInt::getSignBit(MVT::getSizeInBits(NVT));
3753          (void)apf.convertFromAPInt(x, false, APFloat::rmNearestTiesToEven);
3754          Tmp2 = DAG.getConstantFP(apf, VT);
3755          Tmp3 = DAG.getSetCC(TLI.getSetCCResultTy(),
3756                            Node->getOperand(0), Tmp2, ISD::SETLT);
3757          True = DAG.getNode(ISD::FP_TO_SINT, NVT, Node->getOperand(0));
3758          False = DAG.getNode(ISD::FP_TO_SINT, NVT,
3759                              DAG.getNode(ISD::FSUB, VT, Node->getOperand(0),
3760                                          Tmp2));
3761          False = DAG.getNode(ISD::XOR, NVT, False,
3762                              DAG.getConstant(x, NVT));
3763          Result = DAG.getNode(ISD::SELECT, NVT, Tmp3, True, False);
3764          break;
3765        } else {
3766          assert(0 && "Do not know how to expand FP_TO_SINT yet!");
3767        }
3768        break;
3769      }
3770      break;
3771    case Expand: {
3772      MVT::ValueType VT = Op.getValueType();
3773      MVT::ValueType OVT = Node->getOperand(0).getValueType();
3774      // Convert ppcf128 to i32
3775      if (OVT == MVT::ppcf128 && VT == MVT::i32) {
3776        if (Node->getOpcode() == ISD::FP_TO_SINT) {
3777          Result = DAG.getNode(ISD::FP_ROUND_INREG, MVT::ppcf128,
3778                               Node->getOperand(0), DAG.getValueType(MVT::f64));
3779          Result = DAG.getNode(ISD::FP_ROUND, MVT::f64, Result,
3780                               DAG.getIntPtrConstant(1));
3781          Result = DAG.getNode(ISD::FP_TO_SINT, VT, Result);
3782        } else {
3783          const uint64_t TwoE31[] = {0x41e0000000000000LL, 0};
3784          APFloat apf = APFloat(APInt(128, 2, TwoE31));
3785          Tmp2 = DAG.getConstantFP(apf, OVT);
3786          //  X>=2^31 ? (int)(X-2^31)+0x80000000 : (int)X
3787          // FIXME: generated code sucks.
3788          Result = DAG.getNode(ISD::SELECT_CC, VT, Node->getOperand(0), Tmp2,
3789                               DAG.getNode(ISD::ADD, MVT::i32,
3790                                 DAG.getNode(ISD::FP_TO_SINT, VT,
3791                                   DAG.getNode(ISD::FSUB, OVT,
3792                                                 Node->getOperand(0), Tmp2)),
3793                                 DAG.getConstant(0x80000000, MVT::i32)),
3794                               DAG.getNode(ISD::FP_TO_SINT, VT,
3795                                           Node->getOperand(0)),
3796                               DAG.getCondCode(ISD::SETGE));
3797        }
3798        break;
3799      }
3800      // Convert f32 / f64 to i32 / i64.
3801      RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
3802      switch (Node->getOpcode()) {
3803      case ISD::FP_TO_SINT: {
3804        if (OVT == MVT::f32)
3805          LC = (VT == MVT::i32)
3806            ? RTLIB::FPTOSINT_F32_I32 : RTLIB::FPTOSINT_F32_I64;
3807        else if (OVT == MVT::f64)
3808          LC = (VT == MVT::i32)
3809            ? RTLIB::FPTOSINT_F64_I32 : RTLIB::FPTOSINT_F64_I64;
3810        else if (OVT == MVT::f80) {
3811          assert(VT == MVT::i64);
3812          LC = RTLIB::FPTOSINT_F80_I64;
3813        }
3814        else if (OVT == MVT::ppcf128) {
3815          assert(VT == MVT::i64);
3816          LC = RTLIB::FPTOSINT_PPCF128_I64;
3817        }
3818        break;
3819      }
3820      case ISD::FP_TO_UINT: {
3821        if (OVT == MVT::f32)
3822          LC = (VT == MVT::i32)
3823            ? RTLIB::FPTOUINT_F32_I32 : RTLIB::FPTOSINT_F32_I64;
3824        else if (OVT == MVT::f64)
3825          LC = (VT == MVT::i32)
3826            ? RTLIB::FPTOUINT_F64_I32 : RTLIB::FPTOSINT_F64_I64;
3827        else if (OVT == MVT::f80) {
3828          LC = (VT == MVT::i32)
3829            ? RTLIB::FPTOUINT_F80_I32 : RTLIB::FPTOUINT_F80_I64;
3830        }
3831        else if (OVT ==  MVT::ppcf128) {
3832          assert(VT == MVT::i64);
3833          LC = RTLIB::FPTOUINT_PPCF128_I64;
3834        }
3835        break;
3836      }
3837      default: assert(0 && "Unreachable!");
3838      }
3839      SDOperand Dummy;
3840      Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
3841                             false/*sign irrelevant*/, Dummy);
3842      break;
3843    }
3844    case Promote:
3845      Tmp1 = PromoteOp(Node->getOperand(0));
3846      Result = DAG.UpdateNodeOperands(Result, LegalizeOp(Tmp1));
3847      Result = LegalizeOp(Result);
3848      break;
3849    }
3850    break;
3851
3852  case ISD::FP_EXTEND: {
3853    MVT::ValueType DstVT = Op.getValueType();
3854    MVT::ValueType SrcVT = Op.getOperand(0).getValueType();
3855    if (TLI.getConvertAction(SrcVT, DstVT) == TargetLowering::Expand) {
3856      // The only other way we can lower this is to turn it into a STORE,
3857      // LOAD pair, targetting a temporary location (a stack slot).
3858      Result = EmitStackConvert(Node->getOperand(0), SrcVT, DstVT);
3859      break;
3860    }
3861    switch (getTypeAction(Node->getOperand(0).getValueType())) {
3862    case Expand: assert(0 && "Shouldn't need to expand other operators here!");
3863    case Legal:
3864      Tmp1 = LegalizeOp(Node->getOperand(0));
3865      Result = DAG.UpdateNodeOperands(Result, Tmp1);
3866      break;
3867    case Promote:
3868      Tmp1 = PromoteOp(Node->getOperand(0));
3869      Result = DAG.getNode(ISD::FP_EXTEND, Op.getValueType(), Tmp1);
3870      break;
3871    }
3872    break;
3873  }
3874  case ISD::FP_ROUND: {
3875    MVT::ValueType DstVT = Op.getValueType();
3876    MVT::ValueType SrcVT = Op.getOperand(0).getValueType();
3877    if (TLI.getConvertAction(SrcVT, DstVT) == TargetLowering::Expand) {
3878      if (SrcVT == MVT::ppcf128) {
3879        SDOperand Lo;
3880        ExpandOp(Node->getOperand(0), Lo, Result);
3881        // Round it the rest of the way (e.g. to f32) if needed.
3882        if (DstVT!=MVT::f64)
3883          Result = DAG.getNode(ISD::FP_ROUND, DstVT, Result, Op.getOperand(1));
3884        break;
3885      }
3886      // The only other way we can lower this is to turn it into a STORE,
3887      // LOAD pair, targetting a temporary location (a stack slot).
3888      Result = EmitStackConvert(Node->getOperand(0), DstVT, DstVT);
3889      break;
3890    }
3891    switch (getTypeAction(Node->getOperand(0).getValueType())) {
3892    case Expand: assert(0 && "Shouldn't need to expand other operators here!");
3893    case Legal:
3894      Tmp1 = LegalizeOp(Node->getOperand(0));
3895      Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1));
3896      break;
3897    case Promote:
3898      Tmp1 = PromoteOp(Node->getOperand(0));
3899      Result = DAG.getNode(ISD::FP_ROUND, Op.getValueType(), Tmp1,
3900                           Node->getOperand(1));
3901      break;
3902    }
3903    break;
3904  }
3905  case ISD::ANY_EXTEND:
3906  case ISD::ZERO_EXTEND:
3907  case ISD::SIGN_EXTEND:
3908    switch (getTypeAction(Node->getOperand(0).getValueType())) {
3909    case Expand: assert(0 && "Shouldn't need to expand other operators here!");
3910    case Legal:
3911      Tmp1 = LegalizeOp(Node->getOperand(0));
3912      if (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0)) ==
3913          TargetLowering::Custom) {
3914        Tmp2 = TLI.LowerOperation(Result, DAG);
3915        if (Tmp2.Val) {
3916          Tmp1 = Tmp2;
3917        }
3918      }
3919      Result = DAG.UpdateNodeOperands(Result, Tmp1);
3920      break;
3921    case Promote:
3922      switch (Node->getOpcode()) {
3923      case ISD::ANY_EXTEND:
3924        Tmp1 = PromoteOp(Node->getOperand(0));
3925        Result = DAG.getNode(ISD::ANY_EXTEND, Op.getValueType(), Tmp1);
3926        break;
3927      case ISD::ZERO_EXTEND:
3928        Result = PromoteOp(Node->getOperand(0));
3929        Result = DAG.getNode(ISD::ANY_EXTEND, Op.getValueType(), Result);
3930        Result = DAG.getZeroExtendInReg(Result,
3931                                        Node->getOperand(0).getValueType());
3932        break;
3933      case ISD::SIGN_EXTEND:
3934        Result = PromoteOp(Node->getOperand(0));
3935        Result = DAG.getNode(ISD::ANY_EXTEND, Op.getValueType(), Result);
3936        Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, Result.getValueType(),
3937                             Result,
3938                          DAG.getValueType(Node->getOperand(0).getValueType()));
3939        break;
3940      }
3941    }
3942    break;
3943  case ISD::FP_ROUND_INREG:
3944  case ISD::SIGN_EXTEND_INREG: {
3945    Tmp1 = LegalizeOp(Node->getOperand(0));
3946    MVT::ValueType ExtraVT = cast<VTSDNode>(Node->getOperand(1))->getVT();
3947
3948    // If this operation is not supported, convert it to a shl/shr or load/store
3949    // pair.
3950    switch (TLI.getOperationAction(Node->getOpcode(), ExtraVT)) {
3951    default: assert(0 && "This action not supported for this op yet!");
3952    case TargetLowering::Legal:
3953      Result = DAG.UpdateNodeOperands(Result, Tmp1, Node->getOperand(1));
3954      break;
3955    case TargetLowering::Expand:
3956      // If this is an integer extend and shifts are supported, do that.
3957      if (Node->getOpcode() == ISD::SIGN_EXTEND_INREG) {
3958        // NOTE: we could fall back on load/store here too for targets without
3959        // SAR.  However, it is doubtful that any exist.
3960        unsigned BitsDiff = MVT::getSizeInBits(Node->getValueType(0)) -
3961                            MVT::getSizeInBits(ExtraVT);
3962        SDOperand ShiftCst = DAG.getConstant(BitsDiff, TLI.getShiftAmountTy());
3963        Result = DAG.getNode(ISD::SHL, Node->getValueType(0),
3964                             Node->getOperand(0), ShiftCst);
3965        Result = DAG.getNode(ISD::SRA, Node->getValueType(0),
3966                             Result, ShiftCst);
3967      } else if (Node->getOpcode() == ISD::FP_ROUND_INREG) {
3968        // The only way we can lower this is to turn it into a TRUNCSTORE,
3969        // EXTLOAD pair, targetting a temporary location (a stack slot).
3970
3971        // NOTE: there is a choice here between constantly creating new stack
3972        // slots and always reusing the same one.  We currently always create
3973        // new ones, as reuse may inhibit scheduling.
3974        Result = EmitStackConvert(Node->getOperand(0), ExtraVT,
3975                                  Node->getValueType(0));
3976      } else {
3977        assert(0 && "Unknown op");
3978      }
3979      break;
3980    }
3981    break;
3982  }
3983  case ISD::TRAMPOLINE: {
3984    SDOperand Ops[6];
3985    for (unsigned i = 0; i != 6; ++i)
3986      Ops[i] = LegalizeOp(Node->getOperand(i));
3987    Result = DAG.UpdateNodeOperands(Result, Ops, 6);
3988    // The only option for this node is to custom lower it.
3989    Result = TLI.LowerOperation(Result, DAG);
3990    assert(Result.Val && "Should always custom lower!");
3991
3992    // Since trampoline produces two values, make sure to remember that we
3993    // legalized both of them.
3994    Tmp1 = LegalizeOp(Result.getValue(1));
3995    Result = LegalizeOp(Result);
3996    AddLegalizedOperand(SDOperand(Node, 0), Result);
3997    AddLegalizedOperand(SDOperand(Node, 1), Tmp1);
3998    return Op.ResNo ? Tmp1 : Result;
3999  }
4000   case ISD::FLT_ROUNDS_: {
4001    MVT::ValueType VT = Node->getValueType(0);
4002    switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
4003    default: assert(0 && "This action not supported for this op yet!");
4004    case TargetLowering::Custom:
4005      Result = TLI.LowerOperation(Op, DAG);
4006      if (Result.Val) break;
4007      // Fall Thru
4008    case TargetLowering::Legal:
4009      // If this operation is not supported, lower it to constant 1
4010      Result = DAG.getConstant(1, VT);
4011      break;
4012    }
4013  }
4014  case ISD::TRAP: {
4015    MVT::ValueType VT = Node->getValueType(0);
4016    switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
4017    default: assert(0 && "This action not supported for this op yet!");
4018    case TargetLowering::Legal:
4019      Tmp1 = LegalizeOp(Node->getOperand(0));
4020      Result = DAG.UpdateNodeOperands(Result, Tmp1);
4021      break;
4022    case TargetLowering::Custom:
4023      Result = TLI.LowerOperation(Op, DAG);
4024      if (Result.Val) break;
4025      // Fall Thru
4026    case TargetLowering::Expand:
4027      // If this operation is not supported, lower it to 'abort()' call
4028      Tmp1 = LegalizeOp(Node->getOperand(0));
4029      TargetLowering::ArgListTy Args;
4030      std::pair<SDOperand,SDOperand> CallResult =
4031        TLI.LowerCallTo(Tmp1, Type::VoidTy,
4032                        false, false, false, CallingConv::C, false,
4033                        DAG.getExternalSymbol("abort", TLI.getPointerTy()),
4034                        Args, DAG);
4035      Result = CallResult.second;
4036      break;
4037    }
4038    break;
4039  }
4040  }
4041
4042  assert(Result.getValueType() == Op.getValueType() &&
4043         "Bad legalization!");
4044
4045  // Make sure that the generated code is itself legal.
4046  if (Result != Op)
4047    Result = LegalizeOp(Result);
4048
4049  // Note that LegalizeOp may be reentered even from single-use nodes, which
4050  // means that we always must cache transformed nodes.
4051  AddLegalizedOperand(Op, Result);
4052  return Result;
4053}
4054
4055/// PromoteOp - Given an operation that produces a value in an invalid type,
4056/// promote it to compute the value into a larger type.  The produced value will
4057/// have the correct bits for the low portion of the register, but no guarantee
4058/// is made about the top bits: it may be zero, sign-extended, or garbage.
4059SDOperand SelectionDAGLegalize::PromoteOp(SDOperand Op) {
4060  MVT::ValueType VT = Op.getValueType();
4061  MVT::ValueType NVT = TLI.getTypeToTransformTo(VT);
4062  assert(getTypeAction(VT) == Promote &&
4063         "Caller should expand or legalize operands that are not promotable!");
4064  assert(NVT > VT && MVT::isInteger(NVT) == MVT::isInteger(VT) &&
4065         "Cannot promote to smaller type!");
4066
4067  SDOperand Tmp1, Tmp2, Tmp3;
4068  SDOperand Result;
4069  SDNode *Node = Op.Val;
4070
4071  DenseMap<SDOperand, SDOperand>::iterator I = PromotedNodes.find(Op);
4072  if (I != PromotedNodes.end()) return I->second;
4073
4074  switch (Node->getOpcode()) {
4075  case ISD::CopyFromReg:
4076    assert(0 && "CopyFromReg must be legal!");
4077  default:
4078#ifndef NDEBUG
4079    cerr << "NODE: "; Node->dump(&DAG); cerr << "\n";
4080#endif
4081    assert(0 && "Do not know how to promote this operator!");
4082    abort();
4083  case ISD::UNDEF:
4084    Result = DAG.getNode(ISD::UNDEF, NVT);
4085    break;
4086  case ISD::Constant:
4087    if (VT != MVT::i1)
4088      Result = DAG.getNode(ISD::SIGN_EXTEND, NVT, Op);
4089    else
4090      Result = DAG.getNode(ISD::ZERO_EXTEND, NVT, Op);
4091    assert(isa<ConstantSDNode>(Result) && "Didn't constant fold zext?");
4092    break;
4093  case ISD::ConstantFP:
4094    Result = DAG.getNode(ISD::FP_EXTEND, NVT, Op);
4095    assert(isa<ConstantFPSDNode>(Result) && "Didn't constant fold fp_extend?");
4096    break;
4097
4098  case ISD::SETCC:
4099    assert(isTypeLegal(TLI.getSetCCResultTy()) && "SetCC type is not legal??");
4100    Result = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(),Node->getOperand(0),
4101                         Node->getOperand(1), Node->getOperand(2));
4102    break;
4103
4104  case ISD::TRUNCATE:
4105    switch (getTypeAction(Node->getOperand(0).getValueType())) {
4106    case Legal:
4107      Result = LegalizeOp(Node->getOperand(0));
4108      assert(Result.getValueType() >= NVT &&
4109             "This truncation doesn't make sense!");
4110      if (Result.getValueType() > NVT)    // Truncate to NVT instead of VT
4111        Result = DAG.getNode(ISD::TRUNCATE, NVT, Result);
4112      break;
4113    case Promote:
4114      // The truncation is not required, because we don't guarantee anything
4115      // about high bits anyway.
4116      Result = PromoteOp(Node->getOperand(0));
4117      break;
4118    case Expand:
4119      ExpandOp(Node->getOperand(0), Tmp1, Tmp2);
4120      // Truncate the low part of the expanded value to the result type
4121      Result = DAG.getNode(ISD::TRUNCATE, NVT, Tmp1);
4122    }
4123    break;
4124  case ISD::SIGN_EXTEND:
4125  case ISD::ZERO_EXTEND:
4126  case ISD::ANY_EXTEND:
4127    switch (getTypeAction(Node->getOperand(0).getValueType())) {
4128    case Expand: assert(0 && "BUG: Smaller reg should have been promoted!");
4129    case Legal:
4130      // Input is legal?  Just do extend all the way to the larger type.
4131      Result = DAG.getNode(Node->getOpcode(), NVT, Node->getOperand(0));
4132      break;
4133    case Promote:
4134      // Promote the reg if it's smaller.
4135      Result = PromoteOp(Node->getOperand(0));
4136      // The high bits are not guaranteed to be anything.  Insert an extend.
4137      if (Node->getOpcode() == ISD::SIGN_EXTEND)
4138        Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Result,
4139                         DAG.getValueType(Node->getOperand(0).getValueType()));
4140      else if (Node->getOpcode() == ISD::ZERO_EXTEND)
4141        Result = DAG.getZeroExtendInReg(Result,
4142                                        Node->getOperand(0).getValueType());
4143      break;
4144    }
4145    break;
4146  case ISD::BIT_CONVERT:
4147    Result = EmitStackConvert(Node->getOperand(0), Node->getValueType(0),
4148                              Node->getValueType(0));
4149    Result = PromoteOp(Result);
4150    break;
4151
4152  case ISD::FP_EXTEND:
4153    assert(0 && "Case not implemented.  Dynamically dead with 2 FP types!");
4154  case ISD::FP_ROUND:
4155    switch (getTypeAction(Node->getOperand(0).getValueType())) {
4156    case Expand: assert(0 && "BUG: Cannot expand FP regs!");
4157    case Promote:  assert(0 && "Unreachable with 2 FP types!");
4158    case Legal:
4159      if (Node->getConstantOperandVal(1) == 0) {
4160        // Input is legal?  Do an FP_ROUND_INREG.
4161        Result = DAG.getNode(ISD::FP_ROUND_INREG, NVT, Node->getOperand(0),
4162                             DAG.getValueType(VT));
4163      } else {
4164        // Just remove the truncate, it isn't affecting the value.
4165        Result = DAG.getNode(ISD::FP_ROUND, NVT, Node->getOperand(0),
4166                             Node->getOperand(1));
4167      }
4168      break;
4169    }
4170    break;
4171  case ISD::SINT_TO_FP:
4172  case ISD::UINT_TO_FP:
4173    switch (getTypeAction(Node->getOperand(0).getValueType())) {
4174    case Legal:
4175      // No extra round required here.
4176      Result = DAG.getNode(Node->getOpcode(), NVT, Node->getOperand(0));
4177      break;
4178
4179    case Promote:
4180      Result = PromoteOp(Node->getOperand(0));
4181      if (Node->getOpcode() == ISD::SINT_TO_FP)
4182        Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, Result.getValueType(),
4183                             Result,
4184                         DAG.getValueType(Node->getOperand(0).getValueType()));
4185      else
4186        Result = DAG.getZeroExtendInReg(Result,
4187                                        Node->getOperand(0).getValueType());
4188      // No extra round required here.
4189      Result = DAG.getNode(Node->getOpcode(), NVT, Result);
4190      break;
4191    case Expand:
4192      Result = ExpandIntToFP(Node->getOpcode() == ISD::SINT_TO_FP, NVT,
4193                             Node->getOperand(0));
4194      // Round if we cannot tolerate excess precision.
4195      if (NoExcessFPPrecision)
4196        Result = DAG.getNode(ISD::FP_ROUND_INREG, NVT, Result,
4197                             DAG.getValueType(VT));
4198      break;
4199    }
4200    break;
4201
4202  case ISD::SIGN_EXTEND_INREG:
4203    Result = PromoteOp(Node->getOperand(0));
4204    Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Result,
4205                         Node->getOperand(1));
4206    break;
4207  case ISD::FP_TO_SINT:
4208  case ISD::FP_TO_UINT:
4209    switch (getTypeAction(Node->getOperand(0).getValueType())) {
4210    case Legal:
4211    case Expand:
4212      Tmp1 = Node->getOperand(0);
4213      break;
4214    case Promote:
4215      // The input result is prerounded, so we don't have to do anything
4216      // special.
4217      Tmp1 = PromoteOp(Node->getOperand(0));
4218      break;
4219    }
4220    // If we're promoting a UINT to a larger size, check to see if the new node
4221    // will be legal.  If it isn't, check to see if FP_TO_SINT is legal, since
4222    // we can use that instead.  This allows us to generate better code for
4223    // FP_TO_UINT for small destination sizes on targets where FP_TO_UINT is not
4224    // legal, such as PowerPC.
4225    if (Node->getOpcode() == ISD::FP_TO_UINT &&
4226        !TLI.isOperationLegal(ISD::FP_TO_UINT, NVT) &&
4227        (TLI.isOperationLegal(ISD::FP_TO_SINT, NVT) ||
4228         TLI.getOperationAction(ISD::FP_TO_SINT, NVT)==TargetLowering::Custom)){
4229      Result = DAG.getNode(ISD::FP_TO_SINT, NVT, Tmp1);
4230    } else {
4231      Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1);
4232    }
4233    break;
4234
4235  case ISD::FABS:
4236  case ISD::FNEG:
4237    Tmp1 = PromoteOp(Node->getOperand(0));
4238    assert(Tmp1.getValueType() == NVT);
4239    Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1);
4240    // NOTE: we do not have to do any extra rounding here for
4241    // NoExcessFPPrecision, because we know the input will have the appropriate
4242    // precision, and these operations don't modify precision at all.
4243    break;
4244
4245  case ISD::FSQRT:
4246  case ISD::FSIN:
4247  case ISD::FCOS:
4248    Tmp1 = PromoteOp(Node->getOperand(0));
4249    assert(Tmp1.getValueType() == NVT);
4250    Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1);
4251    if (NoExcessFPPrecision)
4252      Result = DAG.getNode(ISD::FP_ROUND_INREG, NVT, Result,
4253                           DAG.getValueType(VT));
4254    break;
4255
4256  case ISD::FPOWI: {
4257    // Promote f32 powi to f64 powi.  Note that this could insert a libcall
4258    // directly as well, which may be better.
4259    Tmp1 = PromoteOp(Node->getOperand(0));
4260    assert(Tmp1.getValueType() == NVT);
4261    Result = DAG.getNode(ISD::FPOWI, NVT, Tmp1, Node->getOperand(1));
4262    if (NoExcessFPPrecision)
4263      Result = DAG.getNode(ISD::FP_ROUND_INREG, NVT, Result,
4264                           DAG.getValueType(VT));
4265    break;
4266  }
4267
4268  case ISD::ATOMIC_LCS: {
4269    Tmp2 = PromoteOp(Node->getOperand(2));
4270    Tmp3 = PromoteOp(Node->getOperand(3));
4271    Result = DAG.getAtomic(Node->getOpcode(), Node->getOperand(0),
4272                           Node->getOperand(1), Tmp2, Tmp3,
4273                           cast<AtomicSDNode>(Node)->getVT());
4274    // Remember that we legalized the chain.
4275    AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1)));
4276    break;
4277  }
4278  case ISD::ATOMIC_LAS:
4279  case ISD::ATOMIC_SWAP: {
4280    Tmp2 = PromoteOp(Node->getOperand(2));
4281    Result = DAG.getAtomic(Node->getOpcode(), Node->getOperand(0),
4282                           Node->getOperand(1), Tmp2,
4283                           cast<AtomicSDNode>(Node)->getVT());
4284    // Remember that we legalized the chain.
4285    AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1)));
4286    break;
4287  }
4288
4289  case ISD::AND:
4290  case ISD::OR:
4291  case ISD::XOR:
4292  case ISD::ADD:
4293  case ISD::SUB:
4294  case ISD::MUL:
4295    // The input may have strange things in the top bits of the registers, but
4296    // these operations don't care.  They may have weird bits going out, but
4297    // that too is okay if they are integer operations.
4298    Tmp1 = PromoteOp(Node->getOperand(0));
4299    Tmp2 = PromoteOp(Node->getOperand(1));
4300    assert(Tmp1.getValueType() == NVT && Tmp2.getValueType() == NVT);
4301    Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1, Tmp2);
4302    break;
4303  case ISD::FADD:
4304  case ISD::FSUB:
4305  case ISD::FMUL:
4306    Tmp1 = PromoteOp(Node->getOperand(0));
4307    Tmp2 = PromoteOp(Node->getOperand(1));
4308    assert(Tmp1.getValueType() == NVT && Tmp2.getValueType() == NVT);
4309    Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1, Tmp2);
4310
4311    // Floating point operations will give excess precision that we may not be
4312    // able to tolerate.  If we DO allow excess precision, just leave it,
4313    // otherwise excise it.
4314    // FIXME: Why would we need to round FP ops more than integer ones?
4315    //     Is Round(Add(Add(A,B),C)) != Round(Add(Round(Add(A,B)), C))
4316    if (NoExcessFPPrecision)
4317      Result = DAG.getNode(ISD::FP_ROUND_INREG, NVT, Result,
4318                           DAG.getValueType(VT));
4319    break;
4320
4321  case ISD::SDIV:
4322  case ISD::SREM:
4323    // These operators require that their input be sign extended.
4324    Tmp1 = PromoteOp(Node->getOperand(0));
4325    Tmp2 = PromoteOp(Node->getOperand(1));
4326    if (MVT::isInteger(NVT)) {
4327      Tmp1 = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Tmp1,
4328                         DAG.getValueType(VT));
4329      Tmp2 = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Tmp2,
4330                         DAG.getValueType(VT));
4331    }
4332    Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1, Tmp2);
4333
4334    // Perform FP_ROUND: this is probably overly pessimistic.
4335    if (MVT::isFloatingPoint(NVT) && NoExcessFPPrecision)
4336      Result = DAG.getNode(ISD::FP_ROUND_INREG, NVT, Result,
4337                           DAG.getValueType(VT));
4338    break;
4339  case ISD::FDIV:
4340  case ISD::FREM:
4341  case ISD::FCOPYSIGN:
4342    // These operators require that their input be fp extended.
4343    switch (getTypeAction(Node->getOperand(0).getValueType())) {
4344    case Expand: assert(0 && "not implemented");
4345    case Legal:   Tmp1 = LegalizeOp(Node->getOperand(0)); break;
4346    case Promote: Tmp1 = PromoteOp(Node->getOperand(0));  break;
4347    }
4348    switch (getTypeAction(Node->getOperand(1).getValueType())) {
4349    case Expand: assert(0 && "not implemented");
4350    case Legal:   Tmp2 = LegalizeOp(Node->getOperand(1)); break;
4351    case Promote: Tmp2 = PromoteOp(Node->getOperand(1)); break;
4352    }
4353    Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1, Tmp2);
4354
4355    // Perform FP_ROUND: this is probably overly pessimistic.
4356    if (NoExcessFPPrecision && Node->getOpcode() != ISD::FCOPYSIGN)
4357      Result = DAG.getNode(ISD::FP_ROUND_INREG, NVT, Result,
4358                           DAG.getValueType(VT));
4359    break;
4360
4361  case ISD::UDIV:
4362  case ISD::UREM:
4363    // These operators require that their input be zero extended.
4364    Tmp1 = PromoteOp(Node->getOperand(0));
4365    Tmp2 = PromoteOp(Node->getOperand(1));
4366    assert(MVT::isInteger(NVT) && "Operators don't apply to FP!");
4367    Tmp1 = DAG.getZeroExtendInReg(Tmp1, VT);
4368    Tmp2 = DAG.getZeroExtendInReg(Tmp2, VT);
4369    Result = DAG.getNode(Node->getOpcode(), NVT, Tmp1, Tmp2);
4370    break;
4371
4372  case ISD::SHL:
4373    Tmp1 = PromoteOp(Node->getOperand(0));
4374    Result = DAG.getNode(ISD::SHL, NVT, Tmp1, Node->getOperand(1));
4375    break;
4376  case ISD::SRA:
4377    // The input value must be properly sign extended.
4378    Tmp1 = PromoteOp(Node->getOperand(0));
4379    Tmp1 = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Tmp1,
4380                       DAG.getValueType(VT));
4381    Result = DAG.getNode(ISD::SRA, NVT, Tmp1, Node->getOperand(1));
4382    break;
4383  case ISD::SRL:
4384    // The input value must be properly zero extended.
4385    Tmp1 = PromoteOp(Node->getOperand(0));
4386    Tmp1 = DAG.getZeroExtendInReg(Tmp1, VT);
4387    Result = DAG.getNode(ISD::SRL, NVT, Tmp1, Node->getOperand(1));
4388    break;
4389
4390  case ISD::VAARG:
4391    Tmp1 = Node->getOperand(0);   // Get the chain.
4392    Tmp2 = Node->getOperand(1);   // Get the pointer.
4393    if (TLI.getOperationAction(ISD::VAARG, VT) == TargetLowering::Custom) {
4394      Tmp3 = DAG.getVAArg(VT, Tmp1, Tmp2, Node->getOperand(2));
4395      Result = TLI.CustomPromoteOperation(Tmp3, DAG);
4396    } else {
4397      const Value *V = cast<SrcValueSDNode>(Node->getOperand(2))->getValue();
4398      SDOperand VAList = DAG.getLoad(TLI.getPointerTy(), Tmp1, Tmp2, V, 0);
4399      // Increment the pointer, VAList, to the next vaarg
4400      Tmp3 = DAG.getNode(ISD::ADD, TLI.getPointerTy(), VAList,
4401                         DAG.getConstant(MVT::getSizeInBits(VT)/8,
4402                                         TLI.getPointerTy()));
4403      // Store the incremented VAList to the legalized pointer
4404      Tmp3 = DAG.getStore(VAList.getValue(1), Tmp3, Tmp2, V, 0);
4405      // Load the actual argument out of the pointer VAList
4406      Result = DAG.getExtLoad(ISD::EXTLOAD, NVT, Tmp3, VAList, NULL, 0, VT);
4407    }
4408    // Remember that we legalized the chain.
4409    AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1)));
4410    break;
4411
4412  case ISD::LOAD: {
4413    LoadSDNode *LD = cast<LoadSDNode>(Node);
4414    ISD::LoadExtType ExtType = ISD::isNON_EXTLoad(Node)
4415      ? ISD::EXTLOAD : LD->getExtensionType();
4416    Result = DAG.getExtLoad(ExtType, NVT,
4417                            LD->getChain(), LD->getBasePtr(),
4418                            LD->getSrcValue(), LD->getSrcValueOffset(),
4419                            LD->getMemoryVT(),
4420                            LD->isVolatile(),
4421                            LD->getAlignment());
4422    // Remember that we legalized the chain.
4423    AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1)));
4424    break;
4425  }
4426  case ISD::SELECT:
4427    Tmp2 = PromoteOp(Node->getOperand(1));   // Legalize the op0
4428    Tmp3 = PromoteOp(Node->getOperand(2));   // Legalize the op1
4429    Result = DAG.getNode(ISD::SELECT, NVT, Node->getOperand(0), Tmp2, Tmp3);
4430    break;
4431  case ISD::SELECT_CC:
4432    Tmp2 = PromoteOp(Node->getOperand(2));   // True
4433    Tmp3 = PromoteOp(Node->getOperand(3));   // False
4434    Result = DAG.getNode(ISD::SELECT_CC, NVT, Node->getOperand(0),
4435                         Node->getOperand(1), Tmp2, Tmp3, Node->getOperand(4));
4436    break;
4437  case ISD::BSWAP:
4438    Tmp1 = Node->getOperand(0);
4439    Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, NVT, Tmp1);
4440    Tmp1 = DAG.getNode(ISD::BSWAP, NVT, Tmp1);
4441    Result = DAG.getNode(ISD::SRL, NVT, Tmp1,
4442                         DAG.getConstant(MVT::getSizeInBits(NVT) -
4443                                         MVT::getSizeInBits(VT),
4444                                         TLI.getShiftAmountTy()));
4445    break;
4446  case ISD::CTPOP:
4447  case ISD::CTTZ:
4448  case ISD::CTLZ:
4449    // Zero extend the argument
4450    Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, NVT, Node->getOperand(0));
4451    // Perform the larger operation, then subtract if needed.
4452    Tmp1 = DAG.getNode(Node->getOpcode(), NVT, Tmp1);
4453    switch(Node->getOpcode()) {
4454    case ISD::CTPOP:
4455      Result = Tmp1;
4456      break;
4457    case ISD::CTTZ:
4458      // if Tmp1 == sizeinbits(NVT) then Tmp1 = sizeinbits(Old VT)
4459      Tmp2 = DAG.getSetCC(TLI.getSetCCResultTy(), Tmp1,
4460                          DAG.getConstant(MVT::getSizeInBits(NVT), NVT),
4461                          ISD::SETEQ);
4462      Result = DAG.getNode(ISD::SELECT, NVT, Tmp2,
4463                           DAG.getConstant(MVT::getSizeInBits(VT), NVT), Tmp1);
4464      break;
4465    case ISD::CTLZ:
4466      //Tmp1 = Tmp1 - (sizeinbits(NVT) - sizeinbits(Old VT))
4467      Result = DAG.getNode(ISD::SUB, NVT, Tmp1,
4468                           DAG.getConstant(MVT::getSizeInBits(NVT) -
4469                                           MVT::getSizeInBits(VT), NVT));
4470      break;
4471    }
4472    break;
4473  case ISD::EXTRACT_SUBVECTOR:
4474    Result = PromoteOp(ExpandEXTRACT_SUBVECTOR(Op));
4475    break;
4476  case ISD::EXTRACT_VECTOR_ELT:
4477    Result = PromoteOp(ExpandEXTRACT_VECTOR_ELT(Op));
4478    break;
4479  }
4480
4481  assert(Result.Val && "Didn't set a result!");
4482
4483  // Make sure the result is itself legal.
4484  Result = LegalizeOp(Result);
4485
4486  // Remember that we promoted this!
4487  AddPromotedOperand(Op, Result);
4488  return Result;
4489}
4490
4491/// ExpandEXTRACT_VECTOR_ELT - Expand an EXTRACT_VECTOR_ELT operation into
4492/// a legal EXTRACT_VECTOR_ELT operation, scalar code, or memory traffic,
4493/// based on the vector type. The return type of this matches the element type
4494/// of the vector, which may not be legal for the target.
4495SDOperand SelectionDAGLegalize::ExpandEXTRACT_VECTOR_ELT(SDOperand Op) {
4496  // We know that operand #0 is the Vec vector.  If the index is a constant
4497  // or if the invec is a supported hardware type, we can use it.  Otherwise,
4498  // lower to a store then an indexed load.
4499  SDOperand Vec = Op.getOperand(0);
4500  SDOperand Idx = Op.getOperand(1);
4501
4502  MVT::ValueType TVT = Vec.getValueType();
4503  unsigned NumElems = MVT::getVectorNumElements(TVT);
4504
4505  switch (TLI.getOperationAction(ISD::EXTRACT_VECTOR_ELT, TVT)) {
4506  default: assert(0 && "This action is not supported yet!");
4507  case TargetLowering::Custom: {
4508    Vec = LegalizeOp(Vec);
4509    Op = DAG.UpdateNodeOperands(Op, Vec, Idx);
4510    SDOperand Tmp3 = TLI.LowerOperation(Op, DAG);
4511    if (Tmp3.Val)
4512      return Tmp3;
4513    break;
4514  }
4515  case TargetLowering::Legal:
4516    if (isTypeLegal(TVT)) {
4517      Vec = LegalizeOp(Vec);
4518      Op = DAG.UpdateNodeOperands(Op, Vec, Idx);
4519      return Op;
4520    }
4521    break;
4522  case TargetLowering::Expand:
4523    break;
4524  }
4525
4526  if (NumElems == 1) {
4527    // This must be an access of the only element.  Return it.
4528    Op = ScalarizeVectorOp(Vec);
4529  } else if (!TLI.isTypeLegal(TVT) && isa<ConstantSDNode>(Idx)) {
4530    unsigned NumLoElts =  1 << Log2_32(NumElems-1);
4531    ConstantSDNode *CIdx = cast<ConstantSDNode>(Idx);
4532    SDOperand Lo, Hi;
4533    SplitVectorOp(Vec, Lo, Hi);
4534    if (CIdx->getValue() < NumLoElts) {
4535      Vec = Lo;
4536    } else {
4537      Vec = Hi;
4538      Idx = DAG.getConstant(CIdx->getValue() - NumLoElts,
4539                            Idx.getValueType());
4540    }
4541
4542    // It's now an extract from the appropriate high or low part.  Recurse.
4543    Op = DAG.UpdateNodeOperands(Op, Vec, Idx);
4544    Op = ExpandEXTRACT_VECTOR_ELT(Op);
4545  } else {
4546    // Store the value to a temporary stack slot, then LOAD the scalar
4547    // element back out.
4548    SDOperand StackPtr = DAG.CreateStackTemporary(Vec.getValueType());
4549    SDOperand Ch = DAG.getStore(DAG.getEntryNode(), Vec, StackPtr, NULL, 0);
4550
4551    // Add the offset to the index.
4552    unsigned EltSize = MVT::getSizeInBits(Op.getValueType())/8;
4553    Idx = DAG.getNode(ISD::MUL, Idx.getValueType(), Idx,
4554                      DAG.getConstant(EltSize, Idx.getValueType()));
4555
4556    if (MVT::getSizeInBits(Idx.getValueType()) >
4557        MVT::getSizeInBits(TLI.getPointerTy()))
4558      Idx = DAG.getNode(ISD::TRUNCATE, TLI.getPointerTy(), Idx);
4559    else
4560      Idx = DAG.getNode(ISD::ZERO_EXTEND, TLI.getPointerTy(), Idx);
4561
4562    StackPtr = DAG.getNode(ISD::ADD, Idx.getValueType(), Idx, StackPtr);
4563
4564    Op = DAG.getLoad(Op.getValueType(), Ch, StackPtr, NULL, 0);
4565  }
4566  return Op;
4567}
4568
4569/// ExpandEXTRACT_SUBVECTOR - Expand a EXTRACT_SUBVECTOR operation.  For now
4570/// we assume the operation can be split if it is not already legal.
4571SDOperand SelectionDAGLegalize::ExpandEXTRACT_SUBVECTOR(SDOperand Op) {
4572  // We know that operand #0 is the Vec vector.  For now we assume the index
4573  // is a constant and that the extracted result is a supported hardware type.
4574  SDOperand Vec = Op.getOperand(0);
4575  SDOperand Idx = LegalizeOp(Op.getOperand(1));
4576
4577  unsigned NumElems = MVT::getVectorNumElements(Vec.getValueType());
4578
4579  if (NumElems == MVT::getVectorNumElements(Op.getValueType())) {
4580    // This must be an access of the desired vector length.  Return it.
4581    return Vec;
4582  }
4583
4584  ConstantSDNode *CIdx = cast<ConstantSDNode>(Idx);
4585  SDOperand Lo, Hi;
4586  SplitVectorOp(Vec, Lo, Hi);
4587  if (CIdx->getValue() < NumElems/2) {
4588    Vec = Lo;
4589  } else {
4590    Vec = Hi;
4591    Idx = DAG.getConstant(CIdx->getValue() - NumElems/2, Idx.getValueType());
4592  }
4593
4594  // It's now an extract from the appropriate high or low part.  Recurse.
4595  Op = DAG.UpdateNodeOperands(Op, Vec, Idx);
4596  return ExpandEXTRACT_SUBVECTOR(Op);
4597}
4598
4599/// LegalizeSetCCOperands - Attempts to create a legal LHS and RHS for a SETCC
4600/// with condition CC on the current target.  This usually involves legalizing
4601/// or promoting the arguments.  In the case where LHS and RHS must be expanded,
4602/// there may be no choice but to create a new SetCC node to represent the
4603/// legalized value of setcc lhs, rhs.  In this case, the value is returned in
4604/// LHS, and the SDOperand returned in RHS has a nil SDNode value.
4605void SelectionDAGLegalize::LegalizeSetCCOperands(SDOperand &LHS,
4606                                                 SDOperand &RHS,
4607                                                 SDOperand &CC) {
4608  SDOperand Tmp1, Tmp2, Tmp3, Result;
4609
4610  switch (getTypeAction(LHS.getValueType())) {
4611  case Legal:
4612    Tmp1 = LegalizeOp(LHS);   // LHS
4613    Tmp2 = LegalizeOp(RHS);   // RHS
4614    break;
4615  case Promote:
4616    Tmp1 = PromoteOp(LHS);   // LHS
4617    Tmp2 = PromoteOp(RHS);   // RHS
4618
4619    // If this is an FP compare, the operands have already been extended.
4620    if (MVT::isInteger(LHS.getValueType())) {
4621      MVT::ValueType VT = LHS.getValueType();
4622      MVT::ValueType NVT = TLI.getTypeToTransformTo(VT);
4623
4624      // Otherwise, we have to insert explicit sign or zero extends.  Note
4625      // that we could insert sign extends for ALL conditions, but zero extend
4626      // is cheaper on many machines (an AND instead of two shifts), so prefer
4627      // it.
4628      switch (cast<CondCodeSDNode>(CC)->get()) {
4629      default: assert(0 && "Unknown integer comparison!");
4630      case ISD::SETEQ:
4631      case ISD::SETNE:
4632      case ISD::SETUGE:
4633      case ISD::SETUGT:
4634      case ISD::SETULE:
4635      case ISD::SETULT:
4636        // ALL of these operations will work if we either sign or zero extend
4637        // the operands (including the unsigned comparisons!).  Zero extend is
4638        // usually a simpler/cheaper operation, so prefer it.
4639        Tmp1 = DAG.getZeroExtendInReg(Tmp1, VT);
4640        Tmp2 = DAG.getZeroExtendInReg(Tmp2, VT);
4641        break;
4642      case ISD::SETGE:
4643      case ISD::SETGT:
4644      case ISD::SETLT:
4645      case ISD::SETLE:
4646        Tmp1 = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Tmp1,
4647                           DAG.getValueType(VT));
4648        Tmp2 = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Tmp2,
4649                           DAG.getValueType(VT));
4650        break;
4651      }
4652    }
4653    break;
4654  case Expand: {
4655    MVT::ValueType VT = LHS.getValueType();
4656    if (VT == MVT::f32 || VT == MVT::f64) {
4657      // Expand into one or more soft-fp libcall(s).
4658      RTLIB::Libcall LC1, LC2 = RTLIB::UNKNOWN_LIBCALL;
4659      switch (cast<CondCodeSDNode>(CC)->get()) {
4660      case ISD::SETEQ:
4661      case ISD::SETOEQ:
4662        LC1 = (VT == MVT::f32) ? RTLIB::OEQ_F32 : RTLIB::OEQ_F64;
4663        break;
4664      case ISD::SETNE:
4665      case ISD::SETUNE:
4666        LC1 = (VT == MVT::f32) ? RTLIB::UNE_F32 : RTLIB::UNE_F64;
4667        break;
4668      case ISD::SETGE:
4669      case ISD::SETOGE:
4670        LC1 = (VT == MVT::f32) ? RTLIB::OGE_F32 : RTLIB::OGE_F64;
4671        break;
4672      case ISD::SETLT:
4673      case ISD::SETOLT:
4674        LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 : RTLIB::OLT_F64;
4675        break;
4676      case ISD::SETLE:
4677      case ISD::SETOLE:
4678        LC1 = (VT == MVT::f32) ? RTLIB::OLE_F32 : RTLIB::OLE_F64;
4679        break;
4680      case ISD::SETGT:
4681      case ISD::SETOGT:
4682        LC1 = (VT == MVT::f32) ? RTLIB::OGT_F32 : RTLIB::OGT_F64;
4683        break;
4684      case ISD::SETUO:
4685        LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64;
4686        break;
4687      case ISD::SETO:
4688        LC1 = (VT == MVT::f32) ? RTLIB::O_F32 : RTLIB::O_F64;
4689        break;
4690      default:
4691        LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64;
4692        switch (cast<CondCodeSDNode>(CC)->get()) {
4693        case ISD::SETONE:
4694          // SETONE = SETOLT | SETOGT
4695          LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 : RTLIB::OLT_F64;
4696          // Fallthrough
4697        case ISD::SETUGT:
4698          LC2 = (VT == MVT::f32) ? RTLIB::OGT_F32 : RTLIB::OGT_F64;
4699          break;
4700        case ISD::SETUGE:
4701          LC2 = (VT == MVT::f32) ? RTLIB::OGE_F32 : RTLIB::OGE_F64;
4702          break;
4703        case ISD::SETULT:
4704          LC2 = (VT == MVT::f32) ? RTLIB::OLT_F32 : RTLIB::OLT_F64;
4705          break;
4706        case ISD::SETULE:
4707          LC2 = (VT == MVT::f32) ? RTLIB::OLE_F32 : RTLIB::OLE_F64;
4708          break;
4709        case ISD::SETUEQ:
4710          LC2 = (VT == MVT::f32) ? RTLIB::OEQ_F32 : RTLIB::OEQ_F64;
4711          break;
4712        default: assert(0 && "Unsupported FP setcc!");
4713        }
4714      }
4715
4716      SDOperand Dummy;
4717      Tmp1 = ExpandLibCall(TLI.getLibcallName(LC1),
4718                           DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val,
4719                           false /*sign irrelevant*/, Dummy);
4720      Tmp2 = DAG.getConstant(0, MVT::i32);
4721      CC = DAG.getCondCode(TLI.getCmpLibcallCC(LC1));
4722      if (LC2 != RTLIB::UNKNOWN_LIBCALL) {
4723        Tmp1 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), Tmp1, Tmp2, CC);
4724        LHS = ExpandLibCall(TLI.getLibcallName(LC2),
4725                            DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val,
4726                            false /*sign irrelevant*/, Dummy);
4727        Tmp2 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), LHS, Tmp2,
4728                           DAG.getCondCode(TLI.getCmpLibcallCC(LC2)));
4729        Tmp1 = DAG.getNode(ISD::OR, Tmp1.getValueType(), Tmp1, Tmp2);
4730        Tmp2 = SDOperand();
4731      }
4732      LHS = Tmp1;
4733      RHS = Tmp2;
4734      return;
4735    }
4736
4737    SDOperand LHSLo, LHSHi, RHSLo, RHSHi;
4738    ExpandOp(LHS, LHSLo, LHSHi);
4739    ExpandOp(RHS, RHSLo, RHSHi);
4740    ISD::CondCode CCCode = cast<CondCodeSDNode>(CC)->get();
4741
4742    if (VT==MVT::ppcf128) {
4743      // FIXME:  This generated code sucks.  We want to generate
4744      //         FCMP crN, hi1, hi2
4745      //         BNE crN, L:
4746      //         FCMP crN, lo1, lo2
4747      // The following can be improved, but not that much.
4748      Tmp1 = DAG.getSetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi, ISD::SETEQ);
4749      Tmp2 = DAG.getSetCC(TLI.getSetCCResultTy(), LHSLo, RHSLo, CCCode);
4750      Tmp3 = DAG.getNode(ISD::AND, Tmp1.getValueType(), Tmp1, Tmp2);
4751      Tmp1 = DAG.getSetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi, ISD::SETNE);
4752      Tmp2 = DAG.getSetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi, CCCode);
4753      Tmp1 = DAG.getNode(ISD::AND, Tmp1.getValueType(), Tmp1, Tmp2);
4754      Tmp1 = DAG.getNode(ISD::OR, Tmp1.getValueType(), Tmp1, Tmp3);
4755      Tmp2 = SDOperand();
4756      break;
4757    }
4758
4759    switch (CCCode) {
4760    case ISD::SETEQ:
4761    case ISD::SETNE:
4762      if (RHSLo == RHSHi)
4763        if (ConstantSDNode *RHSCST = dyn_cast<ConstantSDNode>(RHSLo))
4764          if (RHSCST->isAllOnesValue()) {
4765            // Comparison to -1.
4766            Tmp1 = DAG.getNode(ISD::AND, LHSLo.getValueType(), LHSLo, LHSHi);
4767            Tmp2 = RHSLo;
4768            break;
4769          }
4770
4771      Tmp1 = DAG.getNode(ISD::XOR, LHSLo.getValueType(), LHSLo, RHSLo);
4772      Tmp2 = DAG.getNode(ISD::XOR, LHSLo.getValueType(), LHSHi, RHSHi);
4773      Tmp1 = DAG.getNode(ISD::OR, Tmp1.getValueType(), Tmp1, Tmp2);
4774      Tmp2 = DAG.getConstant(0, Tmp1.getValueType());
4775      break;
4776    default:
4777      // If this is a comparison of the sign bit, just look at the top part.
4778      // X > -1,  x < 0
4779      if (ConstantSDNode *CST = dyn_cast<ConstantSDNode>(RHS))
4780        if ((cast<CondCodeSDNode>(CC)->get() == ISD::SETLT &&
4781             CST->getValue() == 0) ||             // X < 0
4782            (cast<CondCodeSDNode>(CC)->get() == ISD::SETGT &&
4783             CST->isAllOnesValue())) {            // X > -1
4784          Tmp1 = LHSHi;
4785          Tmp2 = RHSHi;
4786          break;
4787        }
4788
4789      // FIXME: This generated code sucks.
4790      ISD::CondCode LowCC;
4791      switch (CCCode) {
4792      default: assert(0 && "Unknown integer setcc!");
4793      case ISD::SETLT:
4794      case ISD::SETULT: LowCC = ISD::SETULT; break;
4795      case ISD::SETGT:
4796      case ISD::SETUGT: LowCC = ISD::SETUGT; break;
4797      case ISD::SETLE:
4798      case ISD::SETULE: LowCC = ISD::SETULE; break;
4799      case ISD::SETGE:
4800      case ISD::SETUGE: LowCC = ISD::SETUGE; break;
4801      }
4802
4803      // Tmp1 = lo(op1) < lo(op2)   // Always unsigned comparison
4804      // Tmp2 = hi(op1) < hi(op2)   // Signedness depends on operands
4805      // dest = hi(op1) == hi(op2) ? Tmp1 : Tmp2;
4806
4807      // NOTE: on targets without efficient SELECT of bools, we can always use
4808      // this identity: (B1 ? B2 : B3) --> (B1 & B2)|(!B1&B3)
4809      TargetLowering::DAGCombinerInfo DagCombineInfo(DAG, false, true, NULL);
4810      Tmp1 = TLI.SimplifySetCC(TLI.getSetCCResultTy(), LHSLo, RHSLo, LowCC,
4811                               false, DagCombineInfo);
4812      if (!Tmp1.Val)
4813        Tmp1 = DAG.getSetCC(TLI.getSetCCResultTy(), LHSLo, RHSLo, LowCC);
4814      Tmp2 = TLI.SimplifySetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi,
4815                               CCCode, false, DagCombineInfo);
4816      if (!Tmp2.Val)
4817        Tmp2 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), LHSHi, RHSHi,CC);
4818
4819      ConstantSDNode *Tmp1C = dyn_cast<ConstantSDNode>(Tmp1.Val);
4820      ConstantSDNode *Tmp2C = dyn_cast<ConstantSDNode>(Tmp2.Val);
4821      if ((Tmp1C && Tmp1C->getValue() == 0) ||
4822          (Tmp2C && Tmp2C->getValue() == 0 &&
4823           (CCCode == ISD::SETLE || CCCode == ISD::SETGE ||
4824            CCCode == ISD::SETUGE || CCCode == ISD::SETULE)) ||
4825          (Tmp2C && Tmp2C->getValue() == 1 &&
4826           (CCCode == ISD::SETLT || CCCode == ISD::SETGT ||
4827            CCCode == ISD::SETUGT || CCCode == ISD::SETULT))) {
4828        // low part is known false, returns high part.
4829        // For LE / GE, if high part is known false, ignore the low part.
4830        // For LT / GT, if high part is known true, ignore the low part.
4831        Tmp1 = Tmp2;
4832        Tmp2 = SDOperand();
4833      } else {
4834        Result = TLI.SimplifySetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi,
4835                                   ISD::SETEQ, false, DagCombineInfo);
4836        if (!Result.Val)
4837          Result=DAG.getSetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi, ISD::SETEQ);
4838        Result = LegalizeOp(DAG.getNode(ISD::SELECT, Tmp1.getValueType(),
4839                                        Result, Tmp1, Tmp2));
4840        Tmp1 = Result;
4841        Tmp2 = SDOperand();
4842      }
4843    }
4844  }
4845  }
4846  LHS = Tmp1;
4847  RHS = Tmp2;
4848}
4849
4850/// EmitStackConvert - Emit a store/load combination to the stack.  This stores
4851/// SrcOp to a stack slot of type SlotVT, truncating it if needed.  It then does
4852/// a load from the stack slot to DestVT, extending it if needed.
4853/// The resultant code need not be legal.
4854SDOperand SelectionDAGLegalize::EmitStackConvert(SDOperand SrcOp,
4855                                                 MVT::ValueType SlotVT,
4856                                                 MVT::ValueType DestVT) {
4857  // Create the stack frame object.
4858  SDOperand FIPtr = DAG.CreateStackTemporary(SlotVT);
4859
4860  FrameIndexSDNode *StackPtrFI = cast<FrameIndexSDNode>(FIPtr);
4861  int SPFI = StackPtrFI->getIndex();
4862
4863  unsigned SrcSize = MVT::getSizeInBits(SrcOp.getValueType());
4864  unsigned SlotSize = MVT::getSizeInBits(SlotVT);
4865  unsigned DestSize = MVT::getSizeInBits(DestVT);
4866
4867  // Emit a store to the stack slot.  Use a truncstore if the input value is
4868  // later than DestVT.
4869  SDOperand Store;
4870  if (SrcSize > SlotSize)
4871    Store = DAG.getTruncStore(DAG.getEntryNode(), SrcOp, FIPtr,
4872                              PseudoSourceValue::getFixedStack(),
4873                              SPFI, SlotVT);
4874  else {
4875    assert(SrcSize == SlotSize && "Invalid store");
4876    Store = DAG.getStore(DAG.getEntryNode(), SrcOp, FIPtr,
4877                         PseudoSourceValue::getFixedStack(),
4878                         SPFI, SlotVT);
4879  }
4880
4881  // Result is a load from the stack slot.
4882  if (SlotSize == DestSize)
4883    return DAG.getLoad(DestVT, Store, FIPtr, NULL, 0);
4884
4885  assert(SlotSize < DestSize && "Unknown extension!");
4886  return DAG.getExtLoad(ISD::EXTLOAD, DestVT, Store, FIPtr, NULL, 0, SlotVT);
4887}
4888
4889SDOperand SelectionDAGLegalize::ExpandSCALAR_TO_VECTOR(SDNode *Node) {
4890  // Create a vector sized/aligned stack slot, store the value to element #0,
4891  // then load the whole vector back out.
4892  SDOperand StackPtr = DAG.CreateStackTemporary(Node->getValueType(0));
4893
4894  FrameIndexSDNode *StackPtrFI = cast<FrameIndexSDNode>(StackPtr);
4895  int SPFI = StackPtrFI->getIndex();
4896
4897  SDOperand Ch = DAG.getStore(DAG.getEntryNode(), Node->getOperand(0), StackPtr,
4898                              PseudoSourceValue::getFixedStack(), SPFI);
4899  return DAG.getLoad(Node->getValueType(0), Ch, StackPtr,
4900                     PseudoSourceValue::getFixedStack(), SPFI);
4901}
4902
4903
4904/// ExpandBUILD_VECTOR - Expand a BUILD_VECTOR node on targets that don't
4905/// support the operation, but do support the resultant vector type.
4906SDOperand SelectionDAGLegalize::ExpandBUILD_VECTOR(SDNode *Node) {
4907
4908  // If the only non-undef value is the low element, turn this into a
4909  // SCALAR_TO_VECTOR node.  If this is { X, X, X, X }, determine X.
4910  unsigned NumElems = Node->getNumOperands();
4911  bool isOnlyLowElement = true;
4912  SDOperand SplatValue = Node->getOperand(0);
4913  std::map<SDOperand, std::vector<unsigned> > Values;
4914  Values[SplatValue].push_back(0);
4915  bool isConstant = true;
4916  if (!isa<ConstantFPSDNode>(SplatValue) && !isa<ConstantSDNode>(SplatValue) &&
4917      SplatValue.getOpcode() != ISD::UNDEF)
4918    isConstant = false;
4919
4920  for (unsigned i = 1; i < NumElems; ++i) {
4921    SDOperand V = Node->getOperand(i);
4922    Values[V].push_back(i);
4923    if (V.getOpcode() != ISD::UNDEF)
4924      isOnlyLowElement = false;
4925    if (SplatValue != V)
4926      SplatValue = SDOperand(0,0);
4927
4928    // If this isn't a constant element or an undef, we can't use a constant
4929    // pool load.
4930    if (!isa<ConstantFPSDNode>(V) && !isa<ConstantSDNode>(V) &&
4931        V.getOpcode() != ISD::UNDEF)
4932      isConstant = false;
4933  }
4934
4935  if (isOnlyLowElement) {
4936    // If the low element is an undef too, then this whole things is an undef.
4937    if (Node->getOperand(0).getOpcode() == ISD::UNDEF)
4938      return DAG.getNode(ISD::UNDEF, Node->getValueType(0));
4939    // Otherwise, turn this into a scalar_to_vector node.
4940    return DAG.getNode(ISD::SCALAR_TO_VECTOR, Node->getValueType(0),
4941                       Node->getOperand(0));
4942  }
4943
4944  // If all elements are constants, create a load from the constant pool.
4945  if (isConstant) {
4946    MVT::ValueType VT = Node->getValueType(0);
4947    const Type *OpNTy =
4948      MVT::getTypeForValueType(Node->getOperand(0).getValueType());
4949    std::vector<Constant*> CV;
4950    for (unsigned i = 0, e = NumElems; i != e; ++i) {
4951      if (ConstantFPSDNode *V =
4952          dyn_cast<ConstantFPSDNode>(Node->getOperand(i))) {
4953        CV.push_back(ConstantFP::get(OpNTy, V->getValueAPF()));
4954      } else if (ConstantSDNode *V =
4955                 dyn_cast<ConstantSDNode>(Node->getOperand(i))) {
4956        CV.push_back(ConstantInt::get(OpNTy, V->getValue()));
4957      } else {
4958        assert(Node->getOperand(i).getOpcode() == ISD::UNDEF);
4959        CV.push_back(UndefValue::get(OpNTy));
4960      }
4961    }
4962    Constant *CP = ConstantVector::get(CV);
4963    SDOperand CPIdx = DAG.getConstantPool(CP, TLI.getPointerTy());
4964    return DAG.getLoad(VT, DAG.getEntryNode(), CPIdx,
4965                       PseudoSourceValue::getConstantPool(), 0);
4966  }
4967
4968  if (SplatValue.Val) {   // Splat of one value?
4969    // Build the shuffle constant vector: <0, 0, 0, 0>
4970    MVT::ValueType MaskVT =
4971      MVT::getIntVectorWithNumElements(NumElems);
4972    SDOperand Zero = DAG.getConstant(0, MVT::getVectorElementType(MaskVT));
4973    std::vector<SDOperand> ZeroVec(NumElems, Zero);
4974    SDOperand SplatMask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT,
4975                                      &ZeroVec[0], ZeroVec.size());
4976
4977    // If the target supports VECTOR_SHUFFLE and this shuffle mask, use it.
4978    if (isShuffleLegal(Node->getValueType(0), SplatMask)) {
4979      // Get the splatted value into the low element of a vector register.
4980      SDOperand LowValVec =
4981        DAG.getNode(ISD::SCALAR_TO_VECTOR, Node->getValueType(0), SplatValue);
4982
4983      // Return shuffle(LowValVec, undef, <0,0,0,0>)
4984      return DAG.getNode(ISD::VECTOR_SHUFFLE, Node->getValueType(0), LowValVec,
4985                         DAG.getNode(ISD::UNDEF, Node->getValueType(0)),
4986                         SplatMask);
4987    }
4988  }
4989
4990  // If there are only two unique elements, we may be able to turn this into a
4991  // vector shuffle.
4992  if (Values.size() == 2) {
4993    // Build the shuffle constant vector: e.g. <0, 4, 0, 4>
4994    MVT::ValueType MaskVT =
4995      MVT::getIntVectorWithNumElements(NumElems);
4996    std::vector<SDOperand> MaskVec(NumElems);
4997    unsigned i = 0;
4998    for (std::map<SDOperand,std::vector<unsigned> >::iterator I=Values.begin(),
4999           E = Values.end(); I != E; ++I) {
5000      for (std::vector<unsigned>::iterator II = I->second.begin(),
5001             EE = I->second.end(); II != EE; ++II)
5002        MaskVec[*II] = DAG.getConstant(i, MVT::getVectorElementType(MaskVT));
5003      i += NumElems;
5004    }
5005    SDOperand ShuffleMask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT,
5006                                        &MaskVec[0], MaskVec.size());
5007
5008    // If the target supports VECTOR_SHUFFLE and this shuffle mask, use it.
5009    if (TLI.isOperationLegal(ISD::SCALAR_TO_VECTOR, Node->getValueType(0)) &&
5010        isShuffleLegal(Node->getValueType(0), ShuffleMask)) {
5011      SmallVector<SDOperand, 8> Ops;
5012      for(std::map<SDOperand,std::vector<unsigned> >::iterator I=Values.begin(),
5013            E = Values.end(); I != E; ++I) {
5014        SDOperand Op = DAG.getNode(ISD::SCALAR_TO_VECTOR, Node->getValueType(0),
5015                                   I->first);
5016        Ops.push_back(Op);
5017      }
5018      Ops.push_back(ShuffleMask);
5019
5020      // Return shuffle(LoValVec, HiValVec, <0,1,0,1>)
5021      return DAG.getNode(ISD::VECTOR_SHUFFLE, Node->getValueType(0),
5022                         &Ops[0], Ops.size());
5023    }
5024  }
5025
5026  // Otherwise, we can't handle this case efficiently.  Allocate a sufficiently
5027  // aligned object on the stack, store each element into it, then load
5028  // the result as a vector.
5029  MVT::ValueType VT = Node->getValueType(0);
5030  // Create the stack frame object.
5031  SDOperand FIPtr = DAG.CreateStackTemporary(VT);
5032
5033  // Emit a store of each element to the stack slot.
5034  SmallVector<SDOperand, 8> Stores;
5035  unsigned TypeByteSize =
5036    MVT::getSizeInBits(Node->getOperand(0).getValueType())/8;
5037  // Store (in the right endianness) the elements to memory.
5038  for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
5039    // Ignore undef elements.
5040    if (Node->getOperand(i).getOpcode() == ISD::UNDEF) continue;
5041
5042    unsigned Offset = TypeByteSize*i;
5043
5044    SDOperand Idx = DAG.getConstant(Offset, FIPtr.getValueType());
5045    Idx = DAG.getNode(ISD::ADD, FIPtr.getValueType(), FIPtr, Idx);
5046
5047    Stores.push_back(DAG.getStore(DAG.getEntryNode(), Node->getOperand(i), Idx,
5048                                  NULL, 0));
5049  }
5050
5051  SDOperand StoreChain;
5052  if (!Stores.empty())    // Not all undef elements?
5053    StoreChain = DAG.getNode(ISD::TokenFactor, MVT::Other,
5054                             &Stores[0], Stores.size());
5055  else
5056    StoreChain = DAG.getEntryNode();
5057
5058  // Result is a load from the stack slot.
5059  return DAG.getLoad(VT, StoreChain, FIPtr, NULL, 0);
5060}
5061
5062void SelectionDAGLegalize::ExpandShiftParts(unsigned NodeOp,
5063                                            SDOperand Op, SDOperand Amt,
5064                                            SDOperand &Lo, SDOperand &Hi) {
5065  // Expand the subcomponents.
5066  SDOperand LHSL, LHSH;
5067  ExpandOp(Op, LHSL, LHSH);
5068
5069  SDOperand Ops[] = { LHSL, LHSH, Amt };
5070  MVT::ValueType VT = LHSL.getValueType();
5071  Lo = DAG.getNode(NodeOp, DAG.getNodeValueTypes(VT, VT), 2, Ops, 3);
5072  Hi = Lo.getValue(1);
5073}
5074
5075
5076/// ExpandShift - Try to find a clever way to expand this shift operation out to
5077/// smaller elements.  If we can't find a way that is more efficient than a
5078/// libcall on this target, return false.  Otherwise, return true with the
5079/// low-parts expanded into Lo and Hi.
5080bool SelectionDAGLegalize::ExpandShift(unsigned Opc, SDOperand Op,SDOperand Amt,
5081                                       SDOperand &Lo, SDOperand &Hi) {
5082  assert((Opc == ISD::SHL || Opc == ISD::SRA || Opc == ISD::SRL) &&
5083         "This is not a shift!");
5084
5085  MVT::ValueType NVT = TLI.getTypeToTransformTo(Op.getValueType());
5086  SDOperand ShAmt = LegalizeOp(Amt);
5087  MVT::ValueType ShTy = ShAmt.getValueType();
5088  unsigned ShBits = MVT::getSizeInBits(ShTy);
5089  unsigned VTBits = MVT::getSizeInBits(Op.getValueType());
5090  unsigned NVTBits = MVT::getSizeInBits(NVT);
5091
5092  // Handle the case when Amt is an immediate.
5093  if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Amt.Val)) {
5094    unsigned Cst = CN->getValue();
5095    // Expand the incoming operand to be shifted, so that we have its parts
5096    SDOperand InL, InH;
5097    ExpandOp(Op, InL, InH);
5098    switch(Opc) {
5099    case ISD::SHL:
5100      if (Cst > VTBits) {
5101        Lo = DAG.getConstant(0, NVT);
5102        Hi = DAG.getConstant(0, NVT);
5103      } else if (Cst > NVTBits) {
5104        Lo = DAG.getConstant(0, NVT);
5105        Hi = DAG.getNode(ISD::SHL, NVT, InL, DAG.getConstant(Cst-NVTBits,ShTy));
5106      } else if (Cst == NVTBits) {
5107        Lo = DAG.getConstant(0, NVT);
5108        Hi = InL;
5109      } else {
5110        Lo = DAG.getNode(ISD::SHL, NVT, InL, DAG.getConstant(Cst, ShTy));
5111        Hi = DAG.getNode(ISD::OR, NVT,
5112           DAG.getNode(ISD::SHL, NVT, InH, DAG.getConstant(Cst, ShTy)),
5113           DAG.getNode(ISD::SRL, NVT, InL, DAG.getConstant(NVTBits-Cst, ShTy)));
5114      }
5115      return true;
5116    case ISD::SRL:
5117      if (Cst > VTBits) {
5118        Lo = DAG.getConstant(0, NVT);
5119        Hi = DAG.getConstant(0, NVT);
5120      } else if (Cst > NVTBits) {
5121        Lo = DAG.getNode(ISD::SRL, NVT, InH, DAG.getConstant(Cst-NVTBits,ShTy));
5122        Hi = DAG.getConstant(0, NVT);
5123      } else if (Cst == NVTBits) {
5124        Lo = InH;
5125        Hi = DAG.getConstant(0, NVT);
5126      } else {
5127        Lo = DAG.getNode(ISD::OR, NVT,
5128           DAG.getNode(ISD::SRL, NVT, InL, DAG.getConstant(Cst, ShTy)),
5129           DAG.getNode(ISD::SHL, NVT, InH, DAG.getConstant(NVTBits-Cst, ShTy)));
5130        Hi = DAG.getNode(ISD::SRL, NVT, InH, DAG.getConstant(Cst, ShTy));
5131      }
5132      return true;
5133    case ISD::SRA:
5134      if (Cst > VTBits) {
5135        Hi = Lo = DAG.getNode(ISD::SRA, NVT, InH,
5136                              DAG.getConstant(NVTBits-1, ShTy));
5137      } else if (Cst > NVTBits) {
5138        Lo = DAG.getNode(ISD::SRA, NVT, InH,
5139                           DAG.getConstant(Cst-NVTBits, ShTy));
5140        Hi = DAG.getNode(ISD::SRA, NVT, InH,
5141                              DAG.getConstant(NVTBits-1, ShTy));
5142      } else if (Cst == NVTBits) {
5143        Lo = InH;
5144        Hi = DAG.getNode(ISD::SRA, NVT, InH,
5145                              DAG.getConstant(NVTBits-1, ShTy));
5146      } else {
5147        Lo = DAG.getNode(ISD::OR, NVT,
5148           DAG.getNode(ISD::SRL, NVT, InL, DAG.getConstant(Cst, ShTy)),
5149           DAG.getNode(ISD::SHL, NVT, InH, DAG.getConstant(NVTBits-Cst, ShTy)));
5150        Hi = DAG.getNode(ISD::SRA, NVT, InH, DAG.getConstant(Cst, ShTy));
5151      }
5152      return true;
5153    }
5154  }
5155
5156  // Okay, the shift amount isn't constant.  However, if we can tell that it is
5157  // >= 32 or < 32, we can still simplify it, without knowing the actual value.
5158  APInt Mask = APInt::getHighBitsSet(ShBits, ShBits - Log2_32(NVTBits));
5159  APInt KnownZero, KnownOne;
5160  DAG.ComputeMaskedBits(Amt, Mask, KnownZero, KnownOne);
5161
5162  // If we know that if any of the high bits of the shift amount are one, then
5163  // we can do this as a couple of simple shifts.
5164  if (KnownOne.intersects(Mask)) {
5165    // Mask out the high bit, which we know is set.
5166    Amt = DAG.getNode(ISD::AND, Amt.getValueType(), Amt,
5167                      DAG.getConstant(~Mask, Amt.getValueType()));
5168
5169    // Expand the incoming operand to be shifted, so that we have its parts
5170    SDOperand InL, InH;
5171    ExpandOp(Op, InL, InH);
5172    switch(Opc) {
5173    case ISD::SHL:
5174      Lo = DAG.getConstant(0, NVT);              // Low part is zero.
5175      Hi = DAG.getNode(ISD::SHL, NVT, InL, Amt); // High part from Lo part.
5176      return true;
5177    case ISD::SRL:
5178      Hi = DAG.getConstant(0, NVT);              // Hi part is zero.
5179      Lo = DAG.getNode(ISD::SRL, NVT, InH, Amt); // Lo part from Hi part.
5180      return true;
5181    case ISD::SRA:
5182      Hi = DAG.getNode(ISD::SRA, NVT, InH,       // Sign extend high part.
5183                       DAG.getConstant(NVTBits-1, Amt.getValueType()));
5184      Lo = DAG.getNode(ISD::SRA, NVT, InH, Amt); // Lo part from Hi part.
5185      return true;
5186    }
5187  }
5188
5189  // If we know that the high bits of the shift amount are all zero, then we can
5190  // do this as a couple of simple shifts.
5191  if ((KnownZero & Mask) == Mask) {
5192    // Compute 32-amt.
5193    SDOperand Amt2 = DAG.getNode(ISD::SUB, Amt.getValueType(),
5194                                 DAG.getConstant(NVTBits, Amt.getValueType()),
5195                                 Amt);
5196
5197    // Expand the incoming operand to be shifted, so that we have its parts
5198    SDOperand InL, InH;
5199    ExpandOp(Op, InL, InH);
5200    switch(Opc) {
5201    case ISD::SHL:
5202      Lo = DAG.getNode(ISD::SHL, NVT, InL, Amt);
5203      Hi = DAG.getNode(ISD::OR, NVT,
5204                       DAG.getNode(ISD::SHL, NVT, InH, Amt),
5205                       DAG.getNode(ISD::SRL, NVT, InL, Amt2));
5206      return true;
5207    case ISD::SRL:
5208      Hi = DAG.getNode(ISD::SRL, NVT, InH, Amt);
5209      Lo = DAG.getNode(ISD::OR, NVT,
5210                       DAG.getNode(ISD::SRL, NVT, InL, Amt),
5211                       DAG.getNode(ISD::SHL, NVT, InH, Amt2));
5212      return true;
5213    case ISD::SRA:
5214      Hi = DAG.getNode(ISD::SRA, NVT, InH, Amt);
5215      Lo = DAG.getNode(ISD::OR, NVT,
5216                       DAG.getNode(ISD::SRL, NVT, InL, Amt),
5217                       DAG.getNode(ISD::SHL, NVT, InH, Amt2));
5218      return true;
5219    }
5220  }
5221
5222  return false;
5223}
5224
5225
5226// ExpandLibCall - Expand a node into a call to a libcall.  If the result value
5227// does not fit into a register, return the lo part and set the hi part to the
5228// by-reg argument.  If it does fit into a single register, return the result
5229// and leave the Hi part unset.
5230SDOperand SelectionDAGLegalize::ExpandLibCall(const char *Name, SDNode *Node,
5231                                              bool isSigned, SDOperand &Hi) {
5232  assert(!IsLegalizingCall && "Cannot overlap legalization of calls!");
5233  // The input chain to this libcall is the entry node of the function.
5234  // Legalizing the call will automatically add the previous call to the
5235  // dependence.
5236  SDOperand InChain = DAG.getEntryNode();
5237
5238  TargetLowering::ArgListTy Args;
5239  TargetLowering::ArgListEntry Entry;
5240  for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
5241    MVT::ValueType ArgVT = Node->getOperand(i).getValueType();
5242    const Type *ArgTy = MVT::getTypeForValueType(ArgVT);
5243    Entry.Node = Node->getOperand(i); Entry.Ty = ArgTy;
5244    Entry.isSExt = isSigned;
5245    Entry.isZExt = !isSigned;
5246    Args.push_back(Entry);
5247  }
5248  SDOperand Callee = DAG.getExternalSymbol(Name, TLI.getPointerTy());
5249
5250  // Splice the libcall in wherever FindInputOutputChains tells us to.
5251  const Type *RetTy = MVT::getTypeForValueType(Node->getValueType(0));
5252  std::pair<SDOperand,SDOperand> CallInfo =
5253    TLI.LowerCallTo(InChain, RetTy, isSigned, !isSigned, false, CallingConv::C,
5254                    false, Callee, Args, DAG);
5255
5256  // Legalize the call sequence, starting with the chain.  This will advance
5257  // the LastCALLSEQ_END to the legalized version of the CALLSEQ_END node that
5258  // was added by LowerCallTo (guaranteeing proper serialization of calls).
5259  LegalizeOp(CallInfo.second);
5260  SDOperand Result;
5261  switch (getTypeAction(CallInfo.first.getValueType())) {
5262  default: assert(0 && "Unknown thing");
5263  case Legal:
5264    Result = CallInfo.first;
5265    break;
5266  case Expand:
5267    ExpandOp(CallInfo.first, Result, Hi);
5268    break;
5269  }
5270  return Result;
5271}
5272
5273
5274/// ExpandIntToFP - Expand a [US]INT_TO_FP operation.
5275///
5276SDOperand SelectionDAGLegalize::
5277ExpandIntToFP(bool isSigned, MVT::ValueType DestTy, SDOperand Source) {
5278  assert(getTypeAction(Source.getValueType()) == Expand &&
5279         "This is not an expansion!");
5280  assert(Source.getValueType() == MVT::i64 && "Only handle expand from i64!");
5281
5282  if (!isSigned) {
5283    assert(Source.getValueType() == MVT::i64 &&
5284           "This only works for 64-bit -> FP");
5285    // The 64-bit value loaded will be incorrectly if the 'sign bit' of the
5286    // incoming integer is set.  To handle this, we dynamically test to see if
5287    // it is set, and, if so, add a fudge factor.
5288    SDOperand Lo, Hi;
5289    ExpandOp(Source, Lo, Hi);
5290
5291    // If this is unsigned, and not supported, first perform the conversion to
5292    // signed, then adjust the result if the sign bit is set.
5293    SDOperand SignedConv = ExpandIntToFP(true, DestTy,
5294                   DAG.getNode(ISD::BUILD_PAIR, Source.getValueType(), Lo, Hi));
5295
5296    SDOperand SignSet = DAG.getSetCC(TLI.getSetCCResultTy(), Hi,
5297                                     DAG.getConstant(0, Hi.getValueType()),
5298                                     ISD::SETLT);
5299    SDOperand Zero = DAG.getIntPtrConstant(0), Four = DAG.getIntPtrConstant(4);
5300    SDOperand CstOffset = DAG.getNode(ISD::SELECT, Zero.getValueType(),
5301                                      SignSet, Four, Zero);
5302    uint64_t FF = 0x5f800000ULL;
5303    if (TLI.isLittleEndian()) FF <<= 32;
5304    static Constant *FudgeFactor = ConstantInt::get(Type::Int64Ty, FF);
5305
5306    SDOperand CPIdx = DAG.getConstantPool(FudgeFactor, TLI.getPointerTy());
5307    CPIdx = DAG.getNode(ISD::ADD, TLI.getPointerTy(), CPIdx, CstOffset);
5308    SDOperand FudgeInReg;
5309    if (DestTy == MVT::f32)
5310      FudgeInReg = DAG.getLoad(MVT::f32, DAG.getEntryNode(), CPIdx,
5311                               PseudoSourceValue::getConstantPool(), 0);
5312    else if (MVT::getSizeInBits(DestTy) > MVT::getSizeInBits(MVT::f32))
5313      // FIXME: Avoid the extend by construction the right constantpool?
5314      FudgeInReg = DAG.getExtLoad(ISD::EXTLOAD, DestTy, DAG.getEntryNode(),
5315                                  CPIdx,
5316                                  PseudoSourceValue::getConstantPool(), 0,
5317                                  MVT::f32);
5318    else
5319      assert(0 && "Unexpected conversion");
5320
5321    MVT::ValueType SCVT = SignedConv.getValueType();
5322    if (SCVT != DestTy) {
5323      // Destination type needs to be expanded as well. The FADD now we are
5324      // constructing will be expanded into a libcall.
5325      if (MVT::getSizeInBits(SCVT) != MVT::getSizeInBits(DestTy)) {
5326        assert(SCVT == MVT::i32 && DestTy == MVT::f64);
5327        SignedConv = DAG.getNode(ISD::BUILD_PAIR, MVT::i64,
5328                                 SignedConv, SignedConv.getValue(1));
5329      }
5330      SignedConv = DAG.getNode(ISD::BIT_CONVERT, DestTy, SignedConv);
5331    }
5332    return DAG.getNode(ISD::FADD, DestTy, SignedConv, FudgeInReg);
5333  }
5334
5335  // Check to see if the target has a custom way to lower this.  If so, use it.
5336  switch (TLI.getOperationAction(ISD::SINT_TO_FP, Source.getValueType())) {
5337  default: assert(0 && "This action not implemented for this operation!");
5338  case TargetLowering::Legal:
5339  case TargetLowering::Expand:
5340    break;   // This case is handled below.
5341  case TargetLowering::Custom: {
5342    SDOperand NV = TLI.LowerOperation(DAG.getNode(ISD::SINT_TO_FP, DestTy,
5343                                                  Source), DAG);
5344    if (NV.Val)
5345      return LegalizeOp(NV);
5346    break;   // The target decided this was legal after all
5347  }
5348  }
5349
5350  // Expand the source, then glue it back together for the call.  We must expand
5351  // the source in case it is shared (this pass of legalize must traverse it).
5352  SDOperand SrcLo, SrcHi;
5353  ExpandOp(Source, SrcLo, SrcHi);
5354  Source = DAG.getNode(ISD::BUILD_PAIR, Source.getValueType(), SrcLo, SrcHi);
5355
5356  RTLIB::Libcall LC;
5357  if (DestTy == MVT::f32)
5358    LC = RTLIB::SINTTOFP_I64_F32;
5359  else {
5360    assert(DestTy == MVT::f64 && "Unknown fp value type!");
5361    LC = RTLIB::SINTTOFP_I64_F64;
5362  }
5363
5364  assert(TLI.getLibcallName(LC) && "Don't know how to expand this SINT_TO_FP!");
5365  Source = DAG.getNode(ISD::SINT_TO_FP, DestTy, Source);
5366  SDOperand UnusedHiPart;
5367  return ExpandLibCall(TLI.getLibcallName(LC), Source.Val, isSigned,
5368                       UnusedHiPart);
5369}
5370
5371/// ExpandLegalINT_TO_FP - This function is responsible for legalizing a
5372/// INT_TO_FP operation of the specified operand when the target requests that
5373/// we expand it.  At this point, we know that the result and operand types are
5374/// legal for the target.
5375SDOperand SelectionDAGLegalize::ExpandLegalINT_TO_FP(bool isSigned,
5376                                                     SDOperand Op0,
5377                                                     MVT::ValueType DestVT) {
5378  if (Op0.getValueType() == MVT::i32) {
5379    // simple 32-bit [signed|unsigned] integer to float/double expansion
5380
5381    // Get the stack frame index of a 8 byte buffer.
5382    SDOperand StackSlot = DAG.CreateStackTemporary(MVT::f64);
5383
5384    // word offset constant for Hi/Lo address computation
5385    SDOperand WordOff = DAG.getConstant(sizeof(int), TLI.getPointerTy());
5386    // set up Hi and Lo (into buffer) address based on endian
5387    SDOperand Hi = StackSlot;
5388    SDOperand Lo = DAG.getNode(ISD::ADD, TLI.getPointerTy(), StackSlot,WordOff);
5389    if (TLI.isLittleEndian())
5390      std::swap(Hi, Lo);
5391
5392    // if signed map to unsigned space
5393    SDOperand Op0Mapped;
5394    if (isSigned) {
5395      // constant used to invert sign bit (signed to unsigned mapping)
5396      SDOperand SignBit = DAG.getConstant(0x80000000u, MVT::i32);
5397      Op0Mapped = DAG.getNode(ISD::XOR, MVT::i32, Op0, SignBit);
5398    } else {
5399      Op0Mapped = Op0;
5400    }
5401    // store the lo of the constructed double - based on integer input
5402    SDOperand Store1 = DAG.getStore(DAG.getEntryNode(),
5403                                    Op0Mapped, Lo, NULL, 0);
5404    // initial hi portion of constructed double
5405    SDOperand InitialHi = DAG.getConstant(0x43300000u, MVT::i32);
5406    // store the hi of the constructed double - biased exponent
5407    SDOperand Store2=DAG.getStore(Store1, InitialHi, Hi, NULL, 0);
5408    // load the constructed double
5409    SDOperand Load = DAG.getLoad(MVT::f64, Store2, StackSlot, NULL, 0);
5410    // FP constant to bias correct the final result
5411    SDOperand Bias = DAG.getConstantFP(isSigned ?
5412                                            BitsToDouble(0x4330000080000000ULL)
5413                                          : BitsToDouble(0x4330000000000000ULL),
5414                                     MVT::f64);
5415    // subtract the bias
5416    SDOperand Sub = DAG.getNode(ISD::FSUB, MVT::f64, Load, Bias);
5417    // final result
5418    SDOperand Result;
5419    // handle final rounding
5420    if (DestVT == MVT::f64) {
5421      // do nothing
5422      Result = Sub;
5423    } else if (MVT::getSizeInBits(DestVT) < MVT::getSizeInBits(MVT::f64)) {
5424      Result = DAG.getNode(ISD::FP_ROUND, DestVT, Sub,
5425                           DAG.getIntPtrConstant(0));
5426    } else if (MVT::getSizeInBits(DestVT) > MVT::getSizeInBits(MVT::f64)) {
5427      Result = DAG.getNode(ISD::FP_EXTEND, DestVT, Sub);
5428    }
5429    return Result;
5430  }
5431  assert(!isSigned && "Legalize cannot Expand SINT_TO_FP for i64 yet");
5432  SDOperand Tmp1 = DAG.getNode(ISD::SINT_TO_FP, DestVT, Op0);
5433
5434  SDOperand SignSet = DAG.getSetCC(TLI.getSetCCResultTy(), Op0,
5435                                   DAG.getConstant(0, Op0.getValueType()),
5436                                   ISD::SETLT);
5437  SDOperand Zero = DAG.getIntPtrConstant(0), Four = DAG.getIntPtrConstant(4);
5438  SDOperand CstOffset = DAG.getNode(ISD::SELECT, Zero.getValueType(),
5439                                    SignSet, Four, Zero);
5440
5441  // If the sign bit of the integer is set, the large number will be treated
5442  // as a negative number.  To counteract this, the dynamic code adds an
5443  // offset depending on the data type.
5444  uint64_t FF;
5445  switch (Op0.getValueType()) {
5446  default: assert(0 && "Unsupported integer type!");
5447  case MVT::i8 : FF = 0x43800000ULL; break;  // 2^8  (as a float)
5448  case MVT::i16: FF = 0x47800000ULL; break;  // 2^16 (as a float)
5449  case MVT::i32: FF = 0x4F800000ULL; break;  // 2^32 (as a float)
5450  case MVT::i64: FF = 0x5F800000ULL; break;  // 2^64 (as a float)
5451  }
5452  if (TLI.isLittleEndian()) FF <<= 32;
5453  static Constant *FudgeFactor = ConstantInt::get(Type::Int64Ty, FF);
5454
5455  SDOperand CPIdx = DAG.getConstantPool(FudgeFactor, TLI.getPointerTy());
5456  CPIdx = DAG.getNode(ISD::ADD, TLI.getPointerTy(), CPIdx, CstOffset);
5457  SDOperand FudgeInReg;
5458  if (DestVT == MVT::f32)
5459    FudgeInReg = DAG.getLoad(MVT::f32, DAG.getEntryNode(), CPIdx,
5460                             PseudoSourceValue::getConstantPool(), 0);
5461  else {
5462    FudgeInReg =
5463      LegalizeOp(DAG.getExtLoad(ISD::EXTLOAD, DestVT,
5464                                DAG.getEntryNode(), CPIdx,
5465                                PseudoSourceValue::getConstantPool(), 0,
5466                                MVT::f32));
5467  }
5468
5469  return DAG.getNode(ISD::FADD, DestVT, Tmp1, FudgeInReg);
5470}
5471
5472/// PromoteLegalINT_TO_FP - This function is responsible for legalizing a
5473/// *INT_TO_FP operation of the specified operand when the target requests that
5474/// we promote it.  At this point, we know that the result and operand types are
5475/// legal for the target, and that there is a legal UINT_TO_FP or SINT_TO_FP
5476/// operation that takes a larger input.
5477SDOperand SelectionDAGLegalize::PromoteLegalINT_TO_FP(SDOperand LegalOp,
5478                                                      MVT::ValueType DestVT,
5479                                                      bool isSigned) {
5480  // First step, figure out the appropriate *INT_TO_FP operation to use.
5481  MVT::ValueType NewInTy = LegalOp.getValueType();
5482
5483  unsigned OpToUse = 0;
5484
5485  // Scan for the appropriate larger type to use.
5486  while (1) {
5487    NewInTy = (MVT::ValueType)(NewInTy+1);
5488    assert(MVT::isInteger(NewInTy) && "Ran out of possibilities!");
5489
5490    // If the target supports SINT_TO_FP of this type, use it.
5491    switch (TLI.getOperationAction(ISD::SINT_TO_FP, NewInTy)) {
5492      default: break;
5493      case TargetLowering::Legal:
5494        if (!TLI.isTypeLegal(NewInTy))
5495          break;  // Can't use this datatype.
5496        // FALL THROUGH.
5497      case TargetLowering::Custom:
5498        OpToUse = ISD::SINT_TO_FP;
5499        break;
5500    }
5501    if (OpToUse) break;
5502    if (isSigned) continue;
5503
5504    // If the target supports UINT_TO_FP of this type, use it.
5505    switch (TLI.getOperationAction(ISD::UINT_TO_FP, NewInTy)) {
5506      default: break;
5507      case TargetLowering::Legal:
5508        if (!TLI.isTypeLegal(NewInTy))
5509          break;  // Can't use this datatype.
5510        // FALL THROUGH.
5511      case TargetLowering::Custom:
5512        OpToUse = ISD::UINT_TO_FP;
5513        break;
5514    }
5515    if (OpToUse) break;
5516
5517    // Otherwise, try a larger type.
5518  }
5519
5520  // Okay, we found the operation and type to use.  Zero extend our input to the
5521  // desired type then run the operation on it.
5522  return DAG.getNode(OpToUse, DestVT,
5523                     DAG.getNode(isSigned ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND,
5524                                 NewInTy, LegalOp));
5525}
5526
5527/// PromoteLegalFP_TO_INT - This function is responsible for legalizing a
5528/// FP_TO_*INT operation of the specified operand when the target requests that
5529/// we promote it.  At this point, we know that the result and operand types are
5530/// legal for the target, and that there is a legal FP_TO_UINT or FP_TO_SINT
5531/// operation that returns a larger result.
5532SDOperand SelectionDAGLegalize::PromoteLegalFP_TO_INT(SDOperand LegalOp,
5533                                                      MVT::ValueType DestVT,
5534                                                      bool isSigned) {
5535  // First step, figure out the appropriate FP_TO*INT operation to use.
5536  MVT::ValueType NewOutTy = DestVT;
5537
5538  unsigned OpToUse = 0;
5539
5540  // Scan for the appropriate larger type to use.
5541  while (1) {
5542    NewOutTy = (MVT::ValueType)(NewOutTy+1);
5543    assert(MVT::isInteger(NewOutTy) && "Ran out of possibilities!");
5544
5545    // If the target supports FP_TO_SINT returning this type, use it.
5546    switch (TLI.getOperationAction(ISD::FP_TO_SINT, NewOutTy)) {
5547    default: break;
5548    case TargetLowering::Legal:
5549      if (!TLI.isTypeLegal(NewOutTy))
5550        break;  // Can't use this datatype.
5551      // FALL THROUGH.
5552    case TargetLowering::Custom:
5553      OpToUse = ISD::FP_TO_SINT;
5554      break;
5555    }
5556    if (OpToUse) break;
5557
5558    // If the target supports FP_TO_UINT of this type, use it.
5559    switch (TLI.getOperationAction(ISD::FP_TO_UINT, NewOutTy)) {
5560    default: break;
5561    case TargetLowering::Legal:
5562      if (!TLI.isTypeLegal(NewOutTy))
5563        break;  // Can't use this datatype.
5564      // FALL THROUGH.
5565    case TargetLowering::Custom:
5566      OpToUse = ISD::FP_TO_UINT;
5567      break;
5568    }
5569    if (OpToUse) break;
5570
5571    // Otherwise, try a larger type.
5572  }
5573
5574
5575  // Okay, we found the operation and type to use.
5576  SDOperand Operation = DAG.getNode(OpToUse, NewOutTy, LegalOp);
5577
5578  // If the operation produces an invalid type, it must be custom lowered.  Use
5579  // the target lowering hooks to expand it.  Just keep the low part of the
5580  // expanded operation, we know that we're truncating anyway.
5581  if (getTypeAction(NewOutTy) == Expand) {
5582    Operation = SDOperand(TLI.ExpandOperationResult(Operation.Val, DAG), 0);
5583    assert(Operation.Val && "Didn't return anything");
5584  }
5585
5586  // Truncate the result of the extended FP_TO_*INT operation to the desired
5587  // size.
5588  return DAG.getNode(ISD::TRUNCATE, DestVT, Operation);
5589}
5590
5591/// ExpandBSWAP - Open code the operations for BSWAP of the specified operation.
5592///
5593SDOperand SelectionDAGLegalize::ExpandBSWAP(SDOperand Op) {
5594  MVT::ValueType VT = Op.getValueType();
5595  MVT::ValueType SHVT = TLI.getShiftAmountTy();
5596  SDOperand Tmp1, Tmp2, Tmp3, Tmp4, Tmp5, Tmp6, Tmp7, Tmp8;
5597  switch (VT) {
5598  default: assert(0 && "Unhandled Expand type in BSWAP!"); abort();
5599  case MVT::i16:
5600    Tmp2 = DAG.getNode(ISD::SHL, VT, Op, DAG.getConstant(8, SHVT));
5601    Tmp1 = DAG.getNode(ISD::SRL, VT, Op, DAG.getConstant(8, SHVT));
5602    return DAG.getNode(ISD::OR, VT, Tmp1, Tmp2);
5603  case MVT::i32:
5604    Tmp4 = DAG.getNode(ISD::SHL, VT, Op, DAG.getConstant(24, SHVT));
5605    Tmp3 = DAG.getNode(ISD::SHL, VT, Op, DAG.getConstant(8, SHVT));
5606    Tmp2 = DAG.getNode(ISD::SRL, VT, Op, DAG.getConstant(8, SHVT));
5607    Tmp1 = DAG.getNode(ISD::SRL, VT, Op, DAG.getConstant(24, SHVT));
5608    Tmp3 = DAG.getNode(ISD::AND, VT, Tmp3, DAG.getConstant(0xFF0000, VT));
5609    Tmp2 = DAG.getNode(ISD::AND, VT, Tmp2, DAG.getConstant(0xFF00, VT));
5610    Tmp4 = DAG.getNode(ISD::OR, VT, Tmp4, Tmp3);
5611    Tmp2 = DAG.getNode(ISD::OR, VT, Tmp2, Tmp1);
5612    return DAG.getNode(ISD::OR, VT, Tmp4, Tmp2);
5613  case MVT::i64:
5614    Tmp8 = DAG.getNode(ISD::SHL, VT, Op, DAG.getConstant(56, SHVT));
5615    Tmp7 = DAG.getNode(ISD::SHL, VT, Op, DAG.getConstant(40, SHVT));
5616    Tmp6 = DAG.getNode(ISD::SHL, VT, Op, DAG.getConstant(24, SHVT));
5617    Tmp5 = DAG.getNode(ISD::SHL, VT, Op, DAG.getConstant(8, SHVT));
5618    Tmp4 = DAG.getNode(ISD::SRL, VT, Op, DAG.getConstant(8, SHVT));
5619    Tmp3 = DAG.getNode(ISD::SRL, VT, Op, DAG.getConstant(24, SHVT));
5620    Tmp2 = DAG.getNode(ISD::SRL, VT, Op, DAG.getConstant(40, SHVT));
5621    Tmp1 = DAG.getNode(ISD::SRL, VT, Op, DAG.getConstant(56, SHVT));
5622    Tmp7 = DAG.getNode(ISD::AND, VT, Tmp7, DAG.getConstant(255ULL<<48, VT));
5623    Tmp6 = DAG.getNode(ISD::AND, VT, Tmp6, DAG.getConstant(255ULL<<40, VT));
5624    Tmp5 = DAG.getNode(ISD::AND, VT, Tmp5, DAG.getConstant(255ULL<<32, VT));
5625    Tmp4 = DAG.getNode(ISD::AND, VT, Tmp4, DAG.getConstant(255ULL<<24, VT));
5626    Tmp3 = DAG.getNode(ISD::AND, VT, Tmp3, DAG.getConstant(255ULL<<16, VT));
5627    Tmp2 = DAG.getNode(ISD::AND, VT, Tmp2, DAG.getConstant(255ULL<<8 , VT));
5628    Tmp8 = DAG.getNode(ISD::OR, VT, Tmp8, Tmp7);
5629    Tmp6 = DAG.getNode(ISD::OR, VT, Tmp6, Tmp5);
5630    Tmp4 = DAG.getNode(ISD::OR, VT, Tmp4, Tmp3);
5631    Tmp2 = DAG.getNode(ISD::OR, VT, Tmp2, Tmp1);
5632    Tmp8 = DAG.getNode(ISD::OR, VT, Tmp8, Tmp6);
5633    Tmp4 = DAG.getNode(ISD::OR, VT, Tmp4, Tmp2);
5634    return DAG.getNode(ISD::OR, VT, Tmp8, Tmp4);
5635  }
5636}
5637
5638/// ExpandBitCount - Expand the specified bitcount instruction into operations.
5639///
5640SDOperand SelectionDAGLegalize::ExpandBitCount(unsigned Opc, SDOperand Op) {
5641  switch (Opc) {
5642  default: assert(0 && "Cannot expand this yet!");
5643  case ISD::CTPOP: {
5644    static const uint64_t mask[6] = {
5645      0x5555555555555555ULL, 0x3333333333333333ULL,
5646      0x0F0F0F0F0F0F0F0FULL, 0x00FF00FF00FF00FFULL,
5647      0x0000FFFF0000FFFFULL, 0x00000000FFFFFFFFULL
5648    };
5649    MVT::ValueType VT = Op.getValueType();
5650    MVT::ValueType ShVT = TLI.getShiftAmountTy();
5651    unsigned len = MVT::getSizeInBits(VT);
5652    for (unsigned i = 0; (1U << i) <= (len / 2); ++i) {
5653      //x = (x & mask[i][len/8]) + (x >> (1 << i) & mask[i][len/8])
5654      SDOperand Tmp2 = DAG.getConstant(mask[i], VT);
5655      SDOperand Tmp3 = DAG.getConstant(1ULL << i, ShVT);
5656      Op = DAG.getNode(ISD::ADD, VT, DAG.getNode(ISD::AND, VT, Op, Tmp2),
5657                       DAG.getNode(ISD::AND, VT,
5658                                   DAG.getNode(ISD::SRL, VT, Op, Tmp3),Tmp2));
5659    }
5660    return Op;
5661  }
5662  case ISD::CTLZ: {
5663    // for now, we do this:
5664    // x = x | (x >> 1);
5665    // x = x | (x >> 2);
5666    // ...
5667    // x = x | (x >>16);
5668    // x = x | (x >>32); // for 64-bit input
5669    // return popcount(~x);
5670    //
5671    // but see also: http://www.hackersdelight.org/HDcode/nlz.cc
5672    MVT::ValueType VT = Op.getValueType();
5673    MVT::ValueType ShVT = TLI.getShiftAmountTy();
5674    unsigned len = MVT::getSizeInBits(VT);
5675    for (unsigned i = 0; (1U << i) <= (len / 2); ++i) {
5676      SDOperand Tmp3 = DAG.getConstant(1ULL << i, ShVT);
5677      Op = DAG.getNode(ISD::OR, VT, Op, DAG.getNode(ISD::SRL, VT, Op, Tmp3));
5678    }
5679    Op = DAG.getNode(ISD::XOR, VT, Op, DAG.getConstant(~0ULL, VT));
5680    return DAG.getNode(ISD::CTPOP, VT, Op);
5681  }
5682  case ISD::CTTZ: {
5683    // for now, we use: { return popcount(~x & (x - 1)); }
5684    // unless the target has ctlz but not ctpop, in which case we use:
5685    // { return 32 - nlz(~x & (x-1)); }
5686    // see also http://www.hackersdelight.org/HDcode/ntz.cc
5687    MVT::ValueType VT = Op.getValueType();
5688    SDOperand Tmp2 = DAG.getConstant(~0ULL, VT);
5689    SDOperand Tmp3 = DAG.getNode(ISD::AND, VT,
5690                       DAG.getNode(ISD::XOR, VT, Op, Tmp2),
5691                       DAG.getNode(ISD::SUB, VT, Op, DAG.getConstant(1, VT)));
5692    // If ISD::CTLZ is legal and CTPOP isn't, then do that instead.
5693    if (!TLI.isOperationLegal(ISD::CTPOP, VT) &&
5694        TLI.isOperationLegal(ISD::CTLZ, VT))
5695      return DAG.getNode(ISD::SUB, VT,
5696                         DAG.getConstant(MVT::getSizeInBits(VT), VT),
5697                         DAG.getNode(ISD::CTLZ, VT, Tmp3));
5698    return DAG.getNode(ISD::CTPOP, VT, Tmp3);
5699  }
5700  }
5701}
5702
5703/// ExpandOp - Expand the specified SDOperand into its two component pieces
5704/// Lo&Hi.  Note that the Op MUST be an expanded type.  As a result of this, the
5705/// LegalizeNodes map is filled in for any results that are not expanded, the
5706/// ExpandedNodes map is filled in for any results that are expanded, and the
5707/// Lo/Hi values are returned.
5708void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
5709  MVT::ValueType VT = Op.getValueType();
5710  MVT::ValueType NVT = TLI.getTypeToTransformTo(VT);
5711  SDNode *Node = Op.Val;
5712  assert(getTypeAction(VT) == Expand && "Not an expanded type!");
5713  assert(((MVT::isInteger(NVT) && NVT < VT) || MVT::isFloatingPoint(VT) ||
5714         MVT::isVector(VT)) &&
5715         "Cannot expand to FP value or to larger int value!");
5716
5717  // See if we already expanded it.
5718  DenseMap<SDOperand, std::pair<SDOperand, SDOperand> >::iterator I
5719    = ExpandedNodes.find(Op);
5720  if (I != ExpandedNodes.end()) {
5721    Lo = I->second.first;
5722    Hi = I->second.second;
5723    return;
5724  }
5725
5726  switch (Node->getOpcode()) {
5727  case ISD::CopyFromReg:
5728    assert(0 && "CopyFromReg must be legal!");
5729  case ISD::FP_ROUND_INREG:
5730    if (VT == MVT::ppcf128 &&
5731        TLI.getOperationAction(ISD::FP_ROUND_INREG, VT) ==
5732            TargetLowering::Custom) {
5733      SDOperand SrcLo, SrcHi, Src;
5734      ExpandOp(Op.getOperand(0), SrcLo, SrcHi);
5735      Src = DAG.getNode(ISD::BUILD_PAIR, VT, SrcLo, SrcHi);
5736      SDOperand Result = TLI.LowerOperation(
5737        DAG.getNode(ISD::FP_ROUND_INREG, VT, Src, Op.getOperand(1)), DAG);
5738      assert(Result.Val->getOpcode() == ISD::BUILD_PAIR);
5739      Lo = Result.Val->getOperand(0);
5740      Hi = Result.Val->getOperand(1);
5741      break;
5742    }
5743    // fall through
5744  default:
5745#ifndef NDEBUG
5746    cerr << "NODE: "; Node->dump(&DAG); cerr << "\n";
5747#endif
5748    assert(0 && "Do not know how to expand this operator!");
5749    abort();
5750  case ISD::EXTRACT_ELEMENT:
5751    ExpandOp(Node->getOperand(0), Lo, Hi);
5752    if (cast<ConstantSDNode>(Node->getOperand(1))->getValue())
5753      return ExpandOp(Hi, Lo, Hi);
5754    return ExpandOp(Lo, Lo, Hi);
5755  case ISD::EXTRACT_VECTOR_ELT:
5756    assert(VT==MVT::i64 && "Do not know how to expand this operator!");
5757    // ExpandEXTRACT_VECTOR_ELT tolerates invalid result types.
5758    Lo  = ExpandEXTRACT_VECTOR_ELT(Op);
5759    return ExpandOp(Lo, Lo, Hi);
5760  case ISD::UNDEF:
5761    NVT = TLI.getTypeToExpandTo(VT);
5762    Lo = DAG.getNode(ISD::UNDEF, NVT);
5763    Hi = DAG.getNode(ISD::UNDEF, NVT);
5764    break;
5765  case ISD::Constant: {
5766    unsigned NVTBits = MVT::getSizeInBits(NVT);
5767    const APInt &Cst = cast<ConstantSDNode>(Node)->getAPIntValue();
5768    Lo = DAG.getConstant(APInt(Cst).trunc(NVTBits), NVT);
5769    Hi = DAG.getConstant(Cst.lshr(NVTBits).trunc(NVTBits), NVT);
5770    break;
5771  }
5772  case ISD::ConstantFP: {
5773    ConstantFPSDNode *CFP = cast<ConstantFPSDNode>(Node);
5774    if (CFP->getValueType(0) == MVT::ppcf128) {
5775      APInt api = CFP->getValueAPF().convertToAPInt();
5776      Lo = DAG.getConstantFP(APFloat(APInt(64, 1, &api.getRawData()[1])),
5777                             MVT::f64);
5778      Hi = DAG.getConstantFP(APFloat(APInt(64, 1, &api.getRawData()[0])),
5779                             MVT::f64);
5780      break;
5781    }
5782    Lo = ExpandConstantFP(CFP, false, DAG, TLI);
5783    if (getTypeAction(Lo.getValueType()) == Expand)
5784      ExpandOp(Lo, Lo, Hi);
5785    break;
5786  }
5787  case ISD::BUILD_PAIR:
5788    // Return the operands.
5789    Lo = Node->getOperand(0);
5790    Hi = Node->getOperand(1);
5791    break;
5792
5793  case ISD::MERGE_VALUES:
5794    if (Node->getNumValues() == 1) {
5795      ExpandOp(Op.getOperand(0), Lo, Hi);
5796      break;
5797    }
5798    // FIXME: For now only expand i64,chain = MERGE_VALUES (x, y)
5799    assert(Op.ResNo == 0 && Node->getNumValues() == 2 &&
5800           Op.getValue(1).getValueType() == MVT::Other &&
5801           "unhandled MERGE_VALUES");
5802    ExpandOp(Op.getOperand(0), Lo, Hi);
5803    // Remember that we legalized the chain.
5804    AddLegalizedOperand(Op.getValue(1), LegalizeOp(Op.getOperand(1)));
5805    break;
5806
5807  case ISD::SIGN_EXTEND_INREG:
5808    ExpandOp(Node->getOperand(0), Lo, Hi);
5809    // sext_inreg the low part if needed.
5810    Lo = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Lo, Node->getOperand(1));
5811
5812    // The high part gets the sign extension from the lo-part.  This handles
5813    // things like sextinreg V:i64 from i8.
5814    Hi = DAG.getNode(ISD::SRA, NVT, Lo,
5815                     DAG.getConstant(MVT::getSizeInBits(NVT)-1,
5816                                     TLI.getShiftAmountTy()));
5817    break;
5818
5819  case ISD::BSWAP: {
5820    ExpandOp(Node->getOperand(0), Lo, Hi);
5821    SDOperand TempLo = DAG.getNode(ISD::BSWAP, NVT, Hi);
5822    Hi = DAG.getNode(ISD::BSWAP, NVT, Lo);
5823    Lo = TempLo;
5824    break;
5825  }
5826
5827  case ISD::CTPOP:
5828    ExpandOp(Node->getOperand(0), Lo, Hi);
5829    Lo = DAG.getNode(ISD::ADD, NVT,          // ctpop(HL) -> ctpop(H)+ctpop(L)
5830                     DAG.getNode(ISD::CTPOP, NVT, Lo),
5831                     DAG.getNode(ISD::CTPOP, NVT, Hi));
5832    Hi = DAG.getConstant(0, NVT);
5833    break;
5834
5835  case ISD::CTLZ: {
5836    // ctlz (HL) -> ctlz(H) != 32 ? ctlz(H) : (ctlz(L)+32)
5837    ExpandOp(Node->getOperand(0), Lo, Hi);
5838    SDOperand BitsC = DAG.getConstant(MVT::getSizeInBits(NVT), NVT);
5839    SDOperand HLZ = DAG.getNode(ISD::CTLZ, NVT, Hi);
5840    SDOperand TopNotZero = DAG.getSetCC(TLI.getSetCCResultTy(), HLZ, BitsC,
5841                                        ISD::SETNE);
5842    SDOperand LowPart = DAG.getNode(ISD::CTLZ, NVT, Lo);
5843    LowPart = DAG.getNode(ISD::ADD, NVT, LowPart, BitsC);
5844
5845    Lo = DAG.getNode(ISD::SELECT, NVT, TopNotZero, HLZ, LowPart);
5846    Hi = DAG.getConstant(0, NVT);
5847    break;
5848  }
5849
5850  case ISD::CTTZ: {
5851    // cttz (HL) -> cttz(L) != 32 ? cttz(L) : (cttz(H)+32)
5852    ExpandOp(Node->getOperand(0), Lo, Hi);
5853    SDOperand BitsC = DAG.getConstant(MVT::getSizeInBits(NVT), NVT);
5854    SDOperand LTZ = DAG.getNode(ISD::CTTZ, NVT, Lo);
5855    SDOperand BotNotZero = DAG.getSetCC(TLI.getSetCCResultTy(), LTZ, BitsC,
5856                                        ISD::SETNE);
5857    SDOperand HiPart = DAG.getNode(ISD::CTTZ, NVT, Hi);
5858    HiPart = DAG.getNode(ISD::ADD, NVT, HiPart, BitsC);
5859
5860    Lo = DAG.getNode(ISD::SELECT, NVT, BotNotZero, LTZ, HiPart);
5861    Hi = DAG.getConstant(0, NVT);
5862    break;
5863  }
5864
5865  case ISD::VAARG: {
5866    SDOperand Ch = Node->getOperand(0);   // Legalize the chain.
5867    SDOperand Ptr = Node->getOperand(1);  // Legalize the pointer.
5868    Lo = DAG.getVAArg(NVT, Ch, Ptr, Node->getOperand(2));
5869    Hi = DAG.getVAArg(NVT, Lo.getValue(1), Ptr, Node->getOperand(2));
5870
5871    // Remember that we legalized the chain.
5872    Hi = LegalizeOp(Hi);
5873    AddLegalizedOperand(Op.getValue(1), Hi.getValue(1));
5874    if (TLI.isBigEndian())
5875      std::swap(Lo, Hi);
5876    break;
5877  }
5878
5879  case ISD::LOAD: {
5880    LoadSDNode *LD = cast<LoadSDNode>(Node);
5881    SDOperand Ch  = LD->getChain();    // Legalize the chain.
5882    SDOperand Ptr = LD->getBasePtr();  // Legalize the pointer.
5883    ISD::LoadExtType ExtType = LD->getExtensionType();
5884    int SVOffset = LD->getSrcValueOffset();
5885    unsigned Alignment = LD->getAlignment();
5886    bool isVolatile = LD->isVolatile();
5887
5888    if (ExtType == ISD::NON_EXTLOAD) {
5889      Lo = DAG.getLoad(NVT, Ch, Ptr, LD->getSrcValue(), SVOffset,
5890                       isVolatile, Alignment);
5891      if (VT == MVT::f32 || VT == MVT::f64) {
5892        // f32->i32 or f64->i64 one to one expansion.
5893        // Remember that we legalized the chain.
5894        AddLegalizedOperand(SDOperand(Node, 1), LegalizeOp(Lo.getValue(1)));
5895        // Recursively expand the new load.
5896        if (getTypeAction(NVT) == Expand)
5897          ExpandOp(Lo, Lo, Hi);
5898        break;
5899      }
5900
5901      // Increment the pointer to the other half.
5902      unsigned IncrementSize = MVT::getSizeInBits(Lo.getValueType())/8;
5903      Ptr = DAG.getNode(ISD::ADD, Ptr.getValueType(), Ptr,
5904                        DAG.getIntPtrConstant(IncrementSize));
5905      SVOffset += IncrementSize;
5906      Alignment = MinAlign(Alignment, IncrementSize);
5907      Hi = DAG.getLoad(NVT, Ch, Ptr, LD->getSrcValue(), SVOffset,
5908                       isVolatile, Alignment);
5909
5910      // Build a factor node to remember that this load is independent of the
5911      // other one.
5912      SDOperand TF = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo.getValue(1),
5913                                 Hi.getValue(1));
5914
5915      // Remember that we legalized the chain.
5916      AddLegalizedOperand(Op.getValue(1), LegalizeOp(TF));
5917      if (TLI.isBigEndian())
5918        std::swap(Lo, Hi);
5919    } else {
5920      MVT::ValueType EVT = LD->getMemoryVT();
5921
5922      if ((VT == MVT::f64 && EVT == MVT::f32) ||
5923          (VT == MVT::ppcf128 && (EVT==MVT::f64 || EVT==MVT::f32))) {
5924        // f64 = EXTLOAD f32 should expand to LOAD, FP_EXTEND
5925        SDOperand Load = DAG.getLoad(EVT, Ch, Ptr, LD->getSrcValue(),
5926                                     SVOffset, isVolatile, Alignment);
5927        // Remember that we legalized the chain.
5928        AddLegalizedOperand(SDOperand(Node, 1), LegalizeOp(Load.getValue(1)));
5929        ExpandOp(DAG.getNode(ISD::FP_EXTEND, VT, Load), Lo, Hi);
5930        break;
5931      }
5932
5933      if (EVT == NVT)
5934        Lo = DAG.getLoad(NVT, Ch, Ptr, LD->getSrcValue(),
5935                         SVOffset, isVolatile, Alignment);
5936      else
5937        Lo = DAG.getExtLoad(ExtType, NVT, Ch, Ptr, LD->getSrcValue(),
5938                            SVOffset, EVT, isVolatile,
5939                            Alignment);
5940
5941      // Remember that we legalized the chain.
5942      AddLegalizedOperand(SDOperand(Node, 1), LegalizeOp(Lo.getValue(1)));
5943
5944      if (ExtType == ISD::SEXTLOAD) {
5945        // The high part is obtained by SRA'ing all but one of the bits of the
5946        // lo part.
5947        unsigned LoSize = MVT::getSizeInBits(Lo.getValueType());
5948        Hi = DAG.getNode(ISD::SRA, NVT, Lo,
5949                         DAG.getConstant(LoSize-1, TLI.getShiftAmountTy()));
5950      } else if (ExtType == ISD::ZEXTLOAD) {
5951        // The high part is just a zero.
5952        Hi = DAG.getConstant(0, NVT);
5953      } else /* if (ExtType == ISD::EXTLOAD) */ {
5954        // The high part is undefined.
5955        Hi = DAG.getNode(ISD::UNDEF, NVT);
5956      }
5957    }
5958    break;
5959  }
5960  case ISD::AND:
5961  case ISD::OR:
5962  case ISD::XOR: {   // Simple logical operators -> two trivial pieces.
5963    SDOperand LL, LH, RL, RH;
5964    ExpandOp(Node->getOperand(0), LL, LH);
5965    ExpandOp(Node->getOperand(1), RL, RH);
5966    Lo = DAG.getNode(Node->getOpcode(), NVT, LL, RL);
5967    Hi = DAG.getNode(Node->getOpcode(), NVT, LH, RH);
5968    break;
5969  }
5970  case ISD::SELECT: {
5971    SDOperand LL, LH, RL, RH;
5972    ExpandOp(Node->getOperand(1), LL, LH);
5973    ExpandOp(Node->getOperand(2), RL, RH);
5974    if (getTypeAction(NVT) == Expand)
5975      NVT = TLI.getTypeToExpandTo(NVT);
5976    Lo = DAG.getNode(ISD::SELECT, NVT, Node->getOperand(0), LL, RL);
5977    if (VT != MVT::f32)
5978      Hi = DAG.getNode(ISD::SELECT, NVT, Node->getOperand(0), LH, RH);
5979    break;
5980  }
5981  case ISD::SELECT_CC: {
5982    SDOperand TL, TH, FL, FH;
5983    ExpandOp(Node->getOperand(2), TL, TH);
5984    ExpandOp(Node->getOperand(3), FL, FH);
5985    if (getTypeAction(NVT) == Expand)
5986      NVT = TLI.getTypeToExpandTo(NVT);
5987    Lo = DAG.getNode(ISD::SELECT_CC, NVT, Node->getOperand(0),
5988                     Node->getOperand(1), TL, FL, Node->getOperand(4));
5989    if (VT != MVT::f32)
5990      Hi = DAG.getNode(ISD::SELECT_CC, NVT, Node->getOperand(0),
5991                       Node->getOperand(1), TH, FH, Node->getOperand(4));
5992    break;
5993  }
5994  case ISD::ANY_EXTEND:
5995    // The low part is any extension of the input (which degenerates to a copy).
5996    Lo = DAG.getNode(ISD::ANY_EXTEND, NVT, Node->getOperand(0));
5997    // The high part is undefined.
5998    Hi = DAG.getNode(ISD::UNDEF, NVT);
5999    break;
6000  case ISD::SIGN_EXTEND: {
6001    // The low part is just a sign extension of the input (which degenerates to
6002    // a copy).
6003    Lo = DAG.getNode(ISD::SIGN_EXTEND, NVT, Node->getOperand(0));
6004
6005    // The high part is obtained by SRA'ing all but one of the bits of the lo
6006    // part.
6007    unsigned LoSize = MVT::getSizeInBits(Lo.getValueType());
6008    Hi = DAG.getNode(ISD::SRA, NVT, Lo,
6009                     DAG.getConstant(LoSize-1, TLI.getShiftAmountTy()));
6010    break;
6011  }
6012  case ISD::ZERO_EXTEND:
6013    // The low part is just a zero extension of the input (which degenerates to
6014    // a copy).
6015    Lo = DAG.getNode(ISD::ZERO_EXTEND, NVT, Node->getOperand(0));
6016
6017    // The high part is just a zero.
6018    Hi = DAG.getConstant(0, NVT);
6019    break;
6020
6021  case ISD::TRUNCATE: {
6022    // The input value must be larger than this value.  Expand *it*.
6023    SDOperand NewLo;
6024    ExpandOp(Node->getOperand(0), NewLo, Hi);
6025
6026    // The low part is now either the right size, or it is closer.  If not the
6027    // right size, make an illegal truncate so we recursively expand it.
6028    if (NewLo.getValueType() != Node->getValueType(0))
6029      NewLo = DAG.getNode(ISD::TRUNCATE, Node->getValueType(0), NewLo);
6030    ExpandOp(NewLo, Lo, Hi);
6031    break;
6032  }
6033
6034  case ISD::BIT_CONVERT: {
6035    SDOperand Tmp;
6036    if (TLI.getOperationAction(ISD::BIT_CONVERT, VT) == TargetLowering::Custom){
6037      // If the target wants to, allow it to lower this itself.
6038      switch (getTypeAction(Node->getOperand(0).getValueType())) {
6039      case Expand: assert(0 && "cannot expand FP!");
6040      case Legal:   Tmp = LegalizeOp(Node->getOperand(0)); break;
6041      case Promote: Tmp = PromoteOp (Node->getOperand(0)); break;
6042      }
6043      Tmp = TLI.LowerOperation(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp), DAG);
6044    }
6045
6046    // f32 / f64 must be expanded to i32 / i64.
6047    if (VT == MVT::f32 || VT == MVT::f64) {
6048      Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node->getOperand(0));
6049      if (getTypeAction(NVT) == Expand)
6050        ExpandOp(Lo, Lo, Hi);
6051      break;
6052    }
6053
6054    // If source operand will be expanded to the same type as VT, i.e.
6055    // i64 <- f64, i32 <- f32, expand the source operand instead.
6056    MVT::ValueType VT0 = Node->getOperand(0).getValueType();
6057    if (getTypeAction(VT0) == Expand && TLI.getTypeToTransformTo(VT0) == VT) {
6058      ExpandOp(Node->getOperand(0), Lo, Hi);
6059      break;
6060    }
6061
6062    // Turn this into a load/store pair by default.
6063    if (Tmp.Val == 0)
6064      Tmp = EmitStackConvert(Node->getOperand(0), VT, VT);
6065
6066    ExpandOp(Tmp, Lo, Hi);
6067    break;
6068  }
6069
6070  case ISD::READCYCLECOUNTER: {
6071    assert(TLI.getOperationAction(ISD::READCYCLECOUNTER, VT) ==
6072                 TargetLowering::Custom &&
6073           "Must custom expand ReadCycleCounter");
6074    SDOperand Tmp = TLI.LowerOperation(Op, DAG);
6075    assert(Tmp.Val && "Node must be custom expanded!");
6076    ExpandOp(Tmp.getValue(0), Lo, Hi);
6077    AddLegalizedOperand(SDOperand(Node, 1), // Remember we legalized the chain.
6078                        LegalizeOp(Tmp.getValue(1)));
6079    break;
6080  }
6081
6082    // These operators cannot be expanded directly, emit them as calls to
6083    // library functions.
6084  case ISD::FP_TO_SINT: {
6085    if (TLI.getOperationAction(ISD::FP_TO_SINT, VT) == TargetLowering::Custom) {
6086      SDOperand Op;
6087      switch (getTypeAction(Node->getOperand(0).getValueType())) {
6088      case Expand: assert(0 && "cannot expand FP!");
6089      case Legal:   Op = LegalizeOp(Node->getOperand(0)); break;
6090      case Promote: Op = PromoteOp (Node->getOperand(0)); break;
6091      }
6092
6093      Op = TLI.LowerOperation(DAG.getNode(ISD::FP_TO_SINT, VT, Op), DAG);
6094
6095      // Now that the custom expander is done, expand the result, which is still
6096      // VT.
6097      if (Op.Val) {
6098        ExpandOp(Op, Lo, Hi);
6099        break;
6100      }
6101    }
6102
6103    RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
6104    if (Node->getOperand(0).getValueType() == MVT::f32)
6105      LC = RTLIB::FPTOSINT_F32_I64;
6106    else if (Node->getOperand(0).getValueType() == MVT::f64)
6107      LC = RTLIB::FPTOSINT_F64_I64;
6108    else if (Node->getOperand(0).getValueType() == MVT::f80)
6109      LC = RTLIB::FPTOSINT_F80_I64;
6110    else if (Node->getOperand(0).getValueType() == MVT::ppcf128)
6111      LC = RTLIB::FPTOSINT_PPCF128_I64;
6112    Lo = ExpandLibCall(TLI.getLibcallName(LC), Node,
6113                       false/*sign irrelevant*/, Hi);
6114    break;
6115  }
6116
6117  case ISD::FP_TO_UINT: {
6118    if (TLI.getOperationAction(ISD::FP_TO_UINT, VT) == TargetLowering::Custom) {
6119      SDOperand Op;
6120      switch (getTypeAction(Node->getOperand(0).getValueType())) {
6121        case Expand: assert(0 && "cannot expand FP!");
6122        case Legal:   Op = LegalizeOp(Node->getOperand(0)); break;
6123        case Promote: Op = PromoteOp (Node->getOperand(0)); break;
6124      }
6125
6126      Op = TLI.LowerOperation(DAG.getNode(ISD::FP_TO_UINT, VT, Op), DAG);
6127
6128      // Now that the custom expander is done, expand the result.
6129      if (Op.Val) {
6130        ExpandOp(Op, Lo, Hi);
6131        break;
6132      }
6133    }
6134
6135    RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
6136    if (Node->getOperand(0).getValueType() == MVT::f32)
6137      LC = RTLIB::FPTOUINT_F32_I64;
6138    else if (Node->getOperand(0).getValueType() == MVT::f64)
6139      LC = RTLIB::FPTOUINT_F64_I64;
6140    else if (Node->getOperand(0).getValueType() == MVT::f80)
6141      LC = RTLIB::FPTOUINT_F80_I64;
6142    else if (Node->getOperand(0).getValueType() == MVT::ppcf128)
6143      LC = RTLIB::FPTOUINT_PPCF128_I64;
6144    Lo = ExpandLibCall(TLI.getLibcallName(LC), Node,
6145                       false/*sign irrelevant*/, Hi);
6146    break;
6147  }
6148
6149  case ISD::SHL: {
6150    // If the target wants custom lowering, do so.
6151    SDOperand ShiftAmt = LegalizeOp(Node->getOperand(1));
6152    if (TLI.getOperationAction(ISD::SHL, VT) == TargetLowering::Custom) {
6153      SDOperand Op = DAG.getNode(ISD::SHL, VT, Node->getOperand(0), ShiftAmt);
6154      Op = TLI.LowerOperation(Op, DAG);
6155      if (Op.Val) {
6156        // Now that the custom expander is done, expand the result, which is
6157        // still VT.
6158        ExpandOp(Op, Lo, Hi);
6159        break;
6160      }
6161    }
6162
6163    // If ADDC/ADDE are supported and if the shift amount is a constant 1, emit
6164    // this X << 1 as X+X.
6165    if (ConstantSDNode *ShAmt = dyn_cast<ConstantSDNode>(ShiftAmt)) {
6166      if (ShAmt->getValue() == 1 && TLI.isOperationLegal(ISD::ADDC, NVT) &&
6167          TLI.isOperationLegal(ISD::ADDE, NVT)) {
6168        SDOperand LoOps[2], HiOps[3];
6169        ExpandOp(Node->getOperand(0), LoOps[0], HiOps[0]);
6170        SDVTList VTList = DAG.getVTList(LoOps[0].getValueType(), MVT::Flag);
6171        LoOps[1] = LoOps[0];
6172        Lo = DAG.getNode(ISD::ADDC, VTList, LoOps, 2);
6173
6174        HiOps[1] = HiOps[0];
6175        HiOps[2] = Lo.getValue(1);
6176        Hi = DAG.getNode(ISD::ADDE, VTList, HiOps, 3);
6177        break;
6178      }
6179    }
6180
6181    // If we can emit an efficient shift operation, do so now.
6182    if (ExpandShift(ISD::SHL, Node->getOperand(0), ShiftAmt, Lo, Hi))
6183      break;
6184
6185    // If this target supports SHL_PARTS, use it.
6186    TargetLowering::LegalizeAction Action =
6187      TLI.getOperationAction(ISD::SHL_PARTS, NVT);
6188    if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
6189        Action == TargetLowering::Custom) {
6190      ExpandShiftParts(ISD::SHL_PARTS, Node->getOperand(0), ShiftAmt, Lo, Hi);
6191      break;
6192    }
6193
6194    // Otherwise, emit a libcall.
6195    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SHL_I64), Node,
6196                       false/*left shift=unsigned*/, Hi);
6197    break;
6198  }
6199
6200  case ISD::SRA: {
6201    // If the target wants custom lowering, do so.
6202    SDOperand ShiftAmt = LegalizeOp(Node->getOperand(1));
6203    if (TLI.getOperationAction(ISD::SRA, VT) == TargetLowering::Custom) {
6204      SDOperand Op = DAG.getNode(ISD::SRA, VT, Node->getOperand(0), ShiftAmt);
6205      Op = TLI.LowerOperation(Op, DAG);
6206      if (Op.Val) {
6207        // Now that the custom expander is done, expand the result, which is
6208        // still VT.
6209        ExpandOp(Op, Lo, Hi);
6210        break;
6211      }
6212    }
6213
6214    // If we can emit an efficient shift operation, do so now.
6215    if (ExpandShift(ISD::SRA, Node->getOperand(0), ShiftAmt, Lo, Hi))
6216      break;
6217
6218    // If this target supports SRA_PARTS, use it.
6219    TargetLowering::LegalizeAction Action =
6220      TLI.getOperationAction(ISD::SRA_PARTS, NVT);
6221    if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
6222        Action == TargetLowering::Custom) {
6223      ExpandShiftParts(ISD::SRA_PARTS, Node->getOperand(0), ShiftAmt, Lo, Hi);
6224      break;
6225    }
6226
6227    // Otherwise, emit a libcall.
6228    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SRA_I64), Node,
6229                       true/*ashr is signed*/, Hi);
6230    break;
6231  }
6232
6233  case ISD::SRL: {
6234    // If the target wants custom lowering, do so.
6235    SDOperand ShiftAmt = LegalizeOp(Node->getOperand(1));
6236    if (TLI.getOperationAction(ISD::SRL, VT) == TargetLowering::Custom) {
6237      SDOperand Op = DAG.getNode(ISD::SRL, VT, Node->getOperand(0), ShiftAmt);
6238      Op = TLI.LowerOperation(Op, DAG);
6239      if (Op.Val) {
6240        // Now that the custom expander is done, expand the result, which is
6241        // still VT.
6242        ExpandOp(Op, Lo, Hi);
6243        break;
6244      }
6245    }
6246
6247    // If we can emit an efficient shift operation, do so now.
6248    if (ExpandShift(ISD::SRL, Node->getOperand(0), ShiftAmt, Lo, Hi))
6249      break;
6250
6251    // If this target supports SRL_PARTS, use it.
6252    TargetLowering::LegalizeAction Action =
6253      TLI.getOperationAction(ISD::SRL_PARTS, NVT);
6254    if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
6255        Action == TargetLowering::Custom) {
6256      ExpandShiftParts(ISD::SRL_PARTS, Node->getOperand(0), ShiftAmt, Lo, Hi);
6257      break;
6258    }
6259
6260    // Otherwise, emit a libcall.
6261    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SRL_I64), Node,
6262                       false/*lshr is unsigned*/, Hi);
6263    break;
6264  }
6265
6266  case ISD::ADD:
6267  case ISD::SUB: {
6268    // If the target wants to custom expand this, let them.
6269    if (TLI.getOperationAction(Node->getOpcode(), VT) ==
6270            TargetLowering::Custom) {
6271      Op = TLI.LowerOperation(Op, DAG);
6272      if (Op.Val) {
6273        ExpandOp(Op, Lo, Hi);
6274        break;
6275      }
6276    }
6277
6278    // Expand the subcomponents.
6279    SDOperand LHSL, LHSH, RHSL, RHSH;
6280    ExpandOp(Node->getOperand(0), LHSL, LHSH);
6281    ExpandOp(Node->getOperand(1), RHSL, RHSH);
6282    SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag);
6283    SDOperand LoOps[2], HiOps[3];
6284    LoOps[0] = LHSL;
6285    LoOps[1] = RHSL;
6286    HiOps[0] = LHSH;
6287    HiOps[1] = RHSH;
6288    if (Node->getOpcode() == ISD::ADD) {
6289      Lo = DAG.getNode(ISD::ADDC, VTList, LoOps, 2);
6290      HiOps[2] = Lo.getValue(1);
6291      Hi = DAG.getNode(ISD::ADDE, VTList, HiOps, 3);
6292    } else {
6293      Lo = DAG.getNode(ISD::SUBC, VTList, LoOps, 2);
6294      HiOps[2] = Lo.getValue(1);
6295      Hi = DAG.getNode(ISD::SUBE, VTList, HiOps, 3);
6296    }
6297    break;
6298  }
6299
6300  case ISD::ADDC:
6301  case ISD::SUBC: {
6302    // Expand the subcomponents.
6303    SDOperand LHSL, LHSH, RHSL, RHSH;
6304    ExpandOp(Node->getOperand(0), LHSL, LHSH);
6305    ExpandOp(Node->getOperand(1), RHSL, RHSH);
6306    SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag);
6307    SDOperand LoOps[2] = { LHSL, RHSL };
6308    SDOperand HiOps[3] = { LHSH, RHSH };
6309
6310    if (Node->getOpcode() == ISD::ADDC) {
6311      Lo = DAG.getNode(ISD::ADDC, VTList, LoOps, 2);
6312      HiOps[2] = Lo.getValue(1);
6313      Hi = DAG.getNode(ISD::ADDE, VTList, HiOps, 3);
6314    } else {
6315      Lo = DAG.getNode(ISD::SUBC, VTList, LoOps, 2);
6316      HiOps[2] = Lo.getValue(1);
6317      Hi = DAG.getNode(ISD::SUBE, VTList, HiOps, 3);
6318    }
6319    // Remember that we legalized the flag.
6320    AddLegalizedOperand(Op.getValue(1), LegalizeOp(Hi.getValue(1)));
6321    break;
6322  }
6323  case ISD::ADDE:
6324  case ISD::SUBE: {
6325    // Expand the subcomponents.
6326    SDOperand LHSL, LHSH, RHSL, RHSH;
6327    ExpandOp(Node->getOperand(0), LHSL, LHSH);
6328    ExpandOp(Node->getOperand(1), RHSL, RHSH);
6329    SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag);
6330    SDOperand LoOps[3] = { LHSL, RHSL, Node->getOperand(2) };
6331    SDOperand HiOps[3] = { LHSH, RHSH };
6332
6333    Lo = DAG.getNode(Node->getOpcode(), VTList, LoOps, 3);
6334    HiOps[2] = Lo.getValue(1);
6335    Hi = DAG.getNode(Node->getOpcode(), VTList, HiOps, 3);
6336
6337    // Remember that we legalized the flag.
6338    AddLegalizedOperand(Op.getValue(1), LegalizeOp(Hi.getValue(1)));
6339    break;
6340  }
6341  case ISD::MUL: {
6342    // If the target wants to custom expand this, let them.
6343    if (TLI.getOperationAction(ISD::MUL, VT) == TargetLowering::Custom) {
6344      SDOperand New = TLI.LowerOperation(Op, DAG);
6345      if (New.Val) {
6346        ExpandOp(New, Lo, Hi);
6347        break;
6348      }
6349    }
6350
6351    bool HasMULHS = TLI.isOperationLegal(ISD::MULHS, NVT);
6352    bool HasMULHU = TLI.isOperationLegal(ISD::MULHU, NVT);
6353    bool HasSMUL_LOHI = TLI.isOperationLegal(ISD::SMUL_LOHI, NVT);
6354    bool HasUMUL_LOHI = TLI.isOperationLegal(ISD::UMUL_LOHI, NVT);
6355    if (HasMULHU || HasMULHS || HasUMUL_LOHI || HasSMUL_LOHI) {
6356      SDOperand LL, LH, RL, RH;
6357      ExpandOp(Node->getOperand(0), LL, LH);
6358      ExpandOp(Node->getOperand(1), RL, RH);
6359      unsigned OuterBitSize = Op.getValueSizeInBits();
6360      unsigned InnerBitSize = RH.getValueSizeInBits();
6361      unsigned LHSSB = DAG.ComputeNumSignBits(Op.getOperand(0));
6362      unsigned RHSSB = DAG.ComputeNumSignBits(Op.getOperand(1));
6363      if (DAG.MaskedValueIsZero(Op.getOperand(0),
6364                                APInt::getHighBitsSet(OuterBitSize, LHSSB)) &&
6365          DAG.MaskedValueIsZero(Op.getOperand(1),
6366                                APInt::getHighBitsSet(OuterBitSize, RHSSB))) {
6367        // The inputs are both zero-extended.
6368        if (HasUMUL_LOHI) {
6369          // We can emit a umul_lohi.
6370          Lo = DAG.getNode(ISD::UMUL_LOHI, DAG.getVTList(NVT, NVT), LL, RL);
6371          Hi = SDOperand(Lo.Val, 1);
6372          break;
6373        }
6374        if (HasMULHU) {
6375          // We can emit a mulhu+mul.
6376          Lo = DAG.getNode(ISD::MUL, NVT, LL, RL);
6377          Hi = DAG.getNode(ISD::MULHU, NVT, LL, RL);
6378          break;
6379        }
6380      }
6381      if (LHSSB > InnerBitSize && RHSSB > InnerBitSize) {
6382        // The input values are both sign-extended.
6383        if (HasSMUL_LOHI) {
6384          // We can emit a smul_lohi.
6385          Lo = DAG.getNode(ISD::SMUL_LOHI, DAG.getVTList(NVT, NVT), LL, RL);
6386          Hi = SDOperand(Lo.Val, 1);
6387          break;
6388        }
6389        if (HasMULHS) {
6390          // We can emit a mulhs+mul.
6391          Lo = DAG.getNode(ISD::MUL, NVT, LL, RL);
6392          Hi = DAG.getNode(ISD::MULHS, NVT, LL, RL);
6393          break;
6394        }
6395      }
6396      if (HasUMUL_LOHI) {
6397        // Lo,Hi = umul LHS, RHS.
6398        SDOperand UMulLOHI = DAG.getNode(ISD::UMUL_LOHI,
6399                                         DAG.getVTList(NVT, NVT), LL, RL);
6400        Lo = UMulLOHI;
6401        Hi = UMulLOHI.getValue(1);
6402        RH = DAG.getNode(ISD::MUL, NVT, LL, RH);
6403        LH = DAG.getNode(ISD::MUL, NVT, LH, RL);
6404        Hi = DAG.getNode(ISD::ADD, NVT, Hi, RH);
6405        Hi = DAG.getNode(ISD::ADD, NVT, Hi, LH);
6406        break;
6407      }
6408      if (HasMULHU) {
6409        Lo = DAG.getNode(ISD::MUL, NVT, LL, RL);
6410        Hi = DAG.getNode(ISD::MULHU, NVT, LL, RL);
6411        RH = DAG.getNode(ISD::MUL, NVT, LL, RH);
6412        LH = DAG.getNode(ISD::MUL, NVT, LH, RL);
6413        Hi = DAG.getNode(ISD::ADD, NVT, Hi, RH);
6414        Hi = DAG.getNode(ISD::ADD, NVT, Hi, LH);
6415        break;
6416      }
6417    }
6418
6419    // If nothing else, we can make a libcall.
6420    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::MUL_I64), Node,
6421                       false/*sign irrelevant*/, Hi);
6422    break;
6423  }
6424  case ISD::SDIV:
6425    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SDIV_I64), Node, true, Hi);
6426    break;
6427  case ISD::UDIV:
6428    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::UDIV_I64), Node, true, Hi);
6429    break;
6430  case ISD::SREM:
6431    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SREM_I64), Node, true, Hi);
6432    break;
6433  case ISD::UREM:
6434    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::UREM_I64), Node, true, Hi);
6435    break;
6436
6437  case ISD::FADD:
6438    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::ADD_F32,
6439                                                       RTLIB::ADD_F64,
6440                                                       RTLIB::ADD_F80,
6441                                                       RTLIB::ADD_PPCF128)),
6442                       Node, false, Hi);
6443    break;
6444  case ISD::FSUB:
6445    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::SUB_F32,
6446                                                       RTLIB::SUB_F64,
6447                                                       RTLIB::SUB_F80,
6448                                                       RTLIB::SUB_PPCF128)),
6449                       Node, false, Hi);
6450    break;
6451  case ISD::FMUL:
6452    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::MUL_F32,
6453                                                       RTLIB::MUL_F64,
6454                                                       RTLIB::MUL_F80,
6455                                                       RTLIB::MUL_PPCF128)),
6456                       Node, false, Hi);
6457    break;
6458  case ISD::FDIV:
6459    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::DIV_F32,
6460                                                       RTLIB::DIV_F64,
6461                                                       RTLIB::DIV_F80,
6462                                                       RTLIB::DIV_PPCF128)),
6463                       Node, false, Hi);
6464    break;
6465  case ISD::FP_EXTEND:
6466    if (VT == MVT::ppcf128) {
6467      assert(Node->getOperand(0).getValueType()==MVT::f32 ||
6468             Node->getOperand(0).getValueType()==MVT::f64);
6469      const uint64_t zero = 0;
6470      if (Node->getOperand(0).getValueType()==MVT::f32)
6471        Hi = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Node->getOperand(0));
6472      else
6473        Hi = Node->getOperand(0);
6474      Lo = DAG.getConstantFP(APFloat(APInt(64, 1, &zero)), MVT::f64);
6475      break;
6476    }
6477    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::FPEXT_F32_F64), Node, true,Hi);
6478    break;
6479  case ISD::FP_ROUND:
6480    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::FPROUND_F64_F32),Node,true,Hi);
6481    break;
6482  case ISD::FPOWI:
6483    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::POWI_F32,
6484                                                       RTLIB::POWI_F64,
6485                                                       RTLIB::POWI_F80,
6486                                                       RTLIB::POWI_PPCF128)),
6487                       Node, false, Hi);
6488    break;
6489  case ISD::FSQRT:
6490  case ISD::FSIN:
6491  case ISD::FCOS: {
6492    RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
6493    switch(Node->getOpcode()) {
6494    case ISD::FSQRT:
6495      LC = GetFPLibCall(VT, RTLIB::SQRT_F32, RTLIB::SQRT_F64,
6496                        RTLIB::SQRT_F80, RTLIB::SQRT_PPCF128);
6497      break;
6498    case ISD::FSIN:
6499      LC = GetFPLibCall(VT, RTLIB::SIN_F32, RTLIB::SIN_F64,
6500                        RTLIB::SIN_F80, RTLIB::SIN_PPCF128);
6501      break;
6502    case ISD::FCOS:
6503      LC = GetFPLibCall(VT, RTLIB::COS_F32, RTLIB::COS_F64,
6504                        RTLIB::COS_F80, RTLIB::COS_PPCF128);
6505      break;
6506    default: assert(0 && "Unreachable!");
6507    }
6508    Lo = ExpandLibCall(TLI.getLibcallName(LC), Node, false, Hi);
6509    break;
6510  }
6511  case ISD::FABS: {
6512    if (VT == MVT::ppcf128) {
6513      SDOperand Tmp;
6514      ExpandOp(Node->getOperand(0), Lo, Tmp);
6515      Hi = DAG.getNode(ISD::FABS, NVT, Tmp);
6516      // lo = hi==fabs(hi) ? lo : -lo;
6517      Lo = DAG.getNode(ISD::SELECT_CC, NVT, Hi, Tmp,
6518                    Lo, DAG.getNode(ISD::FNEG, NVT, Lo),
6519                    DAG.getCondCode(ISD::SETEQ));
6520      break;
6521    }
6522    SDOperand Mask = (VT == MVT::f64)
6523      ? DAG.getConstantFP(BitsToDouble(~(1ULL << 63)), VT)
6524      : DAG.getConstantFP(BitsToFloat(~(1U << 31)), VT);
6525    Mask = DAG.getNode(ISD::BIT_CONVERT, NVT, Mask);
6526    Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node->getOperand(0));
6527    Lo = DAG.getNode(ISD::AND, NVT, Lo, Mask);
6528    if (getTypeAction(NVT) == Expand)
6529      ExpandOp(Lo, Lo, Hi);
6530    break;
6531  }
6532  case ISD::FNEG: {
6533    if (VT == MVT::ppcf128) {
6534      ExpandOp(Node->getOperand(0), Lo, Hi);
6535      Lo = DAG.getNode(ISD::FNEG, MVT::f64, Lo);
6536      Hi = DAG.getNode(ISD::FNEG, MVT::f64, Hi);
6537      break;
6538    }
6539    SDOperand Mask = (VT == MVT::f64)
6540      ? DAG.getConstantFP(BitsToDouble(1ULL << 63), VT)
6541      : DAG.getConstantFP(BitsToFloat(1U << 31), VT);
6542    Mask = DAG.getNode(ISD::BIT_CONVERT, NVT, Mask);
6543    Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node->getOperand(0));
6544    Lo = DAG.getNode(ISD::XOR, NVT, Lo, Mask);
6545    if (getTypeAction(NVT) == Expand)
6546      ExpandOp(Lo, Lo, Hi);
6547    break;
6548  }
6549  case ISD::FCOPYSIGN: {
6550    Lo = ExpandFCOPYSIGNToBitwiseOps(Node, NVT, DAG, TLI);
6551    if (getTypeAction(NVT) == Expand)
6552      ExpandOp(Lo, Lo, Hi);
6553    break;
6554  }
6555  case ISD::SINT_TO_FP:
6556  case ISD::UINT_TO_FP: {
6557    bool isSigned = Node->getOpcode() == ISD::SINT_TO_FP;
6558    MVT::ValueType SrcVT = Node->getOperand(0).getValueType();
6559    if (VT == MVT::ppcf128 && SrcVT != MVT::i64) {
6560      static const uint64_t zero = 0;
6561      if (isSigned) {
6562        Hi = LegalizeOp(DAG.getNode(ISD::SINT_TO_FP, MVT::f64,
6563                                    Node->getOperand(0)));
6564        Lo = DAG.getConstantFP(APFloat(APInt(64, 1, &zero)), MVT::f64);
6565      } else {
6566        static const uint64_t TwoE32[] = { 0x41f0000000000000LL, 0 };
6567        Hi = LegalizeOp(DAG.getNode(ISD::SINT_TO_FP, MVT::f64,
6568                                    Node->getOperand(0)));
6569        Lo = DAG.getConstantFP(APFloat(APInt(64, 1, &zero)), MVT::f64);
6570        Hi = DAG.getNode(ISD::BUILD_PAIR, VT, Lo, Hi);
6571        // X>=0 ? {(f64)x, 0} : {(f64)x, 0} + 2^32
6572        ExpandOp(DAG.getNode(ISD::SELECT_CC, MVT::ppcf128, Node->getOperand(0),
6573                             DAG.getConstant(0, MVT::i32),
6574                             DAG.getNode(ISD::FADD, MVT::ppcf128, Hi,
6575                                         DAG.getConstantFP(
6576                                            APFloat(APInt(128, 2, TwoE32)),
6577                                            MVT::ppcf128)),
6578                             Hi,
6579                             DAG.getCondCode(ISD::SETLT)),
6580                 Lo, Hi);
6581      }
6582      break;
6583    }
6584    if (VT == MVT::ppcf128 && SrcVT == MVT::i64 && !isSigned) {
6585      // si64->ppcf128 done by libcall, below
6586      static const uint64_t TwoE64[] = { 0x43f0000000000000LL, 0 };
6587      ExpandOp(DAG.getNode(ISD::SINT_TO_FP, MVT::ppcf128, Node->getOperand(0)),
6588               Lo, Hi);
6589      Hi = DAG.getNode(ISD::BUILD_PAIR, VT, Lo, Hi);
6590      // x>=0 ? (ppcf128)(i64)x : (ppcf128)(i64)x + 2^64
6591      ExpandOp(DAG.getNode(ISD::SELECT_CC, MVT::ppcf128, Node->getOperand(0),
6592                           DAG.getConstant(0, MVT::i64),
6593                           DAG.getNode(ISD::FADD, MVT::ppcf128, Hi,
6594                                       DAG.getConstantFP(
6595                                          APFloat(APInt(128, 2, TwoE64)),
6596                                          MVT::ppcf128)),
6597                           Hi,
6598                           DAG.getCondCode(ISD::SETLT)),
6599               Lo, Hi);
6600      break;
6601    }
6602    RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
6603    if (Node->getOperand(0).getValueType() == MVT::i64) {
6604      if (VT == MVT::f32)
6605        LC = isSigned ? RTLIB::SINTTOFP_I64_F32 : RTLIB::UINTTOFP_I64_F32;
6606      else if (VT == MVT::f64)
6607        LC = isSigned ? RTLIB::SINTTOFP_I64_F64 : RTLIB::UINTTOFP_I64_F64;
6608      else if (VT == MVT::f80) {
6609        assert(isSigned);
6610        LC = RTLIB::SINTTOFP_I64_F80;
6611      }
6612      else if (VT == MVT::ppcf128) {
6613        assert(isSigned);
6614        LC = RTLIB::SINTTOFP_I64_PPCF128;
6615      }
6616    } else {
6617      if (VT == MVT::f32)
6618        LC = isSigned ? RTLIB::SINTTOFP_I32_F32 : RTLIB::UINTTOFP_I32_F32;
6619      else
6620        LC = isSigned ? RTLIB::SINTTOFP_I32_F64 : RTLIB::UINTTOFP_I32_F64;
6621    }
6622
6623    // Promote the operand if needed.
6624    if (getTypeAction(SrcVT) == Promote) {
6625      SDOperand Tmp = PromoteOp(Node->getOperand(0));
6626      Tmp = isSigned
6627        ? DAG.getNode(ISD::SIGN_EXTEND_INREG, Tmp.getValueType(), Tmp,
6628                      DAG.getValueType(SrcVT))
6629        : DAG.getZeroExtendInReg(Tmp, SrcVT);
6630      Node = DAG.UpdateNodeOperands(Op, Tmp).Val;
6631    }
6632
6633    const char *LibCall = TLI.getLibcallName(LC);
6634    if (LibCall)
6635      Lo = ExpandLibCall(TLI.getLibcallName(LC), Node, isSigned, Hi);
6636    else  {
6637      Lo = ExpandIntToFP(Node->getOpcode() == ISD::SINT_TO_FP, VT,
6638                         Node->getOperand(0));
6639      if (getTypeAction(Lo.getValueType()) == Expand)
6640        ExpandOp(Lo, Lo, Hi);
6641    }
6642    break;
6643  }
6644  }
6645
6646  // Make sure the resultant values have been legalized themselves, unless this
6647  // is a type that requires multi-step expansion.
6648  if (getTypeAction(NVT) != Expand && NVT != MVT::isVoid) {
6649    Lo = LegalizeOp(Lo);
6650    if (Hi.Val)
6651      // Don't legalize the high part if it is expanded to a single node.
6652      Hi = LegalizeOp(Hi);
6653  }
6654
6655  // Remember in a map if the values will be reused later.
6656  bool isNew = ExpandedNodes.insert(std::make_pair(Op, std::make_pair(Lo, Hi)));
6657  assert(isNew && "Value already expanded?!?");
6658}
6659
6660/// SplitVectorOp - Given an operand of vector type, break it down into
6661/// two smaller values, still of vector type.
6662void SelectionDAGLegalize::SplitVectorOp(SDOperand Op, SDOperand &Lo,
6663                                         SDOperand &Hi) {
6664  assert(MVT::isVector(Op.getValueType()) && "Cannot split non-vector type!");
6665  SDNode *Node = Op.Val;
6666  unsigned NumElements = MVT::getVectorNumElements(Op.getValueType());
6667  assert(NumElements > 1 && "Cannot split a single element vector!");
6668
6669  MVT::ValueType NewEltVT = MVT::getVectorElementType(Op.getValueType());
6670
6671  unsigned NewNumElts_Lo = 1 << Log2_32(NumElements-1);
6672  unsigned NewNumElts_Hi = NumElements - NewNumElts_Lo;
6673
6674  MVT::ValueType NewVT_Lo = MVT::getVectorType(NewEltVT, NewNumElts_Lo);
6675  MVT::ValueType NewVT_Hi = MVT::getVectorType(NewEltVT, NewNumElts_Hi);
6676
6677  // See if we already split it.
6678  std::map<SDOperand, std::pair<SDOperand, SDOperand> >::iterator I
6679    = SplitNodes.find(Op);
6680  if (I != SplitNodes.end()) {
6681    Lo = I->second.first;
6682    Hi = I->second.second;
6683    return;
6684  }
6685
6686  switch (Node->getOpcode()) {
6687  default:
6688#ifndef NDEBUG
6689    Node->dump(&DAG);
6690#endif
6691    assert(0 && "Unhandled operation in SplitVectorOp!");
6692  case ISD::UNDEF:
6693    Lo = DAG.getNode(ISD::UNDEF, NewVT_Lo);
6694    Hi = DAG.getNode(ISD::UNDEF, NewVT_Hi);
6695    break;
6696  case ISD::BUILD_PAIR:
6697    Lo = Node->getOperand(0);
6698    Hi = Node->getOperand(1);
6699    break;
6700  case ISD::INSERT_VECTOR_ELT: {
6701    SplitVectorOp(Node->getOperand(0), Lo, Hi);
6702    unsigned Index = cast<ConstantSDNode>(Node->getOperand(2))->getValue();
6703    SDOperand ScalarOp = Node->getOperand(1);
6704    if (Index < NewNumElts_Lo)
6705      Lo = DAG.getNode(ISD::INSERT_VECTOR_ELT, NewVT_Lo, Lo, ScalarOp,
6706                       DAG.getConstant(Index, TLI.getPointerTy()));
6707    else
6708      Hi = DAG.getNode(ISD::INSERT_VECTOR_ELT, NewVT_Hi, Hi, ScalarOp,
6709                       DAG.getConstant(Index - NewNumElts_Lo,
6710                                       TLI.getPointerTy()));
6711    break;
6712  }
6713  case ISD::VECTOR_SHUFFLE: {
6714    // Build the low part.
6715    SDOperand Mask = Node->getOperand(2);
6716    SmallVector<SDOperand, 8> Ops;
6717    MVT::ValueType PtrVT = TLI.getPointerTy();
6718
6719    // Insert all of the elements from the input that are needed.  We use
6720    // buildvector of extractelement here because the input vectors will have
6721    // to be legalized, so this makes the code simpler.
6722    for (unsigned i = 0; i != NewNumElts_Lo; ++i) {
6723      unsigned Idx = cast<ConstantSDNode>(Mask.getOperand(i))->getValue();
6724      SDOperand InVec = Node->getOperand(0);
6725      if (Idx >= NumElements) {
6726        InVec = Node->getOperand(1);
6727        Idx -= NumElements;
6728      }
6729      Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, NewEltVT, InVec,
6730                                DAG.getConstant(Idx, PtrVT)));
6731    }
6732    Lo = DAG.getNode(ISD::BUILD_VECTOR, NewVT_Lo, &Ops[0], Ops.size());
6733    Ops.clear();
6734
6735    for (unsigned i = NewNumElts_Lo; i != NumElements; ++i) {
6736      unsigned Idx = cast<ConstantSDNode>(Mask.getOperand(i))->getValue();
6737      SDOperand InVec = Node->getOperand(0);
6738      if (Idx >= NumElements) {
6739        InVec = Node->getOperand(1);
6740        Idx -= NumElements;
6741      }
6742      Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, NewEltVT, InVec,
6743                                DAG.getConstant(Idx, PtrVT)));
6744    }
6745    Hi = DAG.getNode(ISD::BUILD_VECTOR, NewVT_Lo, &Ops[0], Ops.size());
6746    break;
6747  }
6748  case ISD::BUILD_VECTOR: {
6749    SmallVector<SDOperand, 8> LoOps(Node->op_begin(),
6750                                    Node->op_begin()+NewNumElts_Lo);
6751    Lo = DAG.getNode(ISD::BUILD_VECTOR, NewVT_Lo, &LoOps[0], LoOps.size());
6752
6753    SmallVector<SDOperand, 8> HiOps(Node->op_begin()+NewNumElts_Lo,
6754                                    Node->op_end());
6755    Hi = DAG.getNode(ISD::BUILD_VECTOR, NewVT_Hi, &HiOps[0], HiOps.size());
6756    break;
6757  }
6758  case ISD::CONCAT_VECTORS: {
6759    // FIXME: Handle non-power-of-two vectors?
6760    unsigned NewNumSubvectors = Node->getNumOperands() / 2;
6761    if (NewNumSubvectors == 1) {
6762      Lo = Node->getOperand(0);
6763      Hi = Node->getOperand(1);
6764    } else {
6765      SmallVector<SDOperand, 8> LoOps(Node->op_begin(),
6766                                      Node->op_begin()+NewNumSubvectors);
6767      Lo = DAG.getNode(ISD::CONCAT_VECTORS, NewVT_Lo, &LoOps[0], LoOps.size());
6768
6769      SmallVector<SDOperand, 8> HiOps(Node->op_begin()+NewNumSubvectors,
6770                                      Node->op_end());
6771      Hi = DAG.getNode(ISD::CONCAT_VECTORS, NewVT_Hi, &HiOps[0], HiOps.size());
6772    }
6773    break;
6774  }
6775  case ISD::SELECT: {
6776    SDOperand Cond = Node->getOperand(0);
6777
6778    SDOperand LL, LH, RL, RH;
6779    SplitVectorOp(Node->getOperand(1), LL, LH);
6780    SplitVectorOp(Node->getOperand(2), RL, RH);
6781
6782    if (MVT::isVector(Cond.getValueType())) {
6783      // Handle a vector merge.
6784      SDOperand CL, CH;
6785      SplitVectorOp(Cond, CL, CH);
6786      Lo = DAG.getNode(Node->getOpcode(), NewVT_Lo, CL, LL, RL);
6787      Hi = DAG.getNode(Node->getOpcode(), NewVT_Hi, CH, LH, RH);
6788    } else {
6789      // Handle a simple select with vector operands.
6790      Lo = DAG.getNode(Node->getOpcode(), NewVT_Lo, Cond, LL, RL);
6791      Hi = DAG.getNode(Node->getOpcode(), NewVT_Hi, Cond, LH, RH);
6792    }
6793    break;
6794  }
6795  case ISD::ADD:
6796  case ISD::SUB:
6797  case ISD::MUL:
6798  case ISD::FADD:
6799  case ISD::FSUB:
6800  case ISD::FMUL:
6801  case ISD::SDIV:
6802  case ISD::UDIV:
6803  case ISD::FDIV:
6804  case ISD::FPOW:
6805  case ISD::AND:
6806  case ISD::OR:
6807  case ISD::XOR:
6808  case ISD::UREM:
6809  case ISD::SREM:
6810  case ISD::FREM: {
6811    SDOperand LL, LH, RL, RH;
6812    SplitVectorOp(Node->getOperand(0), LL, LH);
6813    SplitVectorOp(Node->getOperand(1), RL, RH);
6814
6815    Lo = DAG.getNode(Node->getOpcode(), NewVT_Lo, LL, RL);
6816    Hi = DAG.getNode(Node->getOpcode(), NewVT_Hi, LH, RH);
6817    break;
6818  }
6819  case ISD::FPOWI: {
6820    SDOperand L, H;
6821    SplitVectorOp(Node->getOperand(0), L, H);
6822
6823    Lo = DAG.getNode(Node->getOpcode(), NewVT_Lo, L, Node->getOperand(1));
6824    Hi = DAG.getNode(Node->getOpcode(), NewVT_Hi, H, Node->getOperand(1));
6825    break;
6826  }
6827  case ISD::CTTZ:
6828  case ISD::CTLZ:
6829  case ISD::CTPOP:
6830  case ISD::FNEG:
6831  case ISD::FABS:
6832  case ISD::FSQRT:
6833  case ISD::FSIN:
6834  case ISD::FCOS:
6835  case ISD::FP_TO_SINT:
6836  case ISD::FP_TO_UINT:
6837  case ISD::SINT_TO_FP:
6838  case ISD::UINT_TO_FP: {
6839    SDOperand L, H;
6840    SplitVectorOp(Node->getOperand(0), L, H);
6841
6842    Lo = DAG.getNode(Node->getOpcode(), NewVT_Lo, L);
6843    Hi = DAG.getNode(Node->getOpcode(), NewVT_Hi, H);
6844    break;
6845  }
6846  case ISD::LOAD: {
6847    LoadSDNode *LD = cast<LoadSDNode>(Node);
6848    SDOperand Ch = LD->getChain();
6849    SDOperand Ptr = LD->getBasePtr();
6850    const Value *SV = LD->getSrcValue();
6851    int SVOffset = LD->getSrcValueOffset();
6852    unsigned Alignment = LD->getAlignment();
6853    bool isVolatile = LD->isVolatile();
6854
6855    Lo = DAG.getLoad(NewVT_Lo, Ch, Ptr, SV, SVOffset, isVolatile, Alignment);
6856    unsigned IncrementSize = NewNumElts_Lo * MVT::getSizeInBits(NewEltVT)/8;
6857    Ptr = DAG.getNode(ISD::ADD, Ptr.getValueType(), Ptr,
6858                      DAG.getIntPtrConstant(IncrementSize));
6859    SVOffset += IncrementSize;
6860    Alignment = MinAlign(Alignment, IncrementSize);
6861    Hi = DAG.getLoad(NewVT_Hi, Ch, Ptr, SV, SVOffset, isVolatile, Alignment);
6862
6863    // Build a factor node to remember that this load is independent of the
6864    // other one.
6865    SDOperand TF = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo.getValue(1),
6866                               Hi.getValue(1));
6867
6868    // Remember that we legalized the chain.
6869    AddLegalizedOperand(Op.getValue(1), LegalizeOp(TF));
6870    break;
6871  }
6872  case ISD::BIT_CONVERT: {
6873    // We know the result is a vector.  The input may be either a vector or a
6874    // scalar value.
6875    SDOperand InOp = Node->getOperand(0);
6876    if (!MVT::isVector(InOp.getValueType()) ||
6877        MVT::getVectorNumElements(InOp.getValueType()) == 1) {
6878      // The input is a scalar or single-element vector.
6879      // Lower to a store/load so that it can be split.
6880      // FIXME: this could be improved probably.
6881      SDOperand Ptr = DAG.CreateStackTemporary(InOp.getValueType());
6882      FrameIndexSDNode *FI = cast<FrameIndexSDNode>(Ptr.Val);
6883
6884      SDOperand St = DAG.getStore(DAG.getEntryNode(),
6885                                  InOp, Ptr,
6886                                  PseudoSourceValue::getFixedStack(),
6887                                  FI->getIndex());
6888      InOp = DAG.getLoad(Op.getValueType(), St, Ptr,
6889                         PseudoSourceValue::getFixedStack(),
6890                         FI->getIndex());
6891    }
6892    // Split the vector and convert each of the pieces now.
6893    SplitVectorOp(InOp, Lo, Hi);
6894    Lo = DAG.getNode(ISD::BIT_CONVERT, NewVT_Lo, Lo);
6895    Hi = DAG.getNode(ISD::BIT_CONVERT, NewVT_Hi, Hi);
6896    break;
6897  }
6898  }
6899
6900  // Remember in a map if the values will be reused later.
6901  bool isNew =
6902    SplitNodes.insert(std::make_pair(Op, std::make_pair(Lo, Hi))).second;
6903  assert(isNew && "Value already split?!?");
6904}
6905
6906
6907/// ScalarizeVectorOp - Given an operand of single-element vector type
6908/// (e.g. v1f32), convert it into the equivalent operation that returns a
6909/// scalar (e.g. f32) value.
6910SDOperand SelectionDAGLegalize::ScalarizeVectorOp(SDOperand Op) {
6911  assert(MVT::isVector(Op.getValueType()) &&
6912         "Bad ScalarizeVectorOp invocation!");
6913  SDNode *Node = Op.Val;
6914  MVT::ValueType NewVT = MVT::getVectorElementType(Op.getValueType());
6915  assert(MVT::getVectorNumElements(Op.getValueType()) == 1);
6916
6917  // See if we already scalarized it.
6918  std::map<SDOperand, SDOperand>::iterator I = ScalarizedNodes.find(Op);
6919  if (I != ScalarizedNodes.end()) return I->second;
6920
6921  SDOperand Result;
6922  switch (Node->getOpcode()) {
6923  default:
6924#ifndef NDEBUG
6925    Node->dump(&DAG); cerr << "\n";
6926#endif
6927    assert(0 && "Unknown vector operation in ScalarizeVectorOp!");
6928  case ISD::ADD:
6929  case ISD::FADD:
6930  case ISD::SUB:
6931  case ISD::FSUB:
6932  case ISD::MUL:
6933  case ISD::FMUL:
6934  case ISD::SDIV:
6935  case ISD::UDIV:
6936  case ISD::FDIV:
6937  case ISD::SREM:
6938  case ISD::UREM:
6939  case ISD::FREM:
6940  case ISD::FPOW:
6941  case ISD::AND:
6942  case ISD::OR:
6943  case ISD::XOR:
6944    Result = DAG.getNode(Node->getOpcode(),
6945                         NewVT,
6946                         ScalarizeVectorOp(Node->getOperand(0)),
6947                         ScalarizeVectorOp(Node->getOperand(1)));
6948    break;
6949  case ISD::FNEG:
6950  case ISD::FABS:
6951  case ISD::FSQRT:
6952  case ISD::FSIN:
6953  case ISD::FCOS:
6954    Result = DAG.getNode(Node->getOpcode(),
6955                         NewVT,
6956                         ScalarizeVectorOp(Node->getOperand(0)));
6957    break;
6958  case ISD::FPOWI:
6959    Result = DAG.getNode(Node->getOpcode(),
6960                         NewVT,
6961                         ScalarizeVectorOp(Node->getOperand(0)),
6962                         Node->getOperand(1));
6963    break;
6964  case ISD::LOAD: {
6965    LoadSDNode *LD = cast<LoadSDNode>(Node);
6966    SDOperand Ch = LegalizeOp(LD->getChain());     // Legalize the chain.
6967    SDOperand Ptr = LegalizeOp(LD->getBasePtr());  // Legalize the pointer.
6968
6969    const Value *SV = LD->getSrcValue();
6970    int SVOffset = LD->getSrcValueOffset();
6971    Result = DAG.getLoad(NewVT, Ch, Ptr, SV, SVOffset,
6972                         LD->isVolatile(), LD->getAlignment());
6973
6974    // Remember that we legalized the chain.
6975    AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1)));
6976    break;
6977  }
6978  case ISD::BUILD_VECTOR:
6979    Result = Node->getOperand(0);
6980    break;
6981  case ISD::INSERT_VECTOR_ELT:
6982    // Returning the inserted scalar element.
6983    Result = Node->getOperand(1);
6984    break;
6985  case ISD::CONCAT_VECTORS:
6986    assert(Node->getOperand(0).getValueType() == NewVT &&
6987           "Concat of non-legal vectors not yet supported!");
6988    Result = Node->getOperand(0);
6989    break;
6990  case ISD::VECTOR_SHUFFLE: {
6991    // Figure out if the scalar is the LHS or RHS and return it.
6992    SDOperand EltNum = Node->getOperand(2).getOperand(0);
6993    if (cast<ConstantSDNode>(EltNum)->getValue())
6994      Result = ScalarizeVectorOp(Node->getOperand(1));
6995    else
6996      Result = ScalarizeVectorOp(Node->getOperand(0));
6997    break;
6998  }
6999  case ISD::EXTRACT_SUBVECTOR:
7000    Result = Node->getOperand(0);
7001    assert(Result.getValueType() == NewVT);
7002    break;
7003  case ISD::BIT_CONVERT:
7004    Result = DAG.getNode(ISD::BIT_CONVERT, NewVT, Op.getOperand(0));
7005    break;
7006  case ISD::SELECT:
7007    Result = DAG.getNode(ISD::SELECT, NewVT, Op.getOperand(0),
7008                         ScalarizeVectorOp(Op.getOperand(1)),
7009                         ScalarizeVectorOp(Op.getOperand(2)));
7010    break;
7011  }
7012
7013  if (TLI.isTypeLegal(NewVT))
7014    Result = LegalizeOp(Result);
7015  bool isNew = ScalarizedNodes.insert(std::make_pair(Op, Result)).second;
7016  assert(isNew && "Value already scalarized?");
7017  return Result;
7018}
7019
7020
7021// SelectionDAG::Legalize - This is the entry point for the file.
7022//
7023void SelectionDAG::Legalize() {
7024  if (ViewLegalizeDAGs) viewGraph();
7025
7026  /// run - This is the main entry point to this class.
7027  ///
7028  SelectionDAGLegalize(*this).LegalizeDAG();
7029}
7030
7031