LLVM  15.0.0git
RemarkStreamer.h
Go to the documentation of this file.
1 //===- llvm/Remarks/RemarkStreamer.h ----------------------------*- 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 declares the main interface for streaming remarks.
10 //
11 // This is used to stream any llvm::remarks::Remark to an open file taking
12 // advantage of all the serialization capabilities developed for remarks (e.g.
13 // metadata in a section, bitstream format, etc.).
14 //
15 // Typically, a specialized remark emitter should hold a reference to the main
16 // remark streamer set up in the LLVMContext, and should convert specialized
17 // diagnostics to llvm::remarks::Remark objects as they get emitted.
18 //
19 // Specialized remark emitters can be components like:
20 // * Remarks from LLVM (M)IR passes
21 // * Remarks from the frontend
22 // * Remarks from an intermediate IR
23 //
24 // This allows for composition between specialized remark emitters throughout
25 // the compilation pipeline, that end up in the same file, using the same format
26 // and serialization techniques.
27 //
28 //===----------------------------------------------------------------------===//
29 
30 #ifndef LLVM_REMARKS_REMARKSTREAMER_H
31 #define LLVM_REMARKS_REMARKSTREAMER_H
32 
33 #include "llvm/ADT/Optional.h"
35 #include "llvm/Support/Error.h"
36 #include "llvm/Support/Regex.h"
37 #include <memory>
38 
39 namespace llvm {
40 
41 class raw_ostream;
42 
43 namespace remarks {
44 class RemarkStreamer final {
45  /// The regex used to filter remarks based on the passes that emit them.
46  Optional<Regex> PassFilter;
47  /// The object used to serialize the remarks to a specific format.
48  std::unique_ptr<remarks::RemarkSerializer> RemarkSerializer;
49  /// The filename that the remark diagnostics are emitted to.
50  const Optional<std::string> Filename;
51 
52 public:
53  RemarkStreamer(std::unique_ptr<remarks::RemarkSerializer> RemarkSerializer,
54  Optional<StringRef> Filename = None);
55 
56  /// Return the filename that the remark diagnostics are emitted to.
58  return Filename ? Optional<StringRef>(*Filename) : None;
59  }
60  /// Return stream that the remark diagnostics are emitted to.
62  /// Return the serializer used for this stream.
64  /// Set a pass filter based on a regex \p Filter.
65  /// Returns an error if the regex is invalid.
66  Error setFilter(StringRef Filter);
67  /// Check wether the string matches the filter.
68  bool matchesFilter(StringRef Str);
69  /// Check if the remarks also need to have associated metadata in a section.
70  bool needsSection() const;
71 };
72 } // end namespace remarks
73 } // end namespace llvm
74 
75 #endif // LLVM_REMARKS_REMARKSTREAMER_H
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:17
Optional.h
llvm::remarks::RemarkStreamer
Definition: RemarkStreamer.h:44
Error.h
llvm::Optional
Definition: APInt.h:33
llvm::remarks::RemarkSerializer::OS
raw_ostream & OS
The open raw_ostream that the remark diagnostics are emitted to.
Definition: RemarkSerializer.h:45
llvm::remarks::RemarkStreamer::RemarkStreamer
RemarkStreamer(std::unique_ptr< remarks::RemarkSerializer > RemarkSerializer, Optional< StringRef > Filename=None)
Definition: RemarkStreamer.cpp:26
llvm::remarks::RemarkStreamer::getSerializer
remarks::RemarkSerializer & getSerializer()
Return the serializer used for this stream.
Definition: RemarkStreamer.h:63
remarks
annotation remarks
Definition: AnnotationRemarks.cpp:114
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:54
llvm::remarks::RemarkStreamer::needsSection
bool needsSection() const
Check if the remarks also need to have associated metadata in a section.
Definition: RemarkStreamer.cpp:49
llvm::None
const NoneType None
Definition: None.h:24
llvm::remarks::RemarkSerializer
This is the base class for a remark serializer.
Definition: RemarkSerializer.h:41
llvm::remarks::RemarkStreamer::getFilename
Optional< StringRef > getFilename() const
Return the filename that the remark diagnostics are emitted to.
Definition: RemarkStreamer.h:57
Regex.h
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:58
llvm::remarks::RemarkStreamer::setFilter
Error setFilter(StringRef Filter)
Set a pass filter based on a regex Filter.
Definition: RemarkStreamer.cpp:32
llvm::remarks::RemarkStreamer::getStream
raw_ostream & getStream()
Return stream that the remark diagnostics are emitted to.
Definition: RemarkStreamer.h:61
llvm::remarks::RemarkStreamer::matchesFilter
bool matchesFilter(StringRef Str)
Check wether the string matches the filter.
Definition: RemarkStreamer.cpp:42
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition: Error.h:155
RemarkSerializer.h