diff options
Diffstat (limited to 'llvm/lib/Remarks')
-rw-r--r-- | llvm/lib/Remarks/RemarkSerializer.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/Remarks/YAMLRemarkSerializer.cpp | 13 |
2 files changed, 19 insertions, 8 deletions
diff --git a/llvm/lib/Remarks/RemarkSerializer.cpp b/llvm/lib/Remarks/RemarkSerializer.cpp index aa68b497ef2..73cec4fbf9b 100644 --- a/llvm/lib/Remarks/RemarkSerializer.cpp +++ b/llvm/lib/Remarks/RemarkSerializer.cpp @@ -17,22 +17,23 @@ using namespace llvm; using namespace llvm::remarks; Expected<std::unique_ptr<RemarkSerializer>> -remarks::createRemarkSerializer(Format RemarksFormat, raw_ostream &OS) { +remarks::createRemarkSerializer(Format RemarksFormat, SerializerMode Mode, + raw_ostream &OS) { switch (RemarksFormat) { case Format::Unknown: return createStringError(std::errc::invalid_argument, "Unknown remark serializer format."); case Format::YAML: - return llvm::make_unique<YAMLRemarkSerializer>(OS); + return llvm::make_unique<YAMLRemarkSerializer>(OS, Mode); case Format::YAMLStrTab: - return llvm::make_unique<YAMLStrTabRemarkSerializer>(OS); + return llvm::make_unique<YAMLStrTabRemarkSerializer>(OS, Mode); } llvm_unreachable("Unknown remarks::Format enum"); } Expected<std::unique_ptr<RemarkSerializer>> -remarks::createRemarkSerializer(Format RemarksFormat, raw_ostream &OS, - remarks::StringTable StrTab) { +remarks::createRemarkSerializer(Format RemarksFormat, SerializerMode Mode, + raw_ostream &OS, remarks::StringTable StrTab) { switch (RemarksFormat) { case Format::Unknown: return createStringError(std::errc::invalid_argument, @@ -42,7 +43,8 @@ remarks::createRemarkSerializer(Format RemarksFormat, raw_ostream &OS, "Unable to use a string table with the yaml " "format. Use 'yaml-strtab' instead."); case Format::YAMLStrTab: - return llvm::make_unique<YAMLStrTabRemarkSerializer>(OS, std::move(StrTab)); + return llvm::make_unique<YAMLStrTabRemarkSerializer>(OS, Mode, + std::move(StrTab)); } llvm_unreachable("Unknown remarks::Format enum"); } diff --git a/llvm/lib/Remarks/YAMLRemarkSerializer.cpp b/llvm/lib/Remarks/YAMLRemarkSerializer.cpp index 725ac15d7ea..f8ed7407259 100644 --- a/llvm/lib/Remarks/YAMLRemarkSerializer.cpp +++ b/llvm/lib/Remarks/YAMLRemarkSerializer.cpp @@ -149,10 +149,19 @@ template <> struct MappingTraits<Argument> { LLVM_YAML_IS_SEQUENCE_VECTOR(Argument) -YAMLRemarkSerializer::YAMLRemarkSerializer(raw_ostream &OS) - : RemarkSerializer(OS), YAMLOutput(OS, reinterpret_cast<void *>(this)) {} +YAMLRemarkSerializer::YAMLRemarkSerializer(raw_ostream &OS, SerializerMode Mode) + : RemarkSerializer(OS, Mode), YAMLOutput(OS, reinterpret_cast<void *>(this)) {} void YAMLRemarkSerializer::emit(const Remark &Remark) { + // In standalone mode, emit the metadata first and set DidEmitMeta to avoid + // emitting it again. + if (Mode == SerializerMode::Standalone) { + std::unique_ptr<MetaSerializer> MetaSerializer = + metaSerializer(OS, /*ExternalFilename=*/None); + MetaSerializer->emit(); + DidEmitMeta = true; + } + // Again, YAMLTraits expect a non-const object for inputting, but we're not // using that here. auto R = const_cast<remarks::Remark *>(&Remark); |