Recognize memory operand codes
[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/CodeGen/SelectionDAG.h"
18 #include "llvm/ADT/StringExtras.h"
19 #include "llvm/Support/MathExtras.h"
20 using namespace llvm;
21
22 TargetLowering::TargetLowering(TargetMachine &tm)
23   : TM(tm), TD(TM.getTargetData()) {
24   assert(ISD::BUILTIN_OP_END <= 128 &&
25          "Fixed size array in TargetLowering is not large enough!");
26   // All operations default to being supported.
27   memset(OpActions, 0, sizeof(OpActions));
28
29   IsLittleEndian = TD.isLittleEndian();
30   ShiftAmountTy = SetCCResultTy = PointerTy = getValueType(TD.getIntPtrType());
31   ShiftAmtHandling = Undefined;
32   memset(RegClassForVT, 0,MVT::LAST_VALUETYPE*sizeof(TargetRegisterClass*));
33   maxStoresPerMemset = maxStoresPerMemcpy = maxStoresPerMemmove = 8;
34   allowUnalignedMemoryAccesses = false;
35   UseUnderscoreSetJmpLongJmp = false;
36   IntDivIsCheap = false;
37   Pow2DivIsCheap = false;
38   StackPointerRegisterToSaveRestore = 0;
39   SchedPreferenceInfo = SchedulingForLatency;
40 }
41
42 TargetLowering::~TargetLowering() {}
43
44 /// setValueTypeAction - Set the action for a particular value type.  This
45 /// assumes an action has not already been set for this value type.
46 static void SetValueTypeAction(MVT::ValueType VT,
47                                TargetLowering::LegalizeAction Action,
48                                TargetLowering &TLI,
49                                MVT::ValueType *TransformToType,
50                         TargetLowering::ValueTypeActionImpl &ValueTypeActions) {
51   ValueTypeActions.setTypeAction(VT, Action);
52   if (Action == TargetLowering::Promote) {
53     MVT::ValueType PromoteTo;
54     if (VT == MVT::f32)
55       PromoteTo = MVT::f64;
56     else {
57       unsigned LargerReg = VT+1;
58       while (!TLI.isTypeLegal((MVT::ValueType)LargerReg)) {
59         ++LargerReg;
60         assert(MVT::isInteger((MVT::ValueType)LargerReg) &&
61                "Nothing to promote to??");
62       }
63       PromoteTo = (MVT::ValueType)LargerReg;
64     }
65
66     assert(MVT::isInteger(VT) == MVT::isInteger(PromoteTo) &&
67            MVT::isFloatingPoint(VT) == MVT::isFloatingPoint(PromoteTo) &&
68            "Can only promote from int->int or fp->fp!");
69     assert(VT < PromoteTo && "Must promote to a larger type!");
70     TransformToType[VT] = PromoteTo;
71   } else if (Action == TargetLowering::Expand) {
72     assert((VT == MVT::Vector || MVT::isInteger(VT)) && VT > MVT::i8 &&
73            "Cannot expand this type: target must support SOME integer reg!");
74     // Expand to the next smaller integer type!
75     TransformToType[VT] = (MVT::ValueType)(VT-1);
76   }
77 }
78
79
80 /// computeRegisterProperties - Once all of the register classes are added,
81 /// this allows us to compute derived properties we expose.
82 void TargetLowering::computeRegisterProperties() {
83   assert(MVT::LAST_VALUETYPE <= 32 &&
84          "Too many value types for ValueTypeActions to hold!");
85
86   // Everything defaults to one.
87   for (unsigned i = 0; i != MVT::LAST_VALUETYPE; ++i)
88     NumElementsForVT[i] = 1;
89
90   // Find the largest integer register class.
91   unsigned LargestIntReg = MVT::i128;
92   for (; RegClassForVT[LargestIntReg] == 0; --LargestIntReg)
93     assert(LargestIntReg != MVT::i1 && "No integer registers defined!");
94
95   // Every integer value type larger than this largest register takes twice as
96   // many registers to represent as the previous ValueType.
97   unsigned ExpandedReg = LargestIntReg; ++LargestIntReg;
98   for (++ExpandedReg; MVT::isInteger((MVT::ValueType)ExpandedReg);++ExpandedReg)
99     NumElementsForVT[ExpandedReg] = 2*NumElementsForVT[ExpandedReg-1];
100
101   // Inspect all of the ValueType's possible, deciding how to process them.
102   for (unsigned IntReg = MVT::i1; IntReg <= MVT::i128; ++IntReg)
103     // If we are expanding this type, expand it!
104     if (getNumElements((MVT::ValueType)IntReg) != 1)
105       SetValueTypeAction((MVT::ValueType)IntReg, Expand, *this, TransformToType,
106                          ValueTypeActions);
107     else if (!isTypeLegal((MVT::ValueType)IntReg))
108       // Otherwise, if we don't have native support, we must promote to a
109       // larger type.
110       SetValueTypeAction((MVT::ValueType)IntReg, Promote, *this,
111                          TransformToType, ValueTypeActions);
112     else
113       TransformToType[(MVT::ValueType)IntReg] = (MVT::ValueType)IntReg;
114
115   // If the target does not have native support for F32, promote it to F64.
116   if (!isTypeLegal(MVT::f32))
117     SetValueTypeAction(MVT::f32, Promote, *this,
118                        TransformToType, ValueTypeActions);
119   else
120     TransformToType[MVT::f32] = MVT::f32;
121   
122   // Set MVT::Vector to always be Expanded
123   SetValueTypeAction(MVT::Vector, Expand, *this, TransformToType, 
124                      ValueTypeActions);
125
126   assert(isTypeLegal(MVT::f64) && "Target does not support FP?");
127   TransformToType[MVT::f64] = MVT::f64;
128 }
129
130 const char *TargetLowering::getTargetNodeName(unsigned Opcode) const {
131   return NULL;
132 }
133
134 //===----------------------------------------------------------------------===//
135 //  Optimization Methods
136 //===----------------------------------------------------------------------===//
137
138 /// ShrinkDemandedConstant - Check to see if the specified operand of the 
139 /// specified instruction is a constant integer.  If so, check to see if there
140 /// are any bits set in the constant that are not demanded.  If so, shrink the
141 /// constant and return true.
142 bool TargetLowering::TargetLoweringOpt::ShrinkDemandedConstant(SDOperand Op, 
143                                                             uint64_t Demanded) {
144   // FIXME: ISD::SELECT
145   switch(Op.getOpcode()) {
146   default: break;
147   case ISD::AND:
148   case ISD::OR:
149   case ISD::XOR:
150     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1)))
151       if ((~Demanded & C->getValue()) != 0) {
152         MVT::ValueType VT = Op.getValueType();
153         SDOperand New = DAG.getNode(Op.getOpcode(), VT, Op.getOperand(0),
154                                     DAG.getConstant(Demanded & C->getValue(), 
155                                                     VT));
156         return CombineTo(Op, New);
157       }
158     break;
159   }
160   return false;
161 }
162
163 /// SimplifyDemandedBits - Look at Op.  At this point, we know that only the
164 /// DemandedMask bits of the result of Op are ever used downstream.  If we can
165 /// use this information to simplify Op, create a new simplified DAG node and
166 /// return true, returning the original and new nodes in Old and New. Otherwise,
167 /// analyze the expression and return a mask of KnownOne and KnownZero bits for
168 /// the expression (used to simplify the caller).  The KnownZero/One bits may
169 /// only be accurate for those bits in the DemandedMask.
170 bool TargetLowering::SimplifyDemandedBits(SDOperand Op, uint64_t DemandedMask, 
171                                           uint64_t &KnownZero,
172                                           uint64_t &KnownOne,
173                                           TargetLoweringOpt &TLO,
174                                           unsigned Depth) const {
175   KnownZero = KnownOne = 0;   // Don't know anything.
176   // Other users may use these bits.
177   if (!Op.Val->hasOneUse()) { 
178     if (Depth != 0) {
179       // If not at the root, Just compute the KnownZero/KnownOne bits to 
180       // simplify things downstream.
181       ComputeMaskedBits(Op, DemandedMask, KnownZero, KnownOne, Depth);
182       return false;
183     }
184     // If this is the root being simplified, allow it to have multiple uses,
185     // just set the DemandedMask to all bits.
186     DemandedMask = MVT::getIntVTBitMask(Op.getValueType());
187   } else if (DemandedMask == 0) {   
188     // Not demanding any bits from Op.
189     if (Op.getOpcode() != ISD::UNDEF)
190       return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::UNDEF, Op.getValueType()));
191     return false;
192   } else if (Depth == 6) {        // Limit search depth.
193     return false;
194   }
195
196   uint64_t KnownZero2, KnownOne2, KnownZeroOut, KnownOneOut;
197   switch (Op.getOpcode()) {
198   case ISD::Constant:
199     // We know all of the bits for a constant!
200     KnownOne = cast<ConstantSDNode>(Op)->getValue() & DemandedMask;
201     KnownZero = ~KnownOne & DemandedMask;
202     return false;
203   case ISD::AND:
204     // If either the LHS or the RHS are Zero, the result is zero.
205     if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero,
206                              KnownOne, TLO, Depth+1))
207       return true;
208     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
209     // If something is known zero on the RHS, the bits aren't demanded on the
210     // LHS.
211     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & ~KnownZero,
212                              KnownZero2, KnownOne2, TLO, Depth+1))
213       return true;
214     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
215       
216     // If all of the demanded bits are known one on one side, return the other.
217     // These bits cannot contribute to the result of the 'and'.
218     if ((DemandedMask & ~KnownZero2 & KnownOne)==(DemandedMask & ~KnownZero2))
219       return TLO.CombineTo(Op, Op.getOperand(0));
220     if ((DemandedMask & ~KnownZero & KnownOne2)==(DemandedMask & ~KnownZero))
221       return TLO.CombineTo(Op, Op.getOperand(1));
222     // If all of the demanded bits in the inputs are known zeros, return zero.
223     if ((DemandedMask & (KnownZero|KnownZero2)) == DemandedMask)
224       return TLO.CombineTo(Op, TLO.DAG.getConstant(0, Op.getValueType()));
225     // If the RHS is a constant, see if we can simplify it.
226     if (TLO.ShrinkDemandedConstant(Op, DemandedMask & ~KnownZero2))
227       return true;
228         
229     // Output known-1 bits are only known if set in both the LHS & RHS.
230     KnownOne &= KnownOne2;
231     // Output known-0 are known to be clear if zero in either the LHS | RHS.
232     KnownZero |= KnownZero2;
233     break;
234   case ISD::OR:
235     if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero, 
236                              KnownOne, TLO, Depth+1))
237       return true;
238     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
239     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & ~KnownOne, 
240                              KnownZero2, KnownOne2, TLO, Depth+1))
241       return true;
242     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
243     
244     // If all of the demanded bits are known zero on one side, return the other.
245     // These bits cannot contribute to the result of the 'or'.
246     if ((DemandedMask & ~KnownOne2 & KnownZero) == (DemandedMask & ~KnownOne2))
247       return TLO.CombineTo(Op, Op.getOperand(0));
248     if ((DemandedMask & ~KnownOne & KnownZero2) == (DemandedMask & ~KnownOne))
249       return TLO.CombineTo(Op, Op.getOperand(1));
250     // If all of the potentially set bits on one side are known to be set on
251     // the other side, just use the 'other' side.
252     if ((DemandedMask & (~KnownZero) & KnownOne2) == 
253         (DemandedMask & (~KnownZero)))
254       return TLO.CombineTo(Op, Op.getOperand(0));
255     if ((DemandedMask & (~KnownZero2) & KnownOne) == 
256         (DemandedMask & (~KnownZero2)))
257       return TLO.CombineTo(Op, Op.getOperand(1));
258     // If the RHS is a constant, see if we can simplify it.
259     if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
260       return true;
261           
262     // Output known-0 bits are only known if clear in both the LHS & RHS.
263     KnownZero &= KnownZero2;
264     // Output known-1 are known to be set if set in either the LHS | RHS.
265     KnownOne |= KnownOne2;
266     break;
267   case ISD::XOR:
268     if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero, 
269                              KnownOne, TLO, Depth+1))
270       return true;
271     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
272     if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask, KnownZero2,
273                              KnownOne2, TLO, Depth+1))
274       return true;
275     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
276     
277     // If all of the demanded bits are known zero on one side, return the other.
278     // These bits cannot contribute to the result of the 'xor'.
279     if ((DemandedMask & KnownZero) == DemandedMask)
280       return TLO.CombineTo(Op, Op.getOperand(0));
281     if ((DemandedMask & KnownZero2) == DemandedMask)
282       return TLO.CombineTo(Op, Op.getOperand(1));
283     
284     // Output known-0 bits are known if clear or set in both the LHS & RHS.
285     KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
286     // Output known-1 are known to be set if set in only one of the LHS, RHS.
287     KnownOneOut = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
288     
289     // If all of the unknown bits are known to be zero on one side or the other
290     // (but not both) turn this into an *inclusive* or.
291     //    e.g. (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
292     if (uint64_t UnknownBits = DemandedMask & ~(KnownZeroOut|KnownOneOut))
293       if ((UnknownBits & (KnownZero|KnownZero2)) == UnknownBits)
294         return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::OR, Op.getValueType(),
295                                                  Op.getOperand(0),
296                                                  Op.getOperand(1)));
297     // If all of the demanded bits on one side are known, and all of the set
298     // bits on that side are also known to be set on the other side, turn this
299     // into an AND, as we know the bits will be cleared.
300     //    e.g. (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2
301     if ((DemandedMask & (KnownZero|KnownOne)) == DemandedMask) { // all known
302       if ((KnownOne & KnownOne2) == KnownOne) {
303         MVT::ValueType VT = Op.getValueType();
304         SDOperand ANDC = TLO.DAG.getConstant(~KnownOne & DemandedMask, VT);
305         return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::AND, VT, Op.getOperand(0),
306                                                  ANDC));
307       }
308     }
309     
310     // If the RHS is a constant, see if we can simplify it.
311     // FIXME: for XOR, we prefer to force bits to 1 if they will make a -1.
312     if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
313       return true;
314     
315     KnownZero = KnownZeroOut;
316     KnownOne  = KnownOneOut;
317     break;
318   case ISD::SETCC:
319     // If we know the result of a setcc has the top bits zero, use this info.
320     if (getSetCCResultContents() == TargetLowering::ZeroOrOneSetCCResult)
321       KnownZero |= (MVT::getIntVTBitMask(Op.getValueType()) ^ 1ULL);
322     break;
323   case ISD::SELECT:
324     if (SimplifyDemandedBits(Op.getOperand(2), DemandedMask, KnownZero, 
325                              KnownOne, TLO, Depth+1))
326       return true;
327     if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero2,
328                              KnownOne2, TLO, Depth+1))
329       return true;
330     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
331     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
332     
333     // If the operands are constants, see if we can simplify them.
334     if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
335       return true;
336     
337     // Only known if known in both the LHS and RHS.
338     KnownOne &= KnownOne2;
339     KnownZero &= KnownZero2;
340     break;
341   case ISD::SHL:
342     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
343       if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask >> SA->getValue(),
344                                KnownZero, KnownOne, TLO, Depth+1))
345         return true;
346       KnownZero <<= SA->getValue();
347       KnownOne  <<= SA->getValue();
348       KnownZero |= (1ULL << SA->getValue())-1;  // low bits known zero.
349     }
350     break;
351   case ISD::SRL:
352     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
353       MVT::ValueType VT = Op.getValueType();
354       unsigned ShAmt = SA->getValue();
355       
356       // Compute the new bits that are at the top now.
357       uint64_t HighBits = (1ULL << ShAmt)-1;
358       HighBits <<= MVT::getSizeInBits(VT) - ShAmt;
359       uint64_t TypeMask = MVT::getIntVTBitMask(VT);
360       
361       if (SimplifyDemandedBits(Op.getOperand(0), 
362                                (DemandedMask << ShAmt) & TypeMask,
363                                KnownZero, KnownOne, TLO, Depth+1))
364         return true;
365       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
366       KnownZero &= TypeMask;
367       KnownOne  &= TypeMask;
368       KnownZero >>= ShAmt;
369       KnownOne  >>= ShAmt;
370       KnownZero |= HighBits;  // high bits known zero.
371     }
372     break;
373   case ISD::SRA:
374     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
375       MVT::ValueType VT = Op.getValueType();
376       unsigned ShAmt = SA->getValue();
377       
378       // Compute the new bits that are at the top now.
379       uint64_t HighBits = (1ULL << ShAmt)-1;
380       HighBits <<= MVT::getSizeInBits(VT) - ShAmt;
381       uint64_t TypeMask = MVT::getIntVTBitMask(VT);
382       
383       if (SimplifyDemandedBits(Op.getOperand(0),
384                                (DemandedMask << ShAmt) & TypeMask,
385                                KnownZero, KnownOne, TLO, Depth+1))
386         return true;
387       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
388       KnownZero &= TypeMask;
389       KnownOne  &= TypeMask;
390       KnownZero >>= SA->getValue();
391       KnownOne  >>= SA->getValue();
392       
393       // Handle the sign bits.
394       uint64_t SignBit = MVT::getIntVTSignBit(VT);
395       SignBit >>= SA->getValue();  // Adjust to where it is now in the mask.
396       
397       // If the input sign bit is known to be zero, or if none of the top bits
398       // are demanded, turn this into an unsigned shift right.
399       if ((KnownZero & SignBit) || (HighBits & ~DemandedMask) == HighBits) {
400         return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SRL, VT, Op.getOperand(0),
401                                                  Op.getOperand(1)));
402       } else if (KnownOne & SignBit) { // New bits are known one.
403         KnownOne |= HighBits;
404       }
405     }
406     break;
407   case ISD::SIGN_EXTEND_INREG: {
408     MVT::ValueType  VT = Op.getValueType();
409     MVT::ValueType EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
410
411     // Sign or Zero extension.  Compute the bits in the result that are not
412     // present in the input.
413     uint64_t NotIn = ~MVT::getIntVTBitMask(EVT);
414     uint64_t NewBits = MVT::getIntVTBitMask(VT) & NotIn;
415     
416     // Sign extension.
417     uint64_t InSignBit = MVT::getIntVTSignBit(EVT);
418     int64_t InputDemandedBits = DemandedMask & MVT::getIntVTBitMask(EVT);
419     
420     // If any of the sign extended bits are demanded, we know that the sign
421     // bit is demanded.
422     if (NewBits & DemandedMask)
423       InputDemandedBits |= InSignBit;
424
425     if (SimplifyDemandedBits(Op.getOperand(0), InputDemandedBits,
426                              KnownZero, KnownOne, TLO, Depth+1))
427       return true;
428     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
429
430     // If the sign bit of the input is known set or clear, then we know the
431     // top bits of the result.
432     
433     // If the input sign bit is known zero, or if the NewBits are not demanded
434     // convert this into a zero extension.
435     if ((KnownZero & InSignBit) || (NewBits & ~DemandedMask) == NewBits) {
436       return TLO.CombineTo(Op, Op.getOperand(0));
437     } else if (KnownOne & InSignBit) {    // Input sign bit known set
438       KnownOne |= NewBits;
439       KnownZero &= ~NewBits;
440     } else {                              // Input sign bit unknown
441       KnownZero &= ~NewBits;
442       KnownOne &= ~NewBits;
443     }
444     break;
445   }
446   case ISD::ADD:
447     if (ConstantSDNode *AA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
448       if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask, KnownZero, 
449                                KnownOne, TLO, Depth+1))
450         return true;
451       // Compute the KnownOne/KnownZero masks for the constant, so we can set
452       // KnownZero appropriately if we're adding a constant that has all low
453       // bits cleared.
454       ComputeMaskedBits(Op.getOperand(1), 
455                         MVT::getIntVTBitMask(Op.getValueType()), 
456                         KnownZero2, KnownOne2, Depth+1);
457       
458       uint64_t KnownZeroOut = std::min(CountTrailingZeros_64(~KnownZero), 
459                                        CountTrailingZeros_64(~KnownZero2));
460       KnownZero = (1ULL << KnownZeroOut) - 1;
461       KnownOne = 0;
462       
463       SDOperand SH = Op.getOperand(0);
464       // fold (add (shl x, c1), (shl c2, c1)) -> (shl (add x, c2), c1)
465       if (KnownZero && SH.getOpcode() == ISD::SHL && SH.Val->hasOneUse() &&
466           Op.Val->hasOneUse()) {
467         if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(SH.getOperand(1))) {
468           MVT::ValueType VT = Op.getValueType();
469           unsigned ShiftAmt = SA->getValue();
470           uint64_t AddAmt = AA->getValue();
471           uint64_t AddShr = AddAmt >> ShiftAmt;
472           if (AddAmt == (AddShr << ShiftAmt)) {
473             SDOperand ADD = TLO.DAG.getNode(ISD::ADD, VT, SH.getOperand(0),
474                                             TLO.DAG.getConstant(AddShr, VT));
475             SDOperand SHL = TLO.DAG.getNode(ISD::SHL, VT, ADD,SH.getOperand(1));
476             return TLO.CombineTo(Op, SHL);
477           }
478         }
479       }
480     }
481     break;
482   case ISD::CTTZ:
483   case ISD::CTLZ:
484   case ISD::CTPOP: {
485     MVT::ValueType VT = Op.getValueType();
486     unsigned LowBits = Log2_32(MVT::getSizeInBits(VT))+1;
487     KnownZero = ~((1ULL << LowBits)-1) & MVT::getIntVTBitMask(VT);
488     KnownOne  = 0;
489     break;
490   }
491   }
492   return false;
493 }
494
495 /// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero.  We use
496 /// this predicate to simplify operations downstream.  Mask is known to be zero
497 /// for bits that V cannot have.
498 bool TargetLowering::MaskedValueIsZero(SDOperand Op, uint64_t Mask, 
499                                        unsigned Depth) const {
500   uint64_t KnownZero, KnownOne;
501   ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
502   assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
503   return (KnownZero & Mask) == Mask;
504 }
505
506 /// ComputeMaskedBits - Determine which of the bits specified in Mask are
507 /// known to be either zero or one and return them in the KnownZero/KnownOne
508 /// bitsets.  This code only analyzes bits in Mask, in order to short-circuit
509 /// processing.
510 void TargetLowering::ComputeMaskedBits(SDOperand Op, uint64_t Mask, 
511                                        uint64_t &KnownZero, uint64_t &KnownOne,
512                                        unsigned Depth) const {
513   KnownZero = KnownOne = 0;   // Don't know anything.
514   if (Depth == 6 || Mask == 0)
515     return;  // Limit search depth.
516   
517   uint64_t KnownZero2, KnownOne2;
518
519   switch (Op.getOpcode()) {
520   case ISD::Constant:
521     // We know all of the bits for a constant!
522     KnownOne = cast<ConstantSDNode>(Op)->getValue() & Mask;
523     KnownZero = ~KnownOne & Mask;
524     return;
525   case ISD::AND:
526     // If either the LHS or the RHS are Zero, the result is zero.
527     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
528     Mask &= ~KnownZero;
529     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
530     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
531     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
532
533     // Output known-1 bits are only known if set in both the LHS & RHS.
534     KnownOne &= KnownOne2;
535     // Output known-0 are known to be clear if zero in either the LHS | RHS.
536     KnownZero |= KnownZero2;
537     return;
538   case ISD::OR:
539     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
540     Mask &= ~KnownOne;
541     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
542     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
543     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
544     
545     // Output known-0 bits are only known if clear in both the LHS & RHS.
546     KnownZero &= KnownZero2;
547     // Output known-1 are known to be set if set in either the LHS | RHS.
548     KnownOne |= KnownOne2;
549     return;
550   case ISD::XOR: {
551     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
552     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
553     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
554     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
555     
556     // Output known-0 bits are known if clear or set in both the LHS & RHS.
557     uint64_t KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
558     // Output known-1 are known to be set if set in only one of the LHS, RHS.
559     KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
560     KnownZero = KnownZeroOut;
561     return;
562   }
563   case ISD::SELECT:
564     ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero, KnownOne, Depth+1);
565     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero2, KnownOne2, Depth+1);
566     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
567     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
568     
569     // Only known if known in both the LHS and RHS.
570     KnownOne &= KnownOne2;
571     KnownZero &= KnownZero2;
572     return;
573   case ISD::SELECT_CC:
574     ComputeMaskedBits(Op.getOperand(3), Mask, KnownZero, KnownOne, Depth+1);
575     ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero2, KnownOne2, Depth+1);
576     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
577     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
578     
579     // Only known if known in both the LHS and RHS.
580     KnownOne &= KnownOne2;
581     KnownZero &= KnownZero2;
582     return;
583   case ISD::SETCC:
584     // If we know the result of a setcc has the top bits zero, use this info.
585     if (getSetCCResultContents() == TargetLowering::ZeroOrOneSetCCResult)
586       KnownZero |= (MVT::getIntVTBitMask(Op.getValueType()) ^ 1ULL);
587     return;
588   case ISD::SHL:
589     // (shl X, C1) & C2 == 0   iff   (X & C2 >>u C1) == 0
590     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
591       Mask >>= SA->getValue();
592       ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
593       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
594       KnownZero <<= SA->getValue();
595       KnownOne  <<= SA->getValue();
596       KnownZero |= (1ULL << SA->getValue())-1;  // low bits known zero.
597     }
598     return;
599   case ISD::SRL:
600     // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
601     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
602       uint64_t HighBits = (1ULL << SA->getValue())-1;
603       HighBits <<= MVT::getSizeInBits(Op.getValueType())-SA->getValue();
604       Mask <<= SA->getValue();
605       ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
606       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
607       KnownZero >>= SA->getValue();
608       KnownOne  >>= SA->getValue();
609       KnownZero |= HighBits;  // high bits known zero.
610     }
611     return;
612   case ISD::SRA:
613     if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
614       uint64_t HighBits = (1ULL << SA->getValue())-1;
615       HighBits <<= MVT::getSizeInBits(Op.getValueType())-SA->getValue();
616       Mask <<= SA->getValue();
617       ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
618       assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?"); 
619       KnownZero >>= SA->getValue();
620       KnownOne  >>= SA->getValue();
621       
622       // Handle the sign bits.
623       uint64_t SignBit = 1ULL << (MVT::getSizeInBits(Op.getValueType())-1);
624       SignBit >>= SA->getValue();  // Adjust to where it is now in the mask.
625       
626       if (KnownZero & SignBit) {       // New bits are known zero.
627         KnownZero |= HighBits;
628       } else if (KnownOne & SignBit) { // New bits are known one.
629         KnownOne |= HighBits;
630       }
631     }
632     return;
633   case ISD::CTTZ:
634   case ISD::CTLZ:
635   case ISD::CTPOP: {
636     MVT::ValueType VT = Op.getValueType();
637     unsigned LowBits = Log2_32(MVT::getSizeInBits(VT))+1;
638     KnownZero = ~((1ULL << LowBits)-1) & MVT::getIntVTBitMask(VT);
639     KnownOne  = 0;
640     return;
641   }
642   case ISD::ZEXTLOAD: {
643     unsigned SrcBits = 
644       MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(3))->getVT());
645     KnownZero |= ~((1ULL << SrcBits)-1);
646     return;
647   }
648   case ISD::ZERO_EXTEND: {
649     unsigned SrcBits = 
650       MVT::getSizeInBits(Op.getOperand(0).getValueType());
651     KnownZero |= ~((1ULL << SrcBits)-1);
652     return;
653   }
654   case ISD::ANY_EXTEND: {
655     unsigned SrcBits = 
656       MVT::getSizeInBits(Op.getOperand(0).getValueType());
657     KnownZero &= ((1ULL << SrcBits)-1);
658     KnownOne  &= ((1ULL << SrcBits)-1);
659     return;
660   }
661   case ISD::AssertZext: {
662     unsigned SrcBits = 
663       MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
664     KnownZero |= ~((1ULL << SrcBits)-1);
665     return;
666   }
667   case ISD::ADD: {
668     // If either the LHS or the RHS are Zero, the result is zero.
669     ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
670     ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
671     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
672     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
673     
674     // Output known-0 bits are known if clear or set in both the low clear bits
675     // common to both LHS & RHS;
676     uint64_t KnownZeroOut = std::min(CountTrailingZeros_64(~KnownZero), 
677                                      CountTrailingZeros_64(~KnownZero2));
678     
679     KnownZero = (1ULL << KnownZeroOut) - 1;
680     KnownOne = 0;
681     return;
682   }
683   case ISD::SUB:
684     // We know that the top bits of C-X are clear if X contains less bits
685     // than C (i.e. no wrap-around can happen).  For example, 20-X is
686     // positive if we can prove that X is >= 0 and < 16.
687     return;
688   default:
689     // Allow the target to implement this method for its nodes.
690     if (Op.getOpcode() >= ISD::BUILTIN_OP_END)
691       computeMaskedBitsForTargetNode(Op, Mask, KnownZero, KnownOne);
692     return;
693   }
694 }
695
696 /// computeMaskedBitsForTargetNode - Determine which of the bits specified 
697 /// in Mask are known to be either zero or one and return them in the 
698 /// KnownZero/KnownOne bitsets.
699 void TargetLowering::computeMaskedBitsForTargetNode(const SDOperand Op, 
700                                                     uint64_t Mask,
701                                                     uint64_t &KnownZero, 
702                                                     uint64_t &KnownOne,
703                                                     unsigned Depth) const {
704   assert(Op.getOpcode() >= ISD::BUILTIN_OP_END &&
705          "Should use MaskedValueIsZero if you don't know whether Op"
706          " is a target node!");
707   KnownZero = 0;
708   KnownOne = 0;
709 }
710
711 //===----------------------------------------------------------------------===//
712 //  Inline Assembler Implementation Methods
713 //===----------------------------------------------------------------------===//
714
715 TargetLowering::ConstraintType
716 TargetLowering::getConstraintType(char ConstraintLetter) const {
717   // FIXME: lots more standard ones to handle.
718   switch (ConstraintLetter) {
719   default: return C_Unknown;
720   case 'r': return C_RegisterClass;
721   case 'm':    // memory
722   case 'o':    // offsetable
723   case 'V':    // not offsetable
724     return C_Memory;
725   case 'i':    // Simple Integer or Relocatable Constant
726   case 'n':    // Simple Integer
727   case 's':    // Relocatable Constant
728   case 'I':    // Target registers.
729   case 'J':
730   case 'K':
731   case 'L':
732   case 'M':
733   case 'N':
734   case 'O':
735   case 'P':
736     return C_Other;
737   }
738 }
739
740 bool TargetLowering::isOperandValidForConstraint(SDOperand Op, 
741                                                  char ConstraintLetter) {
742   switch (ConstraintLetter) {
743   default: return false;
744   case 'i':    // Simple Integer or Relocatable Constant
745   case 'n':    // Simple Integer
746   case 's':    // Relocatable Constant
747     return true;   // FIXME: not right.
748   }
749 }
750
751
752 std::vector<unsigned> TargetLowering::
753 getRegClassForInlineAsmConstraint(const std::string &Constraint,
754                                   MVT::ValueType VT) const {
755   return std::vector<unsigned>();
756 }
757
758
759 std::pair<unsigned, const TargetRegisterClass*> TargetLowering::
760 getRegForInlineAsmConstraint(const std::string &Constraint,
761                              MVT::ValueType VT) const {
762   if (Constraint[0] != '{')
763     return std::pair<unsigned, const TargetRegisterClass*>(0, 0);
764   assert(*(Constraint.end()-1) == '}' && "Not a brace enclosed constraint?");
765
766   // Remove the braces from around the name.
767   std::string RegName(Constraint.begin()+1, Constraint.end()-1);
768
769   // Figure out which register class contains this reg.
770   const MRegisterInfo *RI = TM.getRegisterInfo();
771   for (MRegisterInfo::regclass_iterator RCI = RI->regclass_begin(),
772        E = RI->regclass_end(); RCI != E; ++RCI) {
773     const TargetRegisterClass *RC = *RCI;
774     
775     // If none of the the value types for this register class are valid, we 
776     // can't use it.  For example, 64-bit reg classes on 32-bit targets.
777     bool isLegal = false;
778     for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
779          I != E; ++I) {
780       if (isTypeLegal(*I)) {
781         isLegal = true;
782         break;
783       }
784     }
785     
786     if (!isLegal) continue;
787     
788     for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end(); 
789          I != E; ++I) {
790       if (StringsEqualNoCase(RegName, RI->get(*I).Name))
791         return std::make_pair(*I, RC);
792     }
793   }
794   
795   return std::pair<unsigned, const TargetRegisterClass*>(0, 0);
796 }