30ef67256f40056eb0dd72f2a321719b0be2f8b4
[oota-llvm.git] / lib / CodeGen / SelectionDAG / TargetLowering.cpp
1 //===-- TargetLowering.cpp - Implement the TargetLowering class -----------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This implements the TargetLowering class.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/Target/TargetLowering.h"
15 #include "llvm/Target/TargetMachine.h"
16 #include "llvm/Target/MRegisterInfo.h"
17 #include "llvm/DerivedTypes.h"
18 #include "llvm/CodeGen/SelectionDAG.h"
19 #include "llvm/ADT/StringExtras.h"
20 #include "llvm/Support/MathExtras.h"
21 using namespace llvm;
22
23 TargetLowering::TargetLowering(TargetMachine &tm)
24   : TM(tm), TD(TM.getTargetData()) {
25   assert(ISD::BUILTIN_OP_END <= 156 &&
26          "Fixed size array in TargetLowering is not large enough!");
27   // All operations default to being supported.
28   memset(OpActions, 0, sizeof(OpActions));
29
30   IsLittleEndian = TD->isLittleEndian();
31   ShiftAmountTy = SetCCResultTy = PointerTy = getValueType(TD->getIntPtrType());
32   ShiftAmtHandling = Undefined;
33   memset(RegClassForVT, 0,MVT::LAST_VALUETYPE*sizeof(TargetRegisterClass*));
34   memset(TargetDAGCombineArray, 0, 
35          sizeof(TargetDAGCombineArray)/sizeof(TargetDAGCombineArray[0]));
36   maxStoresPerMemset = maxStoresPerMemcpy = maxStoresPerMemmove = 8;
37   allowUnalignedMemoryAccesses = false;
38   UseUnderscoreSetJmpLongJmp = false;
39   IntDivIsCheap = false;
40   Pow2DivIsCheap = false;
41   StackPointerRegisterToSaveRestore = 0;
42   SchedPreferenceInfo = SchedulingForLatency;
43 }
44
45 TargetLowering::~TargetLowering() {}
46
47 /// setValueTypeAction - Set the action for a particular value type.  This
48 /// assumes an action has not already been set for this value type.
49 static void SetValueTypeAction(MVT::ValueType VT,
50                                TargetLowering::LegalizeAction Action,
51                                TargetLowering &TLI,
52                                MVT::ValueType *TransformToType,
53                         TargetLowering::ValueTypeActionImpl &ValueTypeActions) {
54   ValueTypeActions.setTypeAction(VT, Action);
55   if (Action == TargetLowering::Promote) {
56     MVT::ValueType PromoteTo;
57     if (VT == MVT::f32)
58       PromoteTo = MVT::f64;
59     else {
60       unsigned LargerReg = VT+1;
61       while (!TLI.isTypeLegal((MVT::ValueType)LargerReg)) {
62         ++LargerReg;
63         assert(MVT::isInteger((MVT::ValueType)LargerReg) &&
64                "Nothing to promote to??");
65       }
66       PromoteTo = (MVT::ValueType)LargerReg;
67     }
68
69     assert(MVT::isInteger(VT) == MVT::isInteger(PromoteTo) &&
70            MVT::isFloatingPoint(VT) == MVT::isFloatingPoint(PromoteTo) &&
71            "Can only promote from int->int or fp->fp!");
72     assert(VT < PromoteTo && "Must promote to a larger type!");
73     TransformToType[VT] = PromoteTo;
74   } else if (Action == TargetLowering::Expand) {
75     assert((VT == MVT::Vector || MVT::isInteger(VT)) && VT > MVT::i8 &&
76            "Cannot expand this type: target must support SOME integer reg!");
77     // Expand to the next smaller integer type!
78     TransformToType[VT] = (MVT::ValueType)(VT-1);
79   }
80 }
81
82
83 /// computeRegisterProperties - Once all of the register classes are added,
84 /// this allows us to compute derived properties we expose.
85 void TargetLowering::computeRegisterProperties() {
86   assert(MVT::LAST_VALUETYPE <= 32 &&
87          "Too many value types for ValueTypeActions to hold!");
88
89   // Everything defaults to one.
90   for (unsigned i = 0; i != MVT::LAST_VALUETYPE; ++i)
91     NumElementsForVT[i] = 1;
92
93   // Find the largest integer register class.
94   unsigned LargestIntReg = MVT::i128;
95   for (; RegClassForVT[LargestIntReg] == 0; --LargestIntReg)
96     assert(LargestIntReg != MVT::i1 && "No integer registers defined!");
97
98   // Every integer value type larger than this largest register takes twice as
99   // many registers to represent as the previous ValueType.
100   unsigned ExpandedReg = LargestIntReg; ++LargestIntReg;
101   for (++ExpandedReg; MVT::isInteger((MVT::ValueType)ExpandedReg);++ExpandedReg)
102     NumElementsForVT[ExpandedReg] = 2*NumElementsForVT[ExpandedReg-1];
103
104   // Inspect all of the ValueType's possible, deciding how to process them.
105   for (unsigned IntReg = MVT::i1; IntReg <= MVT::i128; ++IntReg)
106     // If we are expanding this type, expand it!
107     if (getNumElements((MVT::ValueType)IntReg) != 1)
108       SetValueTypeAction((MVT::ValueType)IntReg, Expand, *this, TransformToType,
109                          ValueTypeActions);
110     else if (!isTypeLegal((MVT::ValueType)IntReg))
111       // Otherwise, if we don't have native support, we must promote to a
112       // larger type.
113       SetValueTypeAction((MVT::ValueType)IntReg, Promote, *this,
114                          TransformToType, ValueTypeActions);
115     else
116       TransformToType[(MVT::ValueType)IntReg] = (MVT::ValueType)IntReg;
117
118   // If the target does not have native support for F32, promote it to F64.
119   if (!isTypeLegal(MVT::f32))
120     SetValueTypeAction(MVT::f32, Promote, *this,
121                        TransformToType, ValueTypeActions);
122   else
123     TransformToType[MVT::f32] = MVT::f32;
124   
125   // Set MVT::Vector to always be Expanded
126   SetValueTypeAction(MVT::Vector, Expand, *this, TransformToType, 
127                      ValueTypeActions);
128   
129   // Loop over all of the legal vector value types, specifying an identity type
130   // transformation.
131   for (unsigned i = MVT::FIRST_VECTOR_VALUETYPE;
132        i <= MVT::LAST_VECTOR_VALUETYPE; ++i) {
133     if (isTypeLegal((MVT::ValueType)i))
134       TransformToType[i] = (MVT::ValueType)i;
135   }
136
137   assert(isTypeLegal(MVT::f64) && "Target does not support FP?");
138   TransformToType[MVT::f64] = MVT::f64;
139 }
140
141 const char *TargetLowering::getTargetNodeName(unsigned Opcode) const {
142   return NULL;
143 }
144
145 /// getPackedTypeBreakdown - Packed types are broken down into some number of
146 /// legal scalar types.  For example, <8 x float> maps to 2 MVT::v2f32 values
147 /// with Altivec or SSE1, or 8 promoted MVT::f64 values with the X86 FP stack.
148 ///
149 /// This method returns the number and type of the resultant breakdown.
150 ///
151 unsigned TargetLowering::getPackedTypeBreakdown(const PackedType *PTy, 
152                                                 MVT::ValueType &PTyElementVT,
153                                       MVT::ValueType &PTyLegalElementVT) const {
154   // Figure out the right, legal destination reg to copy into.
155   unsigned NumElts = PTy->getNumElements();
156   MVT::ValueType EltTy = getValueType(PTy->getElementType());
157   
158   unsigned NumVectorRegs = 1;
159   
160   // Divide the input until we get to a supported size.  This will always
161   // end with a scalar if the target doesn't support vectors.
162   while (NumElts > 1 && !isTypeLegal(getVectorType(EltTy, NumElts))) {
163     NumElts >>= 1;
164     NumVectorRegs <<= 1;
165   }
166   
167   MVT::ValueType VT;
168   if (NumElts == 1) {
169     VT = EltTy;
170   } else {
171     VT = getVectorType(EltTy, NumElts); 
172   }
173   PTyElementVT = VT;
174
175   MVT::ValueType DestVT = getTypeToTransformTo(VT);
176   PTyLegalElementVT = DestVT;
177   if (DestVT < VT) {
178     // Value is expanded, e.g. i64 -> i16.
179     return NumVectorRegs*(MVT::getSizeInBits(VT)/MVT::getSizeInBits(DestVT));
180   } else {
181     // Otherwise, promotion or legal types use the same number of registers as
182     // the vector decimated to the appropriate level.
183     return NumVectorRegs;
184   }
185   
186   return DestVT;
187 }
188
189 //===----------------------------------------------------------------------===//
190 //  Optimization Methods
191 //===----------------------------------------------------------------------===//
192
193 /// ShrinkDemandedConstant - Check to see if the specified operand of the 
194 /// specified instruction is a constant integer.  If so, check to see if there
195 /// are any bits set in the constant that are not demanded.  If so, shrink the
196 /// constant and return true.
197 bool TargetLowering::TargetLoweringOpt::ShrinkDemandedConstant(SDOperand Op, 
198                                                             uint64_t Demanded) {
199   // FIXME: ISD::SELECT, ISD::SELECT_CC
200   switch(Op.getOpcode()) {
201   default: break;
202   case ISD::AND:
203   case ISD::OR:
204   case ISD::XOR:
205     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1)))
206       if ((~Demanded & C->getValue()) != 0) {
207         MVT::ValueType VT = Op.getValueType();
208         SDOperand New = DAG.getNode(Op.getOpcode(), VT, Op.getOperand(0),
209                                     DAG.getConstant(Demanded & C->getValue(), 
210                                                     VT));
211         return CombineTo(Op, New);
212       }
213     break;
214   }
215   return false;
216 }
217
218 /// SimplifyDemandedBits - Look at Op.  At this point, we know that only the
219 /// DemandedMask bits of the result of Op are ever used downstream.  If we can
220 /// use this information to simplify Op, create a new simplified DAG node and
221 /// return true, returning the original and new nodes in Old and New. Otherwise,
222 /// analyze the expression and return a mask of KnownOne and KnownZero bits for
223 /// the expression (used to simplify the caller).  The KnownZero/One bits may
224 /// only be accurate for those bits in the DemandedMask.
225 bool TargetLowering::SimplifyDemandedBits(SDOperand Op, uint64_t DemandedMask, 
226                                           uint64_t &KnownZero,
227                                           uint64_t &KnownOne,
228                                           TargetLoweringOpt &TLO,
229                                           unsigned Depth) const {
230   KnownZero = KnownOne = 0;   // Don't know anything.
231   // Other users may use these bits.
232   if (!Op.Val->hasOneUse()) { 
233     if (Depth != 0) {
234       // If not at the root, Just compute the KnownZero/KnownOne bits to 
235       // simplify things downstream.
236       ComputeMaskedBits(Op, DemandedMask, KnownZero, KnownOne, Depth);
237       return false;
238     }
239     // If this is the root being simplified, allow it to have multiple uses,
240     // just set the DemandedMask to all bits.
241     DemandedMask = MVT::getIntVTBitMask(Op.getValueType());
242   } else if (DemandedMask == 0) {   
243     // Not demanding any bits from Op.
244     if (Op.getOpcode() != ISD::UNDEF)
245       return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::UNDEF, Op.getValueType()));
246     return false;
247   } else if (Depth == 6) {        // Limit search depth.
248     return false;
249   }
250
251   uint64_t KnownZero2, KnownOne2, KnownZeroOut, KnownOneOut;
252   switch (Op.getOpcode()) {
253   case ISD::Constant:
254     // We know all of the bits for a constant!
255     KnownOne = cast<ConstantSDNode>(Op)->getValue() & DemandedMask;
256     KnownZero = ~KnownOne & DemandedMask;
257     return false;   // Don't fall through, will infinitely loop.
258   case ISD::AND:
259     // If the RHS is a constant, check to see if the LHS would be zero without
260     // using the bits from the RHS.  Below, we use knowledge about the RHS to
261     // simplify the LHS, here we're using information from the LHS to simplify
262     // the RHS.
263     if (ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
264       uint64_t LHSZero, LHSOne;
265       ComputeMaskedBits(Op.getOperand(0), DemandedMask,
266                         LHSZero, LHSOne, Depth+1);
267       // If the LHS already has zeros where RHSC does, this and is dead.
268       if ((LHSZero & DemandedMask) == (~RHSC->getValue() & DemandedMask))
269         return TLO.CombineTo(Op, Op.getOperand(0));
270       // If any of the set bits in the RHS are known zero on the LHS, shrink
271       // the constant.
272       if (TLO.ShrinkDemandedConstant(Op, ~LHSZero & DemandedMask))
273         return true;
274     }
275     
276     if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero,
277                              KnownOne, TLO, Depth+1))
278       return true;
279     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
280     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & ~KnownZero,
281                              KnownZero2, KnownOne2, TLO, Depth+1))
282       return true;
283     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
284       
285     // If all of the demanded bits are known one on one side, return the other.
286     // These bits cannot contribute to the result of the 'and'.
287     if ((DemandedMask & ~KnownZero2 & KnownOne)==(DemandedMask & ~KnownZero2))
288       return TLO.CombineTo(Op, Op.getOperand(0));
289     if ((DemandedMask & ~KnownZero & KnownOne2)==(DemandedMask & ~KnownZero))
290       return TLO.CombineTo(Op, Op.getOperand(1));
291     // If all of the demanded bits in the inputs are known zeros, return zero.
292     if ((DemandedMask & (KnownZero|KnownZero2)) == DemandedMask)
293       return TLO.CombineTo(Op, TLO.DAG.getConstant(0, Op.getValueType()));
294     // If the RHS is a constant, see if we can simplify it.
295     if (TLO.ShrinkDemandedConstant(Op, DemandedMask & ~KnownZero2))
296       return true;
297       
298     // Output known-1 bits are only known if set in both the LHS & RHS.
299     KnownOne &= KnownOne2;
300     // Output known-0 are known to be clear if zero in either the LHS | RHS.
301     KnownZero |= KnownZero2;
302     break;
303   case ISD::OR:
304     if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero, 
305                              KnownOne, TLO, Depth+1))
306       return true;
307     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
308     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & ~KnownOne, 
309                              KnownZero2, KnownOne2, TLO, Depth+1))
310       return true;
311     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
312     
313     // If all of the demanded bits are known zero on one side, return the other.
314     // These bits cannot contribute to the result of the 'or'.
315     if ((DemandedMask & ~KnownOne2 & KnownZero) == (DemandedMask & ~KnownOne2))
316       return TLO.CombineTo(Op, Op.getOperand(0));
317     if ((DemandedMask & ~KnownOne & KnownZero2) == (DemandedMask & ~KnownOne))
318       return TLO.CombineTo(Op, Op.getOperand(1));
319     // If all of the potentially set bits on one side are known to be set on
320     // the other side, just use the 'other' side.
321     if ((DemandedMask & (~KnownZero) & KnownOne2) == 
322         (DemandedMask & (~KnownZero)))
323       return TLO.CombineTo(Op, Op.getOperand(0));
324     if ((DemandedMask & (~KnownZero2) & KnownOne) == 
325         (DemandedMask & (~KnownZero2)))
326       return TLO.CombineTo(Op, Op.getOperand(1));
327     // If the RHS is a constant, see if we can simplify it.
328     if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
329       return true;
330           
331     // Output known-0 bits are only known if clear in both the LHS & RHS.
332     KnownZero &= KnownZero2;
333     // Output known-1 are known to be set if set in either the LHS | RHS.
334     KnownOne |= KnownOne2;
335     break;
336   case ISD::XOR:
337     if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero, 
338                              KnownOne, TLO, Depth+1))
339       return true;
340     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
341     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask, KnownZero2,
342                              KnownOne2, TLO, Depth+1))
343       return true;
344     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
345     
346     // If all of the demanded bits are known zero on one side, return the other.
347     // These bits cannot contribute to the result of the 'xor'.
348     if ((DemandedMask & KnownZero) == DemandedMask)
349       return TLO.CombineTo(Op, Op.getOperand(0));
350     if ((DemandedMask & KnownZero2) == DemandedMask)
351       return TLO.CombineTo(Op, Op.getOperand(1));
352     
353     // Output known-0 bits are known if clear or set in both the LHS & RHS.
354     KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
355     // Output known-1 are known to be set if set in only one of the LHS, RHS.
356     KnownOneOut = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
357     
358     // If all of the unknown bits are known to be zero on one side or the other
359     // (but not both) turn this into an *inclusive* or.
360     //    e.g. (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
361     if (uint64_t UnknownBits = DemandedMask & ~(KnownZeroOut|KnownOneOut))
362       if ((UnknownBits & (KnownZero|KnownZero2)) == UnknownBits)
363         return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::OR, Op.getValueType(),
364                                                  Op.getOperand(0),
365                                                  Op.getOperand(1)));
366     // If all of the demanded bits on one side are known, and all of the set
367     // bits on that side are also known to be set on the other side, turn this
368     // into an AND, as we know the bits will be cleared.
369     //    e.g. (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2
370     if ((DemandedMask & (KnownZero|KnownOne)) == DemandedMask) { // all known
371       if ((KnownOne & KnownOne2) == KnownOne) {
372         MVT::ValueType VT = Op.getValueType();
373         SDOperand ANDC = TLO.DAG.getConstant(~KnownOne & DemandedMask, VT);
374         return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::AND, VT, Op.getOperand(0),
375                                                  ANDC));
376       }
377     }
378     
379     // If the RHS is a constant, see if we can simplify it.
380     // FIXME: for XOR, we prefer to force bits to 1 if they will make a -1.
381     if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
382       return true;
383     
384     KnownZero = KnownZeroOut;
385     KnownOne  = KnownOneOut;
386     break;
387   case ISD::SETCC:
388     // If we know the result of a setcc has the top bits zero, use this info.
389     if (getSetCCResultContents() == TargetLowering::ZeroOrOneSetCCResult)
390       KnownZero |= (MVT::getIntVTBitMask(Op.getValueType()) ^ 1ULL);
391     break;
392   case ISD::SELECT:
393     if (SimplifyDemandedBits(Op.getOperand(2), DemandedMask, KnownZero, 
394                              KnownOne, TLO, Depth+1))
395       return true;
396     if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero2,
397                              KnownOne2, TLO, Depth+1))
398       return true;
399     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
400     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
401     
402     // If the operands are constants, see if we can simplify them.
403     if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
404       return true;
405     
406     // Only known if known in both the LHS and RHS.
407     KnownOne &= KnownOne2;
408     KnownZero &= KnownZero2;
409     break;
410   case ISD::SELECT_CC:
411     if (SimplifyDemandedBits(Op.getOperand(3), DemandedMask, KnownZero, 
412                              KnownOne, TLO, Depth+1))
413       return true;
414     if (SimplifyDemandedBits(Op.getOperand(2), DemandedMask, KnownZero2,
415                              KnownOne2, TLO, Depth+1))
416       return true;
417     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
418     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
419     
420     // If the operands are constants, see if we can simplify them.
421     if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
422       return true;
423       
424     // Only known if known in both the LHS and RHS.
425     KnownOne &= KnownOne2;
426     KnownZero &= KnownZero2;
427     break;
428   case ISD::SHL:
429     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
430       if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask >> SA->getValue(),
431                                KnownZero, KnownOne, TLO, Depth+1))
432         return true;
433       KnownZero <<= SA->getValue();
434       KnownOne  <<= SA->getValue();
435       KnownZero |= (1ULL << SA->getValue())-1;  // low bits known zero.
436     }
437     break;
438   case ISD::SRL:
439     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
440       MVT::ValueType VT = Op.getValueType();
441       unsigned ShAmt = SA->getValue();
442       
443       // Compute the new bits that are at the top now.
444       uint64_t HighBits = (1ULL << ShAmt)-1;
445       HighBits <<= MVT::getSizeInBits(VT) - ShAmt;
446       uint64_t TypeMask = MVT::getIntVTBitMask(VT);
447       
448       if (SimplifyDemandedBits(Op.getOperand(0), 
449                                (DemandedMask << ShAmt) & TypeMask,
450                                KnownZero, KnownOne, TLO, Depth+1))
451         return true;
452       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
453       KnownZero &= TypeMask;
454       KnownOne  &= TypeMask;
455       KnownZero >>= ShAmt;
456       KnownOne  >>= ShAmt;
457       KnownZero |= HighBits;  // high bits known zero.
458     }
459     break;
460   case ISD::SRA:
461     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
462       MVT::ValueType VT = Op.getValueType();
463       unsigned ShAmt = SA->getValue();
464       
465       // Compute the new bits that are at the top now.
466       uint64_t HighBits = (1ULL << ShAmt)-1;
467       HighBits <<= MVT::getSizeInBits(VT) - ShAmt;
468       uint64_t TypeMask = MVT::getIntVTBitMask(VT);
469       
470       if (SimplifyDemandedBits(Op.getOperand(0),
471                                (DemandedMask << ShAmt) & TypeMask,
472                                KnownZero, KnownOne, TLO, Depth+1))
473         return true;
474       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
475       KnownZero &= TypeMask;
476       KnownOne  &= TypeMask;
477       KnownZero >>= SA->getValue();
478       KnownOne  >>= SA->getValue();
479       
480       // Handle the sign bits.
481       uint64_t SignBit = MVT::getIntVTSignBit(VT);
482       SignBit >>= SA->getValue();  // Adjust to where it is now in the mask.
483       
484       // If the input sign bit is known to be zero, or if none of the top bits
485       // are demanded, turn this into an unsigned shift right.
486       if ((KnownZero & SignBit) || (HighBits & ~DemandedMask) == HighBits) {
487         return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SRL, VT, Op.getOperand(0),
488                                                  Op.getOperand(1)));
489       } else if (KnownOne & SignBit) { // New bits are known one.
490         KnownOne |= HighBits;
491       }
492     }
493     break;
494   case ISD::SIGN_EXTEND_INREG: {
495     MVT::ValueType  VT = Op.getValueType();
496     MVT::ValueType EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
497
498     // Sign extension.  Compute the demanded bits in the result that are not 
499     // present in the input.
500     uint64_t NewBits = ~MVT::getIntVTBitMask(EVT) & DemandedMask;
501     
502     // If none of the extended bits are demanded, eliminate the sextinreg.
503     if (NewBits == 0)
504       return TLO.CombineTo(Op, Op.getOperand(0));
505
506     uint64_t InSignBit = MVT::getIntVTSignBit(EVT);
507     int64_t InputDemandedBits = DemandedMask & MVT::getIntVTBitMask(EVT);
508     
509     // Since the sign extended bits are demanded, we know that the sign
510     // bit is demanded.
511     InputDemandedBits |= InSignBit;
512
513     if (SimplifyDemandedBits(Op.getOperand(0), InputDemandedBits,
514                              KnownZero, KnownOne, TLO, Depth+1))
515       return true;
516     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
517
518     // If the sign bit of the input is known set or clear, then we know the
519     // top bits of the result.
520     
521     // If the input sign bit is known zero, convert this into a zero extension.
522     if (KnownZero & InSignBit)
523       return TLO.CombineTo(Op, 
524                            TLO.DAG.getZeroExtendInReg(Op.getOperand(0), EVT));
525     
526     if (KnownOne & InSignBit) {    // Input sign bit known set
527       KnownOne |= NewBits;
528       KnownZero &= ~NewBits;
529     } else {                       // Input sign bit unknown
530       KnownZero &= ~NewBits;
531       KnownOne &= ~NewBits;
532     }
533     break;
534   }
535   case ISD::CTTZ:
536   case ISD::CTLZ:
537   case ISD::CTPOP: {
538     MVT::ValueType VT = Op.getValueType();
539     unsigned LowBits = Log2_32(MVT::getSizeInBits(VT))+1;
540     KnownZero = ~((1ULL << LowBits)-1) & MVT::getIntVTBitMask(VT);
541     KnownOne  = 0;
542     break;
543   }
544   case ISD::ZEXTLOAD: {
545     MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(3))->getVT();
546     KnownZero |= ~MVT::getIntVTBitMask(VT) & DemandedMask;
547     break;
548   }
549   case ISD::ZERO_EXTEND: {
550     uint64_t InMask = MVT::getIntVTBitMask(Op.getOperand(0).getValueType());
551     
552     // If none of the top bits are demanded, convert this into an any_extend.
553     uint64_t NewBits = (~InMask) & DemandedMask;
554     if (NewBits == 0)
555       return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ANY_EXTEND, 
556                                                Op.getValueType(), 
557                                                Op.getOperand(0)));
558     
559     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & InMask,
560                              KnownZero, KnownOne, TLO, Depth+1))
561       return true;
562     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
563     KnownZero |= NewBits;
564     break;
565   }
566   case ISD::SIGN_EXTEND: {
567     MVT::ValueType InVT = Op.getOperand(0).getValueType();
568     uint64_t InMask    = MVT::getIntVTBitMask(InVT);
569     uint64_t InSignBit = MVT::getIntVTSignBit(InVT);
570     uint64_t NewBits   = (~InMask) & DemandedMask;
571     
572     // If none of the top bits are demanded, convert this into an any_extend.
573     if (NewBits == 0)
574       return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ANY_EXTEND,Op.getValueType(),
575                                            Op.getOperand(0)));
576     
577     // Since some of the sign extended bits are demanded, we know that the sign
578     // bit is demanded.
579     uint64_t InDemandedBits = DemandedMask & InMask;
580     InDemandedBits |= InSignBit;
581     
582     if (SimplifyDemandedBits(Op.getOperand(0), InDemandedBits, KnownZero, 
583                              KnownOne, TLO, Depth+1))
584       return true;
585     
586     // If the sign bit is known zero, convert this to a zero extend.
587     if (KnownZero & InSignBit)
588       return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ZERO_EXTEND, 
589                                                Op.getValueType(), 
590                                                Op.getOperand(0)));
591     
592     // If the sign bit is known one, the top bits match.
593     if (KnownOne & InSignBit) {
594       KnownOne  |= NewBits;
595       KnownZero &= ~NewBits;
596     } else {   // Otherwise, top bits aren't known.
597       KnownOne  &= ~NewBits;
598       KnownZero &= ~NewBits;
599     }
600     break;
601   }
602   case ISD::ANY_EXTEND: {
603     uint64_t InMask = MVT::getIntVTBitMask(Op.getOperand(0).getValueType());
604     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & InMask,
605                              KnownZero, KnownOne, TLO, Depth+1))
606       return true;
607     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
608     break;
609   }
610   case ISD::TRUNCATE: {
611     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask,
612                              KnownZero, KnownOne, TLO, Depth+1))
613       return true;
614     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
615     uint64_t OutMask = MVT::getIntVTBitMask(Op.getValueType());
616     KnownZero &= OutMask;
617     KnownOne &= OutMask;
618     break;
619   }
620   case ISD::AssertZext: {
621     MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
622     uint64_t InMask = MVT::getIntVTBitMask(VT);
623     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & InMask,
624                              KnownZero, KnownOne, TLO, Depth+1))
625       return true;
626     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
627     KnownZero |= ~InMask & DemandedMask;
628     break;
629   }
630   case ISD::ADD:
631   case ISD::SUB:
632   case ISD::INTRINSIC_WO_CHAIN:
633   case ISD::INTRINSIC_W_CHAIN:
634   case ISD::INTRINSIC_VOID:
635     // Just use ComputeMaskedBits to compute output bits.
636     ComputeMaskedBits(Op, DemandedMask, KnownZero, KnownOne, Depth);
637     break;
638   }
639   
640   // If we know the value of all of the demanded bits, return this as a
641   // constant.
642   if ((DemandedMask & (KnownZero|KnownOne)) == DemandedMask)
643     return TLO.CombineTo(Op, TLO.DAG.getConstant(KnownOne, Op.getValueType()));
644   
645   return false;
646 }
647
648 /// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero.  We use
649 /// this predicate to simplify operations downstream.  Mask is known to be zero
650 /// for bits that V cannot have.
651 bool TargetLowering::MaskedValueIsZero(SDOperand Op, uint64_t Mask, 
652                                        unsigned Depth) const {
653   uint64_t KnownZero, KnownOne;
654   ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
655   assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
656   return (KnownZero & Mask) == Mask;
657 }
658
659 /// ComputeMaskedBits - Determine which of the bits specified in Mask are
660 /// known to be either zero or one and return them in the KnownZero/KnownOne
661 /// bitsets.  This code only analyzes bits in Mask, in order to short-circuit
662 /// processing.
663 void TargetLowering::ComputeMaskedBits(SDOperand Op, uint64_t Mask, 
664                                        uint64_t &KnownZero, uint64_t &KnownOne,
665                                        unsigned Depth) const {
666   KnownZero = KnownOne = 0;   // Don't know anything.
667   if (Depth == 6 || Mask == 0)
668     return;  // Limit search depth.
669   
670   uint64_t KnownZero2, KnownOne2;
671
672   switch (Op.getOpcode()) {
673   case ISD::Constant:
674     // We know all of the bits for a constant!
675     KnownOne = cast<ConstantSDNode>(Op)->getValue() & Mask;
676     KnownZero = ~KnownOne & Mask;
677     return;
678   case ISD::AND:
679     // If either the LHS or the RHS are Zero, the result is zero.
680     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
681     Mask &= ~KnownZero;
682     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
683     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
684     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
685
686     // Output known-1 bits are only known if set in both the LHS & RHS.
687     KnownOne &= KnownOne2;
688     // Output known-0 are known to be clear if zero in either the LHS | RHS.
689     KnownZero |= KnownZero2;
690     return;
691   case ISD::OR:
692     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
693     Mask &= ~KnownOne;
694     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
695     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
696     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
697     
698     // Output known-0 bits are only known if clear in both the LHS & RHS.
699     KnownZero &= KnownZero2;
700     // Output known-1 are known to be set if set in either the LHS | RHS.
701     KnownOne |= KnownOne2;
702     return;
703   case ISD::XOR: {
704     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
705     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
706     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
707     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
708     
709     // Output known-0 bits are known if clear or set in both the LHS & RHS.
710     uint64_t KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
711     // Output known-1 are known to be set if set in only one of the LHS, RHS.
712     KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
713     KnownZero = KnownZeroOut;
714     return;
715   }
716   case ISD::SELECT:
717     ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero, KnownOne, Depth+1);
718     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero2, KnownOne2, Depth+1);
719     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
720     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
721     
722     // Only known if known in both the LHS and RHS.
723     KnownOne &= KnownOne2;
724     KnownZero &= KnownZero2;
725     return;
726   case ISD::SELECT_CC:
727     ComputeMaskedBits(Op.getOperand(3), Mask, KnownZero, KnownOne, Depth+1);
728     ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero2, KnownOne2, Depth+1);
729     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
730     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
731     
732     // Only known if known in both the LHS and RHS.
733     KnownOne &= KnownOne2;
734     KnownZero &= KnownZero2;
735     return;
736   case ISD::SETCC:
737     // If we know the result of a setcc has the top bits zero, use this info.
738     if (getSetCCResultContents() == TargetLowering::ZeroOrOneSetCCResult)
739       KnownZero |= (MVT::getIntVTBitMask(Op.getValueType()) ^ 1ULL);
740     return;
741   case ISD::SHL:
742     // (shl X, C1) & C2 == 0   iff   (X & C2 >>u C1) == 0
743     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
744       Mask >>= SA->getValue();
745       ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
746       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
747       KnownZero <<= SA->getValue();
748       KnownOne  <<= SA->getValue();
749       KnownZero |= (1ULL << SA->getValue())-1;  // low bits known zero.
750     }
751     return;
752   case ISD::SRL:
753     // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
754     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
755       uint64_t HighBits = (1ULL << SA->getValue())-1;
756       HighBits <<= MVT::getSizeInBits(Op.getValueType())-SA->getValue();
757       Mask <<= SA->getValue();
758       ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
759       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
760       KnownZero >>= SA->getValue();
761       KnownOne  >>= SA->getValue();
762       KnownZero |= HighBits;  // high bits known zero.
763     }
764     return;
765   case ISD::SRA:
766     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
767       uint64_t HighBits = (1ULL << SA->getValue())-1;
768       HighBits <<= MVT::getSizeInBits(Op.getValueType())-SA->getValue();
769       Mask <<= SA->getValue();
770       ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
771       assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?"); 
772       KnownZero >>= SA->getValue();
773       KnownOne  >>= SA->getValue();
774       
775       // Handle the sign bits.
776       uint64_t SignBit = 1ULL << (MVT::getSizeInBits(Op.getValueType())-1);
777       SignBit >>= SA->getValue();  // Adjust to where it is now in the mask.
778       
779       if (KnownZero & SignBit) {       // New bits are known zero.
780         KnownZero |= HighBits;
781       } else if (KnownOne & SignBit) { // New bits are known one.
782         KnownOne |= HighBits;
783       }
784     }
785     return;
786   case ISD::SIGN_EXTEND_INREG: {
787     MVT::ValueType  VT = Op.getValueType();
788     MVT::ValueType EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
789     
790     // Sign extension.  Compute the demanded bits in the result that are not 
791     // present in the input.
792     uint64_t NewBits = ~MVT::getIntVTBitMask(EVT) & Mask;
793
794     uint64_t InSignBit = MVT::getIntVTSignBit(EVT);
795     int64_t InputDemandedBits = Mask & MVT::getIntVTBitMask(EVT);
796     
797     // If the sign extended bits are demanded, we know that the sign
798     // bit is demanded.
799     if (NewBits)
800       InputDemandedBits |= InSignBit;
801     
802     ComputeMaskedBits(Op.getOperand(0), InputDemandedBits,
803                       KnownZero, KnownOne, Depth+1);
804     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
805     
806     // If the sign bit of the input is known set or clear, then we know the
807     // top bits of the result.
808     if (KnownZero & InSignBit) {          // Input sign bit known clear
809       KnownZero |= NewBits;
810       KnownOne  &= ~NewBits;
811     } else if (KnownOne & InSignBit) {    // Input sign bit known set
812       KnownOne  |= NewBits;
813       KnownZero &= ~NewBits;
814     } else {                              // Input sign bit unknown
815       KnownZero &= ~NewBits;
816       KnownOne  &= ~NewBits;
817     }
818     return;
819   }
820   case ISD::CTTZ:
821   case ISD::CTLZ:
822   case ISD::CTPOP: {
823     MVT::ValueType VT = Op.getValueType();
824     unsigned LowBits = Log2_32(MVT::getSizeInBits(VT))+1;
825     KnownZero = ~((1ULL << LowBits)-1) & MVT::getIntVTBitMask(VT);
826     KnownOne  = 0;
827     return;
828   }
829   case ISD::ZEXTLOAD: {
830     MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(3))->getVT();
831     KnownZero |= ~MVT::getIntVTBitMask(VT) & Mask;
832     return;
833   }
834   case ISD::ZERO_EXTEND: {
835     uint64_t InMask  = MVT::getIntVTBitMask(Op.getOperand(0).getValueType());
836     uint64_t NewBits = (~InMask) & Mask;
837     ComputeMaskedBits(Op.getOperand(0), Mask & InMask, KnownZero, 
838                       KnownOne, Depth+1);
839     KnownZero |= NewBits & Mask;
840     KnownOne  &= ~NewBits;
841     return;
842   }
843   case ISD::SIGN_EXTEND: {
844     MVT::ValueType InVT = Op.getOperand(0).getValueType();
845     unsigned InBits    = MVT::getSizeInBits(InVT);
846     uint64_t InMask    = MVT::getIntVTBitMask(InVT);
847     uint64_t InSignBit = 1ULL << (InBits-1);
848     uint64_t NewBits   = (~InMask) & Mask;
849     uint64_t InDemandedBits = Mask & InMask;
850
851     // If any of the sign extended bits are demanded, we know that the sign
852     // bit is demanded.
853     if (NewBits & Mask)
854       InDemandedBits |= InSignBit;
855     
856     ComputeMaskedBits(Op.getOperand(0), InDemandedBits, KnownZero, 
857                       KnownOne, Depth+1);
858     // If the sign bit is known zero or one, the  top bits match.
859     if (KnownZero & InSignBit) {
860       KnownZero |= NewBits;
861       KnownOne  &= ~NewBits;
862     } else if (KnownOne & InSignBit) {
863       KnownOne  |= NewBits;
864       KnownZero &= ~NewBits;
865     } else {   // Otherwise, top bits aren't known.
866       KnownOne  &= ~NewBits;
867       KnownZero &= ~NewBits;
868     }
869     return;
870   }
871   case ISD::ANY_EXTEND: {
872     MVT::ValueType VT = Op.getOperand(0).getValueType();
873     ComputeMaskedBits(Op.getOperand(0), Mask & MVT::getIntVTBitMask(VT),
874                       KnownZero, KnownOne, Depth+1);
875     return;
876   }
877   case ISD::TRUNCATE: {
878     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
879     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
880     uint64_t OutMask = MVT::getIntVTBitMask(Op.getValueType());
881     KnownZero &= OutMask;
882     KnownOne &= OutMask;
883     break;
884   }
885   case ISD::AssertZext: {
886     MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
887     uint64_t InMask = MVT::getIntVTBitMask(VT);
888     ComputeMaskedBits(Op.getOperand(0), Mask & InMask, KnownZero, 
889                       KnownOne, Depth+1);
890     KnownZero |= (~InMask) & Mask;
891     return;
892   }
893   case ISD::ADD: {
894     // If either the LHS or the RHS are Zero, the result is zero.
895     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
896     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
897     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
898     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
899     
900     // Output known-0 bits are known if clear or set in both the low clear bits
901     // common to both LHS & RHS.  For example, 8+(X<<3) is known to have the
902     // low 3 bits clear.
903     uint64_t KnownZeroOut = std::min(CountTrailingZeros_64(~KnownZero), 
904                                      CountTrailingZeros_64(~KnownZero2));
905     
906     KnownZero = (1ULL << KnownZeroOut) - 1;
907     KnownOne = 0;
908     return;
909   }
910   case ISD::SUB: {
911     ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0));
912     if (!CLHS) return;
913
914     // We know that the top bits of C-X are clear if X contains less bits
915     // than C (i.e. no wrap-around can happen).  For example, 20-X is
916     // positive if we can prove that X is >= 0 and < 16.
917     MVT::ValueType VT = CLHS->getValueType(0);
918     if ((CLHS->getValue() & MVT::getIntVTSignBit(VT)) == 0) {  // sign bit clear
919       unsigned NLZ = CountLeadingZeros_64(CLHS->getValue()+1);
920       uint64_t MaskV = (1ULL << (63-NLZ))-1; // NLZ can't be 64 with no sign bit
921       MaskV = ~MaskV & MVT::getIntVTBitMask(VT);
922       ComputeMaskedBits(Op.getOperand(1), MaskV, KnownZero, KnownOne, Depth+1);
923
924       // If all of the MaskV bits are known to be zero, then we know the output
925       // top bits are zero, because we now know that the output is from [0-C].
926       if ((KnownZero & MaskV) == MaskV) {
927         unsigned NLZ2 = CountLeadingZeros_64(CLHS->getValue());
928         KnownZero = ~((1ULL << (64-NLZ2))-1) & Mask;  // Top bits known zero.
929         KnownOne = 0;   // No one bits known.
930       } else {
931         KnownOne = KnownOne = 0;  // Otherwise, nothing known.
932       }
933     }
934     return;
935   }
936   default:
937     // Allow the target to implement this method for its nodes.
938     if (Op.getOpcode() >= ISD::BUILTIN_OP_END) {
939   case ISD::INTRINSIC_WO_CHAIN:
940   case ISD::INTRINSIC_W_CHAIN:
941   case ISD::INTRINSIC_VOID:
942       computeMaskedBitsForTargetNode(Op, Mask, KnownZero, KnownOne);
943     }
944     return;
945   }
946 }
947
948 /// computeMaskedBitsForTargetNode - Determine which of the bits specified 
949 /// in Mask are known to be either zero or one and return them in the 
950 /// KnownZero/KnownOne bitsets.
951 void TargetLowering::computeMaskedBitsForTargetNode(const SDOperand Op, 
952                                                     uint64_t Mask,
953                                                     uint64_t &KnownZero, 
954                                                     uint64_t &KnownOne,
955                                                     unsigned Depth) const {
956   assert((Op.getOpcode() >= ISD::BUILTIN_OP_END ||
957           Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
958           Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
959           Op.getOpcode() == ISD::INTRINSIC_VOID) &&
960          "Should use MaskedValueIsZero if you don't know whether Op"
961          " is a target node!");
962   KnownZero = 0;
963   KnownOne = 0;
964 }
965
966 SDOperand TargetLowering::
967 PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const {
968   // Default implementation: no optimization.
969   return SDOperand();
970 }
971
972 //===----------------------------------------------------------------------===//
973 //  Inline Assembler Implementation Methods
974 //===----------------------------------------------------------------------===//
975
976 TargetLowering::ConstraintType
977 TargetLowering::getConstraintType(char ConstraintLetter) const {
978   // FIXME: lots more standard ones to handle.
979   switch (ConstraintLetter) {
980   default: return C_Unknown;
981   case 'r': return C_RegisterClass;
982   case 'm':    // memory
983   case 'o':    // offsetable
984   case 'V':    // not offsetable
985     return C_Memory;
986   case 'i':    // Simple Integer or Relocatable Constant
987   case 'n':    // Simple Integer
988   case 's':    // Relocatable Constant
989   case 'I':    // Target registers.
990   case 'J':
991   case 'K':
992   case 'L':
993   case 'M':
994   case 'N':
995   case 'O':
996   case 'P':
997     return C_Other;
998   }
999 }
1000
1001 bool TargetLowering::isOperandValidForConstraint(SDOperand Op, 
1002                                                  char ConstraintLetter) {
1003   switch (ConstraintLetter) {
1004   default: return false;
1005   case 'i':    // Simple Integer or Relocatable Constant
1006   case 'n':    // Simple Integer
1007   case 's':    // Relocatable Constant
1008     return true;   // FIXME: not right.
1009   }
1010 }
1011
1012
1013 std::vector<unsigned> TargetLowering::
1014 getRegClassForInlineAsmConstraint(const std::string &Constraint,
1015                                   MVT::ValueType VT) const {
1016   return std::vector<unsigned>();
1017 }
1018
1019
1020 std::pair<unsigned, const TargetRegisterClass*> TargetLowering::
1021 getRegForInlineAsmConstraint(const std::string &Constraint,
1022                              MVT::ValueType VT) const {
1023   if (Constraint[0] != '{')
1024     return std::pair<unsigned, const TargetRegisterClass*>(0, 0);
1025   assert(*(Constraint.end()-1) == '}' && "Not a brace enclosed constraint?");
1026
1027   // Remove the braces from around the name.
1028   std::string RegName(Constraint.begin()+1, Constraint.end()-1);
1029
1030   // Figure out which register class contains this reg.
1031   const MRegisterInfo *RI = TM.getRegisterInfo();
1032   for (MRegisterInfo::regclass_iterator RCI = RI->regclass_begin(),
1033        E = RI->regclass_end(); RCI != E; ++RCI) {
1034     const TargetRegisterClass *RC = *RCI;
1035     
1036     // If none of the the value types for this register class are valid, we 
1037     // can't use it.  For example, 64-bit reg classes on 32-bit targets.
1038     bool isLegal = false;
1039     for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
1040          I != E; ++I) {
1041       if (isTypeLegal(*I)) {
1042         isLegal = true;
1043         break;
1044       }
1045     }
1046     
1047     if (!isLegal) continue;
1048     
1049     for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end(); 
1050          I != E; ++I) {
1051       if (StringsEqualNoCase(RegName, RI->get(*I).Name))
1052         return std::make_pair(*I, RC);
1053     }
1054   }
1055   
1056   return std::pair<unsigned, const TargetRegisterClass*>(0, 0);
1057 }
1058
1059 //===----------------------------------------------------------------------===//
1060 //  Loop Strength Reduction hooks
1061 //===----------------------------------------------------------------------===//
1062
1063 /// isLegalAddressImmediate - Return true if the integer value or
1064 /// GlobalValue can be used as the offset of the target addressing mode.
1065 bool TargetLowering::isLegalAddressImmediate(int64_t V) const {
1066   return false;
1067 }
1068 bool TargetLowering::isLegalAddressImmediate(GlobalValue *GV) const {
1069   return false;
1070 }