diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2013-04-08 18:41:23 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2013-04-08 18:41:23 +0000 | 
| commit | 4a16efa3e43e35f0cc9efe3a67f620f0017c3d36 (patch) | |
| tree | 06099edc18d30894081a822b756f117cbe0b8207 /include/llvm/TableGen | |
| parent | 482e7bddf617ae804dc47133cb07eb4aa81e45de (diff) | |
Diffstat (limited to 'include/llvm/TableGen')
| -rw-r--r-- | include/llvm/TableGen/Error.h | 1 | ||||
| -rw-r--r-- | include/llvm/TableGen/Record.h | 117 | ||||
| -rw-r--r-- | include/llvm/TableGen/StringMatcher.h | 8 | 
3 files changed, 39 insertions, 87 deletions
| diff --git a/include/llvm/TableGen/Error.h b/include/llvm/TableGen/Error.h index 2f6b7e625c3d..2d0a2b45a96a 100644 --- a/include/llvm/TableGen/Error.h +++ b/include/llvm/TableGen/Error.h @@ -32,6 +32,7 @@ LLVM_ATTRIBUTE_NORETURN void PrintFatalError(ArrayRef<SMLoc> ErrorLoc,                                               const std::string &Msg);  extern SourceMgr SrcMgr; +extern unsigned ErrorsPrinted;  } // end namespace "llvm" diff --git a/include/llvm/TableGen/Record.h b/include/llvm/TableGen/Record.h index 319298c13253..76ee69dd8dbd 100644 --- a/include/llvm/TableGen/Record.h +++ b/include/llvm/TableGen/Record.h @@ -19,9 +19,9 @@  #include "llvm/ADT/FoldingSet.h"  #include "llvm/Support/Allocator.h"  #include "llvm/Support/Casting.h" -#include "llvm/Support/SourceMgr.h"  #include "llvm/Support/DataTypes.h"  #include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/SourceMgr.h"  #include "llvm/Support/raw_ostream.h"  #include <map> @@ -128,16 +128,8 @@ public:   // These methods should only be called from subclasses of Init      return convertValue((TypedInit*)FI);    } -public:   // These methods should only be called by subclasses of RecTy. -  // baseClassOf - These virtual methods should be overloaded to return true iff -  // all values of type 'RHS' can be converted to the 'this' type. -  virtual bool baseClassOf(const BitRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const BitsRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const IntRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const StringRecTy *RHS) const { return false; } -  virtual bool baseClassOf(const ListRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const DagRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const RecordRecTy *RHS) const { return false; } +public: +  virtual bool baseClassOf(const RecTy*) const;  };  inline raw_ostream &operator<<(raw_ostream &OS, const RecTy &Ty) { @@ -179,19 +171,11 @@ public:    virtual bool typeIsConvertibleTo(const RecTy *RHS) const {      return RHS->baseClassOf(this);    } -  virtual bool baseClassOf(const BitRecTy    *RHS) const { return true; } -  virtual bool baseClassOf(const BitsRecTy   *RHS) const; -  virtual bool baseClassOf(const IntRecTy    *RHS) const { return true; } -  virtual bool baseClassOf(const StringRecTy *RHS) const { return false; } -  virtual bool baseClassOf(const ListRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const DagRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const RecordRecTy *RHS) const { return false; } - +  virtual bool baseClassOf(const RecTy*) const;  }; -// BitsRecTy - 'bits<n>' - Represent a fixed number of bits -/// BitsRecTy - 'bits<n>' - Represent a fixed number of bits +/// BitsRecTy - 'bits<n>' - Represent a fixed number of bits  ///  class BitsRecTy : public RecTy {    unsigned Size; @@ -226,16 +210,7 @@ public:    virtual bool typeIsConvertibleTo(const RecTy *RHS) const {      return RHS->baseClassOf(this);    } -  virtual bool baseClassOf(const BitRecTy    *RHS) const { return Size == 1; } -  virtual bool baseClassOf(const BitsRecTy   *RHS) const { -    return RHS->Size == Size; -  } -  virtual bool baseClassOf(const IntRecTy    *RHS) const { return true; } -  virtual bool baseClassOf(const StringRecTy *RHS) const { return false; } -  virtual bool baseClassOf(const ListRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const DagRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const RecordRecTy *RHS) const { return false; } - +  virtual bool baseClassOf(const RecTy*) const;  }; @@ -273,14 +248,7 @@ public:      return RHS->baseClassOf(this);    } -  virtual bool baseClassOf(const BitRecTy    *RHS) const { return true; } -  virtual bool baseClassOf(const BitsRecTy   *RHS) const { return true; } -  virtual bool baseClassOf(const IntRecTy    *RHS) const { return true; } -  virtual bool baseClassOf(const StringRecTy *RHS) const { return false; } -  virtual bool baseClassOf(const ListRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const DagRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const RecordRecTy *RHS) const { return false; } - +  virtual bool baseClassOf(const RecTy*) const;  };  /// StringRecTy - 'string' - Represent an string value @@ -317,20 +285,10 @@ public:    virtual bool typeIsConvertibleTo(const RecTy *RHS) const {      return RHS->baseClassOf(this);    } - -  virtual bool baseClassOf(const BitRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const BitsRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const IntRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const StringRecTy *RHS) const { return true; } -  virtual bool baseClassOf(const ListRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const DagRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const RecordRecTy *RHS) const { return false; }  }; -// ListRecTy - 'list<Ty>' - Represent a list of values, all of which must be of -// the specified type. -/// ListRecTy - 'list<Ty>' - Represent a list of values, all of which must -/// be of the specified type. +/// ListRecTy - 'list<Ty>' - Represent a list of values, all of which must be of +/// the specified type.  ///  class ListRecTy : public RecTy {    RecTy *Ty; @@ -366,15 +324,7 @@ public:      return RHS->baseClassOf(this);    } -  virtual bool baseClassOf(const BitRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const BitsRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const IntRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const StringRecTy *RHS) const { return false; } -  virtual bool baseClassOf(const ListRecTy   *RHS) const { -    return RHS->getElementType()->typeIsConvertibleTo(Ty); -  } -  virtual bool baseClassOf(const DagRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const RecordRecTy *RHS) const { return false; } +  virtual bool baseClassOf(const RecTy*) const;  };  /// DagRecTy - 'dag' - Represent a dag fragment @@ -410,14 +360,6 @@ public:    virtual bool typeIsConvertibleTo(const RecTy *RHS) const {      return RHS->baseClassOf(this);    } - -  virtual bool baseClassOf(const BitRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const BitsRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const IntRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const StringRecTy *RHS) const { return false; } -  virtual bool baseClassOf(const ListRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const DagRecTy    *RHS) const { return true; } -  virtual bool baseClassOf(const RecordRecTy *RHS) const { return false; }  }; @@ -458,13 +400,7 @@ public:    virtual bool typeIsConvertibleTo(const RecTy *RHS) const {      return RHS->baseClassOf(this);    } -  virtual bool baseClassOf(const BitRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const BitsRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const IntRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const StringRecTy *RHS) const { return false; } -  virtual bool baseClassOf(const ListRecTy   *RHS) const { return false; } -  virtual bool baseClassOf(const DagRecTy    *RHS) const { return false; } -  virtual bool baseClassOf(const RecordRecTy *RHS) const; +  virtual bool baseClassOf(const RecTy*) const;  };  /// resolveTypes - Find a common type that T1 and T2 convert to. @@ -991,7 +927,7 @@ public:  ///  class BinOpInit : public OpInit {  public: -  enum BinaryOp { SHL, SRA, SRL, STRCONCAT, CONCAT, EQ }; +  enum BinaryOp { ADD, SHL, SRA, SRL, STRCONCAT, CONCAT, EQ };  private:    BinaryOp Opc;    Init *LHS, *RHS; @@ -1448,12 +1384,14 @@ class Record {    SmallVector<SMLoc, 4> Locs;    std::vector<Init *> TemplateArgs;    std::vector<RecordVal> Values; -  std::vector<Record*> SuperClasses; +  std::vector<Record *> SuperClasses; +  std::vector<SMRange> SuperClassRanges;    // Tracks Record instances. Not owned by Record.    RecordKeeper &TrackedRecords;    DefInit *TheInit; +  bool IsAnonymous;    void init();    void checkName(); @@ -1462,14 +1400,15 @@ public:    // Constructs a record.    explicit Record(const std::string &N, ArrayRef<SMLoc> locs, -                  RecordKeeper &records) : +                  RecordKeeper &records, bool Anonymous = false) :      ID(LastID++), Name(StringInit::get(N)), Locs(locs.begin(), locs.end()), -    TrackedRecords(records), TheInit(0) { +    TrackedRecords(records), TheInit(0), IsAnonymous(Anonymous) {      init();    } -  explicit Record(Init *N, ArrayRef<SMLoc> locs, RecordKeeper &records) : +  explicit Record(Init *N, ArrayRef<SMLoc> locs, RecordKeeper &records, +                  bool Anonymous = false) :      ID(LastID++), Name(N), Locs(locs.begin(), locs.end()), -    TrackedRecords(records), TheInit(0) { +    TrackedRecords(records), TheInit(0), IsAnonymous(Anonymous) {      init();    } @@ -1478,7 +1417,8 @@ public:    Record(const Record &O) :      ID(LastID++), Name(O.Name), Locs(O.Locs), TemplateArgs(O.TemplateArgs),      Values(O.Values), SuperClasses(O.SuperClasses), -    TrackedRecords(O.TrackedRecords), TheInit(O.TheInit) { } +    SuperClassRanges(O.SuperClassRanges), TrackedRecords(O.TrackedRecords), +    TheInit(O.TheInit), IsAnonymous(O.IsAnonymous) { }    ~Record() {} @@ -1509,6 +1449,7 @@ public:    }    const std::vector<RecordVal> &getValues() const { return Values; }    const std::vector<Record*>   &getSuperClasses() const { return SuperClasses; } +  ArrayRef<SMRange> getSuperClassRanges() const { return SuperClassRanges; }    bool isTemplateArg(Init *Name) const {      for (unsigned i = 0, e = TemplateArgs.size(); i != e; ++i) @@ -1583,9 +1524,10 @@ public:      return false;    } -  void addSuperClass(Record *R) { +  void addSuperClass(Record *R, SMRange Range) {      assert(!isSubClassOf(R) && "Already subclassing record!");      SuperClasses.push_back(R); +    SuperClassRanges.push_back(Range);    }    /// resolveReferences - If there are any field references that refer to fields @@ -1602,6 +1544,10 @@ public:      return TrackedRecords;    } +  bool isAnonymous() const { +    return IsAnonymous; +  } +    void dump() const;    //===--------------------------------------------------------------------===// @@ -1613,6 +1559,11 @@ public:    ///    Init *getValueInit(StringRef FieldName) const; +  /// Return true if the named field is unset. +  bool isValueUnset(StringRef FieldName) const { +    return getValueInit(FieldName) == UnsetInit::get(); +  } +    /// getValueAsString - This method looks up the specified field and returns    /// its value as a string, throwing an exception if the field does not exist    /// or if the value is not a string. diff --git a/include/llvm/TableGen/StringMatcher.h b/include/llvm/TableGen/StringMatcher.h index 1dadc76200b0..99cbcadd7693 100644 --- a/include/llvm/TableGen/StringMatcher.h +++ b/include/llvm/TableGen/StringMatcher.h @@ -11,13 +11,13 @@  //  //===----------------------------------------------------------------------===// -#ifndef STRINGMATCHER_H -#define STRINGMATCHER_H +#ifndef LLVM_TABLEGEN_STRINGMATCHER_H +#define LLVM_TABLEGEN_STRINGMATCHER_H -#include <vector> +#include "llvm/ADT/StringRef.h"  #include <string>  #include <utility> -#include "llvm/ADT/StringRef.h" +#include <vector>  namespace llvm {    class raw_ostream; | 
