blob: 64de27e372600b62025eafce4ad8871cdfab2850 [file] [log] [blame]
//===- llvm/IR/RemarkStreamer.h - Remark Streamer ---------------*- 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 outputting remarks.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_IR_REMARKSTREAMER_H
#define LLVM_IR_REMARKSTREAMER_H
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/YAMLTraits.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/Regex.h"
#include <string>
#include <vector>
namespace llvm {
/// Streamer for remarks.
class RemarkStreamer {
/// The filename that the remark diagnostics are emitted to.
const std::string Filename;
/// The open raw_ostream that the remark diagnostics are emitted to.
raw_ostream &OS;
/// The regex used to filter remarks based on the passes that emit them.
Optional<Regex> PassFilter;
/// The YAML streamer.
yaml::Output YAMLOutput;
public:
RemarkStreamer(StringRef Filename, raw_ostream& OS);
/// Return the filename that the remark diagnostics are emitted to.
StringRef getFilename() const { return Filename; }
/// Return stream that the remark diagnostics are emitted to.
raw_ostream &getStream() { return OS; }
/// Set a pass filter based on a regex \p Filter.
/// Returns an error if the regex is invalid.
Error setFilter(StringRef Filter);
/// Emit a diagnostic through the streamer.
void emit(const DiagnosticInfoOptimizationBase &Diag);
};
} // end namespace llvm
#endif // LLVM_IR_REMARKSTREAMER_H