LLVM  12.0.0git
RemarkStreamer.cpp
Go to the documentation of this file.
1 //===- llvm/Remarks/RemarkStreamer.cpp - Remark Streamer -*- C++ --------*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file contains the implementation of the main remark streamer.
10 //
11 //===----------------------------------------------------------------------===//
12 
15 
16 using namespace llvm;
17 using namespace llvm::remarks;
18 
20  "remarks-section",
21  cl::desc(
22  "Emit a section containing remark diagnostics metadata. By default, "
23  "this is enabled for the following formats: yaml-strtab, bitstream."),
25 
27  std::unique_ptr<remarks::RemarkSerializer> RemarkSerializer,
28  Optional<StringRef> FilenameIn)
29  : PassFilter(), RemarkSerializer(std::move(RemarkSerializer)),
30  Filename(FilenameIn ? Optional<std::string>(FilenameIn->str()) : None) {}
31 
33  Regex R = Regex(Filter);
34  std::string RegexError;
35  if (!R.isValid(RegexError))
36  return createStringError(std::make_error_code(std::errc::invalid_argument),
37  RegexError.data());
38  PassFilter = std::move(R);
39  return Error::success();
40 }
41 
43  if (PassFilter)
44  return PassFilter->match(Str);
45  // No filter means all strings pass.
46  return true;
47 }
48 
51  return true;
52 
54  return false;
55 
57 
58  // We only need a section if we're in separate mode.
60  return false;
61 
62  // Only some formats need a section:
63  // * bitstream
64  // * yaml-strtab
68  return true;
69  default:
70  return false;
71  }
72 }
const NoneType None
Definition: None.h:23
This class represents lattice values for constants.
Definition: AllocatorList.h:23
RemarkStreamer(std::unique_ptr< remarks::RemarkSerializer > RemarkSerializer, Optional< StringRef > Filename=None)
Format SerializerFormat
The format of the serializer.
Definition: BitVector.h:959
std::error_code make_error_code(BitcodeError E)
bool matchesFilter(StringRef Str)
Check wether the string matches the filter.
bool needsSection() const
Check if the remarks also need to have associated metadata in a section.
SerializerMode Mode
The serialization mode.
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:434
Error setFilter(StringRef Filter)
Set a pass filter based on a regex Filter.
static ErrorSuccess success()
Create a success value.
Definition: Error.h:332
This is the base class for a remark serializer.
bool isValid(std::string &Error) const
isValid - returns the error encountered during regex compilation, if any.
Definition: Regex.cpp:72
static cl::opt< cl::boolOrDefault > EnableRemarksSection("remarks-section", cl::desc("Emit a section containing remark diagnostics metadata. By default, " "this is enabled for the following formats: yaml-strtab, bitstream."), cl::init(cl::BOU_UNSET), cl::Hidden)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:57
Error createStringError(std::error_code EC, char const *Fmt, const Ts &... Vals)
Create formatted StringError object.
Definition: Error.h:1202