From b90092c31f19c022c9ba8d98c73ead403c64b062 Mon Sep 17 00:00:00 2001 From: Tobias Stadler Date: Mon, 1 Sep 2025 18:54:50 +0100 Subject: [PATCH 1/2] [spr] changes to main this commit is based on Created using spr 1.3.7-wip [skip ci] --- .../llvm/Remarks/BitstreamRemarkParser.h | 116 ------------------ llvm/lib/Remarks/BitstreamRemarkParser.cpp | 1 - llvm/lib/Remarks/BitstreamRemarkParser.h | 91 +++++++++++++- 3 files changed, 90 insertions(+), 118 deletions(-) delete mode 100644 llvm/include/llvm/Remarks/BitstreamRemarkParser.h diff --git a/llvm/include/llvm/Remarks/BitstreamRemarkParser.h b/llvm/include/llvm/Remarks/BitstreamRemarkParser.h deleted file mode 100644 index bfa60332d1a90..0000000000000 --- a/llvm/include/llvm/Remarks/BitstreamRemarkParser.h +++ /dev/null @@ -1,116 +0,0 @@ -//===-- BitstreamRemarkParser.h - Bitstream parser --------------*- 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 file provides an implementation of the remark parser using the LLVM -// Bitstream format. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_REMARKS_BITSTREAMREMARKPARSER_H -#define LLVM_REMARKS_BITSTREAMREMARKPARSER_H - -#include "llvm/ADT/ArrayRef.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/Bitstream/BitstreamReader.h" -#include "llvm/Support/Error.h" -#include -#include -#include - -namespace llvm { -namespace remarks { - -/// Helper to parse a META_BLOCK for a bitstream remark container. -struct BitstreamMetaParserHelper { - /// The Bitstream reader. - BitstreamCursor &Stream; - /// Reference to the storage for the block info. - BitstreamBlockInfo &BlockInfo; - /// The parsed content: depending on the container type, some fields might be - /// empty. - std::optional ContainerVersion; - std::optional ContainerType; - std::optional StrTabBuf; - std::optional ExternalFilePath; - std::optional RemarkVersion; - - /// Continue parsing with \p Stream. \p Stream is expected to contain a - /// ENTER_SUBBLOCK to the META_BLOCK at the current position. - /// \p Stream is expected to have a BLOCKINFO_BLOCK set. - BitstreamMetaParserHelper(BitstreamCursor &Stream, - BitstreamBlockInfo &BlockInfo); - - /// Parse the META_BLOCK and fill the available entries. - /// This helper does not check for the validity of the fields. - Error parse(); -}; - -/// Helper to parse a REMARK_BLOCK for a bitstream remark container. -struct BitstreamRemarkParserHelper { - /// The Bitstream reader. - BitstreamCursor &Stream; - /// The parsed content: depending on the remark, some fields might be empty. - std::optional Type; - std::optional RemarkNameIdx; - std::optional PassNameIdx; - std::optional FunctionNameIdx; - std::optional SourceFileNameIdx; - std::optional SourceLine; - std::optional SourceColumn; - std::optional Hotness; - struct Argument { - std::optional KeyIdx; - std::optional ValueIdx; - std::optional SourceFileNameIdx; - std::optional SourceLine; - std::optional SourceColumn; - }; - std::optional> Args; - /// Avoid re-allocating a vector every time. - SmallVector TmpArgs; - - /// Continue parsing with \p Stream. \p Stream is expected to contain a - /// ENTER_SUBBLOCK to the REMARK_BLOCK at the current position. - /// \p Stream is expected to have a BLOCKINFO_BLOCK set and to have already - /// parsed the META_BLOCK. - BitstreamRemarkParserHelper(BitstreamCursor &Stream); - - /// Parse the REMARK_BLOCK and fill the available entries. - /// This helper does not check for the validity of the fields. - Error parse(); -}; - -/// Helper to parse any bitstream remark container. -struct BitstreamParserHelper { - /// The Bitstream reader. - BitstreamCursor Stream; - /// The block info block. - BitstreamBlockInfo BlockInfo; - /// Start parsing at \p Buffer. - BitstreamParserHelper(StringRef Buffer); - /// Parse the magic number. - Expected> parseMagic(); - /// Parse the block info block containing all the abbrevs. - /// This needs to be called before calling any other parsing function. - Error parseBlockInfoBlock(); - /// Return true if the next block is a META_BLOCK. This function does not move - /// the cursor. - Expected isMetaBlock(); - /// Return true if the next block is a REMARK_BLOCK. This function does not - /// move the cursor. - Expected isRemarkBlock(); - /// Return true if the parser reached the end of the stream. - bool atEndOfStream() { return Stream.AtEndOfStream(); } - /// Jump to the end of the stream, skipping everything. - void skipToEnd() { return Stream.skipToEnd(); } -}; - -} // end namespace remarks -} // end namespace llvm - -#endif // LLVM_REMARKS_BITSTREAMREMARKPARSER_H diff --git a/llvm/lib/Remarks/BitstreamRemarkParser.cpp b/llvm/lib/Remarks/BitstreamRemarkParser.cpp index 20a8ebbadc681..86a6c6dffb187 100644 --- a/llvm/lib/Remarks/BitstreamRemarkParser.cpp +++ b/llvm/lib/Remarks/BitstreamRemarkParser.cpp @@ -11,7 +11,6 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Remarks/BitstreamRemarkParser.h" #include "BitstreamRemarkParser.h" #include "llvm/Remarks/Remark.h" #include "llvm/Support/MemoryBuffer.h" diff --git a/llvm/lib/Remarks/BitstreamRemarkParser.h b/llvm/lib/Remarks/BitstreamRemarkParser.h index 061206471fee4..cba805dc24b59 100644 --- a/llvm/lib/Remarks/BitstreamRemarkParser.h +++ b/llvm/lib/Remarks/BitstreamRemarkParser.h @@ -13,10 +13,14 @@ #ifndef LLVM_LIB_REMARKS_BITSTREAM_REMARK_PARSER_H #define LLVM_LIB_REMARKS_BITSTREAM_REMARK_PARSER_H +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Bitstream/BitstreamReader.h" #include "llvm/Remarks/BitstreamRemarkContainer.h" -#include "llvm/Remarks/BitstreamRemarkParser.h" #include "llvm/Remarks/RemarkFormat.h" #include "llvm/Remarks/RemarkParser.h" +#include "llvm/Support/Error.h" +#include #include #include #include @@ -26,6 +30,91 @@ namespace remarks { struct Remark; +/// Helper to parse a META_BLOCK for a bitstream remark container. +struct BitstreamMetaParserHelper { + /// The Bitstream reader. + BitstreamCursor &Stream; + /// Reference to the storage for the block info. + BitstreamBlockInfo &BlockInfo; + /// The parsed content: depending on the container type, some fields might be + /// empty. + std::optional ContainerVersion; + std::optional ContainerType; + std::optional StrTabBuf; + std::optional ExternalFilePath; + std::optional RemarkVersion; + + /// Continue parsing with \p Stream. \p Stream is expected to contain a + /// ENTER_SUBBLOCK to the META_BLOCK at the current position. + /// \p Stream is expected to have a BLOCKINFO_BLOCK set. + BitstreamMetaParserHelper(BitstreamCursor &Stream, + BitstreamBlockInfo &BlockInfo); + + /// Parse the META_BLOCK and fill the available entries. + /// This helper does not check for the validity of the fields. + Error parse(); +}; + +/// Helper to parse a REMARK_BLOCK for a bitstream remark container. +struct BitstreamRemarkParserHelper { + /// The Bitstream reader. + BitstreamCursor &Stream; + /// The parsed content: depending on the remark, some fields might be empty. + std::optional Type; + std::optional RemarkNameIdx; + std::optional PassNameIdx; + std::optional FunctionNameIdx; + std::optional SourceFileNameIdx; + std::optional SourceLine; + std::optional SourceColumn; + std::optional Hotness; + struct Argument { + std::optional KeyIdx; + std::optional ValueIdx; + std::optional SourceFileNameIdx; + std::optional SourceLine; + std::optional SourceColumn; + }; + std::optional> Args; + /// Avoid re-allocating a vector every time. + SmallVector TmpArgs; + + /// Continue parsing with \p Stream. \p Stream is expected to contain a + /// ENTER_SUBBLOCK to the REMARK_BLOCK at the current position. + /// \p Stream is expected to have a BLOCKINFO_BLOCK set and to have already + /// parsed the META_BLOCK. + BitstreamRemarkParserHelper(BitstreamCursor &Stream); + + /// Parse the REMARK_BLOCK and fill the available entries. + /// This helper does not check for the validity of the fields. + Error parse(); +}; + +/// Helper to parse any bitstream remark container. +struct BitstreamParserHelper { + /// The Bitstream reader. + BitstreamCursor Stream; + /// The block info block. + BitstreamBlockInfo BlockInfo; + /// Start parsing at \p Buffer. + BitstreamParserHelper(StringRef Buffer); + /// Parse the magic number. + Expected> parseMagic(); + /// Parse the block info block containing all the abbrevs. + /// This needs to be called before calling any other parsing function. + Error parseBlockInfoBlock(); + /// Return true if the next block is a META_BLOCK. This function does not move + /// the cursor. + Expected isMetaBlock(); + /// Return true if the next block is a REMARK_BLOCK. This function does not + /// move the cursor. + Expected isRemarkBlock(); + /// Return true if the parser reached the end of the stream. + bool atEndOfStream() { return Stream.AtEndOfStream(); } + /// Jump to the end of the stream, skipping everything. + void skipToEnd() { return Stream.skipToEnd(); } +}; + /// Parses and holds the state of the latest parsed remark. struct BitstreamRemarkParser : public RemarkParser { /// The buffer to parse. From e3951bca5a4a5c169975f13faa679a761455976a Mon Sep 17 00:00:00 2001 From: Tobias Stadler Date: Mon, 1 Sep 2025 19:02:32 +0100 Subject: [PATCH 2/2] fix format Created using spr 1.3.7-wip --- llvm/include/llvm/Remarks/BitstreamRemarkContainer.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/Remarks/BitstreamRemarkContainer.h b/llvm/include/llvm/Remarks/BitstreamRemarkContainer.h index 2e378fd755588..48a148a3adc13 100644 --- a/llvm/include/llvm/Remarks/BitstreamRemarkContainer.h +++ b/llvm/include/llvm/Remarks/BitstreamRemarkContainer.h @@ -96,7 +96,8 @@ constexpr StringLiteral MetaExternalFileName("External File"); constexpr StringLiteral RemarkHeaderName("Remark header"); constexpr StringLiteral RemarkDebugLocName("Remark debug location"); constexpr StringLiteral RemarkHotnessName("Remark hotness"); -constexpr StringLiteral RemarkArgWithDebugLocName("Argument with debug location"); +constexpr StringLiteral + RemarkArgWithDebugLocName("Argument with debug location"); constexpr StringLiteral RemarkArgWithoutDebugLocName("Argument"); } // end namespace remarks