diff options
Diffstat (limited to 'include/llvm/Transforms/Utils/SpecialCaseList.h')
-rw-r--r-- | include/llvm/Transforms/Utils/SpecialCaseList.h | 46 |
1 files changed, 27 insertions, 19 deletions
diff --git a/include/llvm/Transforms/Utils/SpecialCaseList.h b/include/llvm/Transforms/Utils/SpecialCaseList.h index 787ddb0c7c..34c28fc1ca 100644 --- a/include/llvm/Transforms/Utils/SpecialCaseList.h +++ b/include/llvm/Transforms/Utils/SpecialCaseList.h @@ -49,6 +49,7 @@ namespace llvm { class Function; +class GlobalAlias; class GlobalVariable; class MemoryBuffer; class Module; @@ -57,8 +58,17 @@ class StringRef; class SpecialCaseList { public: - SpecialCaseList(const StringRef Path); - SpecialCaseList(const MemoryBuffer *MB); + /// Parses the special case list from a file. If Path is empty, returns + /// an empty special case list. On failure, returns 0 and writes an error + /// message to string. + static SpecialCaseList *create(const StringRef Path, std::string &Error); + /// Parses the special case list from a memory buffer. On failure, returns + /// 0 and writes an error message to string. + static SpecialCaseList *create(const MemoryBuffer *MB, std::string &Error); + /// Parses the special case list from a file. On failure, reports a fatal + /// error. + static SpecialCaseList *createOrDie(const StringRef Path); + ~SpecialCaseList(); /// Returns whether either this function or its source file are listed in the @@ -70,31 +80,29 @@ class SpecialCaseList { bool isIn(const GlobalVariable &G, const StringRef Category = StringRef()) const; + /// Returns whether this global alias is listed in the given category, which + /// may be omitted to search the empty category. + /// + /// If GA aliases a function, the alias's name is matched as a function name + /// would be. Similarly, aliases of globals are matched like globals. + bool isIn(const GlobalAlias &GA, + const StringRef Category = StringRef()) const; + /// Returns whether this module is listed in the given category, which may be /// omitted to search the empty category. bool isIn(const Module &M, const StringRef Category = StringRef()) const; - /// Returns whether either this function or its source file are listed in any - /// category. Category will contain the name of an arbitrary category in - /// which this function is listed. - bool findCategory(const Function &F, StringRef &Category) const; - - /// Returns whether this global, its type or its source file are listed in any - /// category. Category will contain the name of an arbitrary category in - /// which this global is listed. - bool findCategory(const GlobalVariable &G, StringRef &Category) const; - - /// Returns whether this module is listed in any category. Category will - /// contain the name of an arbitrary category in which this module is listed. - bool findCategory(const Module &M, StringRef &Category) const; - private: + SpecialCaseList(SpecialCaseList const &) LLVM_DELETED_FUNCTION; + SpecialCaseList &operator=(SpecialCaseList const &) LLVM_DELETED_FUNCTION; + struct Entry; StringMap<StringMap<Entry> > Entries; - void init(const MemoryBuffer *MB); - bool findCategory(const StringRef Section, const StringRef Query, - StringRef &Category) const; + SpecialCaseList(); + /// Parses just-constructed SpecialCaseList entries from a memory buffer. + bool parse(const MemoryBuffer *MB, std::string &Error); + bool inSectionCategory(const StringRef Section, const StringRef Query, const StringRef Category) const; }; |