Home | History | Annotate | Download | only in TableGen
      1 //===- CodeGenDAGPatterns.cpp - Read DAG patterns from .td file -----------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements the CodeGenDAGPatterns class, which is used to read and
     11 // represent the patterns present in a .td file for instructions.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "CodeGenDAGPatterns.h"
     16 #include "llvm/ADT/STLExtras.h"
     17 #include "llvm/ADT/StringExtras.h"
     18 #include "llvm/ADT/Twine.h"
     19 #include "llvm/Support/Debug.h"
     20 #include "llvm/Support/ErrorHandling.h"
     21 #include "llvm/TableGen/Error.h"
     22 #include "llvm/TableGen/Record.h"
     23 #include <algorithm>
     24 #include <cstdio>
     25 #include <set>
     26 using namespace llvm;
     27 
     28 //===----------------------------------------------------------------------===//
     29 //  EEVT::TypeSet Implementation
     30 //===----------------------------------------------------------------------===//
     31 
     32 static inline bool isInteger(MVT::SimpleValueType VT) {
     33   return EVT(VT).isInteger();
     34 }
     35 static inline bool isFloatingPoint(MVT::SimpleValueType VT) {
     36   return EVT(VT).isFloatingPoint();
     37 }
     38 static inline bool isVector(MVT::SimpleValueType VT) {
     39   return EVT(VT).isVector();
     40 }
     41 static inline bool isScalar(MVT::SimpleValueType VT) {
     42   return !EVT(VT).isVector();
     43 }
     44 
     45 EEVT::TypeSet::TypeSet(MVT::SimpleValueType VT, TreePattern &TP) {
     46   if (VT == MVT::iAny)
     47     EnforceInteger(TP);
     48   else if (VT == MVT::fAny)
     49     EnforceFloatingPoint(TP);
     50   else if (VT == MVT::vAny)
     51     EnforceVector(TP);
     52   else {
     53     assert((VT < MVT::LAST_VALUETYPE || VT == MVT::iPTR ||
     54             VT == MVT::iPTRAny) && "Not a concrete type!");
     55     TypeVec.push_back(VT);
     56   }
     57 }
     58 
     59 
     60 EEVT::TypeSet::TypeSet(ArrayRef<MVT::SimpleValueType> VTList) {
     61   assert(!VTList.empty() && "empty list?");
     62   TypeVec.append(VTList.begin(), VTList.end());
     63 
     64   if (!VTList.empty())
     65     assert(VTList[0] != MVT::iAny && VTList[0] != MVT::vAny &&
     66            VTList[0] != MVT::fAny);
     67 
     68   // Verify no duplicates.
     69   array_pod_sort(TypeVec.begin(), TypeVec.end());
     70   assert(std::unique(TypeVec.begin(), TypeVec.end()) == TypeVec.end());
     71 }
     72 
     73 /// FillWithPossibleTypes - Set to all legal types and return true, only valid
     74 /// on completely unknown type sets.
     75 bool EEVT::TypeSet::FillWithPossibleTypes(TreePattern &TP,
     76                                           bool (*Pred)(MVT::SimpleValueType),
     77                                           const char *PredicateName) {
     78   assert(isCompletelyUnknown());
     79   ArrayRef<MVT::SimpleValueType> LegalTypes =
     80     TP.getDAGPatterns().getTargetInfo().getLegalValueTypes();
     81 
     82   if (TP.hasError())
     83     return false;
     84 
     85   for (unsigned i = 0, e = LegalTypes.size(); i != e; ++i)
     86     if (Pred == 0 || Pred(LegalTypes[i]))
     87       TypeVec.push_back(LegalTypes[i]);
     88 
     89   // If we have nothing that matches the predicate, bail out.
     90   if (TypeVec.empty()) {
     91     TP.error("Type inference contradiction found, no " +
     92              std::string(PredicateName) + " types found");
     93     return false;
     94   }
     95   // No need to sort with one element.
     96   if (TypeVec.size() == 1) return true;
     97 
     98   // Remove duplicates.
     99   array_pod_sort(TypeVec.begin(), TypeVec.end());
    100   TypeVec.erase(std::unique(TypeVec.begin(), TypeVec.end()), TypeVec.end());
    101 
    102   return true;
    103 }
    104 
    105 /// hasIntegerTypes - Return true if this TypeSet contains iAny or an
    106 /// integer value type.
    107 bool EEVT::TypeSet::hasIntegerTypes() const {
    108   for (unsigned i = 0, e = TypeVec.size(); i != e; ++i)
    109     if (isInteger(TypeVec[i]))
    110       return true;
    111   return false;
    112 }
    113 
    114 /// hasFloatingPointTypes - Return true if this TypeSet contains an fAny or
    115 /// a floating point value type.
    116 bool EEVT::TypeSet::hasFloatingPointTypes() const {
    117   for (unsigned i = 0, e = TypeVec.size(); i != e; ++i)
    118     if (isFloatingPoint(TypeVec[i]))
    119       return true;
    120   return false;
    121 }
    122 
    123 /// hasVectorTypes - Return true if this TypeSet contains a vAny or a vector
    124 /// value type.
    125 bool EEVT::TypeSet::hasVectorTypes() const {
    126   for (unsigned i = 0, e = TypeVec.size(); i != e; ++i)
    127     if (isVector(TypeVec[i]))
    128       return true;
    129   return false;
    130 }
    131 
    132 
    133 std::string EEVT::TypeSet::getName() const {
    134   if (TypeVec.empty()) return "<empty>";
    135 
    136   std::string Result;
    137 
    138   for (unsigned i = 0, e = TypeVec.size(); i != e; ++i) {
    139     std::string VTName = llvm::getEnumName(TypeVec[i]);
    140     // Strip off MVT:: prefix if present.
    141     if (VTName.substr(0,5) == "MVT::")
    142       VTName = VTName.substr(5);
    143     if (i) Result += ':';
    144     Result += VTName;
    145   }
    146 
    147   if (TypeVec.size() == 1)
    148     return Result;
    149   return "{" + Result + "}";
    150 }
    151 
    152 /// MergeInTypeInfo - This merges in type information from the specified
    153 /// argument.  If 'this' changes, it returns true.  If the two types are
    154 /// contradictory (e.g. merge f32 into i32) then this flags an error.
    155 bool EEVT::TypeSet::MergeInTypeInfo(const EEVT::TypeSet &InVT, TreePattern &TP){
    156   if (InVT.isCompletelyUnknown() || *this == InVT || TP.hasError())
    157     return false;
    158 
    159   if (isCompletelyUnknown()) {
    160     *this = InVT;
    161     return true;
    162   }
    163 
    164   assert(TypeVec.size() >= 1 && InVT.TypeVec.size() >= 1 && "No unknowns");
    165 
    166   // Handle the abstract cases, seeing if we can resolve them better.
    167   switch (TypeVec[0]) {
    168   default: break;
    169   case MVT::iPTR:
    170   case MVT::iPTRAny:
    171     if (InVT.hasIntegerTypes()) {
    172       EEVT::TypeSet InCopy(InVT);
    173       InCopy.EnforceInteger(TP);
    174       InCopy.EnforceScalar(TP);
    175 
    176       if (InCopy.isConcrete()) {
    177         // If the RHS has one integer type, upgrade iPTR to i32.
    178         TypeVec[0] = InVT.TypeVec[0];
    179         return true;
    180       }
    181 
    182       // If the input has multiple scalar integers, this doesn't add any info.
    183       if (!InCopy.isCompletelyUnknown())
    184         return false;
    185     }
    186     break;
    187   }
    188 
    189   // If the input constraint is iAny/iPTR and this is an integer type list,
    190   // remove non-integer types from the list.
    191   if ((InVT.TypeVec[0] == MVT::iPTR || InVT.TypeVec[0] == MVT::iPTRAny) &&
    192       hasIntegerTypes()) {
    193     bool MadeChange = EnforceInteger(TP);
    194 
    195     // If we're merging in iPTR/iPTRAny and the node currently has a list of
    196     // multiple different integer types, replace them with a single iPTR.
    197     if ((InVT.TypeVec[0] == MVT::iPTR || InVT.TypeVec[0] == MVT::iPTRAny) &&
    198         TypeVec.size() != 1) {
    199       TypeVec.resize(1);
    200       TypeVec[0] = InVT.TypeVec[0];
    201       MadeChange = true;
    202     }
    203 
    204     return MadeChange;
    205   }
    206 
    207   // If this is a type list and the RHS is a typelist as well, eliminate entries
    208   // from this list that aren't in the other one.
    209   bool MadeChange = false;
    210   TypeSet InputSet(*this);
    211 
    212   for (unsigned i = 0; i != TypeVec.size(); ++i) {
    213     bool InInVT = false;
    214     for (unsigned j = 0, e = InVT.TypeVec.size(); j != e; ++j)
    215       if (TypeVec[i] == InVT.TypeVec[j]) {
    216         InInVT = true;
    217         break;
    218       }
    219 
    220     if (InInVT) continue;
    221     TypeVec.erase(TypeVec.begin()+i--);
    222     MadeChange = true;
    223   }
    224 
    225   // If we removed all of our types, we have a type contradiction.
    226   if (!TypeVec.empty())
    227     return MadeChange;
    228 
    229   // FIXME: Really want an SMLoc here!
    230   TP.error("Type inference contradiction found, merging '" +
    231            InVT.getName() + "' into '" + InputSet.getName() + "'");
    232   return false;
    233 }
    234 
    235 /// EnforceInteger - Remove all non-integer types from this set.
    236 bool EEVT::TypeSet::EnforceInteger(TreePattern &TP) {
    237   if (TP.hasError())
    238     return false;
    239   // If we know nothing, then get the full set.
    240   if (TypeVec.empty())
    241     return FillWithPossibleTypes(TP, isInteger, "integer");
    242   if (!hasFloatingPointTypes())
    243     return false;
    244 
    245   TypeSet InputSet(*this);
    246 
    247   // Filter out all the fp types.
    248   for (unsigned i = 0; i != TypeVec.size(); ++i)
    249     if (!isInteger(TypeVec[i]))
    250       TypeVec.erase(TypeVec.begin()+i--);
    251 
    252   if (TypeVec.empty()) {
    253     TP.error("Type inference contradiction found, '" +
    254              InputSet.getName() + "' needs to be integer");
    255     return false;
    256   }
    257   return true;
    258 }
    259 
    260 /// EnforceFloatingPoint - Remove all integer types from this set.
    261 bool EEVT::TypeSet::EnforceFloatingPoint(TreePattern &TP) {
    262   if (TP.hasError())
    263     return false;
    264   // If we know nothing, then get the full set.
    265   if (TypeVec.empty())
    266     return FillWithPossibleTypes(TP, isFloatingPoint, "floating point");
    267 
    268   if (!hasIntegerTypes())
    269     return false;
    270 
    271   TypeSet InputSet(*this);
    272 
    273   // Filter out all the fp types.
    274   for (unsigned i = 0; i != TypeVec.size(); ++i)
    275     if (!isFloatingPoint(TypeVec[i]))
    276       TypeVec.erase(TypeVec.begin()+i--);
    277 
    278   if (TypeVec.empty()) {
    279     TP.error("Type inference contradiction found, '" +
    280              InputSet.getName() + "' needs to be floating point");
    281     return false;
    282   }
    283   return true;
    284 }
    285 
    286 /// EnforceScalar - Remove all vector types from this.
    287 bool EEVT::TypeSet::EnforceScalar(TreePattern &TP) {
    288   if (TP.hasError())
    289     return false;
    290 
    291   // If we know nothing, then get the full set.
    292   if (TypeVec.empty())
    293     return FillWithPossibleTypes(TP, isScalar, "scalar");
    294 
    295   if (!hasVectorTypes())
    296     return false;
    297 
    298   TypeSet InputSet(*this);
    299 
    300   // Filter out all the vector types.
    301   for (unsigned i = 0; i != TypeVec.size(); ++i)
    302     if (!isScalar(TypeVec[i]))
    303       TypeVec.erase(TypeVec.begin()+i--);
    304 
    305   if (TypeVec.empty()) {
    306     TP.error("Type inference contradiction found, '" +
    307              InputSet.getName() + "' needs to be scalar");
    308     return false;
    309   }
    310   return true;
    311 }
    312 
    313 /// EnforceVector - Remove all vector types from this.
    314 bool EEVT::TypeSet::EnforceVector(TreePattern &TP) {
    315   if (TP.hasError())
    316     return false;
    317 
    318   // If we know nothing, then get the full set.
    319   if (TypeVec.empty())
    320     return FillWithPossibleTypes(TP, isVector, "vector");
    321 
    322   TypeSet InputSet(*this);
    323   bool MadeChange = false;
    324 
    325   // Filter out all the scalar types.
    326   for (unsigned i = 0; i != TypeVec.size(); ++i)
    327     if (!isVector(TypeVec[i])) {
    328       TypeVec.erase(TypeVec.begin()+i--);
    329       MadeChange = true;
    330     }
    331 
    332   if (TypeVec.empty()) {
    333     TP.error("Type inference contradiction found, '" +
    334              InputSet.getName() + "' needs to be a vector");
    335     return false;
    336   }
    337   return MadeChange;
    338 }
    339 
    340 
    341 
    342 /// EnforceSmallerThan - 'this' must be a smaller VT than Other.  Update
    343 /// this an other based on this information.
    344 bool EEVT::TypeSet::EnforceSmallerThan(EEVT::TypeSet &Other, TreePattern &TP) {
    345   if (TP.hasError())
    346     return false;
    347 
    348   // Both operands must be integer or FP, but we don't care which.
    349   bool MadeChange = false;
    350 
    351   if (isCompletelyUnknown())
    352     MadeChange = FillWithPossibleTypes(TP);
    353 
    354   if (Other.isCompletelyUnknown())
    355     MadeChange = Other.FillWithPossibleTypes(TP);
    356 
    357   // If one side is known to be integer or known to be FP but the other side has
    358   // no information, get at least the type integrality info in there.
    359   if (!hasFloatingPointTypes())
    360     MadeChange |= Other.EnforceInteger(TP);
    361   else if (!hasIntegerTypes())
    362     MadeChange |= Other.EnforceFloatingPoint(TP);
    363   if (!Other.hasFloatingPointTypes())
    364     MadeChange |= EnforceInteger(TP);
    365   else if (!Other.hasIntegerTypes())
    366     MadeChange |= EnforceFloatingPoint(TP);
    367 
    368   assert(!isCompletelyUnknown() && !Other.isCompletelyUnknown() &&
    369          "Should have a type list now");
    370 
    371   // If one contains vectors but the other doesn't pull vectors out.
    372   if (!hasVectorTypes())
    373     MadeChange |= Other.EnforceScalar(TP);
    374   if (!hasVectorTypes())
    375     MadeChange |= EnforceScalar(TP);
    376 
    377   if (TypeVec.size() == 1 && Other.TypeVec.size() == 1) {
    378     // If we are down to concrete types, this code does not currently
    379     // handle nodes which have multiple types, where some types are
    380     // integer, and some are fp.  Assert that this is not the case.
    381     assert(!(hasIntegerTypes() && hasFloatingPointTypes()) &&
    382            !(Other.hasIntegerTypes() && Other.hasFloatingPointTypes()) &&
    383            "SDTCisOpSmallerThanOp does not handle mixed int/fp types!");
    384 
    385     // Otherwise, if these are both vector types, either this vector
    386     // must have a larger bitsize than the other, or this element type
    387     // must be larger than the other.
    388     EVT Type(TypeVec[0]);
    389     EVT OtherType(Other.TypeVec[0]);
    390 
    391     if (hasVectorTypes() && Other.hasVectorTypes()) {
    392       if (Type.getSizeInBits() >= OtherType.getSizeInBits())
    393         if (Type.getVectorElementType().getSizeInBits()
    394             >= OtherType.getVectorElementType().getSizeInBits()) {
    395           TP.error("Type inference contradiction found, '" +
    396                    getName() + "' element type not smaller than '" +
    397                    Other.getName() +"'!");
    398           return false;
    399         }
    400     }
    401     else
    402       // For scalar types, the bitsize of this type must be larger
    403       // than that of the other.
    404       if (Type.getSizeInBits() >= OtherType.getSizeInBits()) {
    405         TP.error("Type inference contradiction found, '" +
    406                  getName() + "' is not smaller than '" +
    407                  Other.getName() +"'!");
    408         return false;
    409       }
    410   }
    411 
    412 
    413   // Handle int and fp as disjoint sets.  This won't work for patterns
    414   // that have mixed fp/int types but those are likely rare and would
    415   // not have been accepted by this code previously.
    416 
    417   // Okay, find the smallest type from the current set and remove it from the
    418   // largest set.
    419   MVT::SimpleValueType SmallestInt = MVT::LAST_VALUETYPE;
    420   for (unsigned i = 0, e = TypeVec.size(); i != e; ++i)
    421     if (isInteger(TypeVec[i])) {
    422       SmallestInt = TypeVec[i];
    423       break;
    424     }
    425   for (unsigned i = 1, e = TypeVec.size(); i != e; ++i)
    426     if (isInteger(TypeVec[i]) && TypeVec[i] < SmallestInt)
    427       SmallestInt = TypeVec[i];
    428 
    429   MVT::SimpleValueType SmallestFP = MVT::LAST_VALUETYPE;
    430   for (unsigned i = 0, e = TypeVec.size(); i != e; ++i)
    431     if (isFloatingPoint(TypeVec[i])) {
    432       SmallestFP = TypeVec[i];
    433       break;
    434     }
    435   for (unsigned i = 1, e = TypeVec.size(); i != e; ++i)
    436     if (isFloatingPoint(TypeVec[i]) && TypeVec[i] < SmallestFP)
    437       SmallestFP = TypeVec[i];
    438 
    439   int OtherIntSize = 0;
    440   int OtherFPSize = 0;
    441   for (SmallVectorImpl<MVT::SimpleValueType>::iterator TVI =
    442          Other.TypeVec.begin();
    443        TVI != Other.TypeVec.end();
    444        /* NULL */) {
    445     if (isInteger(*TVI)) {
    446       ++OtherIntSize;
    447       if (*TVI == SmallestInt) {
    448         TVI = Other.TypeVec.erase(TVI);
    449         --OtherIntSize;
    450         MadeChange = true;
    451         continue;
    452       }
    453     }
    454     else if (isFloatingPoint(*TVI)) {
    455       ++OtherFPSize;
    456       if (*TVI == SmallestFP) {
    457         TVI = Other.TypeVec.erase(TVI);
    458         --OtherFPSize;
    459         MadeChange = true;
    460         continue;
    461       }
    462     }
    463     ++TVI;
    464   }
    465 
    466   // If this is the only type in the large set, the constraint can never be
    467   // satisfied.
    468   if ((Other.hasIntegerTypes() && OtherIntSize == 0)
    469       || (Other.hasFloatingPointTypes() && OtherFPSize == 0)) {
    470     TP.error("Type inference contradiction found, '" +
    471              Other.getName() + "' has nothing larger than '" + getName() +"'!");
    472     return false;
    473   }
    474 
    475   // Okay, find the largest type in the Other set and remove it from the
    476   // current set.
    477   MVT::SimpleValueType LargestInt = MVT::Other;
    478   for (unsigned i = 0, e = Other.TypeVec.size(); i != e; ++i)
    479     if (isInteger(Other.TypeVec[i])) {
    480       LargestInt = Other.TypeVec[i];
    481       break;
    482     }
    483   for (unsigned i = 1, e = Other.TypeVec.size(); i != e; ++i)
    484     if (isInteger(Other.TypeVec[i]) && Other.TypeVec[i] > LargestInt)
    485       LargestInt = Other.TypeVec[i];
    486 
    487   MVT::SimpleValueType LargestFP = MVT::Other;
    488   for (unsigned i = 0, e = Other.TypeVec.size(); i != e; ++i)
    489     if (isFloatingPoint(Other.TypeVec[i])) {
    490       LargestFP = Other.TypeVec[i];
    491       break;
    492     }
    493   for (unsigned i = 1, e = Other.TypeVec.size(); i != e; ++i)
    494     if (isFloatingPoint(Other.TypeVec[i]) && Other.TypeVec[i] > LargestFP)
    495       LargestFP = Other.TypeVec[i];
    496 
    497   int IntSize = 0;
    498   int FPSize = 0;
    499   for (SmallVectorImpl<MVT::SimpleValueType>::iterator TVI =
    500          TypeVec.begin();
    501        TVI != TypeVec.end();
    502        /* NULL */) {
    503     if (isInteger(*TVI)) {
    504       ++IntSize;
    505       if (*TVI == LargestInt) {
    506         TVI = TypeVec.erase(TVI);
    507         --IntSize;
    508         MadeChange = true;
    509         continue;
    510       }
    511     }
    512     else if (isFloatingPoint(*TVI)) {
    513       ++FPSize;
    514       if (*TVI == LargestFP) {
    515         TVI = TypeVec.erase(TVI);
    516         --FPSize;
    517         MadeChange = true;
    518         continue;
    519       }
    520     }
    521     ++TVI;
    522   }
    523 
    524   // If this is the only type in the small set, the constraint can never be
    525   // satisfied.
    526   if ((hasIntegerTypes() && IntSize == 0)
    527       || (hasFloatingPointTypes() && FPSize == 0)) {
    528     TP.error("Type inference contradiction found, '" +
    529              getName() + "' has nothing smaller than '" + Other.getName()+"'!");
    530     return false;
    531   }
    532 
    533   return MadeChange;
    534 }
    535 
    536 /// EnforceVectorEltTypeIs - 'this' is now constrainted to be a vector type
    537 /// whose element is specified by VTOperand.
    538 bool EEVT::TypeSet::EnforceVectorEltTypeIs(EEVT::TypeSet &VTOperand,
    539                                            TreePattern &TP) {
    540   if (TP.hasError())
    541     return false;
    542 
    543   // "This" must be a vector and "VTOperand" must be a scalar.
    544   bool MadeChange = false;
    545   MadeChange |= EnforceVector(TP);
    546   MadeChange |= VTOperand.EnforceScalar(TP);
    547 
    548   // If we know the vector type, it forces the scalar to agree.
    549   if (isConcrete()) {
    550     EVT IVT = getConcrete();
    551     IVT = IVT.getVectorElementType();
    552     return MadeChange |
    553       VTOperand.MergeInTypeInfo(IVT.getSimpleVT().SimpleTy, TP);
    554   }
    555 
    556   // If the scalar type is known, filter out vector types whose element types
    557   // disagree.
    558   if (!VTOperand.isConcrete())
    559     return MadeChange;
    560 
    561   MVT::SimpleValueType VT = VTOperand.getConcrete();
    562 
    563   TypeSet InputSet(*this);
    564 
    565   // Filter out all the types which don't have the right element type.
    566   for (unsigned i = 0; i != TypeVec.size(); ++i) {
    567     assert(isVector(TypeVec[i]) && "EnforceVector didn't work");
    568     if (EVT(TypeVec[i]).getVectorElementType().getSimpleVT().SimpleTy != VT) {
    569       TypeVec.erase(TypeVec.begin()+i--);
    570       MadeChange = true;
    571     }
    572   }
    573 
    574   if (TypeVec.empty()) {  // FIXME: Really want an SMLoc here!
    575     TP.error("Type inference contradiction found, forcing '" +
    576              InputSet.getName() + "' to have a vector element");
    577     return false;
    578   }
    579   return MadeChange;
    580 }
    581 
    582 /// EnforceVectorSubVectorTypeIs - 'this' is now constrainted to be a
    583 /// vector type specified by VTOperand.
    584 bool EEVT::TypeSet::EnforceVectorSubVectorTypeIs(EEVT::TypeSet &VTOperand,
    585                                                  TreePattern &TP) {
    586   // "This" must be a vector and "VTOperand" must be a vector.
    587   bool MadeChange = false;
    588   MadeChange |= EnforceVector(TP);
    589   MadeChange |= VTOperand.EnforceVector(TP);
    590 
    591   // "This" must be larger than "VTOperand."
    592   MadeChange |= VTOperand.EnforceSmallerThan(*this, TP);
    593 
    594   // If we know the vector type, it forces the scalar types to agree.
    595   if (isConcrete()) {
    596     EVT IVT = getConcrete();
    597     IVT = IVT.getVectorElementType();
    598 
    599     EEVT::TypeSet EltTypeSet(IVT.getSimpleVT().SimpleTy, TP);
    600     MadeChange |= VTOperand.EnforceVectorEltTypeIs(EltTypeSet, TP);
    601   } else if (VTOperand.isConcrete()) {
    602     EVT IVT = VTOperand.getConcrete();
    603     IVT = IVT.getVectorElementType();
    604 
    605     EEVT::TypeSet EltTypeSet(IVT.getSimpleVT().SimpleTy, TP);
    606     MadeChange |= EnforceVectorEltTypeIs(EltTypeSet, TP);
    607   }
    608 
    609   return MadeChange;
    610 }
    611 
    612 //===----------------------------------------------------------------------===//
    613 // Helpers for working with extended types.
    614 
    615 /// Dependent variable map for CodeGenDAGPattern variant generation
    616 typedef std::map<std::string, int> DepVarMap;
    617 
    618 /// Const iterator shorthand for DepVarMap
    619 typedef DepVarMap::const_iterator DepVarMap_citer;
    620 
    621 static void FindDepVarsOf(TreePatternNode *N, DepVarMap &DepMap) {
    622   if (N->isLeaf()) {
    623     if (isa<DefInit>(N->getLeafValue()))
    624       DepMap[N->getName()]++;
    625   } else {
    626     for (size_t i = 0, e = N->getNumChildren(); i != e; ++i)
    627       FindDepVarsOf(N->getChild(i), DepMap);
    628   }
    629 }
    630 
    631 /// Find dependent variables within child patterns
    632 static void FindDepVars(TreePatternNode *N, MultipleUseVarSet &DepVars) {
    633   DepVarMap depcounts;
    634   FindDepVarsOf(N, depcounts);
    635   for (DepVarMap_citer i = depcounts.begin(); i != depcounts.end(); ++i) {
    636     if (i->second > 1)            // std::pair<std::string, int>
    637       DepVars.insert(i->first);
    638   }
    639 }
    640 
    641 #ifndef NDEBUG
    642 /// Dump the dependent variable set:
    643 static void DumpDepVars(MultipleUseVarSet &DepVars) {
    644   if (DepVars.empty()) {
    645     DEBUG(errs() << "<empty set>");
    646   } else {
    647     DEBUG(errs() << "[ ");
    648     for (MultipleUseVarSet::const_iterator i = DepVars.begin(),
    649          e = DepVars.end(); i != e; ++i) {
    650       DEBUG(errs() << (*i) << " ");
    651     }
    652     DEBUG(errs() << "]");
    653   }
    654 }
    655 #endif
    656 
    657 
    658 //===----------------------------------------------------------------------===//
    659 // TreePredicateFn Implementation
    660 //===----------------------------------------------------------------------===//
    661 
    662 /// TreePredicateFn constructor.  Here 'N' is a subclass of PatFrag.
    663 TreePredicateFn::TreePredicateFn(TreePattern *N) : PatFragRec(N) {
    664   assert((getPredCode().empty() || getImmCode().empty()) &&
    665         ".td file corrupt: can't have a node predicate *and* an imm predicate");
    666 }
    667 
    668 std::string TreePredicateFn::getPredCode() const {
    669   return PatFragRec->getRecord()->getValueAsString("PredicateCode");
    670 }
    671 
    672 std::string TreePredicateFn::getImmCode() const {
    673   return PatFragRec->getRecord()->getValueAsString("ImmediateCode");
    674 }
    675 
    676 
    677 /// isAlwaysTrue - Return true if this is a noop predicate.
    678 bool TreePredicateFn::isAlwaysTrue() const {
    679   return getPredCode().empty() && getImmCode().empty();
    680 }
    681 
    682 /// Return the name to use in the generated code to reference this, this is
    683 /// "Predicate_foo" if from a pattern fragment "foo".
    684 std::string TreePredicateFn::getFnName() const {
    685   return "Predicate_" + PatFragRec->getRecord()->getName();
    686 }
    687 
    688 /// getCodeToRunOnSDNode - Return the code for the function body that
    689 /// evaluates this predicate.  The argument is expected to be in "Node",
    690 /// not N.  This handles casting and conversion to a concrete node type as
    691 /// appropriate.
    692 std::string TreePredicateFn::getCodeToRunOnSDNode() const {
    693   // Handle immediate predicates first.
    694   std::string ImmCode = getImmCode();
    695   if (!ImmCode.empty()) {
    696     std::string Result =
    697       "    int64_t Imm = cast<ConstantSDNode>(Node)->getSExtValue();\n";
    698     return Result + ImmCode;
    699   }
    700 
    701   // Handle arbitrary node predicates.
    702   assert(!getPredCode().empty() && "Don't have any predicate code!");
    703   std::string ClassName;
    704   if (PatFragRec->getOnlyTree()->isLeaf())
    705     ClassName = "SDNode";
    706   else {
    707     Record *Op = PatFragRec->getOnlyTree()->getOperator();
    708     ClassName = PatFragRec->getDAGPatterns().getSDNodeInfo(Op).getSDClassName();
    709   }
    710   std::string Result;
    711   if (ClassName == "SDNode")
    712     Result = "    SDNode *N = Node;\n";
    713   else
    714     Result = "    " + ClassName + "*N = cast<" + ClassName + ">(Node);\n";
    715 
    716   return Result + getPredCode();
    717 }
    718 
    719 //===----------------------------------------------------------------------===//
    720 // PatternToMatch implementation
    721 //
    722 
    723 
    724 /// getPatternSize - Return the 'size' of this pattern.  We want to match large
    725 /// patterns before small ones.  This is used to determine the size of a
    726 /// pattern.
    727 static unsigned getPatternSize(const TreePatternNode *P,
    728                                const CodeGenDAGPatterns &CGP) {
    729   unsigned Size = 3;  // The node itself.
    730   // If the root node is a ConstantSDNode, increases its size.
    731   // e.g. (set R32:$dst, 0).
    732   if (P->isLeaf() && isa<IntInit>(P->getLeafValue()))
    733     Size += 2;
    734 
    735   // FIXME: This is a hack to statically increase the priority of patterns
    736   // which maps a sub-dag to a complex pattern. e.g. favors LEA over ADD.
    737   // Later we can allow complexity / cost for each pattern to be (optionally)
    738   // specified. To get best possible pattern match we'll need to dynamically
    739   // calculate the complexity of all patterns a dag can potentially map to.
    740   const ComplexPattern *AM = P->getComplexPatternInfo(CGP);
    741   if (AM)
    742     Size += AM->getNumOperands() * 3;
    743 
    744   // If this node has some predicate function that must match, it adds to the
    745   // complexity of this node.
    746   if (!P->getPredicateFns().empty())
    747     ++Size;
    748 
    749   // Count children in the count if they are also nodes.
    750   for (unsigned i = 0, e = P->getNumChildren(); i != e; ++i) {
    751     TreePatternNode *Child = P->getChild(i);
    752     if (!Child->isLeaf() && Child->getNumTypes() &&
    753         Child->getType(0) != MVT::Other)
    754       Size += getPatternSize(Child, CGP);
    755     else if (Child->isLeaf()) {
    756       if (isa<IntInit>(Child->getLeafValue()))
    757         Size += 5;  // Matches a ConstantSDNode (+3) and a specific value (+2).
    758       else if (Child->getComplexPatternInfo(CGP))
    759         Size += getPatternSize(Child, CGP);
    760       else if (!Child->getPredicateFns().empty())
    761         ++Size;
    762     }
    763   }
    764 
    765   return Size;
    766 }
    767 
    768 /// Compute the complexity metric for the input pattern.  This roughly
    769 /// corresponds to the number of nodes that are covered.
    770 unsigned PatternToMatch::
    771 getPatternComplexity(const CodeGenDAGPatterns &CGP) const {
    772   return getPatternSize(getSrcPattern(), CGP) + getAddedComplexity();
    773 }
    774 
    775 
    776 /// getPredicateCheck - Return a single string containing all of this
    777 /// pattern's predicates concatenated with "&&" operators.
    778 ///
    779 std::string PatternToMatch::getPredicateCheck() const {
    780   std::string PredicateCheck;
    781   for (unsigned i = 0, e = Predicates->getSize(); i != e; ++i) {
    782     if (DefInit *Pred = dyn_cast<DefInit>(Predicates->getElement(i))) {
    783       Record *Def = Pred->getDef();
    784       if (!Def->isSubClassOf("Predicate")) {
    785 #ifndef NDEBUG
    786         Def->dump();
    787 #endif
    788         llvm_unreachable("Unknown predicate type!");
    789       }
    790       if (!PredicateCheck.empty())
    791         PredicateCheck += " && ";
    792       PredicateCheck += "(" + Def->getValueAsString("CondString") + ")";
    793     }
    794   }
    795 
    796   return PredicateCheck;
    797 }
    798 
    799 //===----------------------------------------------------------------------===//
    800 // SDTypeConstraint implementation
    801 //
    802 
    803 SDTypeConstraint::SDTypeConstraint(Record *R) {
    804   OperandNo = R->getValueAsInt("OperandNum");
    805 
    806   if (R->isSubClassOf("SDTCisVT")) {
    807     ConstraintType = SDTCisVT;
    808     x.SDTCisVT_Info.VT = getValueType(R->getValueAsDef("VT"));
    809     if (x.SDTCisVT_Info.VT == MVT::isVoid)
    810       PrintFatalError(R->getLoc(), "Cannot use 'Void' as type to SDTCisVT");
    811 
    812   } else if (R->isSubClassOf("SDTCisPtrTy")) {
    813     ConstraintType = SDTCisPtrTy;
    814   } else if (R->isSubClassOf("SDTCisInt")) {
    815     ConstraintType = SDTCisInt;
    816   } else if (R->isSubClassOf("SDTCisFP")) {
    817     ConstraintType = SDTCisFP;
    818   } else if (R->isSubClassOf("SDTCisVec")) {
    819     ConstraintType = SDTCisVec;
    820   } else if (R->isSubClassOf("SDTCisSameAs")) {
    821     ConstraintType = SDTCisSameAs;
    822     x.SDTCisSameAs_Info.OtherOperandNum = R->getValueAsInt("OtherOperandNum");
    823   } else if (R->isSubClassOf("SDTCisVTSmallerThanOp")) {
    824     ConstraintType = SDTCisVTSmallerThanOp;
    825     x.SDTCisVTSmallerThanOp_Info.OtherOperandNum =
    826       R->getValueAsInt("OtherOperandNum");
    827   } else if (R->isSubClassOf("SDTCisOpSmallerThanOp")) {
    828     ConstraintType = SDTCisOpSmallerThanOp;
    829     x.SDTCisOpSmallerThanOp_Info.BigOperandNum =
    830       R->getValueAsInt("BigOperandNum");
    831   } else if (R->isSubClassOf("SDTCisEltOfVec")) {
    832     ConstraintType = SDTCisEltOfVec;
    833     x.SDTCisEltOfVec_Info.OtherOperandNum = R->getValueAsInt("OtherOpNum");
    834   } else if (R->isSubClassOf("SDTCisSubVecOfVec")) {
    835     ConstraintType = SDTCisSubVecOfVec;
    836     x.SDTCisSubVecOfVec_Info.OtherOperandNum =
    837       R->getValueAsInt("OtherOpNum");
    838   } else {
    839     errs() << "Unrecognized SDTypeConstraint '" << R->getName() << "'!\n";
    840     exit(1);
    841   }
    842 }
    843 
    844 /// getOperandNum - Return the node corresponding to operand #OpNo in tree
    845 /// N, and the result number in ResNo.
    846 static TreePatternNode *getOperandNum(unsigned OpNo, TreePatternNode *N,
    847                                       const SDNodeInfo &NodeInfo,
    848                                       unsigned &ResNo) {
    849   unsigned NumResults = NodeInfo.getNumResults();
    850   if (OpNo < NumResults) {
    851     ResNo = OpNo;
    852     return N;
    853   }
    854 
    855   OpNo -= NumResults;
    856 
    857   if (OpNo >= N->getNumChildren()) {
    858     errs() << "Invalid operand number in type constraint "
    859            << (OpNo+NumResults) << " ";
    860     N->dump();
    861     errs() << '\n';
    862     exit(1);
    863   }
    864 
    865   return N->getChild(OpNo);
    866 }
    867 
    868 /// ApplyTypeConstraint - Given a node in a pattern, apply this type
    869 /// constraint to the nodes operands.  This returns true if it makes a
    870 /// change, false otherwise.  If a type contradiction is found, flag an error.
    871 bool SDTypeConstraint::ApplyTypeConstraint(TreePatternNode *N,
    872                                            const SDNodeInfo &NodeInfo,
    873                                            TreePattern &TP) const {
    874   if (TP.hasError())
    875     return false;
    876 
    877   unsigned ResNo = 0; // The result number being referenced.
    878   TreePatternNode *NodeToApply = getOperandNum(OperandNo, N, NodeInfo, ResNo);
    879 
    880   switch (ConstraintType) {
    881   case SDTCisVT:
    882     // Operand must be a particular type.
    883     return NodeToApply->UpdateNodeType(ResNo, x.SDTCisVT_Info.VT, TP);
    884   case SDTCisPtrTy:
    885     // Operand must be same as target pointer type.
    886     return NodeToApply->UpdateNodeType(ResNo, MVT::iPTR, TP);
    887   case SDTCisInt:
    888     // Require it to be one of the legal integer VTs.
    889     return NodeToApply->getExtType(ResNo).EnforceInteger(TP);
    890   case SDTCisFP:
    891     // Require it to be one of the legal fp VTs.
    892     return NodeToApply->getExtType(ResNo).EnforceFloatingPoint(TP);
    893   case SDTCisVec:
    894     // Require it to be one of the legal vector VTs.
    895     return NodeToApply->getExtType(ResNo).EnforceVector(TP);
    896   case SDTCisSameAs: {
    897     unsigned OResNo = 0;
    898     TreePatternNode *OtherNode =
    899       getOperandNum(x.SDTCisSameAs_Info.OtherOperandNum, N, NodeInfo, OResNo);
    900     return NodeToApply->UpdateNodeType(OResNo, OtherNode->getExtType(ResNo),TP)|
    901            OtherNode->UpdateNodeType(ResNo,NodeToApply->getExtType(OResNo),TP);
    902   }
    903   case SDTCisVTSmallerThanOp: {
    904     // The NodeToApply must be a leaf node that is a VT.  OtherOperandNum must
    905     // have an integer type that is smaller than the VT.
    906     if (!NodeToApply->isLeaf() ||
    907         !isa<DefInit>(NodeToApply->getLeafValue()) ||
    908         !static_cast<DefInit*>(NodeToApply->getLeafValue())->getDef()
    909                ->isSubClassOf("ValueType")) {
    910       TP.error(N->getOperator()->getName() + " expects a VT operand!");
    911       return false;
    912     }
    913     MVT::SimpleValueType VT =
    914      getValueType(static_cast<DefInit*>(NodeToApply->getLeafValue())->getDef());
    915 
    916     EEVT::TypeSet TypeListTmp(VT, TP);
    917 
    918     unsigned OResNo = 0;
    919     TreePatternNode *OtherNode =
    920       getOperandNum(x.SDTCisVTSmallerThanOp_Info.OtherOperandNum, N, NodeInfo,
    921                     OResNo);
    922 
    923     return TypeListTmp.EnforceSmallerThan(OtherNode->getExtType(OResNo), TP);
    924   }
    925   case SDTCisOpSmallerThanOp: {
    926     unsigned BResNo = 0;
    927     TreePatternNode *BigOperand =
    928       getOperandNum(x.SDTCisOpSmallerThanOp_Info.BigOperandNum, N, NodeInfo,
    929                     BResNo);
    930     return NodeToApply->getExtType(ResNo).
    931                   EnforceSmallerThan(BigOperand->getExtType(BResNo), TP);
    932   }
    933   case SDTCisEltOfVec: {
    934     unsigned VResNo = 0;
    935     TreePatternNode *VecOperand =
    936       getOperandNum(x.SDTCisEltOfVec_Info.OtherOperandNum, N, NodeInfo,
    937                     VResNo);
    938 
    939     // Filter vector types out of VecOperand that don't have the right element
    940     // type.
    941     return VecOperand->getExtType(VResNo).
    942       EnforceVectorEltTypeIs(NodeToApply->getExtType(ResNo), TP);
    943   }
    944   case SDTCisSubVecOfVec: {
    945     unsigned VResNo = 0;
    946     TreePatternNode *BigVecOperand =
    947       getOperandNum(x.SDTCisSubVecOfVec_Info.OtherOperandNum, N, NodeInfo,
    948                     VResNo);
    949 
    950     // Filter vector types out of BigVecOperand that don't have the
    951     // right subvector type.
    952     return BigVecOperand->getExtType(VResNo).
    953       EnforceVectorSubVectorTypeIs(NodeToApply->getExtType(ResNo), TP);
    954   }
    955   }
    956   llvm_unreachable("Invalid ConstraintType!");
    957 }
    958 
    959 // Update the node type to match an instruction operand or result as specified
    960 // in the ins or outs lists on the instruction definition. Return true if the
    961 // type was actually changed.
    962 bool TreePatternNode::UpdateNodeTypeFromInst(unsigned ResNo,
    963                                              Record *Operand,
    964                                              TreePattern &TP) {
    965   // The 'unknown' operand indicates that types should be inferred from the
    966   // context.
    967   if (Operand->isSubClassOf("unknown_class"))
    968     return false;
    969 
    970   // The Operand class specifies a type directly.
    971   if (Operand->isSubClassOf("Operand"))
    972     return UpdateNodeType(ResNo, getValueType(Operand->getValueAsDef("Type")),
    973                           TP);
    974 
    975   // PointerLikeRegClass has a type that is determined at runtime.
    976   if (Operand->isSubClassOf("PointerLikeRegClass"))
    977     return UpdateNodeType(ResNo, MVT::iPTR, TP);
    978 
    979   // Both RegisterClass and RegisterOperand operands derive their types from a
    980   // register class def.
    981   Record *RC = 0;
    982   if (Operand->isSubClassOf("RegisterClass"))
    983     RC = Operand;
    984   else if (Operand->isSubClassOf("RegisterOperand"))
    985     RC = Operand->getValueAsDef("RegClass");
    986 
    987   assert(RC && "Unknown operand type");
    988   CodeGenTarget &Tgt = TP.getDAGPatterns().getTargetInfo();
    989   return UpdateNodeType(ResNo, Tgt.getRegisterClass(RC).getValueTypes(), TP);
    990 }
    991 
    992 
    993 //===----------------------------------------------------------------------===//
    994 // SDNodeInfo implementation
    995 //
    996 SDNodeInfo::SDNodeInfo(Record *R) : Def(R) {
    997   EnumName    = R->getValueAsString("Opcode");
    998   SDClassName = R->getValueAsString("SDClass");
    999   Record *TypeProfile = R->getValueAsDef("TypeProfile");
   1000   NumResults = TypeProfile->getValueAsInt("NumResults");
   1001   NumOperands = TypeProfile->getValueAsInt("NumOperands");
   1002 
   1003   // Parse the properties.
   1004   Properties = 0;
   1005   std::vector<Record*> PropList = R->getValueAsListOfDefs("Properties");
   1006   for (unsigned i = 0, e = PropList.size(); i != e; ++i) {
   1007     if (PropList[i]->getName() == "SDNPCommutative") {
   1008       Properties |= 1 << SDNPCommutative;
   1009     } else if (PropList[i]->getName() == "SDNPAssociative") {
   1010       Properties |= 1 << SDNPAssociative;
   1011     } else if (PropList[i]->getName() == "SDNPHasChain") {
   1012       Properties |= 1 << SDNPHasChain;
   1013     } else if (PropList[i]->getName() == "SDNPOutGlue") {
   1014       Properties |= 1 << SDNPOutGlue;
   1015     } else if (PropList[i]->getName() == "SDNPInGlue") {
   1016       Properties |= 1 << SDNPInGlue;
   1017     } else if (PropList[i]->getName() == "SDNPOptInGlue") {
   1018       Properties |= 1 << SDNPOptInGlue;
   1019     } else if (PropList[i]->getName() == "SDNPMayStore") {
   1020       Properties |= 1 << SDNPMayStore;
   1021     } else if (PropList[i]->getName() == "SDNPMayLoad") {
   1022       Properties |= 1 << SDNPMayLoad;
   1023     } else if (PropList[i]->getName() == "SDNPSideEffect") {
   1024       Properties |= 1 << SDNPSideEffect;
   1025     } else if (PropList[i]->getName() == "SDNPMemOperand") {
   1026       Properties |= 1 << SDNPMemOperand;
   1027     } else if (PropList[i]->getName() == "SDNPVariadic") {
   1028       Properties |= 1 << SDNPVariadic;
   1029     } else {
   1030       errs() << "Unknown SD Node property '" << PropList[i]->getName()
   1031              << "' on node '" << R->getName() << "'!\n";
   1032       exit(1);
   1033     }
   1034   }
   1035 
   1036 
   1037   // Parse the type constraints.
   1038   std::vector<Record*> ConstraintList =
   1039     TypeProfile->getValueAsListOfDefs("Constraints");
   1040   TypeConstraints.assign(ConstraintList.begin(), ConstraintList.end());
   1041 }
   1042 
   1043 /// getKnownType - If the type constraints on this node imply a fixed type
   1044 /// (e.g. all stores return void, etc), then return it as an
   1045 /// MVT::SimpleValueType.  Otherwise, return EEVT::Other.
   1046 MVT::SimpleValueType SDNodeInfo::getKnownType(unsigned ResNo) const {
   1047   unsigned NumResults = getNumResults();
   1048   assert(NumResults <= 1 &&
   1049          "We only work with nodes with zero or one result so far!");
   1050   assert(ResNo == 0 && "Only handles single result nodes so far");
   1051 
   1052   for (unsigned i = 0, e = TypeConstraints.size(); i != e; ++i) {
   1053     // Make sure that this applies to the correct node result.
   1054     if (TypeConstraints[i].OperandNo >= NumResults)  // FIXME: need value #
   1055       continue;
   1056 
   1057     switch (TypeConstraints[i].ConstraintType) {
   1058     default: break;
   1059     case SDTypeConstraint::SDTCisVT:
   1060       return TypeConstraints[i].x.SDTCisVT_Info.VT;
   1061     case SDTypeConstraint::SDTCisPtrTy:
   1062       return MVT::iPTR;
   1063     }
   1064   }
   1065   return MVT::Other;
   1066 }
   1067 
   1068 //===----------------------------------------------------------------------===//
   1069 // TreePatternNode implementation
   1070 //
   1071 
   1072 TreePatternNode::~TreePatternNode() {
   1073 #if 0 // FIXME: implement refcounted tree nodes!
   1074   for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
   1075     delete getChild(i);
   1076 #endif
   1077 }
   1078 
   1079 static unsigned GetNumNodeResults(Record *Operator, CodeGenDAGPatterns &CDP) {
   1080   if (Operator->getName() == "set" ||
   1081       Operator->getName() == "implicit")
   1082     return 0;  // All return nothing.
   1083 
   1084   if (Operator->isSubClassOf("Intrinsic"))
   1085     return CDP.getIntrinsic(Operator).IS.RetVTs.size();
   1086 
   1087   if (Operator->isSubClassOf("SDNode"))
   1088     return CDP.getSDNodeInfo(Operator).getNumResults();
   1089 
   1090   if (Operator->isSubClassOf("PatFrag")) {
   1091     // If we've already parsed this pattern fragment, get it.  Otherwise, handle
   1092     // the forward reference case where one pattern fragment references another
   1093     // before it is processed.
   1094     if (TreePattern *PFRec = CDP.getPatternFragmentIfRead(Operator))
   1095       return PFRec->getOnlyTree()->getNumTypes();
   1096 
   1097     // Get the result tree.
   1098     DagInit *Tree = Operator->getValueAsDag("Fragment");
   1099     Record *Op = 0;
   1100     if (Tree)
   1101       if (DefInit *DI = dyn_cast<DefInit>(Tree->getOperator()))
   1102         Op = DI->getDef();
   1103     assert(Op && "Invalid Fragment");
   1104     return GetNumNodeResults(Op, CDP);
   1105   }
   1106 
   1107   if (Operator->isSubClassOf("Instruction")) {
   1108     CodeGenInstruction &InstInfo = CDP.getTargetInfo().getInstruction(Operator);
   1109 
   1110     // FIXME: Should allow access to all the results here.
   1111     unsigned NumDefsToAdd = InstInfo.Operands.NumDefs ? 1 : 0;
   1112 
   1113     // Add on one implicit def if it has a resolvable type.
   1114     if (InstInfo.HasOneImplicitDefWithKnownVT(CDP.getTargetInfo()) !=MVT::Other)
   1115       ++NumDefsToAdd;
   1116     return NumDefsToAdd;
   1117   }
   1118 
   1119   if (Operator->isSubClassOf("SDNodeXForm"))
   1120     return 1;  // FIXME: Generalize SDNodeXForm
   1121 
   1122   Operator->dump();
   1123   errs() << "Unhandled node in GetNumNodeResults\n";
   1124   exit(1);
   1125 }
   1126 
   1127 void TreePatternNode::print(raw_ostream &OS) const {
   1128   if (isLeaf())
   1129     OS << *getLeafValue();
   1130   else
   1131     OS << '(' << getOperator()->getName();
   1132 
   1133   for (unsigned i = 0, e = Types.size(); i != e; ++i)
   1134     OS << ':' << getExtType(i).getName();
   1135 
   1136   if (!isLeaf()) {
   1137     if (getNumChildren() != 0) {
   1138       OS << " ";
   1139       getChild(0)->print(OS);
   1140       for (unsigned i = 1, e = getNumChildren(); i != e; ++i) {
   1141         OS << ", ";
   1142         getChild(i)->print(OS);
   1143       }
   1144     }
   1145     OS << ")";
   1146   }
   1147 
   1148   for (unsigned i = 0, e = PredicateFns.size(); i != e; ++i)
   1149     OS << "<<P:" << PredicateFns[i].getFnName() << ">>";
   1150   if (TransformFn)
   1151     OS << "<<X:" << TransformFn->getName() << ">>";
   1152   if (!getName().empty())
   1153     OS << ":$" << getName();
   1154 
   1155 }
   1156 void TreePatternNode::dump() const {
   1157   print(errs());
   1158 }
   1159 
   1160 /// isIsomorphicTo - Return true if this node is recursively
   1161 /// isomorphic to the specified node.  For this comparison, the node's
   1162 /// entire state is considered. The assigned name is ignored, since
   1163 /// nodes with differing names are considered isomorphic. However, if
   1164 /// the assigned name is present in the dependent variable set, then
   1165 /// the assigned name is considered significant and the node is
   1166 /// isomorphic if the names match.
   1167 bool TreePatternNode::isIsomorphicTo(const TreePatternNode *N,
   1168                                      const MultipleUseVarSet &DepVars) const {
   1169   if (N == this) return true;
   1170   if (N->isLeaf() != isLeaf() || getExtTypes() != N->getExtTypes() ||
   1171       getPredicateFns() != N->getPredicateFns() ||
   1172       getTransformFn() != N->getTransformFn())
   1173     return false;
   1174 
   1175   if (isLeaf()) {
   1176     if (DefInit *DI = dyn_cast<DefInit>(getLeafValue())) {
   1177       if (DefInit *NDI = dyn_cast<DefInit>(N->getLeafValue())) {
   1178         return ((DI->getDef() == NDI->getDef())
   1179                 && (DepVars.find(getName()) == DepVars.end()
   1180                     || getName() == N->getName()));
   1181       }
   1182     }
   1183     return getLeafValue() == N->getLeafValue();
   1184   }
   1185 
   1186   if (N->getOperator() != getOperator() ||
   1187       N->getNumChildren() != getNumChildren()) return false;
   1188   for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
   1189     if (!getChild(i)->isIsomorphicTo(N->getChild(i), DepVars))
   1190       return false;
   1191   return true;
   1192 }
   1193 
   1194 /// clone - Make a copy of this tree and all of its children.
   1195 ///
   1196 TreePatternNode *TreePatternNode::clone() const {
   1197   TreePatternNode *New;
   1198   if (isLeaf()) {
   1199     New = new TreePatternNode(getLeafValue(), getNumTypes());
   1200   } else {
   1201     std::vector<TreePatternNode*> CChildren;
   1202     CChildren.reserve(Children.size());
   1203     for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
   1204       CChildren.push_back(getChild(i)->clone());
   1205     New = new TreePatternNode(getOperator(), CChildren, getNumTypes());
   1206   }
   1207   New->setName(getName());
   1208   New->Types = Types;
   1209   New->setPredicateFns(getPredicateFns());
   1210   New->setTransformFn(getTransformFn());
   1211   return New;
   1212 }
   1213 
   1214 /// RemoveAllTypes - Recursively strip all the types of this tree.
   1215 void TreePatternNode::RemoveAllTypes() {
   1216   for (unsigned i = 0, e = Types.size(); i != e; ++i)
   1217     Types[i] = EEVT::TypeSet();  // Reset to unknown type.
   1218   if (isLeaf()) return;
   1219   for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
   1220     getChild(i)->RemoveAllTypes();
   1221 }
   1222 
   1223 
   1224 /// SubstituteFormalArguments - Replace the formal arguments in this tree
   1225 /// with actual values specified by ArgMap.
   1226 void TreePatternNode::
   1227 SubstituteFormalArguments(std::map<std::string, TreePatternNode*> &ArgMap) {
   1228   if (isLeaf()) return;
   1229 
   1230   for (unsigned i = 0, e = getNumChildren(); i != e; ++i) {
   1231     TreePatternNode *Child = getChild(i);
   1232     if (Child->isLeaf()) {
   1233       Init *Val = Child->getLeafValue();
   1234       if (isa<DefInit>(Val) &&
   1235           cast<DefInit>(Val)->getDef()->getName() == "node") {
   1236         // We found a use of a formal argument, replace it with its value.
   1237         TreePatternNode *NewChild = ArgMap[Child->getName()];
   1238         assert(NewChild && "Couldn't find formal argument!");
   1239         assert((Child->getPredicateFns().empty() ||
   1240                 NewChild->getPredicateFns() == Child->getPredicateFns()) &&
   1241                "Non-empty child predicate clobbered!");
   1242         setChild(i, NewChild);
   1243       }
   1244     } else {
   1245       getChild(i)->SubstituteFormalArguments(ArgMap);
   1246     }
   1247   }
   1248 }
   1249 
   1250 
   1251 /// InlinePatternFragments - If this pattern refers to any pattern
   1252 /// fragments, inline them into place, giving us a pattern without any
   1253 /// PatFrag references.
   1254 TreePatternNode *TreePatternNode::InlinePatternFragments(TreePattern &TP) {
   1255   if (TP.hasError())
   1256     return 0;
   1257 
   1258   if (isLeaf())
   1259      return this;  // nothing to do.
   1260   Record *Op = getOperator();
   1261 
   1262   if (!Op->isSubClassOf("PatFrag")) {
   1263     // Just recursively inline children nodes.
   1264     for (unsigned i = 0, e = getNumChildren(); i != e; ++i) {
   1265       TreePatternNode *Child = getChild(i);
   1266       TreePatternNode *NewChild = Child->InlinePatternFragments(TP);
   1267 
   1268       assert((Child->getPredicateFns().empty() ||
   1269               NewChild->getPredicateFns() == Child->getPredicateFns()) &&
   1270              "Non-empty child predicate clobbered!");
   1271 
   1272       setChild(i, NewChild);
   1273     }
   1274     return this;
   1275   }
   1276 
   1277   // Otherwise, we found a reference to a fragment.  First, look up its
   1278   // TreePattern record.
   1279   TreePattern *Frag = TP.getDAGPatterns().getPatternFragment(Op);
   1280 
   1281   // Verify that we are passing the right number of operands.
   1282   if (Frag->getNumArgs() != Children.size()) {
   1283     TP.error("'" + Op->getName() + "' fragment requires " +
   1284              utostr(Frag->getNumArgs()) + " operands!");
   1285     return 0;
   1286   }
   1287 
   1288   TreePatternNode *FragTree = Frag->getOnlyTree()->clone();
   1289 
   1290   TreePredicateFn PredFn(Frag);
   1291   if (!PredFn.isAlwaysTrue())
   1292     FragTree->addPredicateFn(PredFn);
   1293 
   1294   // Resolve formal arguments to their actual value.
   1295   if (Frag->getNumArgs()) {
   1296     // Compute the map of formal to actual arguments.
   1297     std::map<std::string, TreePatternNode*> ArgMap;
   1298     for (unsigned i = 0, e = Frag->getNumArgs(); i != e; ++i)
   1299       ArgMap[Frag->getArgName(i)] = getChild(i)->InlinePatternFragments(TP);
   1300 
   1301     FragTree->SubstituteFormalArguments(ArgMap);
   1302   }
   1303 
   1304   FragTree->setName(getName());
   1305   for (unsigned i = 0, e = Types.size(); i != e; ++i)
   1306     FragTree->UpdateNodeType(i, getExtType(i), TP);
   1307 
   1308   // Transfer in the old predicates.
   1309   for (unsigned i = 0, e = getPredicateFns().size(); i != e; ++i)
   1310     FragTree->addPredicateFn(getPredicateFns()[i]);
   1311 
   1312   // Get a new copy of this fragment to stitch into here.
   1313   //delete this;    // FIXME: implement refcounting!
   1314 
   1315   // The fragment we inlined could have recursive inlining that is needed.  See
   1316   // if there are any pattern fragments in it and inline them as needed.
   1317   return FragTree->InlinePatternFragments(TP);
   1318 }
   1319 
   1320 /// getImplicitType - Check to see if the specified record has an implicit
   1321 /// type which should be applied to it.  This will infer the type of register
   1322 /// references from the register file information, for example.
   1323 ///
   1324 /// When Unnamed is set, return the type of a DAG operand with no name, such as
   1325 /// the F8RC register class argument in:
   1326 ///
   1327 ///   (COPY_TO_REGCLASS GPR:$src, F8RC)
   1328 ///
   1329 /// When Unnamed is false, return the type of a named DAG operand such as the
   1330 /// GPR:$src operand above.
   1331 ///
   1332 static EEVT::TypeSet getImplicitType(Record *R, unsigned ResNo,
   1333                                      bool NotRegisters,
   1334                                      bool Unnamed,
   1335                                      TreePattern &TP) {
   1336   // Check to see if this is a register operand.
   1337   if (R->isSubClassOf("RegisterOperand")) {
   1338     assert(ResNo == 0 && "Regoperand ref only has one result!");
   1339     if (NotRegisters)
   1340       return EEVT::TypeSet(); // Unknown.
   1341     Record *RegClass = R->getValueAsDef("RegClass");
   1342     const CodeGenTarget &T = TP.getDAGPatterns().getTargetInfo();
   1343     return EEVT::TypeSet(T.getRegisterClass(RegClass).getValueTypes());
   1344   }
   1345 
   1346   // Check to see if this is a register or a register class.
   1347   if (R->isSubClassOf("RegisterClass")) {
   1348     assert(ResNo == 0 && "Regclass ref only has one result!");
   1349     // An unnamed register class represents itself as an i32 immediate, for
   1350     // example on a COPY_TO_REGCLASS instruction.
   1351     if (Unnamed)
   1352       return EEVT::TypeSet(MVT::i32, TP);
   1353 
   1354     // In a named operand, the register class provides the possible set of
   1355     // types.
   1356     if (NotRegisters)
   1357       return EEVT::TypeSet(); // Unknown.
   1358     const CodeGenTarget &T = TP.getDAGPatterns().getTargetInfo();
   1359     return EEVT::TypeSet(T.getRegisterClass(R).getValueTypes());
   1360   }
   1361 
   1362   if (R->isSubClassOf("PatFrag")) {
   1363     assert(ResNo == 0 && "FIXME: PatFrag with multiple results?");
   1364     // Pattern fragment types will be resolved when they are inlined.
   1365     return EEVT::TypeSet(); // Unknown.
   1366   }
   1367 
   1368   if (R->isSubClassOf("Register")) {
   1369     assert(ResNo == 0 && "Registers only produce one result!");
   1370     if (NotRegisters)
   1371       return EEVT::TypeSet(); // Unknown.
   1372     const CodeGenTarget &T = TP.getDAGPatterns().getTargetInfo();
   1373     return EEVT::TypeSet(T.getRegisterVTs(R));
   1374   }
   1375 
   1376   if (R->isSubClassOf("SubRegIndex")) {
   1377     assert(ResNo == 0 && "SubRegisterIndices only produce one result!");
   1378     return EEVT::TypeSet();
   1379   }
   1380 
   1381   if (R->isSubClassOf("ValueType")) {
   1382     assert(ResNo == 0 && "This node only has one result!");
   1383     // An unnamed VTSDNode represents itself as an MVT::Other immediate.
   1384     //
   1385     //   (sext_inreg GPR:$src, i16)
   1386     //                         ~~~
   1387     if (Unnamed)
   1388       return EEVT::TypeSet(MVT::Other, TP);
   1389     // With a name, the ValueType simply provides the type of the named
   1390     // variable.
   1391     //
   1392     //   (sext_inreg i32:$src, i16)
   1393     //               ~~~~~~~~
   1394     if (NotRegisters)
   1395       return EEVT::TypeSet(); // Unknown.
   1396     return EEVT::TypeSet(getValueType(R), TP);
   1397   }
   1398 
   1399   if (R->isSubClassOf("CondCode")) {
   1400     assert(ResNo == 0 && "This node only has one result!");
   1401     // Using a CondCodeSDNode.
   1402     return EEVT::TypeSet(MVT::Other, TP);
   1403   }
   1404 
   1405   if (R->isSubClassOf("ComplexPattern")) {
   1406     assert(ResNo == 0 && "FIXME: ComplexPattern with multiple results?");
   1407     if (NotRegisters)
   1408       return EEVT::TypeSet(); // Unknown.
   1409    return EEVT::TypeSet(TP.getDAGPatterns().getComplexPattern(R).getValueType(),
   1410                          TP);
   1411   }
   1412   if (R->isSubClassOf("PointerLikeRegClass")) {
   1413     assert(ResNo == 0 && "Regclass can only have one result!");
   1414     return EEVT::TypeSet(MVT::iPTR, TP);
   1415   }
   1416 
   1417   if (R->getName() == "node" || R->getName() == "srcvalue" ||
   1418       R->getName() == "zero_reg") {
   1419     // Placeholder.
   1420     return EEVT::TypeSet(); // Unknown.
   1421   }
   1422 
   1423   TP.error("Unknown node flavor used in pattern: " + R->getName());
   1424   return EEVT::TypeSet(MVT::Other, TP);
   1425 }
   1426 
   1427 
   1428 /// getIntrinsicInfo - If this node corresponds to an intrinsic, return the
   1429 /// CodeGenIntrinsic information for it, otherwise return a null pointer.
   1430 const CodeGenIntrinsic *TreePatternNode::
   1431 getIntrinsicInfo(const CodeGenDAGPatterns &CDP) const {
   1432   if (getOperator() != CDP.get_intrinsic_void_sdnode() &&
   1433       getOperator() != CDP.get_intrinsic_w_chain_sdnode() &&
   1434       getOperator() != CDP.get_intrinsic_wo_chain_sdnode())
   1435     return 0;
   1436 
   1437   unsigned IID = cast<IntInit>(getChild(0)->getLeafValue())->getValue();
   1438   return &CDP.getIntrinsicInfo(IID);
   1439 }
   1440 
   1441 /// getComplexPatternInfo - If this node corresponds to a ComplexPattern,
   1442 /// return the ComplexPattern information, otherwise return null.
   1443 const ComplexPattern *
   1444 TreePatternNode::getComplexPatternInfo(const CodeGenDAGPatterns &CGP) const {
   1445   if (!isLeaf()) return 0;
   1446 
   1447   DefInit *DI = dyn_cast<DefInit>(getLeafValue());
   1448   if (DI && DI->getDef()->isSubClassOf("ComplexPattern"))
   1449     return &CGP.getComplexPattern(DI->getDef());
   1450   return 0;
   1451 }
   1452 
   1453 /// NodeHasProperty - Return true if this node has the specified property.
   1454 bool TreePatternNode::NodeHasProperty(SDNP Property,
   1455                                       const CodeGenDAGPatterns &CGP) const {
   1456   if (isLeaf()) {
   1457     if (const ComplexPattern *CP = getComplexPatternInfo(CGP))
   1458       return CP->hasProperty(Property);
   1459     return false;
   1460   }
   1461 
   1462   Record *Operator = getOperator();
   1463   if (!Operator->isSubClassOf("SDNode")) return false;
   1464 
   1465   return CGP.getSDNodeInfo(Operator).hasProperty(Property);
   1466 }
   1467 
   1468 
   1469 
   1470 
   1471 /// TreeHasProperty - Return true if any node in this tree has the specified
   1472 /// property.
   1473 bool TreePatternNode::TreeHasProperty(SDNP Property,
   1474                                       const CodeGenDAGPatterns &CGP) const {
   1475   if (NodeHasProperty(Property, CGP))
   1476     return true;
   1477   for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
   1478     if (getChild(i)->TreeHasProperty(Property, CGP))
   1479       return true;
   1480   return false;
   1481 }
   1482 
   1483 /// isCommutativeIntrinsic - Return true if the node corresponds to a
   1484 /// commutative intrinsic.
   1485 bool
   1486 TreePatternNode::isCommutativeIntrinsic(const CodeGenDAGPatterns &CDP) const {
   1487   if (const CodeGenIntrinsic *Int = getIntrinsicInfo(CDP))
   1488     return Int->isCommutative;
   1489   return false;
   1490 }
   1491 
   1492 
   1493 /// ApplyTypeConstraints - Apply all of the type constraints relevant to
   1494 /// this node and its children in the tree.  This returns true if it makes a
   1495 /// change, false otherwise.  If a type contradiction is found, flag an error.
   1496 bool TreePatternNode::ApplyTypeConstraints(TreePattern &TP, bool NotRegisters) {
   1497   if (TP.hasError())
   1498     return false;
   1499 
   1500   CodeGenDAGPatterns &CDP = TP.getDAGPatterns();
   1501   if (isLeaf()) {
   1502     if (DefInit *DI = dyn_cast<DefInit>(getLeafValue())) {
   1503       // If it's a regclass or something else known, include the type.
   1504       bool MadeChange = false;
   1505       for (unsigned i = 0, e = Types.size(); i != e; ++i)
   1506         MadeChange |= UpdateNodeType(i, getImplicitType(DI->getDef(), i,
   1507                                                         NotRegisters,
   1508                                                         !hasName(), TP), TP);
   1509       return MadeChange;
   1510     }
   1511 
   1512     if (IntInit *II = dyn_cast<IntInit>(getLeafValue())) {
   1513       assert(Types.size() == 1 && "Invalid IntInit");
   1514 
   1515       // Int inits are always integers. :)
   1516       bool MadeChange = Types[0].EnforceInteger(TP);
   1517 
   1518       if (!Types[0].isConcrete())
   1519         return MadeChange;
   1520 
   1521       MVT::SimpleValueType VT = getType(0);
   1522       if (VT == MVT::iPTR || VT == MVT::iPTRAny)
   1523         return MadeChange;
   1524 
   1525       unsigned Size = EVT(VT).getSizeInBits();
   1526       // Make sure that the value is representable for this type.
   1527       if (Size >= 32) return MadeChange;
   1528 
   1529       // Check that the value doesn't use more bits than we have. It must either
   1530       // be a sign- or zero-extended equivalent of the original.
   1531       int64_t SignBitAndAbove = II->getValue() >> (Size - 1);
   1532       if (SignBitAndAbove == -1 || SignBitAndAbove == 0 || SignBitAndAbove == 1)
   1533         return MadeChange;
   1534 
   1535       TP.error("Integer value '" + itostr(II->getValue()) +
   1536                "' is out of range for type '" + getEnumName(getType(0)) + "'!");
   1537       return false;
   1538     }
   1539     return false;
   1540   }
   1541 
   1542   // special handling for set, which isn't really an SDNode.
   1543   if (getOperator()->getName() == "set") {
   1544     assert(getNumTypes() == 0 && "Set doesn't produce a value");
   1545     assert(getNumChildren() >= 2 && "Missing RHS of a set?");
   1546     unsigned NC = getNumChildren();
   1547 
   1548     TreePatternNode *SetVal = getChild(NC-1);
   1549     bool MadeChange = SetVal->ApplyTypeConstraints(TP, NotRegisters);
   1550 
   1551     for (unsigned i = 0; i < NC-1; ++i) {
   1552       TreePatternNode *Child = getChild(i);
   1553       MadeChange |= Child->ApplyTypeConstraints(TP, NotRegisters);
   1554 
   1555       // Types of operands must match.
   1556       MadeChange |= Child->UpdateNodeType(0, SetVal->getExtType(i), TP);
   1557       MadeChange |= SetVal->UpdateNodeType(i, Child->getExtType(0), TP);
   1558     }
   1559     return MadeChange;
   1560   }
   1561 
   1562   if (getOperator()->getName() == "implicit") {
   1563     assert(getNumTypes() == 0 && "Node doesn't produce a value");
   1564 
   1565     bool MadeChange = false;
   1566     for (unsigned i = 0; i < getNumChildren(); ++i)
   1567       MadeChange = getChild(i)->ApplyTypeConstraints(TP, NotRegisters);
   1568     return MadeChange;
   1569   }
   1570 
   1571   if (const CodeGenIntrinsic *Int = getIntrinsicInfo(CDP)) {
   1572     bool MadeChange = false;
   1573 
   1574     // Apply the result type to the node.
   1575     unsigned NumRetVTs = Int->IS.RetVTs.size();
   1576     unsigned NumParamVTs = Int->IS.ParamVTs.size();
   1577 
   1578     for (unsigned i = 0, e = NumRetVTs; i != e; ++i)
   1579       MadeChange |= UpdateNodeType(i, Int->IS.RetVTs[i], TP);
   1580 
   1581     if (getNumChildren() != NumParamVTs + 1) {
   1582       TP.error("Intrinsic '" + Int->Name + "' expects " +
   1583                utostr(NumParamVTs) + " operands, not " +
   1584                utostr(getNumChildren() - 1) + " operands!");
   1585       return false;
   1586     }
   1587 
   1588     // Apply type info to the intrinsic ID.
   1589     MadeChange |= getChild(0)->UpdateNodeType(0, MVT::iPTR, TP);
   1590 
   1591     for (unsigned i = 0, e = getNumChildren()-1; i != e; ++i) {
   1592       MadeChange |= getChild(i+1)->ApplyTypeConstraints(TP, NotRegisters);
   1593 
   1594       MVT::SimpleValueType OpVT = Int->IS.ParamVTs[i];
   1595       assert(getChild(i+1)->getNumTypes() == 1 && "Unhandled case");
   1596       MadeChange |= getChild(i+1)->UpdateNodeType(0, OpVT, TP);
   1597     }
   1598     return MadeChange;
   1599   }
   1600 
   1601   if (getOperator()->isSubClassOf("SDNode")) {
   1602     const SDNodeInfo &NI = CDP.getSDNodeInfo(getOperator());
   1603 
   1604     // Check that the number of operands is sane.  Negative operands -> varargs.
   1605     if (NI.getNumOperands() >= 0 &&
   1606         getNumChildren() != (unsigned)NI.getNumOperands()) {
   1607       TP.error(getOperator()->getName() + " node requires exactly " +
   1608                itostr(NI.getNumOperands()) + " operands!");
   1609       return false;
   1610     }
   1611 
   1612     bool MadeChange = NI.ApplyTypeConstraints(this, TP);
   1613     for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
   1614       MadeChange |= getChild(i)->ApplyTypeConstraints(TP, NotRegisters);
   1615     return MadeChange;
   1616   }
   1617 
   1618   if (getOperator()->isSubClassOf("Instruction")) {
   1619     const DAGInstruction &Inst = CDP.getInstruction(getOperator());
   1620     CodeGenInstruction &InstInfo =
   1621       CDP.getTargetInfo().getInstruction(getOperator());
   1622 
   1623     bool MadeChange = false;
   1624 
   1625     // Apply the result types to the node, these come from the things in the
   1626     // (outs) list of the instruction.
   1627     // FIXME: Cap at one result so far.
   1628     unsigned NumResultsToAdd = InstInfo.Operands.NumDefs ? 1 : 0;
   1629     for (unsigned ResNo = 0; ResNo != NumResultsToAdd; ++ResNo)
   1630       MadeChange |= UpdateNodeTypeFromInst(ResNo, Inst.getResult(ResNo), TP);
   1631 
   1632     // If the instruction has implicit defs, we apply the first one as a result.
   1633     // FIXME: This sucks, it should apply all implicit defs.
   1634     if (!InstInfo.ImplicitDefs.empty()) {
   1635       unsigned ResNo = NumResultsToAdd;
   1636 
   1637       // FIXME: Generalize to multiple possible types and multiple possible
   1638       // ImplicitDefs.
   1639       MVT::SimpleValueType VT =
   1640         InstInfo.HasOneImplicitDefWithKnownVT(CDP.getTargetInfo());
   1641 
   1642       if (VT != MVT::Other)
   1643         MadeChange |= UpdateNodeType(ResNo, VT, TP);
   1644     }
   1645 
   1646     // If this is an INSERT_SUBREG, constrain the source and destination VTs to
   1647     // be the same.
   1648     if (getOperator()->getName() == "INSERT_SUBREG") {
   1649       assert(getChild(0)->getNumTypes() == 1 && "FIXME: Unhandled");
   1650       MadeChange |= UpdateNodeType(0, getChild(0)->getExtType(0), TP);
   1651       MadeChange |= getChild(0)->UpdateNodeType(0, getExtType(0), TP);
   1652     }
   1653 
   1654     unsigned ChildNo = 0;
   1655     for (unsigned i = 0, e = Inst.getNumOperands(); i != e; ++i) {
   1656       Record *OperandNode = Inst.getOperand(i);
   1657 
   1658       // If the instruction expects a predicate or optional def operand, we
   1659       // codegen this by setting the operand to it's default value if it has a
   1660       // non-empty DefaultOps field.
   1661       if (OperandNode->isSubClassOf("OperandWithDefaultOps") &&
   1662           !CDP.getDefaultOperand(OperandNode).DefaultOps.empty())
   1663         continue;
   1664 
   1665       // Verify that we didn't run out of provided operands.
   1666       if (ChildNo >= getNumChildren()) {
   1667         TP.error("Instruction '" + getOperator()->getName() +
   1668                  "' expects more operands than were provided.");
   1669         return false;
   1670       }
   1671 
   1672       TreePatternNode *Child = getChild(ChildNo++);
   1673       unsigned ChildResNo = 0;  // Instructions always use res #0 of their op.
   1674 
   1675       // If the operand has sub-operands, they may be provided by distinct
   1676       // child patterns, so attempt to match each sub-operand separately.
   1677       if (OperandNode->isSubClassOf("Operand")) {
   1678         DagInit *MIOpInfo = OperandNode->getValueAsDag("MIOperandInfo");
   1679         if (unsigned NumArgs = MIOpInfo->getNumArgs()) {
   1680           // But don't do that if the whole operand is being provided by
   1681           // a single ComplexPattern.
   1682           const ComplexPattern *AM = Child->getComplexPatternInfo(CDP);
   1683           if (!AM || AM->getNumOperands() < NumArgs) {
   1684             // Match first sub-operand against the child we already have.
   1685             Record *SubRec = cast<DefInit>(MIOpInfo->getArg(0))->getDef();
   1686             MadeChange |=
   1687               Child->UpdateNodeTypeFromInst(ChildResNo, SubRec, TP);
   1688 
   1689             // And the remaining sub-operands against subsequent children.
   1690             for (unsigned Arg = 1; Arg < NumArgs; ++Arg) {
   1691               if (ChildNo >= getNumChildren()) {
   1692                 TP.error("Instruction '" + getOperator()->getName() +
   1693                          "' expects more operands than were provided.");
   1694                 return false;
   1695               }
   1696               Child = getChild(ChildNo++);
   1697 
   1698               SubRec = cast<DefInit>(MIOpInfo->getArg(Arg))->getDef();
   1699               MadeChange |=
   1700                 Child->UpdateNodeTypeFromInst(ChildResNo, SubRec, TP);
   1701             }
   1702             continue;
   1703           }
   1704         }
   1705       }
   1706 
   1707       // If we didn't match by pieces above, attempt to match the whole
   1708       // operand now.
   1709       MadeChange |= Child->UpdateNodeTypeFromInst(ChildResNo, OperandNode, TP);
   1710     }
   1711 
   1712     if (ChildNo != getNumChildren()) {
   1713       TP.error("Instruction '" + getOperator()->getName() +
   1714                "' was provided too many operands!");
   1715       return false;
   1716     }
   1717 
   1718     for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
   1719       MadeChange |= getChild(i)->ApplyTypeConstraints(TP, NotRegisters);
   1720     return MadeChange;
   1721   }
   1722 
   1723   assert(getOperator()->isSubClassOf("SDNodeXForm") && "Unknown node type!");
   1724 
   1725   // Node transforms always take one operand.
   1726   if (getNumChildren() != 1) {
   1727     TP.error("Node transform '" + getOperator()->getName() +
   1728              "' requires one operand!");
   1729     return false;
   1730   }
   1731 
   1732   bool MadeChange = getChild(0)->ApplyTypeConstraints(TP, NotRegisters);
   1733 
   1734 
   1735   // If either the output or input of the xform does not have exact
   1736   // type info. We assume they must be the same. Otherwise, it is perfectly
   1737   // legal to transform from one type to a completely different type.
   1738 #if 0
   1739   if (!hasTypeSet() || !getChild(0)->hasTypeSet()) {
   1740     bool MadeChange = UpdateNodeType(getChild(0)->getExtType(), TP);
   1741     MadeChange |= getChild(0)->UpdateNodeType(getExtType(), TP);
   1742     return MadeChange;
   1743   }
   1744 #endif
   1745   return MadeChange;
   1746 }
   1747 
   1748 /// OnlyOnRHSOfCommutative - Return true if this value is only allowed on the
   1749 /// RHS of a commutative operation, not the on LHS.
   1750 static bool OnlyOnRHSOfCommutative(TreePatternNode *N) {
   1751   if (!N->isLeaf() && N->getOperator()->getName() == "imm")
   1752     return true;
   1753   if (N->isLeaf() && isa<IntInit>(N->getLeafValue()))
   1754     return true;
   1755   return false;
   1756 }
   1757 
   1758 
   1759 /// canPatternMatch - If it is impossible for this pattern to match on this
   1760 /// target, fill in Reason and return false.  Otherwise, return true.  This is
   1761 /// used as a sanity check for .td files (to prevent people from writing stuff
   1762 /// that can never possibly work), and to prevent the pattern permuter from
   1763 /// generating stuff that is useless.
   1764 bool TreePatternNode::canPatternMatch(std::string &Reason,
   1765                                       const CodeGenDAGPatterns &CDP) {
   1766   if (isLeaf()) return true;
   1767 
   1768   for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
   1769     if (!getChild(i)->canPatternMatch(Reason, CDP))
   1770       return false;
   1771 
   1772   // If this is an intrinsic, handle cases that would make it not match.  For
   1773   // example, if an operand is required to be an immediate.
   1774   if (getOperator()->isSubClassOf("Intrinsic")) {
   1775     // TODO:
   1776     return true;
   1777   }
   1778 
   1779   // If this node is a commutative operator, check that the LHS isn't an
   1780   // immediate.
   1781   const SDNodeInfo &NodeInfo = CDP.getSDNodeInfo(getOperator());
   1782   bool isCommIntrinsic = isCommutativeIntrinsic(CDP);
   1783   if (NodeInfo.hasProperty(SDNPCommutative) || isCommIntrinsic) {
   1784     // Scan all of the operands of the node and make sure that only the last one
   1785     // is a constant node, unless the RHS also is.
   1786     if (!OnlyOnRHSOfCommutative(getChild(getNumChildren()-1))) {
   1787       bool Skip = isCommIntrinsic ? 1 : 0; // First operand is intrinsic id.
   1788       for (unsigned i = Skip, e = getNumChildren()-1; i != e; ++i)
   1789         if (OnlyOnRHSOfCommutative(getChild(i))) {
   1790           Reason="Immediate value must be on the RHS of commutative operators!";
   1791           return false;
   1792         }
   1793     }
   1794   }
   1795 
   1796   return true;
   1797 }
   1798 
   1799 //===----------------------------------------------------------------------===//
   1800 // TreePattern implementation
   1801 //
   1802 
   1803 TreePattern::TreePattern(Record *TheRec, ListInit *RawPat, bool isInput,
   1804                          CodeGenDAGPatterns &cdp) : TheRecord(TheRec), CDP(cdp),
   1805                          isInputPattern(isInput), HasError(false) {
   1806   for (unsigned i = 0, e = RawPat->getSize(); i != e; ++i)
   1807     Trees.push_back(ParseTreePattern(RawPat->getElement(i), ""));
   1808 }
   1809 
   1810 TreePattern::TreePattern(Record *TheRec, DagInit *Pat, bool isInput,
   1811                          CodeGenDAGPatterns &cdp) : TheRecord(TheRec), CDP(cdp),
   1812                          isInputPattern(isInput), HasError(false) {
   1813   Trees.push_back(ParseTreePattern(Pat, ""));
   1814 }
   1815 
   1816 TreePattern::TreePattern(Record *TheRec, TreePatternNode *Pat, bool isInput,
   1817                          CodeGenDAGPatterns &cdp) : TheRecord(TheRec), CDP(cdp),
   1818                          isInputPattern(isInput), HasError(false) {
   1819   Trees.push_back(Pat);
   1820 }
   1821 
   1822 void TreePattern::error(const std::string &Msg) {
   1823   if (HasError)
   1824     return;
   1825   dump();
   1826   PrintError(TheRecord->getLoc(), "In " + TheRecord->getName() + ": " + Msg);
   1827   HasError = true;
   1828 }
   1829 
   1830 void TreePattern::ComputeNamedNodes() {
   1831   for (unsigned i = 0, e = Trees.size(); i != e; ++i)
   1832     ComputeNamedNodes(Trees[i]);
   1833 }
   1834 
   1835 void TreePattern::ComputeNamedNodes(TreePatternNode *N) {
   1836   if (!N->getName().empty())
   1837     NamedNodes[N->getName()].push_back(N);
   1838 
   1839   for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i)
   1840     ComputeNamedNodes(N->getChild(i));
   1841 }
   1842 
   1843 
   1844 TreePatternNode *TreePattern::ParseTreePattern(Init *TheInit, StringRef OpName){
   1845   if (DefInit *DI = dyn_cast<DefInit>(TheInit)) {
   1846     Record *R = DI->getDef();
   1847 
   1848     // Direct reference to a leaf DagNode or PatFrag?  Turn it into a
   1849     // TreePatternNode of its own.  For example:
   1850     ///   (foo GPR, imm) -> (foo GPR, (imm))
   1851     if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrag"))
   1852       return ParseTreePattern(
   1853         DagInit::get(DI, "",
   1854                      std::vector<std::pair<Init*, std::string> >()),
   1855         OpName);
   1856 
   1857     // Input argument?
   1858     TreePatternNode *Res = new TreePatternNode(DI, 1);
   1859     if (R->getName() == "node" && !OpName.empty()) {
   1860       if (OpName.empty())
   1861         error("'node' argument requires a name to match with operand list");
   1862       Args.push_back(OpName);
   1863     }
   1864 
   1865     Res->setName(OpName);
   1866     return Res;
   1867   }
   1868 
   1869   // ?:$name or just $name.
   1870   if (TheInit == UnsetInit::get()) {
   1871     if (OpName.empty())
   1872       error("'?' argument requires a name to match with operand list");
   1873     TreePatternNode *Res = new TreePatternNode(TheInit, 1);
   1874     Args.push_back(OpName);
   1875     Res->setName(OpName);
   1876     return Res;
   1877   }
   1878 
   1879   if (IntInit *II = dyn_cast<IntInit>(TheInit)) {
   1880     if (!OpName.empty())
   1881       error("Constant int argument should not have a name!");
   1882     return new TreePatternNode(II, 1);
   1883   }
   1884 
   1885   if (BitsInit *BI = dyn_cast<BitsInit>(TheInit)) {
   1886     // Turn this into an IntInit.
   1887     Init *II = BI->convertInitializerTo(IntRecTy::get());
   1888     if (II == 0 || !isa<IntInit>(II))
   1889       error("Bits value must be constants!");
   1890     return ParseTreePattern(II, OpName);
   1891   }
   1892 
   1893   DagInit *Dag = dyn_cast<DagInit>(TheInit);
   1894   if (!Dag) {
   1895     TheInit->dump();
   1896     error("Pattern has unexpected init kind!");
   1897   }
   1898   DefInit *OpDef = dyn_cast<DefInit>(Dag->getOperator());
   1899   if (!OpDef) error("Pattern has unexpected operator type!");
   1900   Record *Operator = OpDef->getDef();
   1901 
   1902   if (Operator->isSubClassOf("ValueType")) {
   1903     // If the operator is a ValueType, then this must be "type cast" of a leaf
   1904     // node.
   1905     if (Dag->getNumArgs() != 1)
   1906       error("Type cast only takes one operand!");
   1907 
   1908     TreePatternNode *New = ParseTreePattern(Dag->getArg(0), Dag->getArgName(0));
   1909 
   1910     // Apply the type cast.
   1911     assert(New->getNumTypes() == 1 && "FIXME: Unhandled");
   1912     New->UpdateNodeType(0, getValueType(Operator), *this);
   1913 
   1914     if (!OpName.empty())
   1915       error("ValueType cast should not have a name!");
   1916     return New;
   1917   }
   1918 
   1919   // Verify that this is something that makes sense for an operator.
   1920   if (!Operator->isSubClassOf("PatFrag") &&
   1921       !Operator->isSubClassOf("SDNode") &&
   1922       !Operator->isSubClassOf("Instruction") &&
   1923       !Operator->isSubClassOf("SDNodeXForm") &&
   1924       !Operator->isSubClassOf("Intrinsic") &&
   1925       Operator->getName() != "set" &&
   1926       Operator->getName() != "implicit")
   1927     error("Unrecognized node '" + Operator->getName() + "'!");
   1928 
   1929   //  Check to see if this is something that is illegal in an input pattern.
   1930   if (isInputPattern) {
   1931     if (Operator->isSubClassOf("Instruction") ||
   1932         Operator->isSubClassOf("SDNodeXForm"))
   1933       error("Cannot use '" + Operator->getName() + "' in an input pattern!");
   1934   } else {
   1935     if (Operator->isSubClassOf("Intrinsic"))
   1936       error("Cannot use '" + Operator->getName() + "' in an output pattern!");
   1937 
   1938     if (Operator->isSubClassOf("SDNode") &&
   1939         Operator->getName() != "imm" &&
   1940         Operator->getName() != "fpimm" &&
   1941         Operator->getName() != "tglobaltlsaddr" &&
   1942         Operator->getName() != "tconstpool" &&
   1943         Operator->getName() != "tjumptable" &&
   1944         Operator->getName() != "tframeindex" &&
   1945         Operator->getName() != "texternalsym" &&
   1946         Operator->getName() != "tblockaddress" &&
   1947         Operator->getName() != "tglobaladdr" &&
   1948         Operator->getName() != "bb" &&
   1949         Operator->getName() != "vt")
   1950       error("Cannot use '" + Operator->getName() + "' in an output pattern!");
   1951   }
   1952 
   1953   std::vector<TreePatternNode*> Children;
   1954 
   1955   // Parse all the operands.
   1956   for (unsigned i = 0, e = Dag->getNumArgs(); i != e; ++i)
   1957     Children.push_back(ParseTreePattern(Dag->getArg(i), Dag->getArgName(i)));
   1958 
   1959   // If the operator is an intrinsic, then this is just syntactic sugar for for
   1960   // (intrinsic_* <number>, ..children..).  Pick the right intrinsic node, and
   1961   // convert the intrinsic name to a number.
   1962   if (Operator->isSubClassOf("Intrinsic")) {
   1963     const CodeGenIntrinsic &Int = getDAGPatterns().getIntrinsic(Operator);
   1964     unsigned IID = getDAGPatterns().getIntrinsicID(Operator)+1;
   1965 
   1966     // If this intrinsic returns void, it must have side-effects and thus a
   1967     // chain.
   1968     if (Int.IS.RetVTs.empty())
   1969       Operator = getDAGPatterns().get_intrinsic_void_sdnode();
   1970     else if (Int.ModRef != CodeGenIntrinsic::NoMem)
   1971       // Has side-effects, requires chain.
   1972       Operator = getDAGPatterns().get_intrinsic_w_chain_sdnode();
   1973     else // Otherwise, no chain.
   1974       Operator = getDAGPatterns().get_intrinsic_wo_chain_sdnode();
   1975 
   1976     TreePatternNode *IIDNode = new TreePatternNode(IntInit::get(IID), 1);
   1977     Children.insert(Children.begin(), IIDNode);
   1978   }
   1979 
   1980   unsigned NumResults = GetNumNodeResults(Operator, CDP);
   1981   TreePatternNode *Result = new TreePatternNode(Operator, Children, NumResults);
   1982   Result->setName(OpName);
   1983 
   1984   if (!Dag->getName().empty()) {
   1985     assert(Result->getName().empty());
   1986     Result->setName(Dag->getName());
   1987   }
   1988   return Result;
   1989 }
   1990 
   1991 /// SimplifyTree - See if we can simplify this tree to eliminate something that
   1992 /// will never match in favor of something obvious that will.  This is here
   1993 /// strictly as a convenience to target authors because it allows them to write
   1994 /// more type generic things and have useless type casts fold away.
   1995 ///
   1996 /// This returns true if any change is made.
   1997 static bool SimplifyTree(TreePatternNode *&N) {
   1998   if (N->isLeaf())
   1999     return false;
   2000 
   2001   // If we have a bitconvert with a resolved type and if the source and
   2002   // destination types are the same, then the bitconvert is useless, remove it.
   2003   if (N->getOperator()->getName() == "bitconvert" &&
   2004       N->getExtType(0).isConcrete() &&
   2005       N->getExtType(0) == N->getChild(0)->getExtType(0) &&
   2006       N->getName().empty()) {
   2007     N = N->getChild(0);
   2008     SimplifyTree(N);
   2009     return true;
   2010   }
   2011 
   2012   // Walk all children.
   2013   bool MadeChange = false;
   2014   for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i) {
   2015     TreePatternNode *Child = N->getChild(i);
   2016     MadeChange |= SimplifyTree(Child);
   2017     N->setChild(i, Child);
   2018   }
   2019   return MadeChange;
   2020 }
   2021 
   2022 
   2023 
   2024 /// InferAllTypes - Infer/propagate as many types throughout the expression
   2025 /// patterns as possible.  Return true if all types are inferred, false
   2026 /// otherwise.  Flags an error if a type contradiction is found.
   2027 bool TreePattern::
   2028 InferAllTypes(const StringMap<SmallVector<TreePatternNode*,1> > *InNamedTypes) {
   2029   if (NamedNodes.empty())
   2030     ComputeNamedNodes();
   2031 
   2032   bool MadeChange = true;
   2033   while (MadeChange) {
   2034     MadeChange = false;
   2035     for (unsigned i = 0, e = Trees.size(); i != e; ++i) {
   2036       MadeChange |= Trees[i]->ApplyTypeConstraints(*this, false);
   2037       MadeChange |= SimplifyTree(Trees[i]);
   2038     }
   2039 
   2040     // If there are constraints on our named nodes, apply them.
   2041     for (StringMap<SmallVector<TreePatternNode*,1> >::iterator
   2042          I = NamedNodes.begin(), E = NamedNodes.end(); I != E; ++I) {
   2043       SmallVectorImpl<TreePatternNode*> &Nodes = I->second;
   2044 
   2045       // If we have input named node types, propagate their types to the named
   2046       // values here.
   2047       if (InNamedTypes) {
   2048         // FIXME: Should be error?
   2049         assert(InNamedTypes->count(I->getKey()) &&
   2050                "Named node in output pattern but not input pattern?");
   2051 
   2052         const SmallVectorImpl<TreePatternNode*> &InNodes =
   2053           InNamedTypes->find(I->getKey())->second;
   2054 
   2055         // The input types should be fully resolved by now.
   2056         for (unsigned i = 0, e = Nodes.size(); i != e; ++i) {
   2057           // If this node is a register class, and it is the root of the pattern
   2058           // then we're mapping something onto an input register.  We allow
   2059           // changing the type of the input register in this case.  This allows
   2060           // us to match things like:
   2061           //  def : Pat<(v1i64 (bitconvert(v2i32 DPR:$src))), (v1i64 DPR:$src)>;
   2062           if (Nodes[i] == Trees[0] && Nodes[i]->isLeaf()) {
   2063             DefInit *DI = dyn_cast<DefInit>(Nodes[i]->getLeafValue());
   2064             if (DI && (DI->getDef()->isSubClassOf("RegisterClass") ||
   2065                        DI->getDef()->isSubClassOf("RegisterOperand")))
   2066               continue;
   2067           }
   2068 
   2069           assert(Nodes[i]->getNumTypes() == 1 &&
   2070                  InNodes[0]->getNumTypes() == 1 &&
   2071                  "FIXME: cannot name multiple result nodes yet");
   2072           MadeChange |= Nodes[i]->UpdateNodeType(0, InNodes[0]->getExtType(0),
   2073                                                  *this);
   2074         }
   2075       }
   2076 
   2077       // If there are multiple nodes with the same name, they must all have the
   2078       // same type.
   2079       if (I->second.size() > 1) {
   2080         for (unsigned i = 0, e = Nodes.size()-1; i != e; ++i) {
   2081           TreePatternNode *N1 = Nodes[i], *N2 = Nodes[i+1];
   2082           assert(N1->getNumTypes() == 1 && N2->getNumTypes() == 1 &&
   2083                  "FIXME: cannot name multiple result nodes yet");
   2084 
   2085           MadeChange |= N1->UpdateNodeType(0, N2->getExtType(0), *this);
   2086           MadeChange |= N2->UpdateNodeType(0, N1->getExtType(0), *this);
   2087         }
   2088       }
   2089     }
   2090   }
   2091 
   2092   bool HasUnresolvedTypes = false;
   2093   for (unsigned i = 0, e = Trees.size(); i != e; ++i)
   2094     HasUnresolvedTypes |= Trees[i]->ContainsUnresolvedType();
   2095   return !HasUnresolvedTypes;
   2096 }
   2097 
   2098 void TreePattern::print(raw_ostream &OS) const {
   2099   OS << getRecord()->getName();
   2100   if (!Args.empty()) {
   2101     OS << "(" << Args[0];
   2102     for (unsigned i = 1, e = Args.size(); i != e; ++i)
   2103       OS << ", " << Args[i];
   2104     OS << ")";
   2105   }
   2106   OS << ": ";
   2107 
   2108   if (Trees.size() > 1)
   2109     OS << "[\n";
   2110   for (unsigned i = 0, e = Trees.size(); i != e; ++i) {
   2111     OS << "\t";
   2112     Trees[i]->print(OS);
   2113     OS << "\n";
   2114   }
   2115 
   2116   if (Trees.size() > 1)
   2117     OS << "]\n";
   2118 }
   2119 
   2120 void TreePattern::dump() const { print(errs()); }
   2121 
   2122 //===----------------------------------------------------------------------===//
   2123 // CodeGenDAGPatterns implementation
   2124 //
   2125 
   2126 CodeGenDAGPatterns::CodeGenDAGPatterns(RecordKeeper &R) :
   2127   Records(R), Target(R) {
   2128 
   2129   Intrinsics = LoadIntrinsics(Records, false);
   2130   TgtIntrinsics = LoadIntrinsics(Records, true);
   2131   ParseNodeInfo();
   2132   ParseNodeTransforms();
   2133   ParseComplexPatterns();
   2134   ParsePatternFragments();
   2135   ParseDefaultOperands();
   2136   ParseInstructions();
   2137   ParsePatterns();
   2138 
   2139   // Generate variants.  For example, commutative patterns can match
   2140   // multiple ways.  Add them to PatternsToMatch as well.
   2141   GenerateVariants();
   2142 
   2143   // Infer instruction flags.  For example, we can detect loads,
   2144   // stores, and side effects in many cases by examining an
   2145   // instruction's pattern.
   2146   InferInstructionFlags();
   2147 
   2148   // Verify that instruction flags match the patterns.
   2149   VerifyInstructionFlags();
   2150 }
   2151 
   2152 CodeGenDAGPatterns::~CodeGenDAGPatterns() {
   2153   for (pf_iterator I = PatternFragments.begin(),
   2154        E = PatternFragments.end(); I != E; ++I)
   2155     delete I->second;
   2156 }
   2157 
   2158 
   2159 Record *CodeGenDAGPatterns::getSDNodeNamed(const std::string &Name) const {
   2160   Record *N = Records.getDef(Name);
   2161   if (!N || !N->isSubClassOf("SDNode")) {
   2162     errs() << "Error getting SDNode '" << Name << "'!\n";
   2163     exit(1);
   2164   }
   2165   return N;
   2166 }
   2167 
   2168 // Parse all of the SDNode definitions for the target, populating SDNodes.
   2169 void CodeGenDAGPatterns::ParseNodeInfo() {
   2170   std::vector<Record*> Nodes = Records.getAllDerivedDefinitions("SDNode");
   2171   while (!Nodes.empty()) {
   2172     SDNodes.insert(std::make_pair(Nodes.back(), Nodes.back()));
   2173     Nodes.pop_back();
   2174   }
   2175 
   2176   // Get the builtin intrinsic nodes.
   2177   intrinsic_void_sdnode     = getSDNodeNamed("intrinsic_void");
   2178   intrinsic_w_chain_sdnode  = getSDNodeNamed("intrinsic_w_chain");
   2179   intrinsic_wo_chain_sdnode = getSDNodeNamed("intrinsic_wo_chain");
   2180 }
   2181 
   2182 /// ParseNodeTransforms - Parse all SDNodeXForm instances into the SDNodeXForms
   2183 /// map, and emit them to the file as functions.
   2184 void CodeGenDAGPatterns::ParseNodeTransforms() {
   2185   std::vector<Record*> Xforms = Records.getAllDerivedDefinitions("SDNodeXForm");
   2186   while (!Xforms.empty()) {
   2187     Record *XFormNode = Xforms.back();
   2188     Record *SDNode = XFormNode->getValueAsDef("Opcode");
   2189     std::string Code = XFormNode->getValueAsString("XFormFunction");
   2190     SDNodeXForms.insert(std::make_pair(XFormNode, NodeXForm(SDNode, Code)));
   2191 
   2192     Xforms.pop_back();
   2193   }
   2194 }
   2195 
   2196 void CodeGenDAGPatterns::ParseComplexPatterns() {
   2197   std::vector<Record*> AMs = Records.getAllDerivedDefinitions("ComplexPattern");
   2198   while (!AMs.empty()) {
   2199     ComplexPatterns.insert(std::make_pair(AMs.back(), AMs.back()));
   2200     AMs.pop_back();
   2201   }
   2202 }
   2203 
   2204 
   2205 /// ParsePatternFragments - Parse all of the PatFrag definitions in the .td
   2206 /// file, building up the PatternFragments map.  After we've collected them all,
   2207 /// inline fragments together as necessary, so that there are no references left
   2208 /// inside a pattern fragment to a pattern fragment.
   2209 ///
   2210 void CodeGenDAGPatterns::ParsePatternFragments() {
   2211   std::vector<Record*> Fragments = Records.getAllDerivedDefinitions("PatFrag");
   2212 
   2213   // First step, parse all of the fragments.
   2214   for (unsigned i = 0, e = Fragments.size(); i != e; ++i) {
   2215     DagInit *Tree = Fragments[i]->getValueAsDag("Fragment");
   2216     TreePattern *P = new TreePattern(Fragments[i], Tree, true, *this);
   2217     PatternFragments[Fragments[i]] = P;
   2218 
   2219     // Validate the argument list, converting it to set, to discard duplicates.
   2220     std::vector<std::string> &Args = P->getArgList();
   2221     std::set<std::string> OperandsSet(Args.begin(), Args.end());
   2222 
   2223     if (OperandsSet.count(""))
   2224       P->error("Cannot have unnamed 'node' values in pattern fragment!");
   2225 
   2226     // Parse the operands list.
   2227     DagInit *OpsList = Fragments[i]->getValueAsDag("Operands");
   2228     DefInit *OpsOp = dyn_cast<DefInit>(OpsList->getOperator());
   2229     // Special cases: ops == outs == ins. Different names are used to
   2230     // improve readability.
   2231     if (!OpsOp ||
   2232         (OpsOp->getDef()->getName() != "ops" &&
   2233          OpsOp->getDef()->getName() != "outs" &&
   2234          OpsOp->getDef()->getName() != "ins"))
   2235       P->error("Operands list should start with '(ops ... '!");
   2236 
   2237     // Copy over the arguments.
   2238     Args.clear();
   2239     for (unsigned j = 0, e = OpsList->getNumArgs(); j != e; ++j) {
   2240       if (!isa<DefInit>(OpsList->getArg(j)) ||
   2241           cast<DefInit>(OpsList->getArg(j))->getDef()->getName() != "node")
   2242         P->error("Operands list should all be 'node' values.");
   2243       if (OpsList->getArgName(j).empty())
   2244         P->error("Operands list should have names for each operand!");
   2245       if (!OperandsSet.count(OpsList->getArgName(j)))
   2246         P->error("'" + OpsList->getArgName(j) +
   2247                  "' does not occur in pattern or was multiply specified!");
   2248       OperandsSet.erase(OpsList->getArgName(j));
   2249       Args.push_back(OpsList->getArgName(j));
   2250     }
   2251 
   2252     if (!OperandsSet.empty())
   2253       P->error("Operands list does not contain an entry for operand '" +
   2254                *OperandsSet.begin() + "'!");
   2255 
   2256     // If there is a code init for this fragment, keep track of the fact that
   2257     // this fragment uses it.
   2258     TreePredicateFn PredFn(P);
   2259     if (!PredFn.isAlwaysTrue())
   2260       P->getOnlyTree()->addPredicateFn(PredFn);
   2261 
   2262     // If there is a node transformation corresponding to this, keep track of
   2263     // it.
   2264     Record *Transform = Fragments[i]->getValueAsDef("OperandTransform");
   2265     if (!getSDNodeTransform(Transform).second.empty())    // not noop xform?
   2266       P->getOnlyTree()->setTransformFn(Transform);
   2267   }
   2268 
   2269   // Now that we've parsed all of the tree fragments, do a closure on them so
   2270   // that there are not references to PatFrags left inside of them.
   2271   for (unsigned i = 0, e = Fragments.size(); i != e; ++i) {
   2272     TreePattern *ThePat = PatternFragments[Fragments[i]];
   2273     ThePat->InlinePatternFragments();
   2274 
   2275     // Infer as many types as possible.  Don't worry about it if we don't infer
   2276     // all of them, some may depend on the inputs of the pattern.
   2277     ThePat->InferAllTypes();
   2278     ThePat->resetError();
   2279 
   2280     // If debugging, print out the pattern fragment result.
   2281     DEBUG(ThePat->dump());
   2282   }
   2283 }
   2284 
   2285 void CodeGenDAGPatterns::ParseDefaultOperands() {
   2286   std::vector<Record*> DefaultOps;
   2287   DefaultOps = Records.getAllDerivedDefinitions("OperandWithDefaultOps");
   2288 
   2289   // Find some SDNode.
   2290   assert(!SDNodes.empty() && "No SDNodes parsed?");
   2291   Init *SomeSDNode = DefInit::get(SDNodes.begin()->first);
   2292 
   2293   for (unsigned i = 0, e = DefaultOps.size(); i != e; ++i) {
   2294     DagInit *DefaultInfo = DefaultOps[i]->getValueAsDag("DefaultOps");
   2295 
   2296     // Clone the DefaultInfo dag node, changing the operator from 'ops' to
   2297     // SomeSDnode so that we can parse this.
   2298     std::vector<std::pair<Init*, std::string> > Ops;
   2299     for (unsigned op = 0, e = DefaultInfo->getNumArgs(); op != e; ++op)
   2300       Ops.push_back(std::make_pair(DefaultInfo->getArg(op),
   2301                                    DefaultInfo->getArgName(op)));
   2302     DagInit *DI = DagInit::get(SomeSDNode, "", Ops);
   2303 
   2304     // Create a TreePattern to parse this.
   2305     TreePattern P(DefaultOps[i], DI, false, *this);
   2306     assert(P.getNumTrees() == 1 && "This ctor can only produce one tree!");
   2307 
   2308     // Copy the operands over into a DAGDefaultOperand.
   2309     DAGDefaultOperand DefaultOpInfo;
   2310 
   2311     TreePatternNode *T = P.getTree(0);
   2312     for (unsigned op = 0, e = T->getNumChildren(); op != e; ++op) {
   2313       TreePatternNode *TPN = T->getChild(op);
   2314       while (TPN->ApplyTypeConstraints(P, false))
   2315         /* Resolve all types */;
   2316 
   2317       if (TPN->ContainsUnresolvedType()) {
   2318         PrintFatalError("Value #" + utostr(i) + " of OperandWithDefaultOps '" +
   2319           DefaultOps[i]->getName() +"' doesn't have a concrete type!");
   2320       }
   2321       DefaultOpInfo.DefaultOps.push_back(TPN);
   2322     }
   2323 
   2324     // Insert it into the DefaultOperands map so we can find it later.
   2325     DefaultOperands[DefaultOps[i]] = DefaultOpInfo;
   2326   }
   2327 }
   2328 
   2329 /// HandleUse - Given "Pat" a leaf in the pattern, check to see if it is an
   2330 /// instruction input.  Return true if this is a real use.
   2331 static bool HandleUse(TreePattern *I, TreePatternNode *Pat,
   2332                       std::map<std::string, TreePatternNode*> &InstInputs) {
   2333   // No name -> not interesting.
   2334   if (Pat->getName().empty()) {
   2335     if (Pat->isLeaf()) {
   2336       DefInit *DI = dyn_cast<DefInit>(Pat->getLeafValue());
   2337       if (DI && (DI->getDef()->isSubClassOf("RegisterClass") ||
   2338                  DI->getDef()->isSubClassOf("RegisterOperand")))
   2339         I->error("Input " + DI->getDef()->getName() + " must be named!");
   2340     }
   2341     return false;
   2342   }
   2343 
   2344   Record *Rec;
   2345   if (Pat->isLeaf()) {
   2346     DefInit *DI = dyn_cast<DefInit>(Pat->getLeafValue());
   2347     if (!DI) I->error("Input $" + Pat->getName() + " must be an identifier!");
   2348     Rec = DI->getDef();
   2349   } else {
   2350     Rec = Pat->getOperator();
   2351   }
   2352 
   2353   // SRCVALUE nodes are ignored.
   2354   if (Rec->getName() == "srcvalue")
   2355     return false;
   2356 
   2357   TreePatternNode *&Slot = InstInputs[Pat->getName()];
   2358   if (!Slot) {
   2359     Slot = Pat;
   2360     return true;
   2361   }
   2362   Record *SlotRec;
   2363   if (Slot->isLeaf()) {
   2364     SlotRec = cast<DefInit>(Slot->getLeafValue())->getDef();
   2365   } else {
   2366     assert(Slot->getNumChildren() == 0 && "can't be a use with children!");
   2367     SlotRec = Slot->getOperator();
   2368   }
   2369 
   2370   // Ensure that the inputs agree if we've already seen this input.
   2371   if (Rec != SlotRec)
   2372     I->error("All $" + Pat->getName() + " inputs must agree with each other");
   2373   if (Slot->getExtTypes() != Pat->getExtTypes())
   2374     I->error("All $" + Pat->getName() + " inputs must agree with each other");
   2375   return true;
   2376 }
   2377 
   2378 /// FindPatternInputsAndOutputs - Scan the specified TreePatternNode (which is
   2379 /// part of "I", the instruction), computing the set of inputs and outputs of
   2380 /// the pattern.  Report errors if we see anything naughty.
   2381 void CodeGenDAGPatterns::
   2382 FindPatternInputsAndOutputs(TreePattern *I, TreePatternNode *Pat,
   2383                             std::map<std::string, TreePatternNode*> &InstInputs,
   2384                             std::map<std::string, TreePatternNode*>&InstResults,
   2385                             std::vector<Record*> &InstImpResults) {
   2386   if (Pat->isLeaf()) {
   2387     bool isUse = HandleUse(I, Pat, InstInputs);
   2388     if (!isUse && Pat->getTransformFn())
   2389       I->error("Cannot specify a transform function for a non-input value!");
   2390     return;
   2391   }
   2392 
   2393   if (Pat->getOperator()->getName() == "implicit") {
   2394     for (unsigned i = 0, e = Pat->getNumChildren(); i != e; ++i) {
   2395       TreePatternNode *Dest = Pat->getChild(i);
   2396       if (!Dest->isLeaf())
   2397         I->error("implicitly defined value should be a register!");
   2398 
   2399       DefInit *Val = dyn_cast<DefInit>(Dest->getLeafValue());
   2400       if (!Val || !Val->getDef()->isSubClassOf("Register"))
   2401         I->error("implicitly defined value should be a register!");
   2402       InstImpResults.push_back(Val->getDef());
   2403     }
   2404     return;
   2405   }
   2406 
   2407   if (Pat->getOperator()->getName() != "set") {
   2408     // If this is not a set, verify that the children nodes are not void typed,
   2409     // and recurse.
   2410     for (unsigned i = 0, e = Pat->getNumChildren(); i != e; ++i) {
   2411       if (Pat->getChild(i)->getNumTypes() == 0)
   2412         I->error("Cannot have void nodes inside of patterns!");
   2413       FindPatternInputsAndOutputs(I, Pat->getChild(i), InstInputs, InstResults,
   2414                                   InstImpResults);
   2415     }
   2416 
   2417     // If this is a non-leaf node with no children, treat it basically as if
   2418     // it were a leaf.  This handles nodes like (imm).
   2419     bool isUse = HandleUse(I, Pat, InstInputs);
   2420 
   2421     if (!isUse && Pat->getTransformFn())
   2422       I->error("Cannot specify a transform function for a non-input value!");
   2423     return;
   2424   }
   2425 
   2426   // Otherwise, this is a set, validate and collect instruction results.
   2427   if (Pat->getNumChildren() == 0)
   2428     I->error("set requires operands!");
   2429 
   2430   if (Pat->getTransformFn())
   2431     I->error("Cannot specify a transform function on a set node!");
   2432 
   2433   // Check the set destinations.
   2434   unsigned NumDests = Pat->getNumChildren()-1;
   2435   for (unsigned i = 0; i != NumDests; ++i) {
   2436     TreePatternNode *Dest = Pat->getChild(i);
   2437     if (!Dest->isLeaf())
   2438       I->error("set destination should be a register!");
   2439 
   2440     DefInit *Val = dyn_cast<DefInit>(Dest->getLeafValue());
   2441     if (!Val)
   2442       I->error("set destination should be a register!");
   2443 
   2444     if (Val->getDef()->isSubClassOf("RegisterClass") ||
   2445         Val->getDef()->isSubClassOf("ValueType") ||
   2446         Val->getDef()->isSubClassOf("RegisterOperand") ||
   2447         Val->getDef()->isSubClassOf("PointerLikeRegClass")) {
   2448       if (Dest->getName().empty())
   2449         I->error("set destination must have a name!");
   2450       if (InstResults.count(Dest->getName()))
   2451         I->error("cannot set '" + Dest->getName() +"' multiple times");
   2452       InstResults[Dest->getName()] = Dest;
   2453     } else if (Val->getDef()->isSubClassOf("Register")) {
   2454       InstImpResults.push_back(Val->getDef());
   2455     } else {
   2456       I->error("set destination should be a register!");
   2457     }
   2458   }
   2459 
   2460   // Verify and collect info from the computation.
   2461   FindPatternInputsAndOutputs(I, Pat->getChild(NumDests),
   2462                               InstInputs, InstResults, InstImpResults);
   2463 }
   2464 
   2465 //===----------------------------------------------------------------------===//
   2466 // Instruction Analysis
   2467 //===----------------------------------------------------------------------===//
   2468 
   2469 class InstAnalyzer {
   2470   const CodeGenDAGPatterns &CDP;
   2471 public:
   2472   bool hasSideEffects;
   2473   bool mayStore;
   2474   bool mayLoad;
   2475   bool isBitcast;
   2476   bool isVariadic;
   2477 
   2478   InstAnalyzer(const CodeGenDAGPatterns &cdp)
   2479     : CDP(cdp), hasSideEffects(false), mayStore(false), mayLoad(false),
   2480       isBitcast(false), isVariadic(false) {}
   2481 
   2482   void Analyze(const TreePattern *Pat) {
   2483     // Assume only the first tree is the pattern. The others are clobber nodes.
   2484     AnalyzeNode(Pat->getTree(0));
   2485   }
   2486 
   2487   void Analyze(const PatternToMatch *Pat) {
   2488     AnalyzeNode(Pat->getSrcPattern());
   2489   }
   2490 
   2491 private:
   2492   bool IsNodeBitcast(const TreePatternNode *N) const {
   2493     if (hasSideEffects || mayLoad || mayStore || isVariadic)
   2494       return false;
   2495 
   2496     if (N->getNumChildren() != 2)
   2497       return false;
   2498 
   2499     const TreePatternNode *N0 = N->getChild(0);
   2500     if (!N0->isLeaf() || !isa<DefInit>(N0->getLeafValue()))
   2501       return false;
   2502 
   2503     const TreePatternNode *N1 = N->getChild(1);
   2504     if (N1->isLeaf())
   2505       return false;
   2506     if (N1->getNumChildren() != 1 || !N1->getChild(0)->isLeaf())
   2507       return false;
   2508 
   2509     const SDNodeInfo &OpInfo = CDP.getSDNodeInfo(N1->getOperator());
   2510     if (OpInfo.getNumResults() != 1 || OpInfo.getNumOperands() != 1)
   2511       return false;
   2512     return OpInfo.getEnumName() == "ISD::BITCAST";
   2513   }
   2514 
   2515 public:
   2516   void AnalyzeNode(const TreePatternNode *N) {
   2517     if (N->isLeaf()) {
   2518       if (DefInit *DI = dyn_cast<DefInit>(N->getLeafValue())) {
   2519         Record *LeafRec = DI->getDef();
   2520         // Handle ComplexPattern leaves.
   2521         if (LeafRec->isSubClassOf("ComplexPattern")) {
   2522           const ComplexPattern &CP = CDP.getComplexPattern(LeafRec);
   2523           if (CP.hasProperty(SDNPMayStore)) mayStore = true;
   2524           if (CP.hasProperty(SDNPMayLoad)) mayLoad = true;
   2525           if (CP.hasProperty(SDNPSideEffect)) hasSideEffects = true;
   2526         }
   2527       }
   2528       return;
   2529     }
   2530 
   2531     // Analyze children.
   2532     for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i)
   2533       AnalyzeNode(N->getChild(i));
   2534 
   2535     // Ignore set nodes, which are not SDNodes.
   2536     if (N->getOperator()->getName() == "set") {
   2537       isBitcast = IsNodeBitcast(N);
   2538       return;
   2539     }
   2540 
   2541     // Get information about the SDNode for the operator.
   2542     const SDNodeInfo &OpInfo = CDP.getSDNodeInfo(N->getOperator());
   2543 
   2544     // Notice properties of the node.
   2545     if (OpInfo.hasProperty(SDNPMayStore)) mayStore = true;
   2546     if (OpInfo.hasProperty(SDNPMayLoad)) mayLoad = true;
   2547     if (OpInfo.hasProperty(SDNPSideEffect)) hasSideEffects = true;
   2548     if (OpInfo.hasProperty(SDNPVariadic)) isVariadic = true;
   2549 
   2550     if (const CodeGenIntrinsic *IntInfo = N->getIntrinsicInfo(CDP)) {
   2551       // If this is an intrinsic, analyze it.
   2552       if (IntInfo->ModRef >= CodeGenIntrinsic::ReadArgMem)
   2553         mayLoad = true;// These may load memory.
   2554 
   2555       if (IntInfo->ModRef >= CodeGenIntrinsic::ReadWriteArgMem)
   2556         mayStore = true;// Intrinsics that can write to memory are 'mayStore'.
   2557 
   2558       if (IntInfo->ModRef >= CodeGenIntrinsic::ReadWriteMem)
   2559         // WriteMem intrinsics can have other strange effects.
   2560         hasSideEffects = true;
   2561     }
   2562   }
   2563 
   2564 };
   2565 
   2566 static bool InferFromPattern(CodeGenInstruction &InstInfo,
   2567                              const InstAnalyzer &PatInfo,
   2568                              Record *PatDef) {
   2569   bool Error = false;
   2570 
   2571   // Remember where InstInfo got its flags.
   2572   if (InstInfo.hasUndefFlags())
   2573       InstInfo.InferredFrom = PatDef;
   2574 
   2575   // Check explicitly set flags for consistency.
   2576   if (InstInfo.hasSideEffects != PatInfo.hasSideEffects &&
   2577       !InstInfo.hasSideEffects_Unset) {
   2578     // Allow explicitly setting hasSideEffects = 1 on instructions, even when
   2579     // the pattern has no side effects. That could be useful for div/rem
   2580     // instructions that may trap.
   2581     if (!InstInfo.hasSideEffects) {
   2582       Error = true;
   2583       PrintError(PatDef->getLoc(), "Pattern doesn't match hasSideEffects = " +
   2584                  Twine(InstInfo.hasSideEffects));
   2585     }
   2586   }
   2587 
   2588   if (InstInfo.mayStore != PatInfo.mayStore && !InstInfo.mayStore_Unset) {
   2589     Error = true;
   2590     PrintError(PatDef->getLoc(), "Pattern doesn't match mayStore = " +
   2591                Twine(InstInfo.mayStore));
   2592   }
   2593 
   2594   if (InstInfo.mayLoad != PatInfo.mayLoad && !InstInfo.mayLoad_Unset) {
   2595     // Allow explicitly setting mayLoad = 1, even when the pattern has no loads.
   2596     // Some targets translate imediates to loads.
   2597     if (!InstInfo.mayLoad) {
   2598       Error = true;
   2599       PrintError(PatDef->getLoc(), "Pattern doesn't match mayLoad = " +
   2600                  Twine(InstInfo.mayLoad));
   2601     }
   2602   }
   2603 
   2604   // Transfer inferred flags.
   2605   InstInfo.hasSideEffects |= PatInfo.hasSideEffects;
   2606   InstInfo.mayStore |= PatInfo.mayStore;
   2607   InstInfo.mayLoad |= PatInfo.mayLoad;
   2608 
   2609   // These flags are silently added without any verification.
   2610   InstInfo.isBitcast |= PatInfo.isBitcast;
   2611 
   2612   // Don't infer isVariadic. This flag means something different on SDNodes and
   2613   // instructions. For example, a CALL SDNode is variadic because it has the
   2614   // call arguments as operands, but a CALL instruction is not variadic - it
   2615   // has argument registers as implicit, not explicit uses.
   2616 
   2617   return Error;
   2618 }
   2619 
   2620 /// hasNullFragReference - Return true if the DAG has any reference to the
   2621 /// null_frag operator.
   2622 static bool hasNullFragReference(DagInit *DI) {
   2623   DefInit *OpDef = dyn_cast<DefInit>(DI->getOperator());
   2624   if (!OpDef) return false;
   2625   Record *Operator = OpDef->getDef();
   2626 
   2627   // If this is the null fragment, return true.
   2628   if (Operator->getName() == "null_frag") return true;
   2629   // If any of the arguments reference the null fragment, return true.
   2630   for (unsigned i = 0, e = DI->getNumArgs(); i != e; ++i) {
   2631     DagInit *Arg = dyn_cast<DagInit>(DI->getArg(i));
   2632     if (Arg && hasNullFragReference(Arg))
   2633       return true;
   2634   }
   2635 
   2636   return false;
   2637 }
   2638 
   2639 /// hasNullFragReference - Return true if any DAG in the list references
   2640 /// the null_frag operator.
   2641 static bool hasNullFragReference(ListInit *LI) {
   2642   for (unsigned i = 0, e = LI->getSize(); i != e; ++i) {
   2643     DagInit *DI = dyn_cast<DagInit>(LI->getElement(i));
   2644     assert(DI && "non-dag in an instruction Pattern list?!");
   2645     if (hasNullFragReference(DI))
   2646       return true;
   2647   }
   2648   return false;
   2649 }
   2650 
   2651 /// Get all the instructions in a tree.
   2652 static void
   2653 getInstructionsInTree(TreePatternNode *Tree, SmallVectorImpl<Record*> &Instrs) {
   2654   if (Tree->isLeaf())
   2655     return;
   2656   if (Tree->getOperator()->isSubClassOf("Instruction"))
   2657     Instrs.push_back(Tree->getOperator());
   2658   for (unsigned i = 0, e = Tree->getNumChildren(); i != e; ++i)
   2659     getInstructionsInTree(Tree->getChild(i), Instrs);
   2660 }
   2661 
   2662 /// Check the class of a pattern leaf node against the instruction operand it
   2663 /// represents.
   2664 static bool checkOperandClass(CGIOperandList::OperandInfo &OI,
   2665                               Record *Leaf) {
   2666   if (OI.Rec == Leaf)
   2667     return true;
   2668 
   2669   // Allow direct value types to be used in instruction set patterns.
   2670   // The type will be checked later.
   2671   if (Leaf->isSubClassOf("ValueType"))
   2672     return true;
   2673 
   2674   // Patterns can also be ComplexPattern instances.
   2675   if (Leaf->isSubClassOf("ComplexPattern"))
   2676     return true;
   2677 
   2678   return false;
   2679 }
   2680 
   2681 /// ParseInstructions - Parse all of the instructions, inlining and resolving
   2682 /// any fragments involved.  This populates the Instructions list with fully
   2683 /// resolved instructions.
   2684 void CodeGenDAGPatterns::ParseInstructions() {
   2685   std::vector<Record*> Instrs = Records.getAllDerivedDefinitions("Instruction");
   2686 
   2687   for (unsigned i = 0, e = Instrs.size(); i != e; ++i) {
   2688     ListInit *LI = 0;
   2689 
   2690     if (isa<ListInit>(Instrs[i]->getValueInit("Pattern")))
   2691       LI = Instrs[i]->getValueAsListInit("Pattern");
   2692 
   2693     // If there is no pattern, only collect minimal information about the
   2694     // instruction for its operand list.  We have to assume that there is one
   2695     // result, as we have no detailed info. A pattern which references the
   2696     // null_frag operator is as-if no pattern were specified. Normally this
   2697     // is from a multiclass expansion w/ a SDPatternOperator passed in as
   2698     // null_frag.
   2699     if (!LI || LI->getSize() == 0 || hasNullFragReference(LI)) {
   2700       std::vector<Record*> Results;
   2701       std::vector<Record*> Operands;
   2702 
   2703       CodeGenInstruction &InstInfo = Target.getInstruction(Instrs[i]);
   2704 
   2705       if (InstInfo.Operands.size() != 0) {
   2706         if (InstInfo.Operands.NumDefs == 0) {
   2707           // These produce no results
   2708           for (unsigned j = 0, e = InstInfo.Operands.size(); j < e; ++j)
   2709             Operands.push_back(InstInfo.Operands[j].Rec);
   2710         } else {
   2711           // Assume the first operand is the result.
   2712           Results.push_back(InstInfo.Operands[0].Rec);
   2713 
   2714           // The rest are inputs.
   2715           for (unsigned j = 1, e = InstInfo.Operands.size(); j < e; ++j)
   2716             Operands.push_back(InstInfo.Operands[j].Rec);
   2717         }
   2718       }
   2719 
   2720       // Create and insert the instruction.
   2721       std::vector<Record*> ImpResults;
   2722       Instructions.insert(std::make_pair(Instrs[i],
   2723                           DAGInstruction(0, Results, Operands, ImpResults)));
   2724       continue;  // no pattern.
   2725     }
   2726 
   2727     // Parse the instruction.
   2728     TreePattern *I = new TreePattern(Instrs[i], LI, true, *this);
   2729     // Inline pattern fragments into it.
   2730     I->InlinePatternFragments();
   2731 
   2732     // Infer as many types as possible.  If we cannot infer all of them, we can
   2733     // never do anything with this instruction pattern: report it to the user.
   2734     if (!I->InferAllTypes())
   2735       I->error("Could not infer all types in pattern!");
   2736 
   2737     // InstInputs - Keep track of all of the inputs of the instruction, along
   2738     // with the record they are declared as.
   2739     std::map<std::string, TreePatternNode*> InstInputs;
   2740 
   2741     // InstResults - Keep track of all the virtual registers that are 'set'
   2742     // in the instruction, including what reg class they are.
   2743     std::map<std::string, TreePatternNode*> InstResults;
   2744 
   2745     std::vector<Record*> InstImpResults;
   2746 
   2747     // Verify that the top-level forms in the instruction are of void type, and
   2748     // fill in the InstResults map.
   2749     for (unsigned j = 0, e = I->getNumTrees(); j != e; ++j) {
   2750       TreePatternNode *Pat = I->getTree(j);
   2751       if (Pat->getNumTypes() != 0)
   2752         I->error("Top-level forms in instruction pattern should have"
   2753                  " void types");
   2754 
   2755       // Find inputs and outputs, and verify the structure of the uses/defs.
   2756       FindPatternInputsAndOutputs(I, Pat, InstInputs, InstResults,
   2757                                   InstImpResults);
   2758     }
   2759 
   2760     // Now that we have inputs and outputs of the pattern, inspect the operands
   2761     // list for the instruction.  This determines the order that operands are
   2762     // added to the machine instruction the node corresponds to.
   2763     unsigned NumResults = InstResults.size();
   2764 
   2765     // Parse the operands list from the (ops) list, validating it.
   2766     assert(I->getArgList().empty() && "Args list should still be empty here!");
   2767     CodeGenInstruction &CGI = Target.getInstruction(Instrs[i]);
   2768 
   2769     // Check that all of the results occur first in the list.
   2770     std::vector<Record*> Results;
   2771     TreePatternNode *Res0Node = 0;
   2772     for (unsigned i = 0; i != NumResults; ++i) {
   2773       if (i == CGI.Operands.size())
   2774         I->error("'" + InstResults.begin()->first +
   2775                  "' set but does not appear in operand list!");
   2776       const std::string &OpName = CGI.Operands[i].Name;
   2777 
   2778       // Check that it exists in InstResults.
   2779       TreePatternNode *RNode = InstResults[OpName];
   2780       if (RNode == 0)
   2781         I->error("Operand $" + OpName + " does not exist in operand list!");
   2782 
   2783       if (i == 0)
   2784         Res0Node = RNode;
   2785       Record *R = cast<DefInit>(RNode->getLeafValue())->getDef();
   2786       if (R == 0)
   2787         I->error("Operand $" + OpName + " should be a set destination: all "
   2788                  "outputs must occur before inputs in operand list!");
   2789 
   2790       if (!checkOperandClass(CGI.Operands[i], R))
   2791         I->error("Operand $" + OpName + " class mismatch!");
   2792 
   2793       // Remember the return type.
   2794       Results.push_back(CGI.Operands[i].Rec);
   2795 
   2796       // Okay, this one checks out.
   2797       InstResults.erase(OpName);
   2798     }
   2799 
   2800     // Loop over the inputs next.  Make a copy of InstInputs so we can destroy
   2801     // the copy while we're checking the inputs.
   2802     std::map<std::string, TreePatternNode*> InstInputsCheck(InstInputs);
   2803 
   2804     std::vector<TreePatternNode*> ResultNodeOperands;
   2805     std::vector<Record*> Operands;
   2806     for (unsigned i = NumResults, e = CGI.Operands.size(); i != e; ++i) {
   2807       CGIOperandList::OperandInfo &Op = CGI.Operands[i];
   2808       const std::string &OpName = Op.Name;
   2809       if (OpName.empty())
   2810         I->error("Operand #" + utostr(i) + " in operands list has no name!");
   2811 
   2812       if (!InstInputsCheck.count(OpName)) {
   2813         // If this is an operand with a DefaultOps set filled in, we can ignore
   2814         // this.  When we codegen it, we will do so as always executed.
   2815         if (Op.Rec->isSubClassOf("OperandWithDefaultOps")) {
   2816           // Does it have a non-empty DefaultOps field?  If so, ignore this
   2817           // operand.
   2818           if (!getDefaultOperand(Op.Rec).DefaultOps.empty())
   2819             continue;
   2820         }
   2821         I->error("Operand $" + OpName +
   2822                  " does not appear in the instruction pattern");
   2823       }
   2824       TreePatternNode *InVal = InstInputsCheck[OpName];
   2825       InstInputsCheck.erase(OpName);   // It occurred, remove from map.
   2826 
   2827       if (InVal->isLeaf() && isa<DefInit>(InVal->getLeafValue())) {
   2828         Record *InRec = static_cast<DefInit*>(InVal->getLeafValue())->getDef();
   2829         if (!checkOperandClass(Op, InRec))
   2830           I->error("Operand $" + OpName + "'s register class disagrees"
   2831                    " between the operand and pattern");
   2832       }
   2833       Operands.push_back(Op.Rec);
   2834 
   2835       // Construct the result for the dest-pattern operand list.
   2836       TreePatternNode *OpNode = InVal->clone();
   2837 
   2838       // No predicate is useful on the result.
   2839       OpNode->clearPredicateFns();
   2840 
   2841       // Promote the xform function to be an explicit node if set.
   2842       if (Record *Xform = OpNode->getTransformFn()) {
   2843         OpNode->setTransformFn(0);
   2844         std::vector<TreePatternNode*> Children;
   2845         Children.push_back(OpNode);
   2846         OpNode = new TreePatternNode(Xform, Children, OpNode->getNumTypes());
   2847       }
   2848 
   2849       ResultNodeOperands.push_back(OpNode);
   2850     }
   2851 
   2852     if (!InstInputsCheck.empty())
   2853       I->error("Input operand $" + InstInputsCheck.begin()->first +
   2854                " occurs in pattern but not in operands list!");
   2855 
   2856     TreePatternNode *ResultPattern =
   2857       new TreePatternNode(I->getRecord(), ResultNodeOperands,
   2858                           GetNumNodeResults(I->getRecord(), *this));
   2859     // Copy fully inferred output node type to instruction result pattern.
   2860     for (unsigned i = 0; i != NumResults; ++i)
   2861       ResultPattern->setType(i, Res0Node->getExtType(i));
   2862 
   2863     // Create and insert the instruction.
   2864     // FIXME: InstImpResults should not be part of DAGInstruction.
   2865     DAGInstruction TheInst(I, Results, Operands, InstImpResults);
   2866     Instructions.insert(std::make_pair(I->getRecord(), TheInst));
   2867 
   2868     // Use a temporary tree pattern to infer all types and make sure that the
   2869     // constructed result is correct.  This depends on the instruction already
   2870     // being inserted into the Instructions map.
   2871     TreePattern Temp(I->getRecord(), ResultPattern, false, *this);
   2872     Temp.InferAllTypes(&I->getNamedNodesMap());
   2873 
   2874     DAGInstruction &TheInsertedInst = Instructions.find(I->getRecord())->second;
   2875     TheInsertedInst.setResultPattern(Temp.getOnlyTree());
   2876 
   2877     DEBUG(I->dump());
   2878   }
   2879 
   2880   // If we can, convert the instructions to be patterns that are matched!
   2881   for (std::map<Record*, DAGInstruction, LessRecordByID>::iterator II =
   2882         Instructions.begin(),
   2883        E = Instructions.end(); II != E; ++II) {
   2884     DAGInstruction &TheInst = II->second;
   2885     TreePattern *I = TheInst.getPattern();
   2886     if (I == 0) continue;  // No pattern.
   2887 
   2888     // FIXME: Assume only the first tree is the pattern. The others are clobber
   2889     // nodes.
   2890     TreePatternNode *Pattern = I->getTree(0);
   2891     TreePatternNode *SrcPattern;
   2892     if (Pattern->getOperator()->getName() == "set") {
   2893       SrcPattern = Pattern->getChild(Pattern->getNumChildren()-1)->clone();
   2894     } else{
   2895       // Not a set (store or something?)
   2896       SrcPattern = Pattern;
   2897     }
   2898 
   2899     Record *Instr = II->first;
   2900     AddPatternToMatch(I,
   2901                       PatternToMatch(Instr,
   2902                                      Instr->getValueAsListInit("Predicates"),
   2903                                      SrcPattern,
   2904                                      TheInst.getResultPattern(),
   2905                                      TheInst.getImpResults(),
   2906                                      Instr->getValueAsInt("AddedComplexity"),
   2907                                      Instr->getID()));
   2908   }
   2909 }
   2910 
   2911 
   2912 typedef std::pair<const TreePatternNode*, unsigned> NameRecord;
   2913 
   2914 static void FindNames(const TreePatternNode *P,
   2915                       std::map<std::string, NameRecord> &Names,
   2916                       TreePattern *PatternTop) {
   2917   if (!P->getName().empty()) {
   2918     NameRecord &Rec = Names[P->getName()];
   2919     // If this is the first instance of the name, remember the node.
   2920     if (Rec.second++ == 0)
   2921       Rec.first = P;
   2922     else if (Rec.first->getExtTypes() != P->getExtTypes())
   2923       PatternTop->error("repetition of value: $" + P->getName() +
   2924                         " where different uses have different types!");
   2925   }
   2926 
   2927   if (!P->isLeaf()) {
   2928     for (unsigned i = 0, e = P->getNumChildren(); i != e; ++i)
   2929       FindNames(P->getChild(i), Names, PatternTop);
   2930   }
   2931 }
   2932 
   2933 void CodeGenDAGPatterns::AddPatternToMatch(TreePattern *Pattern,
   2934                                            const PatternToMatch &PTM) {
   2935   // Do some sanity checking on the pattern we're about to match.
   2936   std::string Reason;
   2937   if (!PTM.getSrcPattern()->canPatternMatch(Reason, *this)) {
   2938     PrintWarning(Pattern->getRecord()->getLoc(),
   2939       Twine("Pattern can never match: ") + Reason);
   2940     return;
   2941   }
   2942 
   2943   // If the source pattern's root is a complex pattern, that complex pattern
   2944   // must specify the nodes it can potentially match.
   2945   if (const ComplexPattern *CP =
   2946         PTM.getSrcPattern()->getComplexPatternInfo(*this))
   2947     if (CP->getRootNodes().empty())
   2948       Pattern->error("ComplexPattern at root must specify list of opcodes it"
   2949                      " could match");
   2950 
   2951 
   2952   // Find all of the named values in the input and output, ensure they have the
   2953   // same type.
   2954   std::map<std::string, NameRecord> SrcNames, DstNames;
   2955   FindNames(PTM.getSrcPattern(), SrcNames, Pattern);
   2956   FindNames(PTM.getDstPattern(), DstNames, Pattern);
   2957 
   2958   // Scan all of the named values in the destination pattern, rejecting them if
   2959   // they don't exist in the input pattern.
   2960   for (std::map<std::string, NameRecord>::iterator
   2961        I = DstNames.begin(), E = DstNames.end(); I != E; ++I) {
   2962     if (SrcNames[I->first].first == 0)
   2963       Pattern->error("Pattern has input without matching name in output: $" +
   2964                      I->first);
   2965   }
   2966 
   2967   // Scan all of the named values in the source pattern, rejecting them if the
   2968   // name isn't used in the dest, and isn't used to tie two values together.
   2969   for (std::map<std::string, NameRecord>::iterator
   2970        I = SrcNames.begin(), E = SrcNames.end(); I != E; ++I)
   2971     if (DstNames[I->first].first == 0 && SrcNames[I->first].second == 1)
   2972       Pattern->error("Pattern has dead named input: $" + I->first);
   2973 
   2974   PatternsToMatch.push_back(PTM);
   2975 }
   2976 
   2977 
   2978 
   2979 void CodeGenDAGPatterns::InferInstructionFlags() {
   2980   const std::vector<const CodeGenInstruction*> &Instructions =
   2981     Target.getInstructionsByEnumValue();
   2982 
   2983   // First try to infer flags from the primary instruction pattern, if any.
   2984   SmallVector<CodeGenInstruction*, 8> Revisit;
   2985   unsigned Errors = 0;
   2986   for (unsigned i = 0, e = Instructions.size(); i != e; ++i) {
   2987     CodeGenInstruction &InstInfo =
   2988       const_cast<CodeGenInstruction &>(*Instructions[i]);
   2989 
   2990     // Treat neverHasSideEffects = 1 as the equivalent of hasSideEffects = 0.
   2991     // This flag is obsolete and will be removed.
   2992     if (InstInfo.neverHasSideEffects) {
   2993       assert(!InstInfo.hasSideEffects);
   2994       InstInfo.hasSideEffects_Unset = false;
   2995     }
   2996 
   2997     // Get the primary instruction pattern.
   2998     const TreePattern *Pattern = getInstruction(InstInfo.TheDef).getPattern();
   2999     if (!Pattern) {
   3000       if (InstInfo.hasUndefFlags())
   3001         Revisit.push_back(&InstInfo);
   3002       continue;
   3003     }
   3004     InstAnalyzer PatInfo(*this);
   3005     PatInfo.Analyze(Pattern);
   3006     Errors += InferFromPattern(InstInfo, PatInfo, InstInfo.TheDef);
   3007   }
   3008 
   3009   // Second, look for single-instruction patterns defined outside the
   3010   // instruction.
   3011   for (ptm_iterator I = ptm_begin(), E = ptm_end(); I != E; ++I) {
   3012     const PatternToMatch &PTM = *I;
   3013 
   3014     // We can only infer from single-instruction patterns, otherwise we won't
   3015     // know which instruction should get the flags.
   3016     SmallVector<Record*, 8> PatInstrs;
   3017     getInstructionsInTree(PTM.getDstPattern(), PatInstrs);
   3018     if (PatInstrs.size() != 1)
   3019       continue;
   3020 
   3021     // Get the single instruction.
   3022     CodeGenInstruction &InstInfo = Target.getInstruction(PatInstrs.front());
   3023 
   3024     // Only infer properties from the first pattern. We'll verify the others.
   3025     if (InstInfo.InferredFrom)
   3026       continue;
   3027 
   3028     InstAnalyzer PatInfo(*this);
   3029     PatInfo.Analyze(&PTM);
   3030     Errors += InferFromPattern(InstInfo, PatInfo, PTM.getSrcRecord());
   3031   }
   3032 
   3033   if (Errors)
   3034     PrintFatalError("pattern conflicts");
   3035 
   3036   // Revisit instructions with undefined flags and no pattern.
   3037   if (Target.guessInstructionProperties()) {
   3038     for (unsigned i = 0, e = Revisit.size(); i != e; ++i) {
   3039       CodeGenInstruction &InstInfo = *Revisit[i];
   3040       if (InstInfo.InferredFrom)
   3041         continue;
   3042       // The mayLoad and mayStore flags default to false.
   3043       // Conservatively assume hasSideEffects if it wasn't explicit.
   3044       if (InstInfo.hasSideEffects_Unset)
   3045         InstInfo.hasSideEffects = true;
   3046     }
   3047     return;
   3048   }
   3049 
   3050   // Complain about any flags that are still undefined.
   3051   for (unsigned i = 0, e = Revisit.size(); i != e; ++i) {
   3052     CodeGenInstruction &InstInfo = *Revisit[i];
   3053     if (InstInfo.InferredFrom)
   3054       continue;
   3055     if (InstInfo.hasSideEffects_Unset)
   3056       PrintError(InstInfo.TheDef->getLoc(),
   3057                  "Can't infer hasSideEffects from patterns");
   3058     if (InstInfo.mayStore_Unset)
   3059       PrintError(InstInfo.TheDef->getLoc(),
   3060                  "Can't infer mayStore from patterns");
   3061     if (InstInfo.mayLoad_Unset)
   3062       PrintError(InstInfo.TheDef->getLoc(),
   3063                  "Can't infer mayLoad from patterns");
   3064   }
   3065 }
   3066 
   3067 
   3068 /// Verify instruction flags against pattern node properties.
   3069 void CodeGenDAGPatterns::VerifyInstructionFlags() {
   3070   unsigned Errors = 0;
   3071   for (ptm_iterator I = ptm_begin(), E = ptm_end(); I != E; ++I) {
   3072     const PatternToMatch &PTM = *I;
   3073     SmallVector<Record*, 8> Instrs;
   3074     getInstructionsInTree(PTM.getDstPattern(), Instrs);
   3075     if (Instrs.empty())
   3076       continue;
   3077 
   3078     // Count the number of instructions with each flag set.
   3079     unsigned NumSideEffects = 0;
   3080     unsigned NumStores = 0;
   3081     unsigned NumLoads = 0;
   3082     for (unsigned i = 0, e = Instrs.size(); i != e; ++i) {
   3083       const CodeGenInstruction &InstInfo = Target.getInstruction(Instrs[i]);
   3084       NumSideEffects += InstInfo.hasSideEffects;
   3085       NumStores += InstInfo.mayStore;
   3086       NumLoads += InstInfo.mayLoad;
   3087     }
   3088 
   3089     // Analyze the source pattern.
   3090     InstAnalyzer PatInfo(*this);
   3091     PatInfo.Analyze(&PTM);
   3092 
   3093     // Collect error messages.
   3094     SmallVector<std::string, 4> Msgs;
   3095 
   3096     // Check for missing flags in the output.
   3097     // Permit extra flags for now at least.
   3098     if (PatInfo.hasSideEffects && !NumSideEffects)
   3099       Msgs.push_back("pattern has side effects, but hasSideEffects isn't set");
   3100 
   3101     // Don't verify store flags on instructions with side effects. At least for
   3102     // intrinsics, side effects implies mayStore.
   3103     if (!PatInfo.hasSideEffects && PatInfo.mayStore && !NumStores)
   3104       Msgs.push_back("pattern may store, but mayStore isn't set");
   3105 
   3106     // Similarly, mayStore implies mayLoad on intrinsics.
   3107     if (!PatInfo.mayStore && PatInfo.mayLoad && !NumLoads)
   3108       Msgs.push_back("pattern may load, but mayLoad isn't set");
   3109 
   3110     // Print error messages.
   3111     if (Msgs.empty())
   3112       continue;
   3113     ++Errors;
   3114 
   3115     for (unsigned i = 0, e = Msgs.size(); i != e; ++i)
   3116       PrintError(PTM.getSrcRecord()->getLoc(), Twine(Msgs[i]) + " on the " +
   3117                  (Instrs.size() == 1 ?
   3118                   "instruction" : "output instructions"));
   3119     // Provide the location of the relevant instruction definitions.
   3120     for (unsigned i = 0, e = Instrs.size(); i != e; ++i) {
   3121       if (Instrs[i] != PTM.getSrcRecord())
   3122         PrintError(Instrs[i]->getLoc(), "defined here");
   3123       const CodeGenInstruction &InstInfo = Target.getInstruction(Instrs[i]);
   3124       if (InstInfo.InferredFrom &&
   3125           InstInfo.InferredFrom != InstInfo.TheDef &&
   3126           InstInfo.InferredFrom != PTM.getSrcRecord())
   3127         PrintError(InstInfo.InferredFrom->getLoc(), "inferred from patttern");
   3128     }
   3129   }
   3130   if (Errors)
   3131     PrintFatalError("Errors in DAG patterns");
   3132 }
   3133 
   3134 /// Given a pattern result with an unresolved type, see if we can find one
   3135 /// instruction with an unresolved result type.  Force this result type to an
   3136 /// arbitrary element if it's possible types to converge results.
   3137 static bool ForceArbitraryInstResultType(TreePatternNode *N, TreePattern &TP) {
   3138   if (N->isLeaf())
   3139     return false;
   3140 
   3141   // Analyze children.
   3142   for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i)
   3143     if (ForceArbitraryInstResultType(N->getChild(i), TP))
   3144       return true;
   3145 
   3146   if (!N->getOperator()->isSubClassOf("Instruction"))
   3147     return false;
   3148 
   3149   // If this type is already concrete or completely unknown we can't do
   3150   // anything.
   3151   for (unsigned i = 0, e = N->getNumTypes(); i != e; ++i) {
   3152     if (N->getExtType(i).isCompletelyUnknown() || N->getExtType(i).isConcrete())
   3153       continue;
   3154 
   3155     // Otherwise, force its type to the first possibility (an arbitrary choice).
   3156     if (N->getExtType(i).MergeInTypeInfo(N->getExtType(i).getTypeList()[0], TP))
   3157       return true;
   3158   }
   3159 
   3160   return false;
   3161 }
   3162 
   3163 void CodeGenDAGPatterns::ParsePatterns() {
   3164   std::vector<Record*> Patterns = Records.getAllDerivedDefinitions("Pattern");
   3165 
   3166   for (unsigned i = 0, e = Patterns.size(); i != e; ++i) {
   3167     Record *CurPattern = Patterns[i];
   3168     DagInit *Tree = CurPattern->getValueAsDag("PatternToMatch");
   3169 
   3170     // If the pattern references the null_frag, there's nothing to do.
   3171     if (hasNullFragReference(Tree))
   3172       continue;
   3173 
   3174     TreePattern *Pattern = new TreePattern(CurPattern, Tree, true, *this);
   3175 
   3176     // Inline pattern fragments into it.
   3177     Pattern->InlinePatternFragments();
   3178 
   3179     ListInit *LI = CurPattern->getValueAsListInit("ResultInstrs");
   3180     if (LI->getSize() == 0) continue;  // no pattern.
   3181 
   3182     // Parse the instruction.
   3183     TreePattern *Result = new TreePattern(CurPattern, LI, false, *this);
   3184 
   3185     // Inline pattern fragments into it.
   3186     Result->InlinePatternFragments();
   3187 
   3188     if (Result->getNumTrees() != 1)
   3189       Result->error("Cannot handle instructions producing instructions "
   3190                     "with temporaries yet!");
   3191 
   3192     bool IterateInference;
   3193     bool InferredAllPatternTypes, InferredAllResultTypes;
   3194     do {
   3195       // Infer as many types as possible.  If we cannot infer all of them, we
   3196       // can never do anything with this pattern: report it to the user.
   3197       InferredAllPatternTypes =
   3198         Pattern->InferAllTypes(&Pattern->getNamedNodesMap());
   3199 
   3200       // Infer as many types as possible.  If we cannot infer all of them, we
   3201       // can never do anything with this pattern: report it to the user.
   3202       InferredAllResultTypes =
   3203         Result->InferAllTypes(&Pattern->getNamedNodesMap());
   3204 
   3205       IterateInference = false;
   3206 
   3207       // Apply the type of the result to the source pattern.  This helps us
   3208       // resolve cases where the input type is known to be a pointer type (which
   3209       // is considered resolved), but the result knows it needs to be 32- or
   3210       // 64-bits.  Infer the other way for good measure.
   3211       for (unsigned i = 0, e = std::min(Result->getTree(0)->getNumTypes(),
   3212                                         Pattern->getTree(0)->getNumTypes());
   3213            i != e; ++i) {
   3214         IterateInference = Pattern->getTree(0)->
   3215           UpdateNodeType(i, Result->getTree(0)->getExtType(i), *Result);
   3216         IterateInference |= Result->getTree(0)->
   3217           UpdateNodeType(i, Pattern->getTree(0)->getExtType(i), *Result);
   3218       }
   3219 
   3220       // If our iteration has converged and the input pattern's types are fully
   3221       // resolved but the result pattern is not fully resolved, we may have a
   3222       // situation where we have two instructions in the result pattern and
   3223       // the instructions require a common register class, but don't care about
   3224       // what actual MVT is used.  This is actually a bug in our modelling:
   3225       // output patterns should have register classes, not MVTs.
   3226       //
   3227       // In any case, to handle this, we just go through and disambiguate some
   3228       // arbitrary types to the result pattern's nodes.
   3229       if (!IterateInference && InferredAllPatternTypes &&
   3230           !InferredAllResultTypes)
   3231         IterateInference = ForceArbitraryInstResultType(Result->getTree(0),
   3232                                                         *Result);
   3233     } while (IterateInference);
   3234 
   3235     // Verify that we inferred enough types that we can do something with the
   3236     // pattern and result.  If these fire the user has to add type casts.
   3237     if (!InferredAllPatternTypes)
   3238       Pattern->error("Could not infer all types in pattern!");
   3239     if (!InferredAllResultTypes) {
   3240       Pattern->dump();
   3241       Result->error("Could not infer all types in pattern result!");
   3242     }
   3243 
   3244     // Validate that the input pattern is correct.
   3245     std::map<std::string, TreePatternNode*> InstInputs;
   3246     std::map<std::string, TreePatternNode*> InstResults;
   3247     std::vector<Record*> InstImpResults;
   3248     for (unsigned j = 0, ee = Pattern->getNumTrees(); j != ee; ++j)
   3249       FindPatternInputsAndOutputs(Pattern, Pattern->getTree(j),
   3250                                   InstInputs, InstResults,
   3251                                   InstImpResults);
   3252 
   3253     // Promote the xform function to be an explicit node if set.
   3254     TreePatternNode *DstPattern = Result->getOnlyTree();
   3255     std::vector<TreePatternNode*> ResultNodeOperands;
   3256     for (unsigned ii = 0, ee = DstPattern->getNumChildren(); ii != ee; ++ii) {
   3257       TreePatternNode *OpNode = DstPattern->getChild(ii);
   3258       if (Record *Xform = OpNode->getTransformFn()) {
   3259         OpNode->setTransformFn(0);
   3260         std::vector<TreePatternNode*> Children;
   3261         Children.push_back(OpNode);
   3262         OpNode = new TreePatternNode(Xform, Children, OpNode->getNumTypes());
   3263       }
   3264       ResultNodeOperands.push_back(OpNode);
   3265     }
   3266     DstPattern = Result->getOnlyTree();
   3267     if (!DstPattern->isLeaf())
   3268       DstPattern = new TreePatternNode(DstPattern->getOperator(),
   3269                                        ResultNodeOperands,
   3270                                        DstPattern->getNumTypes());
   3271 
   3272     for (unsigned i = 0, e = Result->getOnlyTree()->getNumTypes(); i != e; ++i)
   3273       DstPattern->setType(i, Result->getOnlyTree()->getExtType(i));
   3274 
   3275     TreePattern Temp(Result->getRecord(), DstPattern, false, *this);
   3276     Temp.InferAllTypes();
   3277 
   3278 
   3279     AddPatternToMatch(Pattern,
   3280                     PatternToMatch(CurPattern,
   3281                                    CurPattern->getValueAsListInit("Predicates"),
   3282                                    Pattern->getTree(0),
   3283                                    Temp.getOnlyTree(), InstImpResults,
   3284                                    CurPattern->getValueAsInt("AddedComplexity"),
   3285                                    CurPattern->getID()));
   3286   }
   3287 }
   3288 
   3289 /// CombineChildVariants - Given a bunch of permutations of each child of the
   3290 /// 'operator' node, put them together in all possible ways.
   3291 static void CombineChildVariants(TreePatternNode *Orig,
   3292                const std::vector<std::vector<TreePatternNode*> > &ChildVariants,
   3293                                  std::vector<TreePatternNode*> &OutVariants,
   3294                                  CodeGenDAGPatterns &CDP,
   3295                                  const MultipleUseVarSet &DepVars) {
   3296   // Make sure that each operand has at least one variant to choose from.
   3297   for (unsigned i = 0, e = ChildVariants.size(); i != e; ++i)
   3298     if (ChildVariants[i].empty())
   3299       return;
   3300 
   3301   // The end result is an all-pairs construction of the resultant pattern.
   3302   std::vector<unsigned> Idxs;
   3303   Idxs.resize(ChildVariants.size());
   3304   bool NotDone;
   3305   do {
   3306 #ifndef NDEBUG
   3307     DEBUG(if (!Idxs.empty()) {
   3308             errs() << Orig->getOperator()->getName() << ": Idxs = [ ";
   3309               for (unsigned i = 0; i < Idxs.size(); ++i) {
   3310                 errs() << Idxs[i] << " ";
   3311             }
   3312             errs() << "]\n";
   3313           });
   3314 #endif
   3315     // Create the variant and add it to the output list.
   3316     std::vector<TreePatternNode*> NewChildren;
   3317     for (unsigned i = 0, e = ChildVariants.size(); i != e; ++i)
   3318       NewChildren.push_back(ChildVariants[i][Idxs[i]]);
   3319     TreePatternNode *R = new TreePatternNode(Orig->getOperator(), NewChildren,
   3320                                              Orig->getNumTypes());
   3321 
   3322     // Copy over properties.
   3323     R->setName(Orig->getName());
   3324     R->setPredicateFns(Orig->getPredicateFns());
   3325     R->setTransformFn(Orig->getTransformFn());
   3326     for (unsigned i = 0, e = Orig->getNumTypes(); i != e; ++i)
   3327       R->setType(i, Orig->getExtType(i));
   3328 
   3329     // If this pattern cannot match, do not include it as a variant.
   3330     std::string ErrString;
   3331     if (!R->canPatternMatch(ErrString, CDP)) {
   3332       delete R;
   3333     } else {
   3334       bool AlreadyExists = false;
   3335 
   3336       // Scan to see if this pattern has already been emitted.  We can get
   3337       // duplication due to things like commuting:
   3338       //   (and GPRC:$a, GPRC:$b) -> (and GPRC:$b, GPRC:$a)
   3339       // which are the same pattern.  Ignore the dups.
   3340       for (unsigned i = 0, e = OutVariants.size(); i != e; ++i)
   3341         if (R->isIsomorphicTo(OutVariants[i], DepVars)) {
   3342           AlreadyExists = true;
   3343           break;
   3344         }
   3345 
   3346       if (AlreadyExists)
   3347         delete R;
   3348       else
   3349         OutVariants.push_back(R);
   3350     }
   3351 
   3352     // Increment indices to the next permutation by incrementing the
   3353     // indicies from last index backward, e.g., generate the sequence
   3354     // [0, 0], [0, 1], [1, 0], [1, 1].
   3355     int IdxsIdx;
   3356     for (IdxsIdx = Idxs.size() - 1; IdxsIdx >= 0; --IdxsIdx) {
   3357       if (++Idxs[IdxsIdx] == ChildVariants[IdxsIdx].size())
   3358         Idxs[IdxsIdx] = 0;
   3359       else
   3360         break;
   3361     }
   3362     NotDone = (IdxsIdx >= 0);
   3363   } while (NotDone);
   3364 }
   3365 
   3366 /// CombineChildVariants - A helper function for binary operators.
   3367 ///
   3368 static void CombineChildVariants(TreePatternNode *Orig,
   3369                                  const std::vector<TreePatternNode*> &LHS,
   3370                                  const std::vector<TreePatternNode*> &RHS,
   3371                                  std::vector<TreePatternNode*> &OutVariants,
   3372                                  CodeGenDAGPatterns &CDP,
   3373                                  const MultipleUseVarSet &DepVars) {
   3374   std::vector<std::vector<TreePatternNode*> > ChildVariants;
   3375   ChildVariants.push_back(LHS);
   3376   ChildVariants.push_back(RHS);
   3377   CombineChildVariants(Orig, ChildVariants, OutVariants, CDP, DepVars);
   3378 }
   3379 
   3380 
   3381 static void GatherChildrenOfAssociativeOpcode(TreePatternNode *N,
   3382                                      std::vector<TreePatternNode *> &Children) {
   3383   assert(N->getNumChildren()==2 &&"Associative but doesn't have 2 children!");
   3384   Record *Operator = N->getOperator();
   3385 
   3386   // Only permit raw nodes.
   3387   if (!N->getName().empty() || !N->getPredicateFns().empty() ||
   3388       N->getTransformFn()) {
   3389     Children.push_back(N);
   3390     return;
   3391   }
   3392 
   3393   if (N->getChild(0)->isLeaf() || N->getChild(0)->getOperator() != Operator)
   3394     Children.push_back(N->getChild(0));
   3395   else
   3396     GatherChildrenOfAssociativeOpcode(N->getChild(0), Children);
   3397 
   3398   if (N->getChild(1)->isLeaf() || N->getChild(1)->getOperator() != Operator)
   3399     Children.push_back(N->getChild(1));
   3400   else
   3401     GatherChildrenOfAssociativeOpcode(N->getChild(1), Children);
   3402 }
   3403 
   3404 /// GenerateVariantsOf - Given a pattern N, generate all permutations we can of
   3405 /// the (potentially recursive) pattern by using algebraic laws.
   3406 ///
   3407 static void GenerateVariantsOf(TreePatternNode *N,
   3408                                std::vector<TreePatternNode*> &OutVariants,
   3409                                CodeGenDAGPatterns &CDP,
   3410                                const MultipleUseVarSet &DepVars) {
   3411   // We cannot permute leaves.
   3412   if (N->isLeaf()) {
   3413     OutVariants.push_back(N);
   3414     return;
   3415   }
   3416 
   3417   // Look up interesting info about the node.
   3418   const SDNodeInfo &NodeInfo = CDP.getSDNodeInfo(N->getOperator());
   3419 
   3420   // If this node is associative, re-associate.
   3421   if (NodeInfo.hasProperty(SDNPAssociative)) {
   3422     // Re-associate by pulling together all of the linked operators
   3423     std::vector<TreePatternNode*> MaximalChildren;
   3424     GatherChildrenOfAssociativeOpcode(N, MaximalChildren);
   3425 
   3426     // Only handle child sizes of 3.  Otherwise we'll end up trying too many
   3427     // permutations.
   3428     if (MaximalChildren.size() == 3) {
   3429       // Find the variants of all of our maximal children.
   3430       std::vector<TreePatternNode*> AVariants, BVariants, CVariants;
   3431       GenerateVariantsOf(MaximalChildren[0], AVariants, CDP, DepVars);
   3432       GenerateVariantsOf(MaximalChildren[1], BVariants, CDP, DepVars);
   3433       GenerateVariantsOf(MaximalChildren[2], CVariants, CDP, DepVars);
   3434 
   3435       // There are only two ways we can permute the tree:
   3436       //   (A op B) op C    and    A op (B op C)
   3437       // Within these forms, we can also permute A/B/C.
   3438 
   3439       // Generate legal pair permutations of A/B/C.
   3440       std::vector<TreePatternNode*> ABVariants;
   3441       std::vector<TreePatternNode*> BAVariants;
   3442       std::vector<TreePatternNode*> ACVariants;
   3443       std::vector<TreePatternNode*> CAVariants;
   3444       std::vector<TreePatternNode*> BCVariants;
   3445       std::vector<TreePatternNode*> CBVariants;
   3446       CombineChildVariants(N, AVariants, BVariants, ABVariants, CDP, DepVars);
   3447       CombineChildVariants(N, BVariants, AVariants, BAVariants, CDP, DepVars);
   3448       CombineChildVariants(N, AVariants, CVariants, ACVariants, CDP, DepVars);
   3449       CombineChildVariants(N, CVariants, AVariants, CAVariants, CDP, DepVars);
   3450       CombineChildVariants(N, BVariants, CVariants, BCVariants, CDP, DepVars);
   3451       CombineChildVariants(N, CVariants, BVariants, CBVariants, CDP, DepVars);
   3452 
   3453       // Combine those into the result: (x op x) op x
   3454       CombineChildVariants(N, ABVariants, CVariants, OutVariants, CDP, DepVars);
   3455       CombineChildVariants(N, BAVariants, CVariants, OutVariants, CDP, DepVars);
   3456       CombineChildVariants(N, ACVariants, BVariants, OutVariants, CDP, DepVars);
   3457       CombineChildVariants(N, CAVariants, BVariants, OutVariants, CDP, DepVars);
   3458       CombineChildVariants(N, BCVariants, AVariants, OutVariants, CDP, DepVars);
   3459       CombineChildVariants(N, CBVariants, AVariants, OutVariants, CDP, DepVars);
   3460 
   3461       // Combine those into the result: x op (x op x)
   3462       CombineChildVariants(N, CVariants, ABVariants, OutVariants, CDP, DepVars);
   3463       CombineChildVariants(N, CVariants, BAVariants, OutVariants, CDP, DepVars);
   3464       CombineChildVariants(N, BVariants, ACVariants, OutVariants, CDP, DepVars);
   3465       CombineChildVariants(N, BVariants, CAVariants, OutVariants, CDP, DepVars);
   3466       CombineChildVariants(N, AVariants, BCVariants, OutVariants, CDP, DepVars);
   3467       CombineChildVariants(N, AVariants, CBVariants, OutVariants, CDP, DepVars);
   3468       return;
   3469     }
   3470   }
   3471 
   3472   // Compute permutations of all children.
   3473   std::vector<std::vector<TreePatternNode*> > ChildVariants;
   3474   ChildVariants.resize(N->getNumChildren());
   3475   for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i)
   3476     GenerateVariantsOf(N->getChild(i), ChildVariants[i], CDP, DepVars);
   3477 
   3478   // Build all permutations based on how the children were formed.
   3479   CombineChildVariants(N, ChildVariants, OutVariants, CDP, DepVars);
   3480 
   3481   // If this node is commutative, consider the commuted order.
   3482   bool isCommIntrinsic = N->isCommutativeIntrinsic(CDP);
   3483   if (NodeInfo.hasProperty(SDNPCommutative) || isCommIntrinsic) {
   3484     assert((N->getNumChildren()==2 || isCommIntrinsic) &&
   3485            "Commutative but doesn't have 2 children!");
   3486     // Don't count children which are actually register references.
   3487     unsigned NC = 0;
   3488     for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i) {
   3489       TreePatternNode *Child = N->getChild(i);
   3490       if (Child->isLeaf())
   3491         if (DefInit *DI = dyn_cast<DefInit>(Child->getLeafValue())) {
   3492           Record *RR = DI->getDef();
   3493           if (RR->isSubClassOf("Register"))
   3494             continue;
   3495         }
   3496       NC++;
   3497     }
   3498     // Consider the commuted order.
   3499     if (isCommIntrinsic) {
   3500       // Commutative intrinsic. First operand is the intrinsic id, 2nd and 3rd
   3501       // operands are the commutative operands, and there might be more operands
   3502       // after those.
   3503       assert(NC >= 3 &&
   3504              "Commutative intrinsic should have at least 3 childrean!");
   3505       std::vector<std::vector<TreePatternNode*> > Variants;
   3506       Variants.push_back(ChildVariants[0]); // Intrinsic id.
   3507       Variants.push_back(ChildVariants[2]);
   3508       Variants.push_back(ChildVariants[1]);
   3509       for (unsigned i = 3; i != NC; ++i)
   3510         Variants.push_back(ChildVariants[i]);
   3511       CombineChildVariants(N, Variants, OutVariants, CDP, DepVars);
   3512     } else if (NC == 2)
   3513       CombineChildVariants(N, ChildVariants[1], ChildVariants[0],
   3514                            OutVariants, CDP, DepVars);
   3515   }
   3516 }
   3517 
   3518 
   3519 // GenerateVariants - Generate variants.  For example, commutative patterns can
   3520 // match multiple ways.  Add them to PatternsToMatch as well.
   3521 void CodeGenDAGPatterns::GenerateVariants() {
   3522   DEBUG(errs() << "Generating instruction variants.\n");
   3523 
   3524   // Loop over all of the patterns we've collected, checking to see if we can
   3525   // generate variants of the instruction, through the exploitation of
   3526   // identities.  This permits the target to provide aggressive matching without
   3527   // the .td file having to contain tons of variants of instructions.
   3528   //
   3529   // Note that this loop adds new patterns to the PatternsToMatch list, but we
   3530   // intentionally do not reconsider these.  Any variants of added patterns have
   3531   // already been added.
   3532   //
   3533   for (unsigned i = 0, e = PatternsToMatch.size(); i != e; ++i) {
   3534     MultipleUseVarSet             DepVars;
   3535     std::vector<TreePatternNode*> Variants;
   3536     FindDepVars(PatternsToMatch[i].getSrcPattern(), DepVars);
   3537     DEBUG(errs() << "Dependent/multiply used variables: ");
   3538     DEBUG(DumpDepVars(DepVars));
   3539     DEBUG(errs() << "\n");
   3540     GenerateVariantsOf(PatternsToMatch[i].getSrcPattern(), Variants, *this,
   3541                        DepVars);
   3542 
   3543     assert(!Variants.empty() && "Must create at least original variant!");
   3544     Variants.erase(Variants.begin());  // Remove the original pattern.
   3545 
   3546     if (Variants.empty())  // No variants for this pattern.
   3547       continue;
   3548 
   3549     DEBUG(errs() << "FOUND VARIANTS OF: ";
   3550           PatternsToMatch[i].getSrcPattern()->dump();
   3551           errs() << "\n");
   3552 
   3553     for (unsigned v = 0, e = Variants.size(); v != e; ++v) {
   3554       TreePatternNode *Variant = Variants[v];
   3555 
   3556       DEBUG(errs() << "  VAR#" << v <<  ": ";
   3557             Variant->dump();
   3558             errs() << "\n");
   3559 
   3560       // Scan to see if an instruction or explicit pattern already matches this.
   3561       bool AlreadyExists = false;
   3562       for (unsigned p = 0, e = PatternsToMatch.size(); p != e; ++p) {
   3563         // Skip if the top level predicates do not match.
   3564         if (PatternsToMatch[i].getPredicates() !=
   3565             PatternsToMatch[p].getPredicates())
   3566           continue;
   3567         // Check to see if this variant already exists.
   3568         if (Variant->isIsomorphicTo(PatternsToMatch[p].getSrcPattern(),
   3569                                     DepVars)) {
   3570           DEBUG(errs() << "  *** ALREADY EXISTS, ignoring variant.\n");
   3571           AlreadyExists = true;
   3572           break;
   3573         }
   3574       }
   3575       // If we already have it, ignore the variant.
   3576       if (AlreadyExists) continue;
   3577 
   3578       // Otherwise, add it to the list of patterns we have.
   3579       PatternsToMatch.
   3580         push_back(PatternToMatch(PatternsToMatch[i].getSrcRecord(),
   3581                                  PatternsToMatch[i].getPredicates(),
   3582                                  Variant, PatternsToMatch[i].getDstPattern(),
   3583                                  PatternsToMatch[i].getDstRegs(),
   3584                                  PatternsToMatch[i].getAddedComplexity(),
   3585                                  Record::getNewUID()));
   3586     }
   3587 
   3588     DEBUG(errs() << "\n");
   3589   }
   3590 }
   3591