LLVM  10.0.0svn
BitstreamRemarkParser.h
Go to the documentation of this file.
1 //===-- BitstreamRemarkParser.h - Bitstream parser --------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file provides an implementation of the remark parser using the LLVM
10 // Bitstream format.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_REMARKS_BITSTREAM_REMARK_PARSER_H
15 #define LLVM_REMARKS_BITSTREAM_REMARK_PARSER_H
16 
17 #include "llvm/ADT/StringRef.h"
20 #include "llvm/Remarks/Remark.h"
22 #include "llvm/Support/Error.h"
23 #include <array>
24 
25 namespace llvm {
26 namespace remarks {
27 
28 /// Helper to parse a META_BLOCK for a bitstream remark container.
30  /// The Bitstream reader.
32  /// Reference to the storage for the block info.
34  /// The parsed content: depending on the container type, some fields might be
35  /// empty.
41 
42  /// Continue parsing with \p Stream. \p Stream is expected to contain a
43  /// ENTER_SUBBLOCK to the META_BLOCK at the current position.
44  /// \p Stream is expected to have a BLOCKINFO_BLOCK set.
46  BitstreamBlockInfo &BlockInfo);
47 
48  /// Parse the META_BLOCK and fill the available entries.
49  /// This helper does not check for the validity of the fields.
50  Error parse();
51 };
52 
53 /// Helper to parse a REMARK_BLOCK for a bitstream remark container.
55  /// The Bitstream reader.
57  /// The parsed content: depending on the remark, some fields might be empty.
66  struct Argument {
72  };
74  /// Avoid re-allocating a vector every time.
76 
77  /// Continue parsing with \p Stream. \p Stream is expected to contain a
78  /// ENTER_SUBBLOCK to the REMARK_BLOCK at the current position.
79  /// \p Stream is expected to have a BLOCKINFO_BLOCK set and to have already
80  /// parsed the META_BLOCK.
82 
83  /// Parse the REMARK_BLOCK and fill the available entries.
84  /// This helper does not check for the validity of the fields.
85  Error parse();
86 };
87 
88 /// Helper to parse any bitstream remark container.
90  /// The Bitstream reader.
92  /// The block info block.
94  /// Start parsing at \p Buffer.
96  /// Parse the magic number.
98  /// Parse the block info block containing all the abbrevs.
99  /// This needs to be called before calling any other parsing function.
100  Error parseBlockInfoBlock();
101  /// Return true if the next block is a META_BLOCK. This function does not move
102  /// the cursor.
103  Expected<bool> isMetaBlock();
104  /// Return true if the next block is a REMARK_BLOCK. This function does not
105  /// move the cursor.
106  Expected<bool> isRemarkBlock();
107  /// Return true if the parser reached the end of the stream.
108  bool atEndOfStream() { return Stream.AtEndOfStream(); }
109  /// Jump to the end of the stream, skipping everything.
110  void skipToEnd() { return Stream.skipToEnd(); }
111 };
112 
113 } // end namespace remarks
114 } // end namespace llvm
115 
116 #endif /* LLVM_REMARKS_BITSTREAM_REMARK_PARSER_H */
Helper to parse any bitstream remark container.
This class represents lattice values for constants.
Definition: AllocatorList.h:23
static Expected< bool > parseMagic(StringRef &Buf)
BitstreamBlockInfo & BlockInfo
Reference to the storage for the block info.
bool atEndOfStream()
Return true if the parser reached the end of the stream.
Helper to parse a META_BLOCK for a bitstream remark container.
void skipToEnd()
Jump to the end of the stream, skipping everything.
Helper to parse a REMARK_BLOCK for a bitstream remark container.
Tagged union holding either a T or a Error.
Definition: yaml2obj.h:21
void skipToEnd()
Skip to the end of the file.
Optional< uint8_t > Type
The parsed content: depending on the remark, some fields might be empty.
SmallVector< Argument, 8 > TmpArgs
Avoid re-allocating a vector every time.
BitstreamCursor & Stream
The Bitstream reader.
BitstreamCursor & Stream
The Bitstream reader.
Optional< uint64_t > ContainerVersion
The parsed content: depending on the container type, some fields might be empty.
BitstreamBlockInfo BlockInfo
The block info block.
This represents a position within a bitcode file, implemented on top of a SimpleBitstreamCursor.
This is a &#39;vector&#39; (really, a variable-sized array), optimized for the case when the array is small...
Definition: SmallVector.h:837
BitstreamCursor Stream
The Bitstream reader.
This class maintains the abbreviations read from a block info block.
BitstreamMetaParserHelper(BitstreamCursor &Stream, BitstreamBlockInfo &BlockInfo)
Continue parsing with Stream.
Error parse()
Parse the META_BLOCK and fill the available entries.
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48