diff options
Diffstat (limited to 'include/clang')
-rw-r--r-- | include/clang/Basic/FileManager.h | 26 | ||||
-rw-r--r-- | include/clang/Frontend/PCHBitCodes.h | 5 | ||||
-rw-r--r-- | include/clang/Frontend/PCHReader.h | 4 | ||||
-rw-r--r-- | include/clang/Frontend/PCHWriter.h | 4 |
4 files changed, 36 insertions, 3 deletions
diff --git a/include/clang/Basic/FileManager.h b/include/clang/Basic/FileManager.h index ebd2812ece..d6a0cf34d9 100644 --- a/include/clang/Basic/FileManager.h +++ b/include/clang/Basic/FileManager.h @@ -81,7 +81,31 @@ public: virtual ~StatSysCallCache() {} virtual int stat(const char *path, struct stat *buf) = 0; }; - + +/// \brief A stat listener that can be used by FileManager to keep +/// track of the results of stat() calls that occur throughout the +/// execution of the front end. +class MemorizeStatCalls : public StatSysCallCache { +public: + /// \brief The result of a stat() call. + /// + /// The first member is the result of calling stat(). If stat() + /// found something, the second member is a copy of the stat + /// structure. + typedef std::pair<int, struct stat> StatResult; + + /// \brief The set of stat() calls that have been + llvm::StringMap<StatResult, llvm::BumpPtrAllocator> StatCalls; + + typedef llvm::StringMap<StatResult, llvm::BumpPtrAllocator>::const_iterator + iterator; + + iterator begin() const { return StatCalls.begin(); } + iterator end() const { return StatCalls.end(); } + + virtual int stat(const char *path, struct stat *buf); +}; + /// FileManager - Implements support for file system lookup, file system /// caching, and directory search management. This also handles more advanced /// properties, such as uniquing files based on "inode", so that a file with two diff --git a/include/clang/Frontend/PCHBitCodes.h b/include/clang/Frontend/PCHBitCodes.h index 436a265a41..f2aed97893 100644 --- a/include/clang/Frontend/PCHBitCodes.h +++ b/include/clang/Frontend/PCHBitCodes.h @@ -185,7 +185,10 @@ namespace clang { /// This set contains the source location entry for the /// predefines buffer and for any file entries that need to be /// preloaded. - SOURCE_LOCATION_PRELOADS = 16 + SOURCE_LOCATION_PRELOADS = 16, + + /// \brief Record code for the stat() cache. + STAT_CACHE = 17 }; /// \brief Record types used within a source manager block. diff --git a/include/clang/Frontend/PCHReader.h b/include/clang/Frontend/PCHReader.h index 07f2bb260f..a955b80695 100644 --- a/include/clang/Frontend/PCHReader.h +++ b/include/clang/Frontend/PCHReader.h @@ -226,6 +226,10 @@ private: /// been de-serialized. std::multimap<unsigned, AddrLabelExpr *> UnresolvedAddrLabelExprs; + /// \brief The number of stat() calls that hit/missed the stat + /// cache. + unsigned NumStatHits, NumStatMisses; + /// \brief The number of source location entries de-serialized from /// the PCH file. unsigned NumSLocEntriesRead; diff --git a/include/clang/Frontend/PCHWriter.h b/include/clang/Frontend/PCHWriter.h index 96c6c79de4..b16058c154 100644 --- a/include/clang/Frontend/PCHWriter.h +++ b/include/clang/Frontend/PCHWriter.h @@ -33,6 +33,7 @@ namespace clang { class ASTContext; class LabelStmt; +class MemorizeStatCalls; class Preprocessor; class Sema; class SourceManager; @@ -161,6 +162,7 @@ private: void WriteBlockInfoBlock(); void WriteTargetTriple(const TargetInfo &Target); void WriteLanguageOptions(const LangOptions &LangOpts); + void WriteStatCache(MemorizeStatCalls &StatCalls); void WriteSourceManagerBlock(SourceManager &SourceMgr, const Preprocessor &PP); void WritePreprocessor(const Preprocessor &PP); @@ -183,7 +185,7 @@ public: PCHWriter(llvm::BitstreamWriter &Stream); /// \brief Write a precompiled header for the given semantic analysis. - void WritePCH(Sema &SemaRef); + void WritePCH(Sema &SemaRef, MemorizeStatCalls *StatCalls); /// \brief Emit a source location. void AddSourceLocation(SourceLocation Loc, RecordData &Record); |