11#ifndef PROTEUS_JITSTOREDCACHE_HPP
12#define PROTEUS_JITSTOREDCACHE_HPP
16#include <llvm/Bitcode/BitcodeWriter.h>
17#include <llvm/IR/Module.h>
18#include <llvm/Support/ErrorHandling.h>
19#include <llvm/Support/MemoryBuffer.h>
20#include <llvm/Support/MemoryBufferRef.h>
22#include <llvm/ADT/StringRef.h>
41 : StorageDirectory(
Config::get().ProteusCacheDir
42 ?
Config::get().ProteusCacheDir.value()
44 std::filesystem::create_directory(StorageDirectory);
51 std::string Filebase =
52 StorageDirectory +
"/cache-jit-" + HashValue.
toString();
57 auto CacheBuf = MemoryBuffer::getFileAsStream(Filebase +
".o");
60 return std::make_unique<CompiledLibrary>(std::move(*CacheBuf));
63 if (std::filesystem::exists(Filebase +
".so")) {
65 return std::make_unique<CompiledLibrary>(
66 SmallString<128>{Filebase +
".so"});
72 void store(
HashT &HashValue, MemoryBufferRef ObjBufRef) {
75 std::string Filebase =
76 StorageDirectory +
"/cache-jit-" + HashValue.
toString();
78 saveToFile(Filebase +
".o", StringRef{ObjBufRef.getBufferStart(),
79 ObjBufRef.getBufferSize()});
85 std::string Filebase =
86 StorageDirectory +
"/cache-jit-" + HashValue.
toString();
88 sys::fs::copy_file(Path, Filebase +
".so");
93 printf(
"JitStorageCache hits %lu total %lu\n", Hits, Accesses);
98 uint64_t Accesses = 0;
99 const std::string StorageDirectory;
#define TIMESCOPE(x)
Definition TimeTracing.hpp:64
void saveToFile(llvm::StringRef Filepath, T &&Data)
Definition Utils.h:23
Definition Config.hpp:112
Definition Hashing.hpp:20
std::string toString() const
Definition Hashing.hpp:28
Definition JitStorageCache.hpp:38
void store(HashT &HashValue, MemoryBufferRef ObjBufRef)
Definition JitStorageCache.hpp:72
void storeDynamicLibrary(HashT &HashValue, const SmallString< 128 > &Path)
Definition JitStorageCache.hpp:82
void printStats()
Definition JitStorageCache.hpp:91
JitStorageCache()
Definition JitStorageCache.hpp:40
std::unique_ptr< CompiledLibrary > lookup(HashT &HashValue)
Definition JitStorageCache.hpp:47
Definition BuiltinsCUDA.cpp:4