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