brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · bf36286 Raw
77 lines · cpp
1#include "mlir/Remark/RemarkStreamer.h"2#include "mlir/IR/MLIRContext.h"3#include "mlir/IR/Remarks.h"4 5#include "llvm/Remarks/RemarkSerializer.h"6#include "llvm/Remarks/RemarkStreamer.h"7#include "llvm/Support/Error.h"8#include "llvm/Support/FileSystem.h"9#include "llvm/Support/ToolOutputFile.h"10 11namespace mlir::remark::detail {12 13FailureOr<std::unique_ptr<MLIRRemarkStreamerBase>>14LLVMRemarkStreamer::createToFile(llvm::StringRef path,15                                 llvm::remarks::Format fmt) {16  std::error_code ec;17  // Use error_code ctor; YAML is text. (Bitstream also works fine here.)18  auto f =19      std::make_unique<llvm::ToolOutputFile>(path, ec, llvm::sys::fs::OF_Text);20  if (ec)21    return failure();22 23  auto serOr = llvm::remarks::createRemarkSerializer(fmt, f->os());24  if (!serOr) {25    llvm::consumeError(serOr.takeError());26    return failure();27  }28 29  auto rs =30      std::make_unique<llvm::remarks::RemarkStreamer>(std::move(*serOr), path);31 32  auto impl = std::unique_ptr<LLVMRemarkStreamer>(new LLVMRemarkStreamer());33  impl->remarkStreamer = std::move(rs);34  impl->file = std::move(f);35  return std::unique_ptr<MLIRRemarkStreamerBase>(std::move(impl));36}37 38void LLVMRemarkStreamer::streamOptimizationRemark(const Remark &remark) {39  if (!remarkStreamer->matchesFilter(remark.getCategoryName()))40    return;41 42  // First, convert the diagnostic to a remark.43  llvm::remarks::Remark r = remark.generateRemark();44  // Then, emit the remark through the serializer.45  remarkStreamer->getSerializer().emit(r);46}47 48LLVMRemarkStreamer::~LLVMRemarkStreamer() {49  if (file && remarkStreamer)50    file->keep();51}52 53void LLVMRemarkStreamer::finalize() {54  if (!remarkStreamer)55    return;56  remarkStreamer->releaseSerializer();57}58} // namespace mlir::remark::detail59 60namespace mlir::remark {61LogicalResult enableOptimizationRemarksWithLLVMStreamer(62    MLIRContext &ctx, StringRef path, llvm::remarks::Format fmt,63    std::unique_ptr<detail::RemarkEmittingPolicyBase> remarkEmittingPolicy,64    const RemarkCategories &cat, bool printAsEmitRemarks) {65 66  FailureOr<std::unique_ptr<detail::MLIRRemarkStreamerBase>> sOr =67      detail::LLVMRemarkStreamer::createToFile(path, fmt);68  if (failed(sOr))69    return failure();70 71  return remark::enableOptimizationRemarks(ctx, std::move(*sOr),72                                           std::move(remarkEmittingPolicy), cat,73                                           printAsEmitRemarks);74}75 76} // namespace mlir::remark77