13#ifndef LLVM_CGDATA_CODEGENDATAREADER_H
14#define LLVM_CGDATA_CODEGENDATAREADER_H
27 std::string LastErrorMsg;
59 create(std::unique_ptr<MemoryBuffer> Buffer);
84 LastErrorMsg = ErrMsg;
87 return make_error<CGDataError>(Err, ErrMsg);
92 LastError = IPE.
get();
95 return make_error<CGDataError>(LastError, LastErrorMsg);
104 std::unique_ptr<MemoryBuffer> DataBuffer;
110 : DataBuffer(
std::
move(DataBuffer)) {}
118 Error read()
override;
123 return static_cast<CGDataKind>(Header.DataKind);
128 return Header.DataKind &
129 static_cast<uint32_t>(CGDataKind::FunctionOutlinedHashTree);
133 return Header.DataKind &
134 static_cast<uint32_t>(CGDataKind::StableFunctionMergingMap);
145 std::unique_ptr<MemoryBuffer> DataBuffer;
153 : DataBuffer(
std::
move(DataBuffer_)), Line(*DataBuffer,
true,
'#') {}
160 Error read()
override;
168 return static_cast<uint32_t>(DataKind) &
169 static_cast<uint32_t>(CGDataKind::FunctionOutlinedHashTree);
174 return static_cast<uint32_t>(DataKind) &
175 static_cast<uint32_t>(CGDataKind::StableFunctionMergingMap);
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
Defines the virtual file system interface vfs::FileSystem.
const std::string & getMessage() const
virtual bool hasOutlinedHashTree() const =0
Return true if the data has an outlined hash tree.
Error success()
Clear the current error and return a successful one.
virtual ~CodeGenDataReader()=default
virtual bool hasStableFunctionMap() const =0
Return true if the data has a stable function map.
virtual uint32_t getVersion() const =0
Return the codegen data version.
OutlinedHashTreeRecord HashTreeRecord
The outlined hash tree that has been read.
CodeGenDataReader()=default
static LLVM_ABI Expected< std::unique_ptr< CodeGenDataReader > > create(const Twine &Path, vfs::FileSystem &FS)
Factory method to create an appropriately typed reader for the given codegen data file path and file ...
Error error(cgdata_error Err, const std::string &ErrMsg="")
Set the current error and return same.
std::unique_ptr< StableFunctionMap > releaseStableFunctionMap()
StableFunctionMapRecord FunctionMapRecord
The stable function map that has been read. When it's released by.
virtual CGDataKind getDataKind() const =0
Return the codegen data kind.
virtual Error read()=0
Read the header. Required before reading first record.
static LLVM_ABI Error mergeFromObjectFile(const object::ObjectFile *Obj, OutlinedHashTreeRecord &GlobalOutlineRecord, StableFunctionMapRecord &GlobalFunctionMapRecord, stable_hash *CombinedHash=nullptr)
Extract the cgdata embedded in sections from the given object file and merge them into the GlobalOutl...
std::unique_ptr< OutlinedHashTree > releaseOutlinedHashTree()
Return the outlined hash tree that is released from the reader.
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
Tagged union holding either a T or a Error.
bool hasStableFunctionMap() const override
Return true if the header indicates the data has a stable function map.
IndexedCodeGenDataReader(const IndexedCodeGenDataReader &)=delete
bool hasOutlinedHashTree() const override
Return true if the header indicates the data has an outlined hash tree.
IndexedCodeGenDataReader(std::unique_ptr< MemoryBuffer > DataBuffer)
CGDataKind getDataKind() const override
Return the codegen data kind.
IndexedCodeGenDataReader & operator=(const IndexedCodeGenDataReader &)=delete
uint32_t getVersion() const override
Return the codegen data version.
This interface provides simple read-only access to a block of memory, and provides simple methods for...
This format is a simple text format that's suitable for test data.
bool hasStableFunctionMap() const override
Return true if the header indicates the data has a stable function map.
bool hasOutlinedHashTree() const override
Return true if the header indicates the data has an outlined hash tree.
TextCodeGenDataReader & operator=(const TextCodeGenDataReader &)=delete
uint32_t getVersion() const override
Text format does not have version, so return 0.
TextCodeGenDataReader(const TextCodeGenDataReader &)=delete
TextCodeGenDataReader(std::unique_ptr< MemoryBuffer > DataBuffer_)
CGDataKind getDataKind() const override
Return the codegen data kind.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
A forward iterator which reads text lines from a buffer.
This class is the base class for all object file types.
The virtual file system interface.
This is an optimization pass for GlobalISel generic memory operations.
void handleAllErrors(Error E, HandlerTs &&... Handlers)
Behaves the same as handleErrors, except that by contract all errors must be handled by the given han...
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Implement std::hash so that hash_code can be used in STL containers.
std::unique_ptr< OutlinedHashTree > HashTree
The structure of the serialized stable function map is as follows:
std::unique_ptr< StableFunctionMap > FunctionMap