relax assertion
[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::AssertZext: {
611     MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
612     uint64_t InMask = MVT::getIntVTBitMask(VT);
613     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & InMask,
614                              KnownZero, KnownOne, TLO, Depth+1))
615       return true;
616     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
617     KnownZero |= ~InMask & DemandedMask;
618     break;
619   }
620   case ISD::ADD:
621   case ISD::SUB:
622   case ISD::INTRINSIC_WO_CHAIN:
623   case ISD::INTRINSIC_W_CHAIN:
624   case ISD::INTRINSIC_VOID:
625     // Just use ComputeMaskedBits to compute output bits.
626     ComputeMaskedBits(Op, DemandedMask, KnownZero, KnownOne, Depth);
627     break;
628   }
629   
630   // If we know the value of all of the demanded bits, return this as a
631   // constant.
632   if ((DemandedMask & (KnownZero|KnownOne)) == DemandedMask)
633     return TLO.CombineTo(Op, TLO.DAG.getConstant(KnownOne, Op.getValueType()));
634   
635   return false;
636 }
637
638 /// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero.  We use
639 /// this predicate to simplify operations downstream.  Mask is known to be zero
640 /// for bits that V cannot have.
641 bool TargetLowering::MaskedValueIsZero(SDOperand Op, uint64_t Mask, 
642                                        unsigned Depth) const {
643   uint64_t KnownZero, KnownOne;
644   ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
645   assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
646   return (KnownZero & Mask) == Mask;
647 }
648
649 /// ComputeMaskedBits - Determine which of the bits specified in Mask are
650 /// known to be either zero or one and return them in the KnownZero/KnownOne
651 /// bitsets.  This code only analyzes bits in Mask, in order to short-circuit
652 /// processing.
653 void TargetLowering::ComputeMaskedBits(SDOperand Op, uint64_t Mask, 
654                                        uint64_t &KnownZero, uint64_t &KnownOne,
655                                        unsigned Depth) const {
656   KnownZero = KnownOne = 0;   // Don't know anything.
657   if (Depth == 6 || Mask == 0)
658     return;  // Limit search depth.
659   
660   uint64_t KnownZero2, KnownOne2;
661
662   switch (Op.getOpcode()) {
663   case ISD::Constant:
664     // We know all of the bits for a constant!
665     KnownOne = cast<ConstantSDNode>(Op)->getValue() & Mask;
666     KnownZero = ~KnownOne & Mask;
667     return;
668   case ISD::AND:
669     // If either the LHS or the RHS are Zero, the result is zero.
670     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
671     Mask &= ~KnownZero;
672     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
673     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
674     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
675
676     // Output known-1 bits are only known if set in both the LHS & RHS.
677     KnownOne &= KnownOne2;
678     // Output known-0 are known to be clear if zero in either the LHS | RHS.
679     KnownZero |= KnownZero2;
680     return;
681   case ISD::OR:
682     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
683     Mask &= ~KnownOne;
684     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
685     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
686     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
687     
688     // Output known-0 bits are only known if clear in both the LHS & RHS.
689     KnownZero &= KnownZero2;
690     // Output known-1 are known to be set if set in either the LHS | RHS.
691     KnownOne |= KnownOne2;
692     return;
693   case ISD::XOR: {
694     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
695     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
696     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
697     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
698     
699     // Output known-0 bits are known if clear or set in both the LHS & RHS.
700     uint64_t KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
701     // Output known-1 are known to be set if set in only one of the LHS, RHS.
702     KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
703     KnownZero = KnownZeroOut;
704     return;
705   }
706   case ISD::SELECT:
707     ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero, KnownOne, Depth+1);
708     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero2, KnownOne2, Depth+1);
709     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
710     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
711     
712     // Only known if known in both the LHS and RHS.
713     KnownOne &= KnownOne2;
714     KnownZero &= KnownZero2;
715     return;
716   case ISD::SELECT_CC:
717     ComputeMaskedBits(Op.getOperand(3), Mask, KnownZero, KnownOne, Depth+1);
718     ComputeMaskedBits(Op.getOperand(2), 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::SETCC:
727     // If we know the result of a setcc has the top bits zero, use this info.
728     if (getSetCCResultContents() == TargetLowering::ZeroOrOneSetCCResult)
729       KnownZero |= (MVT::getIntVTBitMask(Op.getValueType()) ^ 1ULL);
730     return;
731   case ISD::SHL:
732     // (shl X, C1) & C2 == 0   iff   (X & C2 >>u C1) == 0
733     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
734       Mask >>= SA->getValue();
735       ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
736       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
737       KnownZero <<= SA->getValue();
738       KnownOne  <<= SA->getValue();
739       KnownZero |= (1ULL << SA->getValue())-1;  // low bits known zero.
740     }
741     return;
742   case ISD::SRL:
743     // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
744     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
745       uint64_t HighBits = (1ULL << SA->getValue())-1;
746       HighBits <<= MVT::getSizeInBits(Op.getValueType())-SA->getValue();
747       Mask <<= SA->getValue();
748       ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
749       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
750       KnownZero >>= SA->getValue();
751       KnownOne  >>= SA->getValue();
752       KnownZero |= HighBits;  // high bits known zero.
753     }
754     return;
755   case ISD::SRA:
756     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
757       uint64_t HighBits = (1ULL << SA->getValue())-1;
758       HighBits <<= MVT::getSizeInBits(Op.getValueType())-SA->getValue();
759       Mask <<= SA->getValue();
760       ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
761       assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?"); 
762       KnownZero >>= SA->getValue();
763       KnownOne  >>= SA->getValue();
764       
765       // Handle the sign bits.
766       uint64_t SignBit = 1ULL << (MVT::getSizeInBits(Op.getValueType())-1);
767       SignBit >>= SA->getValue();  // Adjust to where it is now in the mask.
768       
769       if (KnownZero & SignBit) {       // New bits are known zero.
770         KnownZero |= HighBits;
771       } else if (KnownOne & SignBit) { // New bits are known one.
772         KnownOne |= HighBits;
773       }
774     }
775     return;
776   case ISD::SIGN_EXTEND_INREG: {
777     MVT::ValueType  VT = Op.getValueType();
778     MVT::ValueType EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
779     
780     // Sign extension.  Compute the demanded bits in the result that are not 
781     // present in the input.
782     uint64_t NewBits = ~MVT::getIntVTBitMask(EVT) & Mask;
783
784     uint64_t InSignBit = MVT::getIntVTSignBit(EVT);
785     int64_t InputDemandedBits = Mask & MVT::getIntVTBitMask(EVT);
786     
787     // If the sign extended bits are demanded, we know that the sign
788     // bit is demanded.
789     if (NewBits)
790       InputDemandedBits |= InSignBit;
791     
792     ComputeMaskedBits(Op.getOperand(0), InputDemandedBits,
793                       KnownZero, KnownOne, Depth+1);
794     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
795     
796     // If the sign bit of the input is known set or clear, then we know the
797     // top bits of the result.
798     if (KnownZero & InSignBit) {          // Input sign bit known clear
799       KnownZero |= NewBits;
800       KnownOne  &= ~NewBits;
801     } else if (KnownOne & InSignBit) {    // Input sign bit known set
802       KnownOne  |= NewBits;
803       KnownZero &= ~NewBits;
804     } else {                              // Input sign bit unknown
805       KnownZero &= ~NewBits;
806       KnownOne  &= ~NewBits;
807     }
808     return;
809   }
810   case ISD::CTTZ:
811   case ISD::CTLZ:
812   case ISD::CTPOP: {
813     MVT::ValueType VT = Op.getValueType();
814     unsigned LowBits = Log2_32(MVT::getSizeInBits(VT))+1;
815     KnownZero = ~((1ULL << LowBits)-1) & MVT::getIntVTBitMask(VT);
816     KnownOne  = 0;
817     return;
818   }
819   case ISD::ZEXTLOAD: {
820     MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(3))->getVT();
821     KnownZero |= ~MVT::getIntVTBitMask(VT) & Mask;
822     return;
823   }
824   case ISD::ZERO_EXTEND: {
825     uint64_t InMask  = MVT::getIntVTBitMask(Op.getOperand(0).getValueType());
826     uint64_t NewBits = (~InMask) & Mask;
827     ComputeMaskedBits(Op.getOperand(0), Mask & InMask, KnownZero, 
828                       KnownOne, Depth+1);
829     KnownZero |= NewBits & Mask;
830     KnownOne  &= ~NewBits;
831     return;
832   }
833   case ISD::SIGN_EXTEND: {
834     MVT::ValueType InVT = Op.getOperand(0).getValueType();
835     unsigned InBits    = MVT::getSizeInBits(InVT);
836     uint64_t InMask    = MVT::getIntVTBitMask(InVT);
837     uint64_t InSignBit = 1ULL << (InBits-1);
838     uint64_t NewBits   = (~InMask) & Mask;
839     uint64_t InDemandedBits = Mask & InMask;
840
841     // If any of the sign extended bits are demanded, we know that the sign
842     // bit is demanded.
843     if (NewBits & Mask)
844       InDemandedBits |= InSignBit;
845     
846     ComputeMaskedBits(Op.getOperand(0), InDemandedBits, KnownZero, 
847                       KnownOne, Depth+1);
848     // If the sign bit is known zero or one, the  top bits match.
849     if (KnownZero & InSignBit) {
850       KnownZero |= NewBits;
851       KnownOne  &= ~NewBits;
852     } else if (KnownOne & InSignBit) {
853       KnownOne  |= NewBits;
854       KnownZero &= ~NewBits;
855     } else {   // Otherwise, top bits aren't known.
856       KnownOne  &= ~NewBits;
857       KnownZero &= ~NewBits;
858     }
859     return;
860   }
861   case ISD::ANY_EXTEND: {
862     MVT::ValueType VT = Op.getOperand(0).getValueType();
863     ComputeMaskedBits(Op.getOperand(0), Mask & MVT::getIntVTBitMask(VT),
864                       KnownZero, KnownOne, Depth+1);
865     return;
866   }
867   case ISD::AssertZext: {
868     MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
869     uint64_t InMask = MVT::getIntVTBitMask(VT);
870     ComputeMaskedBits(Op.getOperand(0), Mask & InMask, KnownZero, 
871                       KnownOne, Depth+1);
872     KnownZero |= (~InMask) & Mask;
873     return;
874   }
875   case ISD::ADD: {
876     // If either the LHS or the RHS are Zero, the result is zero.
877     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
878     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
879     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
880     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
881     
882     // Output known-0 bits are known if clear or set in both the low clear bits
883     // common to both LHS & RHS.  For example, 8+(X<<3) is known to have the
884     // low 3 bits clear.
885     uint64_t KnownZeroOut = std::min(CountTrailingZeros_64(~KnownZero), 
886                                      CountTrailingZeros_64(~KnownZero2));
887     
888     KnownZero = (1ULL << KnownZeroOut) - 1;
889     KnownOne = 0;
890     return;
891   }
892   case ISD::SUB: {
893     ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0));
894     if (!CLHS) return;
895
896     // We know that the top bits of C-X are clear if X contains less bits
897     // than C (i.e. no wrap-around can happen).  For example, 20-X is
898     // positive if we can prove that X is >= 0 and < 16.
899     MVT::ValueType VT = CLHS->getValueType(0);
900     if ((CLHS->getValue() & MVT::getIntVTSignBit(VT)) == 0) {  // sign bit clear
901       unsigned NLZ = CountLeadingZeros_64(CLHS->getValue()+1);
902       uint64_t MaskV = (1ULL << (63-NLZ))-1; // NLZ can't be 64 with no sign bit
903       MaskV = ~MaskV & MVT::getIntVTBitMask(VT);
904       ComputeMaskedBits(Op.getOperand(1), MaskV, KnownZero, KnownOne, Depth+1);
905
906       // If all of the MaskV bits are known to be zero, then we know the output
907       // top bits are zero, because we now know that the output is from [0-C].
908       if ((KnownZero & MaskV) == MaskV) {
909         unsigned NLZ2 = CountLeadingZeros_64(CLHS->getValue());
910         KnownZero = ~((1ULL << (64-NLZ2))-1) & Mask;  // Top bits known zero.
911         KnownOne = 0;   // No one bits known.
912       } else {
913         KnownOne = KnownOne = 0;  // Otherwise, nothing known.
914       }
915     }
916     return;
917   }
918   default:
919     // Allow the target to implement this method for its nodes.
920     if (Op.getOpcode() >= ISD::BUILTIN_OP_END) {
921   case ISD::INTRINSIC_WO_CHAIN:
922   case ISD::INTRINSIC_W_CHAIN:
923   case ISD::INTRINSIC_VOID:
924       computeMaskedBitsForTargetNode(Op, Mask, KnownZero, KnownOne);
925     }
926     return;
927   }
928 }
929
930 /// computeMaskedBitsForTargetNode - Determine which of the bits specified 
931 /// in Mask are known to be either zero or one and return them in the 
932 /// KnownZero/KnownOne bitsets.
933 void TargetLowering::computeMaskedBitsForTargetNode(const SDOperand Op, 
934                                                     uint64_t Mask,
935                                                     uint64_t &KnownZero, 
936                                                     uint64_t &KnownOne,
937                                                     unsigned Depth) const {
938   assert((Op.getOpcode() >= ISD::BUILTIN_OP_END ||
939           Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
940           Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
941           Op.getOpcode() == ISD::INTRINSIC_VOID) &&
942          "Should use MaskedValueIsZero if you don't know whether Op"
943          " is a target node!");
944   KnownZero = 0;
945   KnownOne = 0;
946 }
947
948 SDOperand TargetLowering::
949 PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const {
950   // Default implementation: no optimization.
951   return SDOperand();
952 }
953
954 //===----------------------------------------------------------------------===//
955 //  Inline Assembler Implementation Methods
956 //===----------------------------------------------------------------------===//
957
958 TargetLowering::ConstraintType
959 TargetLowering::getConstraintType(char ConstraintLetter) const {
960   // FIXME: lots more standard ones to handle.
961   switch (ConstraintLetter) {
962   default: return C_Unknown;
963   case 'r': return C_RegisterClass;
964   case 'm':    // memory
965   case 'o':    // offsetable
966   case 'V':    // not offsetable
967     return C_Memory;
968   case 'i':    // Simple Integer or Relocatable Constant
969   case 'n':    // Simple Integer
970   case 's':    // Relocatable Constant
971   case 'I':    // Target registers.
972   case 'J':
973   case 'K':
974   case 'L':
975   case 'M':
976   case 'N':
977   case 'O':
978   case 'P':
979     return C_Other;
980   }
981 }
982
983 bool TargetLowering::isOperandValidForConstraint(SDOperand Op, 
984                                                  char ConstraintLetter) {
985   switch (ConstraintLetter) {
986   default: return false;
987   case 'i':    // Simple Integer or Relocatable Constant
988   case 'n':    // Simple Integer
989   case 's':    // Relocatable Constant
990     return true;   // FIXME: not right.
991   }
992 }
993
994
995 std::vector<unsigned> TargetLowering::
996 getRegClassForInlineAsmConstraint(const std::string &Constraint,
997                                   MVT::ValueType VT) const {
998   return std::vector<unsigned>();
999 }
1000
1001
1002 std::pair<unsigned, const TargetRegisterClass*> TargetLowering::
1003 getRegForInlineAsmConstraint(const std::string &Constraint,
1004                              MVT::ValueType VT) const {
1005   if (Constraint[0] != '{')
1006     return std::pair<unsigned, const TargetRegisterClass*>(0, 0);
1007   assert(*(Constraint.end()-1) == '}' && "Not a brace enclosed constraint?");
1008
1009   // Remove the braces from around the name.
1010   std::string RegName(Constraint.begin()+1, Constraint.end()-1);
1011
1012   // Figure out which register class contains this reg.
1013   const MRegisterInfo *RI = TM.getRegisterInfo();
1014   for (MRegisterInfo::regclass_iterator RCI = RI->regclass_begin(),
1015        E = RI->regclass_end(); RCI != E; ++RCI) {
1016     const TargetRegisterClass *RC = *RCI;
1017     
1018     // If none of the the value types for this register class are valid, we 
1019     // can't use it.  For example, 64-bit reg classes on 32-bit targets.
1020     bool isLegal = false;
1021     for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
1022          I != E; ++I) {
1023       if (isTypeLegal(*I)) {
1024         isLegal = true;
1025         break;
1026       }
1027     }
1028     
1029     if (!isLegal) continue;
1030     
1031     for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end(); 
1032          I != E; ++I) {
1033       if (StringsEqualNoCase(RegName, RI->get(*I).Name))
1034         return std::make_pair(*I, RC);
1035     }
1036   }
1037   
1038   return std::pair<unsigned, const TargetRegisterClass*>(0, 0);
1039 }
1040
1041 //===----------------------------------------------------------------------===//
1042 //  Loop Strength Reduction hooks
1043 //===----------------------------------------------------------------------===//
1044
1045 /// isLegalAddressImmediate - Return true if the integer value or
1046 /// GlobalValue can be used as the offset of the target addressing mode.
1047 bool TargetLowering::isLegalAddressImmediate(int64_t V) const {
1048   return false;
1049 }
1050 bool TargetLowering::isLegalAddressImmediate(GlobalValue *GV) const {
1051   return false;
1052 }