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