xref: /llvm-project/llvm/lib/Remarks/RemarkFormat.cpp (revision 0d5ad57ae34bacbc4f5e5f42508d579bf39bb8cf)
1cc909812SFrancis Visoiu Mistrih //===- RemarkFormat.cpp --------------------------------------------------===//
2cc909812SFrancis Visoiu Mistrih //
3cc909812SFrancis Visoiu Mistrih // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4cc909812SFrancis Visoiu Mistrih // See https://llvm.org/LICENSE.txt for license information.
5cc909812SFrancis Visoiu Mistrih // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6cc909812SFrancis Visoiu Mistrih //
7cc909812SFrancis Visoiu Mistrih //===----------------------------------------------------------------------===//
8cc909812SFrancis Visoiu Mistrih //
9cc909812SFrancis Visoiu Mistrih // Implementation of utilities to handle the different remark formats.
10cc909812SFrancis Visoiu Mistrih //
11cc909812SFrancis Visoiu Mistrih //===----------------------------------------------------------------------===//
12cc909812SFrancis Visoiu Mistrih 
13cc909812SFrancis Visoiu Mistrih #include "llvm/Remarks/RemarkFormat.h"
14cc909812SFrancis Visoiu Mistrih #include "llvm/ADT/StringSwitch.h"
15e72e59e9SFrancis Visoiu Mistrih #include "llvm/Remarks/BitstreamRemarkContainer.h"
16cc909812SFrancis Visoiu Mistrih 
17cc909812SFrancis Visoiu Mistrih using namespace llvm;
18cc909812SFrancis Visoiu Mistrih using namespace llvm::remarks;
19cc909812SFrancis Visoiu Mistrih 
parseFormat(StringRef FormatStr)20cc909812SFrancis Visoiu Mistrih Expected<Format> llvm::remarks::parseFormat(StringRef FormatStr) {
21cc909812SFrancis Visoiu Mistrih   auto Result = StringSwitch<Format>(FormatStr)
22cc909812SFrancis Visoiu Mistrih                     .Cases("", "yaml", Format::YAML)
2384e80979SFrancis Visoiu Mistrih                     .Case("yaml-strtab", Format::YAMLStrTab)
2484e80979SFrancis Visoiu Mistrih                     .Case("bitstream", Format::Bitstream)
25cc909812SFrancis Visoiu Mistrih                     .Default(Format::Unknown);
26cc909812SFrancis Visoiu Mistrih 
27cc909812SFrancis Visoiu Mistrih   if (Result == Format::Unknown)
28cc909812SFrancis Visoiu Mistrih     return createStringError(std::make_error_code(std::errc::invalid_argument),
29c5cc9efaSFrancis Visoiu Mistrih                              "Unknown remark format: '%s'",
30cc909812SFrancis Visoiu Mistrih                              FormatStr.data());
31cc909812SFrancis Visoiu Mistrih 
32cc909812SFrancis Visoiu Mistrih   return Result;
33cc909812SFrancis Visoiu Mistrih }
34e72e59e9SFrancis Visoiu Mistrih 
magicToFormat(StringRef MagicStr)35*0d5ad57aSSimon Pilgrim Expected<Format> llvm::remarks::magicToFormat(StringRef MagicStr) {
36e72e59e9SFrancis Visoiu Mistrih   auto Result =
37*0d5ad57aSSimon Pilgrim       StringSwitch<Format>(MagicStr)
38e72e59e9SFrancis Visoiu Mistrih           .StartsWith("--- ", Format::YAML) // This is only an assumption.
39e72e59e9SFrancis Visoiu Mistrih           .StartsWith(remarks::Magic, Format::YAMLStrTab)
40e72e59e9SFrancis Visoiu Mistrih           .StartsWith(remarks::ContainerMagic, Format::Bitstream)
41e72e59e9SFrancis Visoiu Mistrih           .Default(Format::Unknown);
42e72e59e9SFrancis Visoiu Mistrih 
43e72e59e9SFrancis Visoiu Mistrih   if (Result == Format::Unknown)
44e72e59e9SFrancis Visoiu Mistrih     return createStringError(std::make_error_code(std::errc::invalid_argument),
45*0d5ad57aSSimon Pilgrim                              "Unknown remark magic: '%s'", MagicStr.data());
46e72e59e9SFrancis Visoiu Mistrih   return Result;
47e72e59e9SFrancis Visoiu Mistrih }
48