123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #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/ADT/Optional.h"
- #include "llvm/Remarks/RemarkSerializer.h"
- #include "llvm/Support/Error.h"
- #include "llvm/Support/Regex.h"
- #include "llvm/Support/raw_ostream.h"
- #include <memory>
- namespace llvm {
- namespace remarks {
- class RemarkStreamer final {
- /// The regex used to filter remarks based on the passes that emit them.
- 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 Optional<std::string> Filename;
- public:
- RemarkStreamer(std::unique_ptr<remarks::RemarkSerializer> RemarkSerializer,
- Optional<StringRef> Filename = None);
- /// Return the filename that the remark diagnostics are emitted to.
- Optional<StringRef> getFilename() const {
- return Filename ? Optional<StringRef>(*Filename) : None;
- }
- /// 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
|