diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 13 | ||||
| -rw-r--r-- | llvm/lib/IR/RemarkStreamer.cpp | 46 |
2 files changed, 46 insertions, 13 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index ca223f78c16..20c50bb8a2a 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1349,15 +1349,18 @@ void AsmPrinter::emitRemarksSection(Module &M) { return; remarks::RemarkSerializer &RemarkSerializer = RS->getSerializer(); - StringRef FilenameRef = RS->getFilename(); - SmallString<128> Filename = FilenameRef; - sys::fs::make_absolute(Filename); - assert(!Filename.empty() && "The filename can't be empty."); + Optional<SmallString<128>> Filename; + if (Optional<StringRef> FilenameRef = RS->getFilename()) { + Filename = *FilenameRef; + sys::fs::make_absolute(*Filename); + assert(!Filename->empty() && "The filename can't be empty."); + } std::string Buf; raw_string_ostream OS(Buf); std::unique_ptr<remarks::MetaSerializer> MetaSerializer = - RemarkSerializer.metaSerializer(OS, StringRef(Filename)); + Filename ? RemarkSerializer.metaSerializer(OS, StringRef(*Filename)) + : RemarkSerializer.metaSerializer(OS); MetaSerializer->emit(); // Switch to the right section: .remarks/__remarks. diff --git a/llvm/lib/IR/RemarkStreamer.cpp b/llvm/lib/IR/RemarkStreamer.cpp index 73387ecbac1..8a70862de72 100644 --- a/llvm/lib/IR/RemarkStreamer.cpp +++ b/llvm/lib/IR/RemarkStreamer.cpp @@ -22,12 +22,10 @@ using namespace llvm; RemarkStreamer::RemarkStreamer( - StringRef Filename, - std::unique_ptr<remarks::RemarkSerializer> RemarkSerializer) - : Filename(Filename), PassFilter(), - RemarkSerializer(std::move(RemarkSerializer)) { - assert(!Filename.empty() && "This needs to be a real filename."); -} + std::unique_ptr<remarks::RemarkSerializer> RemarkSerializer, + Optional<StringRef> FilenameIn) + : PassFilter(), RemarkSerializer(std::move(RemarkSerializer)), + Filename(FilenameIn ? Optional<std::string>(FilenameIn->str()) : None) {} Error RemarkStreamer::setFilter(StringRef Filter) { Regex R = Regex(Filter); @@ -137,12 +135,13 @@ llvm::setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename, return make_error<RemarkSetupFormatError>(std::move(E)); Expected<std::unique_ptr<remarks::RemarkSerializer>> RemarkSerializer = - remarks::createRemarkSerializer(*Format, remarks::SerializerMode::Separate, RemarksFile->os()); + remarks::createRemarkSerializer( + *Format, remarks::SerializerMode::Separate, RemarksFile->os()); if (Error E = RemarkSerializer.takeError()) return make_error<RemarkSetupFormatError>(std::move(E)); Context.setRemarkStreamer(std::make_unique<RemarkStreamer>( - RemarksFilename, std::move(*RemarkSerializer))); + std::move(*RemarkSerializer), RemarksFilename)); if (!RemarksPasses.empty()) if (Error E = Context.getRemarkStreamer()->setFilter(RemarksPasses)) @@ -150,3 +149,34 @@ llvm::setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename, return std::move(RemarksFile); } + +Error llvm::setupOptimizationRemarks(LLVMContext &Context, raw_ostream &OS, + StringRef RemarksPasses, + StringRef RemarksFormat, + bool RemarksWithHotness, + unsigned RemarksHotnessThreshold) { + if (RemarksWithHotness) + Context.setDiagnosticsHotnessRequested(true); + + if (RemarksHotnessThreshold) + Context.setDiagnosticsHotnessThreshold(RemarksHotnessThreshold); + + Expected<remarks::Format> Format = remarks::parseFormat(RemarksFormat); + if (Error E = Format.takeError()) + return make_error<RemarkSetupFormatError>(std::move(E)); + + Expected<std::unique_ptr<remarks::RemarkSerializer>> RemarkSerializer = + remarks::createRemarkSerializer(*Format, + remarks::SerializerMode::Separate, OS); + if (Error E = RemarkSerializer.takeError()) + return make_error<RemarkSetupFormatError>(std::move(E)); + + Context.setRemarkStreamer( + std::make_unique<RemarkStreamer>(std::move(*RemarkSerializer))); + + if (!RemarksPasses.empty()) + if (Error E = Context.getRemarkStreamer()->setFilter(RemarksPasses)) + return make_error<RemarkSetupPatternError>(std::move(E)); + + return Error::success(); +} |

