Path: blob/main/contrib/llvm-project/llvm/lib/Remarks/BitstreamRemarkParser.h
35262 views
//===-- BitstreamRemarkParser.h - Parser for Bitstream remarks --*- C++/-*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file provides the impementation of the Bitstream remark parser.9//10//===----------------------------------------------------------------------===//1112#ifndef LLVM_LIB_REMARKS_BITSTREAM_REMARK_PARSER_H13#define LLVM_LIB_REMARKS_BITSTREAM_REMARK_PARSER_H1415#include "llvm/Remarks/BitstreamRemarkContainer.h"16#include "llvm/Remarks/BitstreamRemarkParser.h"17#include "llvm/Remarks/RemarkFormat.h"18#include "llvm/Remarks/RemarkParser.h"19#include <cstdint>20#include <memory>21#include <optional>2223namespace llvm {24namespace remarks {2526struct Remark;2728/// Parses and holds the state of the latest parsed remark.29struct BitstreamRemarkParser : public RemarkParser {30/// The buffer to parse.31BitstreamParserHelper ParserHelper;32/// The string table used for parsing strings.33std::optional<ParsedStringTable> StrTab;34/// Temporary remark buffer used when the remarks are stored separately.35std::unique_ptr<MemoryBuffer> TmpRemarkBuffer;36/// The common metadata used to decide how to parse the buffer.37/// This is filled when parsing the metadata block.38uint64_t ContainerVersion = 0;39uint64_t RemarkVersion = 0;40BitstreamRemarkContainerType ContainerType =41BitstreamRemarkContainerType::Standalone;42/// Wether the parser is ready to parse remarks.43bool ReadyToParseRemarks = false;4445/// Create a parser that expects to find a string table embedded in the46/// stream.47explicit BitstreamRemarkParser(StringRef Buf)48: RemarkParser(Format::Bitstream), ParserHelper(Buf) {}4950/// Create a parser that uses a pre-parsed string table.51BitstreamRemarkParser(StringRef Buf, ParsedStringTable StrTab)52: RemarkParser(Format::Bitstream), ParserHelper(Buf),53StrTab(std::move(StrTab)) {}5455Expected<std::unique_ptr<Remark>> next() override;5657static bool classof(const RemarkParser *P) {58return P->ParserFormat == Format::Bitstream;59}6061/// Parse and process the metadata of the buffer.62Error parseMeta();6364/// Parse a Bitstream remark.65Expected<std::unique_ptr<Remark>> parseRemark();6667private:68/// Helper functions.69Error processCommonMeta(BitstreamMetaParserHelper &Helper);70Error processStandaloneMeta(BitstreamMetaParserHelper &Helper);71Error processSeparateRemarksFileMeta(BitstreamMetaParserHelper &Helper);72Error processSeparateRemarksMetaMeta(BitstreamMetaParserHelper &Helper);73Expected<std::unique_ptr<Remark>>74processRemark(BitstreamRemarkParserHelper &Helper);75Error processExternalFilePath(std::optional<StringRef> ExternalFilePath);76};7778Expected<std::unique_ptr<BitstreamRemarkParser>> createBitstreamParserFromMeta(79StringRef Buf, std::optional<ParsedStringTable> StrTab = std::nullopt,80std::optional<StringRef> ExternalFilePrependPath = std::nullopt);8182} // end namespace remarks83} // end namespace llvm8485#endif /* LLVM_LIB_REMARKS_BITSTREAM_REMARK_PARSER_H */868788