diff options
Diffstat (limited to 'include/llvm/Remarks/RemarkStringTable.h')
-rw-r--r-- | include/llvm/Remarks/RemarkStringTable.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/include/llvm/Remarks/RemarkStringTable.h b/include/llvm/Remarks/RemarkStringTable.h new file mode 100644 index 000000000000..f9b4fdbbfb8d --- /dev/null +++ b/include/llvm/Remarks/RemarkStringTable.h @@ -0,0 +1,59 @@ +//===-- RemarkStringTable.h - Serializing string table ----------*- C++/-*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This class is used to deduplicate and serialize a string table used for +// generating remarks. +// +// For parsing a string table, use ParsedStringTable in RemarkParser.h +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_REMARKS_REMARK_STRING_TABLE_H +#define LLVM_REMARKS_REMARK_STRING_TABLE_H + +#include "llvm/ADT/StringMap.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/Allocator.h" +#include <vector> + +namespace llvm { + +class raw_ostream; + +namespace remarks { + +/// The string table used for serializing remarks. +/// This table can be for example serialized in a section to be consumed after +/// the compilation. +struct StringTable { + /// Allocator holding all the memory used by the map. + BumpPtrAllocator Allocator; + /// The string table containing all the unique strings used in the output. + /// It maps a string to an unique ID. + StringMap<unsigned, BumpPtrAllocator &> StrTab; + /// Total size of the string table when serialized. + size_t SerializedSize = 0; + + StringTable() : Allocator(), StrTab(Allocator) {} + /// Add a string to the table. It returns an unique ID of the string. + std::pair<unsigned, StringRef> add(StringRef Str); + /// Serialize the string table to a stream. It is serialized as a little + /// endian uint64 (the size of the table in bytes) followed by a sequence of + /// NULL-terminated strings, where the N-th string is the string with the ID N + /// in the StrTab map. + void serialize(raw_ostream &OS) const; + /// Serialize the string table to a vector. This allows users to do the actual + /// writing to file/memory/other. + /// The string with the ID == N should be the N-th element in the vector. + std::vector<StringRef> serialize() const; +}; + +} // end namespace remarks +} // end namespace llvm + +#endif /* LLVM_REMARKS_REMARK_STRING_TABLE_H */ |