diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 1 | ||||
-rw-r--r-- | llvm/lib/IR/RemarkStreamer.cpp | 22 | ||||
-rw-r--r-- | llvm/lib/Remarks/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/lib/Remarks/RemarkFormat.cpp | 30 | ||||
-rw-r--r-- | llvm/lib/Remarks/RemarkParser.cpp | 33 | ||||
-rw-r--r-- | llvm/lib/Remarks/RemarkParserImpl.h | 4 | ||||
-rw-r--r-- | llvm/lib/Remarks/YAMLRemarkParser.h | 4 |
7 files changed, 58 insertions, 37 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 174a9bcfd9b..54f6cc2d557 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -100,6 +100,7 @@ #include "llvm/MC/SectionKind.h" #include "llvm/Pass.h" #include "llvm/Remarks/Remark.h" +#include "llvm/Remarks/RemarkFormat.h" #include "llvm/Remarks/RemarkStringTable.h" #include "llvm/Support/Casting.h" #include "llvm/Support/CommandLine.h" diff --git a/llvm/lib/IR/RemarkStreamer.cpp b/llvm/lib/IR/RemarkStreamer.cpp index 2c3bc8406e5..32adef181f4 100644 --- a/llvm/lib/IR/RemarkStreamer.cpp +++ b/llvm/lib/IR/RemarkStreamer.cpp @@ -15,6 +15,7 @@ #include "llvm/IR/DiagnosticInfo.h" #include "llvm/IR/Function.h" #include "llvm/IR/GlobalValue.h" +#include "llvm/Remarks/RemarkFormat.h" using namespace llvm; @@ -112,30 +113,16 @@ char RemarkSetupPatternError::ID = 0; char RemarkSetupFormatError::ID = 0; static std::unique_ptr<remarks::Serializer> -formatToSerializer(RemarksSerializerFormat RemarksFormat, raw_ostream &OS) { +formatToSerializer(remarks::Format RemarksFormat, raw_ostream &OS) { switch (RemarksFormat) { default: llvm_unreachable("Unknown remark serializer format."); return nullptr; - case RemarksSerializerFormat::YAML: + case remarks::Format::YAML: return llvm::make_unique<remarks::YAMLSerializer>(OS); }; } -Expected<RemarksSerializerFormat> -llvm::parseSerializerFormat(StringRef StrFormat) { - auto Format = StringSwitch<RemarksSerializerFormat>(StrFormat) - .Cases("", "yaml", RemarksSerializerFormat::YAML) - .Default(RemarksSerializerFormat::Unknown); - - if (Format == RemarksSerializerFormat::Unknown) - return createStringError(std::make_error_code(std::errc::invalid_argument), - "Unknown remark serializer format: '%s'", - StrFormat.data()); - - return Format; -} - Expected<std::unique_ptr<ToolOutputFile>> llvm::setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename, StringRef RemarksPasses, StringRef RemarksFormat, @@ -158,8 +145,7 @@ llvm::setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename, if (EC) return make_error<RemarkSetupFileError>(errorCodeToError(EC)); - Expected<RemarksSerializerFormat> Format = - parseSerializerFormat(RemarksFormat); + Expected<remarks::Format> Format = remarks::parseFormat(RemarksFormat); if (Error E = Format.takeError()) return make_error<RemarkSetupFormatError>(std::move(E)); diff --git a/llvm/lib/Remarks/CMakeLists.txt b/llvm/lib/Remarks/CMakeLists.txt index 73383597acc..06ddbab6de5 100644 --- a/llvm/lib/Remarks/CMakeLists.txt +++ b/llvm/lib/Remarks/CMakeLists.txt @@ -1,5 +1,6 @@ add_llvm_library(LLVMRemarks Remark.cpp + RemarkFormat.cpp RemarkParser.cpp RemarkStringTable.cpp YAMLRemarkParser.cpp diff --git a/llvm/lib/Remarks/RemarkFormat.cpp b/llvm/lib/Remarks/RemarkFormat.cpp new file mode 100644 index 00000000000..bcd0f753ff6 --- /dev/null +++ b/llvm/lib/Remarks/RemarkFormat.cpp @@ -0,0 +1,30 @@ +//===- RemarkFormat.cpp --------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// Implementation of utilities to handle the different remark formats. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Remarks/RemarkFormat.h" +#include "llvm/ADT/StringSwitch.h" + +using namespace llvm; +using namespace llvm::remarks; + +Expected<Format> llvm::remarks::parseFormat(StringRef FormatStr) { + auto Result = StringSwitch<Format>(FormatStr) + .Cases("", "yaml", Format::YAML) + .Default(Format::Unknown); + + if (Result == Format::Unknown) + return createStringError(std::make_error_code(std::errc::invalid_argument), + "Unknown remark serializer format: '%s'", + FormatStr.data()); + + return Result; +} diff --git a/llvm/lib/Remarks/RemarkParser.cpp b/llvm/lib/Remarks/RemarkParser.cpp index bd83ba488d8..41ed64d022b 100644 --- a/llvm/lib/Remarks/RemarkParser.cpp +++ b/llvm/lib/Remarks/RemarkParser.cpp @@ -20,31 +20,35 @@ using namespace llvm; using namespace llvm::remarks; -static std::unique_ptr<ParserImpl> formatToParserImpl(ParserFormat Format, +static std::unique_ptr<ParserImpl> formatToParserImpl(Format ParserFormat, StringRef Buf) { - switch (Format) { - case ParserFormat::YAML: + switch (ParserFormat) { + case Format::YAML: return llvm::make_unique<YAMLParserImpl>(Buf); + case Format::Unknown: + llvm_unreachable("Unhandled llvm::remarks::ParserFormat enum"); + return nullptr; }; - llvm_unreachable("Unhandled llvm::remarks::ParserFormat enum"); } static std::unique_ptr<ParserImpl> -formatToParserImpl(ParserFormat Format, StringRef Buf, +formatToParserImpl(Format ParserFormat, StringRef Buf, const ParsedStringTable &StrTab) { - switch (Format) { - case ParserFormat::YAML: + switch (ParserFormat) { + case Format::YAML: return llvm::make_unique<YAMLParserImpl>(Buf, &StrTab); + case Format::Unknown: + llvm_unreachable("Unhandled llvm::remarks::ParserFormat enum"); + return nullptr; }; - llvm_unreachable("Unhandled llvm::remarks::ParserFormat enum"); } -Parser::Parser(ParserFormat Format, StringRef Buf) - : Impl(formatToParserImpl(Format, Buf)) {} +Parser::Parser(Format ParserFormat, StringRef Buf) + : Impl(formatToParserImpl(ParserFormat, Buf)) {} -Parser::Parser(ParserFormat Format, StringRef Buf, +Parser::Parser(Format ParserFormat, StringRef Buf, const ParsedStringTable &StrTab) - : Impl(formatToParserImpl(Format, Buf, StrTab)) {} + : Impl(formatToParserImpl(ParserFormat, Buf, StrTab)) {} Parser::~Parser() = default; @@ -110,9 +114,8 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(remarks::Parser, LLVMRemarkParserRef) extern "C" LLVMRemarkParserRef LLVMRemarkParserCreateYAML(const void *Buf, uint64_t Size) { - return wrap( - new remarks::Parser(remarks::ParserFormat::YAML, - StringRef(static_cast<const char *>(Buf), Size))); + return wrap(new remarks::Parser( + remarks::Format::YAML, StringRef(static_cast<const char *>(Buf), Size))); } static void handleYAMLError(remarks::YAMLParserImpl &Impl, Error E) { diff --git a/llvm/lib/Remarks/RemarkParserImpl.h b/llvm/lib/Remarks/RemarkParserImpl.h index 6b9329b1815..5f8c21dcdd4 100644 --- a/llvm/lib/Remarks/RemarkParserImpl.h +++ b/llvm/lib/Remarks/RemarkParserImpl.h @@ -19,13 +19,13 @@ namespace llvm { namespace remarks { /// This is used as a base for any parser implementation. struct ParserImpl { - explicit ParserImpl(ParserFormat Format) : Format(Format) {} + explicit ParserImpl(Format ParserFormat) : ParserFormat(ParserFormat) {} // Virtual destructor prevents mismatched deletes virtual ~ParserImpl() {} // The parser format. This is used as a tag to safely cast between // implementations. - ParserFormat Format; + Format ParserFormat; }; } // end namespace remarks } // end namespace llvm diff --git a/llvm/lib/Remarks/YAMLRemarkParser.h b/llvm/lib/Remarks/YAMLRemarkParser.h index 9ed18eebe77..14698bbd3ca 100644 --- a/llvm/lib/Remarks/YAMLRemarkParser.h +++ b/llvm/lib/Remarks/YAMLRemarkParser.h @@ -127,11 +127,11 @@ struct YAMLParserImpl : public ParserImpl { YAMLParserImpl(StringRef Buf, Optional<const ParsedStringTable *> StrTab = None) - : ParserImpl{ParserFormat::YAML}, YAMLParser(Buf, StrTab), + : ParserImpl{Format::YAML}, YAMLParser(Buf, StrTab), YAMLIt(YAMLParser.Stream.begin()), HasErrors(false) {} static bool classof(const ParserImpl *PI) { - return PI->Format == ParserFormat::YAML; + return PI->ParserFormat == Format::YAML; } }; } // end namespace remarks |