77// ===----------------------------------------------------------------------===//
88
99#include " llvm/TableGen/ScanDependencies.h"
10+ #include " llvm/CAS/ActionCache.h"
1011#include " llvm/CAS/CachingOnDiskFileSystem.h"
1112#include " llvm/Support/MemoryBuffer.h"
1213#include " llvm/Support/PrefixMapper.h"
@@ -83,7 +84,8 @@ fetchCachedIncludedFiles(cas::CASDB &CAS, cas::CASID ID,
8384 return Error::success ();
8485}
8586
86- static Error computeIncludedFiles (cas::CASDB &CAS, cas::CASID Key,
87+ static Error computeIncludedFiles (cas::CASDB &CAS, cas::ActionCache &Cache,
88+ const cas::ActionDescription &Action,
8789 StringRef Input,
8890 SmallVectorImpl<StringRef> &IncludedFiles) {
8991 SmallString<256 > ResultToCache;
@@ -93,24 +95,20 @@ static Error computeIncludedFiles(cas::CASDB &CAS, cas::CASID Key,
9395 Expected<cas::BlobRef> ExpectedResult = CAS.createBlob (ResultToCache);
9496 if (!ExpectedResult)
9597 return ExpectedResult.takeError ();
96- if (Error E = CAS.putCachedResult (Key, *ExpectedResult))
97- return E;
98- return Error::success ();
98+ return Cache.put (Action, CAS.getUniqueID (*ExpectedResult));
9999}
100100
101- Error tablegen::scanTextForIncludes (cas::CASDB &CAS, cas::CASID ExecID ,
102- const cas::BlobRef &Blob,
101+ Error tablegen::scanTextForIncludes (cas::CASDB &CAS, cas::ActionCache &Cache ,
102+ cas::CASID ExecID, const cas::BlobRef &Blob,
103103 SmallVectorImpl<StringRef> &Includes) {
104- constexpr StringLiteral CacheKeyData = " llvm::tablegen::scanTextForIncludes" ;
105-
106- Expected<cas::NodeRef> Key = CAS.createNode ({ExecID, Blob}, CacheKeyData);
107- if (!Key)
108- return Key.takeError ();
109-
110- if (Optional<cas::CASID> ResultID =
111- expectedToOptional (CAS.getCachedResult (*Key)))
112- return fetchCachedIncludedFiles (CAS, *ResultID, Includes);
113- return computeIncludedFiles (CAS, *Key, Blob.getData (), Includes);
104+ cas::UniqueIDRef Inputs[] = {CAS.getUniqueID (ExecID), CAS.getUniqueID (Blob)};
105+ cas::ActionDescription Action (" llvm::tablegen::scanTextForIncludes" , Inputs);
106+ Optional<cas::UniqueIDRef> ResultID;
107+ if (Error E = Cache.get (Action, ResultID))
108+ return E;
109+ if (ResultID)
110+ return fetchCachedIncludedFiles (CAS, CAS.getCASID (*ResultID), Includes);
111+ return computeIncludedFiles (CAS, Cache, Action, Blob.getData (), Includes);
114112}
115113
116114Optional<cas::CASID>
@@ -132,7 +130,8 @@ tablegen::lookupIncludeID(cas::CachingOnDiskFileSystem &FS,
132130 return ID;
133131}
134132
135- Error tablegen::accessAllIncludes (cas::CachingOnDiskFileSystem &FS,
133+ Error tablegen::accessAllIncludes (cas::ActionCache &Cache,
134+ cas::CachingOnDiskFileSystem &FS,
136135 cas::CASID ExecID,
137136 ArrayRef<std::string> IncludeDirs,
138137 const cas::BlobRef &MainFileBlob) {
@@ -157,8 +156,8 @@ Error tablegen::accessAllIncludes(cas::CachingOnDiskFileSystem &FS,
157156 SmallVector<StringRef> IncludedFiles;
158157 while (!Worklist.empty ()) {
159158 IncludedFiles.clear ();
160- if (Error E = scanTextForIncludes (CAS, ExecID, Worklist. pop_back_val () ,
161- IncludedFiles))
159+ if (Error E = scanTextForIncludes (CAS, Cache, ExecID ,
160+ Worklist. pop_back_val (), IncludedFiles))
162161 return E;
163162
164163 // Add included files to the worklist. Ignore files not found, since the
@@ -199,10 +198,12 @@ Error tablegen::createMainFileError(StringRef MainFilename,
199198 " ': " + EC.message ());
200199}
201200
202- Expected<ScanIncludesResult> tablegen::scanIncludes (
203- cas::CASDB &CAS, cas::CASID ExecID, StringRef MainFilename,
204- ArrayRef<std::string> IncludeDirs, ArrayRef<MappedPrefix> PrefixMappings,
205- Optional<TreePathPrefixMapper> *CapturedPM) {
201+ Expected<ScanIncludesResult>
202+ tablegen::scanIncludes (cas::CASDB &CAS, cas::ActionCache &Cache,
203+ cas::CASID ExecID, StringRef MainFilename,
204+ ArrayRef<std::string> IncludeDirs,
205+ ArrayRef<MappedPrefix> PrefixMappings,
206+ Optional<TreePathPrefixMapper> *CapturedPM) {
206207 IntrusiveRefCntPtr<cas::CachingOnDiskFileSystem> FS;
207208 if (Error E = cas::createCachingOnDiskFileSystem (CAS).moveInto (FS))
208209 return std::move (E);
@@ -213,7 +214,7 @@ Expected<ScanIncludesResult> tablegen::scanIncludes(
213214 return MainBlob.takeError ();
214215
215216 // Helper for adding to the worklist.
216- if (Error E = accessAllIncludes (*FS, ExecID, IncludeDirs, *MainBlob))
217+ if (Error E = accessAllIncludes (Cache, *FS, ExecID, IncludeDirs, *MainBlob))
217218 return std::move (E);
218219
219220 Optional<TreePathPrefixMapper> LocalPM;
@@ -236,13 +237,13 @@ Expected<ScanIncludesResult> tablegen::scanIncludes(
236237}
237238
238239Expected<ScanIncludesResult>
239- tablegen::scanIncludesAndRemap (cas::CASDB &CAS, cas::CASID ExecID ,
240- std::string &MainFilename,
240+ tablegen::scanIncludesAndRemap (cas::CASDB &CAS, cas::ActionCache &Cache ,
241+ cas::CASID ExecID, std::string &MainFilename,
241242 std::vector<std::string> &IncludeDirs,
242243 ArrayRef<MappedPrefix> PrefixMappings) {
243244 Optional<TreePathPrefixMapper> PM;
244- auto Result =
245- scanIncludes (CAS, ExecID, MainFilename, IncludeDirs, PrefixMappings, &PM);
245+ auto Result = scanIncludes (CAS, Cache, ExecID, MainFilename, IncludeDirs,
246+ PrefixMappings, &PM);
246247 if (!Result)
247248 return Result.takeError ();
248249
0 commit comments