1*8bcb0991SDimitry Andric //===- RemarkSerializer.cpp -----------------------------------------------===//
2*8bcb0991SDimitry Andric //
3*8bcb0991SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*8bcb0991SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*8bcb0991SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*8bcb0991SDimitry Andric //
7*8bcb0991SDimitry Andric //===----------------------------------------------------------------------===//
8*8bcb0991SDimitry Andric //
9*8bcb0991SDimitry Andric // This file provides tools for serializing remarks.
10*8bcb0991SDimitry Andric //
11*8bcb0991SDimitry Andric //===----------------------------------------------------------------------===//
12*8bcb0991SDimitry Andric
13*8bcb0991SDimitry Andric #include "llvm/Remarks/RemarkSerializer.h"
14*8bcb0991SDimitry Andric #include "llvm/Remarks/BitstreamRemarkSerializer.h"
15*8bcb0991SDimitry Andric #include "llvm/Remarks/YAMLRemarkSerializer.h"
16*8bcb0991SDimitry Andric
17*8bcb0991SDimitry Andric using namespace llvm;
18*8bcb0991SDimitry Andric using namespace llvm::remarks;
19*8bcb0991SDimitry Andric
20*8bcb0991SDimitry Andric Expected<std::unique_ptr<RemarkSerializer>>
createRemarkSerializer(Format RemarksFormat,SerializerMode Mode,raw_ostream & OS)21*8bcb0991SDimitry Andric remarks::createRemarkSerializer(Format RemarksFormat, SerializerMode Mode,
22*8bcb0991SDimitry Andric raw_ostream &OS) {
23*8bcb0991SDimitry Andric switch (RemarksFormat) {
24*8bcb0991SDimitry Andric case Format::Unknown:
25*8bcb0991SDimitry Andric return createStringError(std::errc::invalid_argument,
26*8bcb0991SDimitry Andric "Unknown remark serializer format.");
27*8bcb0991SDimitry Andric case Format::YAML:
28*8bcb0991SDimitry Andric return std::make_unique<YAMLRemarkSerializer>(OS, Mode);
29*8bcb0991SDimitry Andric case Format::YAMLStrTab:
30*8bcb0991SDimitry Andric return std::make_unique<YAMLStrTabRemarkSerializer>(OS, Mode);
31*8bcb0991SDimitry Andric case Format::Bitstream:
32*8bcb0991SDimitry Andric return std::make_unique<BitstreamRemarkSerializer>(OS, Mode);
33*8bcb0991SDimitry Andric }
34*8bcb0991SDimitry Andric llvm_unreachable("Unknown remarks::Format enum");
35*8bcb0991SDimitry Andric }
36*8bcb0991SDimitry Andric
37*8bcb0991SDimitry Andric Expected<std::unique_ptr<RemarkSerializer>>
createRemarkSerializer(Format RemarksFormat,SerializerMode Mode,raw_ostream & OS,remarks::StringTable StrTab)38*8bcb0991SDimitry Andric remarks::createRemarkSerializer(Format RemarksFormat, SerializerMode Mode,
39*8bcb0991SDimitry Andric raw_ostream &OS, remarks::StringTable StrTab) {
40*8bcb0991SDimitry Andric switch (RemarksFormat) {
41*8bcb0991SDimitry Andric case Format::Unknown:
42*8bcb0991SDimitry Andric return createStringError(std::errc::invalid_argument,
43*8bcb0991SDimitry Andric "Unknown remark serializer format.");
44*8bcb0991SDimitry Andric case Format::YAML:
45*8bcb0991SDimitry Andric return std::make_unique<YAMLRemarkSerializer>(OS, Mode, std::move(StrTab));
46*8bcb0991SDimitry Andric case Format::YAMLStrTab:
47*8bcb0991SDimitry Andric return std::make_unique<YAMLStrTabRemarkSerializer>(OS, Mode,
48*8bcb0991SDimitry Andric std::move(StrTab));
49*8bcb0991SDimitry Andric case Format::Bitstream:
50*8bcb0991SDimitry Andric return std::make_unique<BitstreamRemarkSerializer>(OS, Mode,
51*8bcb0991SDimitry Andric std::move(StrTab));
52*8bcb0991SDimitry Andric }
53*8bcb0991SDimitry Andric llvm_unreachable("Unknown remarks::Format enum");
54*8bcb0991SDimitry Andric }
55