[PATCH] D23946: [ThinLTO] Move loading of cache entry to client
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 26 16:37:24 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL279883: [ThinLTO] Move loading of cache entry to client (authored by tejohnson).
Changed prior to commit:
https://reviews.llvm.org/D23946?vs=69446&id=69451#toc
Repository:
rL LLVM
https://reviews.llvm.org/D23946
Files:
llvm/trunk/include/llvm/LTO/Caching.h
llvm/trunk/lib/LTO/Caching.cpp
llvm/trunk/tools/gold/gold-plugin.cpp
llvm/trunk/tools/llvm-lto2/llvm-lto2.cpp
Index: llvm/trunk/include/llvm/LTO/Caching.h
===================================================================
--- llvm/trunk/include/llvm/LTO/Caching.h
+++ llvm/trunk/include/llvm/LTO/Caching.h
@@ -22,7 +22,7 @@
namespace llvm {
namespace lto {
/// Type for client-supplied callback when a buffer is loaded from the cache.
-typedef std::function<void(std::unique_ptr<MemoryBuffer>)> AddBufferFn;
+typedef std::function<void(std::string)> AddBufferFn;
/// Manage caching on the filesystem.
///
@@ -65,7 +65,7 @@
/// Path to temporary file used to buffer output that will be committed to the
/// cache entry when this object is destroyed
SmallString<128> TempFilename;
- /// User-supplied callback, called when the buffer is pulled out of the cache
+ /// User-supplied callback, used to provide path to cache entry
/// (potentially after creating it).
AddBufferFn AddBuffer;
@@ -77,8 +77,8 @@
/// Create a CacheObjectOutput: the client is supposed to create it in the
/// callback supplied to LTO::run. The \p CacheDirectoryPath points to the
/// directory on disk where to store the cache, and \p AddBuffer will be
- /// called when the buffer is pulled out of the cache (potentially after
- /// creating it).
+ /// called when the buffer is ready to be pulled out of the cache
+ /// (potentially after creating it).
CacheObjectOutput(StringRef CacheDirectoryPath, AddBufferFn AddBuffer)
: CacheDirectoryPath(CacheDirectoryPath), AddBuffer(AddBuffer) {}
Index: llvm/trunk/lib/LTO/Caching.cpp
===================================================================
--- llvm/trunk/lib/LTO/Caching.cpp
+++ llvm/trunk/lib/LTO/Caching.cpp
@@ -64,14 +64,8 @@
// We commit the tempfile into the cache now, by moving it to EntryPath.
commitEntry(TempFilename, EntryPath);
}
- // Load the entry from the cache now.
- auto ReloadedBufferOrErr = MemoryBuffer::getFile(EntryPath);
- if (auto EC = ReloadedBufferOrErr.getError())
- report_fatal_error(Twine("Can't reload cached file '") + EntryPath + "': " +
- EC.message() + "\n");
-
- // Supply the resulting buffer to the user.
- AddBuffer(std::move(*ReloadedBufferOrErr));
+ // Supply the cache path to the user.
+ AddBuffer(EntryPath.str());
}
// Return an allocated stream for the output, or null in case of failure.
Index: llvm/trunk/tools/gold/gold-plugin.cpp
===================================================================
--- llvm/trunk/tools/gold/gold-plugin.cpp
+++ llvm/trunk/tools/gold/gold-plugin.cpp
@@ -802,14 +802,13 @@
auto &OutputName = Filenames[Task];
getOutputFileName(Filename, /*TempOutFile=*/!SaveTemps, OutputName,
MaxTasks > 1 ? Task : -1);
- IsTemporary[Task] = !SaveTemps;
+ IsTemporary[Task] = !SaveTemps && options::cache_dir.empty();
if (options::cache_dir.empty())
return llvm::make_unique<LTOOutput>(OutputName);
return llvm::make_unique<CacheObjectOutput>(
- options::cache_dir, [OutputName](std::unique_ptr<MemoryBuffer> Buffer) {
- *LTOOutput(OutputName).getStream() << Buffer->getBuffer();
- });
+ options::cache_dir,
+ [&OutputName](std::string EntryPath) { OutputName = EntryPath; });
};
check(Lto->run(AddOutput));
Index: llvm/trunk/tools/llvm-lto2/llvm-lto2.cpp
===================================================================
--- llvm/trunk/tools/llvm-lto2/llvm-lto2.cpp
+++ llvm/trunk/tools/llvm-lto2/llvm-lto2.cpp
@@ -198,8 +198,14 @@
return llvm::make_unique<LTOOutput>(std::move(Path));
return llvm::make_unique<CacheObjectOutput>(
- CacheDir, [Path](std::unique_ptr<MemoryBuffer> Buffer) {
- *LTOOutput(Path).getStream() << Buffer->getBuffer();
+ CacheDir, [Path](std::string EntryPath) {
+ // Load the entry from the cache now.
+ auto ReloadedBufferOrErr = MemoryBuffer::getFile(EntryPath);
+ if (auto EC = ReloadedBufferOrErr.getError())
+ report_fatal_error(Twine("Can't reload cached file '") + EntryPath +
+ "': " + EC.message() + "\n");
+
+ *LTOOutput(Path).getStream() << (*ReloadedBufferOrErr)->getBuffer();
});
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23946.69451.patch
Type: text/x-patch
Size: 4249 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160826/8c929d60/attachment.bin>
More information about the llvm-commits
mailing list