1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- llvm/Remarks/RemarkStreamer.h ----------------------------*- 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 declares the main interface for streaming remarks.
- //
- // This is used to stream any llvm::remarks::Remark to an open file taking
- // advantage of all the serialization capabilities developed for remarks (e.g.
- // metadata in a section, bitstream format, etc.).
- //
- // Typically, a specialized remark emitter should hold a reference to the main
- // remark streamer set up in the LLVMContext, and should convert specialized
- // diagnostics to llvm::remarks::Remark objects as they get emitted.
- //
- // Specialized remark emitters can be components like:
- // * Remarks from LLVM (M)IR passes
- // * Remarks from the frontend
- // * Remarks from an intermediate IR
- //
- // This allows for composition between specialized remark emitters throughout
- // the compilation pipeline, that end up in the same file, using the same format
- // and serialization techniques.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_REMARKS_REMARKSTREAMER_H
- #define LLVM_REMARKS_REMARKSTREAMER_H
- #include "llvm/Remarks/RemarkSerializer.h"
- #include "llvm/Support/Error.h"
- #include "llvm/Support/Regex.h"
- #include <memory>
- #include <optional>
- namespace llvm {
- class raw_ostream;
- namespace remarks {
- class RemarkStreamer final {
- /// The regex used to filter remarks based on the passes that emit them.
- std::optional<Regex> PassFilter;
- /// The object used to serialize the remarks to a specific format.
- std::unique_ptr<remarks::RemarkSerializer> RemarkSerializer;
- /// The filename that the remark diagnostics are emitted to.
- const std::optional<std::string> Filename;
- public:
- RemarkStreamer(std::unique_ptr<remarks::RemarkSerializer> RemarkSerializer,
- std::optional<StringRef> Filename = std::nullopt);
- /// Return the filename that the remark diagnostics are emitted to.
- std::optional<StringRef> getFilename() const {
- return Filename ? std::optional<StringRef>(*Filename) : std::nullopt;
- }
- /// Return stream that the remark diagnostics are emitted to.
- raw_ostream &getStream() { return RemarkSerializer->OS; }
- /// Return the serializer used for this stream.
- remarks::RemarkSerializer &getSerializer() { return *RemarkSerializer; }
- /// Set a pass filter based on a regex \p Filter.
- /// Returns an error if the regex is invalid.
- Error setFilter(StringRef Filter);
- /// Check wether the string matches the filter.
- bool matchesFilter(StringRef Str);
- /// Check if the remarks also need to have associated metadata in a section.
- bool needsSection() const;
- };
- } // end namespace remarks
- } // end namespace llvm
- #endif // LLVM_REMARKS_REMARKSTREAMER_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|