From be00edfee55ee00b76a113e825d6614302abf983 Mon Sep 17 00:00:00 2001 From: Arthur Eubanks Date: Fri, 9 Apr 2021 14:13:29 -0700 Subject: [PATCH] [NewPM] Fix -print-changed when a -filter-print-funcs function is removed -filter-print-funcs -print-changed was crashing after the filter func was removed by a pass with Assertion failed: After.find("*** IR Dump") == 0 && "Unexpected banner format." We weren't printing the banner because when we have -filter-print-funcs, we print each function separately, letting the print function filter out unwanted functions. Reviewed By: jamieschmeiser Differential Revision: https://reviews.llvm.org/D100237 --- llvm/lib/Passes/StandardInstrumentations.cpp | 7 +++++++ llvm/test/Other/print-changed-deleted.ll | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 llvm/test/Other/print-changed-deleted.ll diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp index 7148203..557b099 100644 --- a/llvm/lib/Passes/StandardInstrumentations.cpp +++ b/llvm/lib/Passes/StandardInstrumentations.cpp @@ -540,6 +540,13 @@ void IRChangedPrinter::generateIRRepresentation(Any IR, StringRef PassID, void IRChangedPrinter::handleAfter(StringRef PassID, std::string &Name, const std::string &Before, const std::string &After, Any) { + // We might not get anything to print if we only want to print a specific + // function but it gets deleted. + if (After.empty()) { + Out << "*** IR Deleted After " << PassID << Name << " ***\n"; + return; + } + assert(After.find("*** IR Dump") == 0 && "Unexpected banner format."); StringRef AfterRef = After; StringRef Banner = diff --git a/llvm/test/Other/print-changed-deleted.ll b/llvm/test/Other/print-changed-deleted.ll new file mode 100644 index 0000000..9e59b84 --- /dev/null +++ b/llvm/test/Other/print-changed-deleted.ll @@ -0,0 +1,7 @@ +; RUN: opt -passes=globaldce < %s -disable-output -print-changed -filter-print-funcs=f 2>&1 | FileCheck %s + +; CHECK-NOT: IR Dump After GlobalDCEPass +; CHECK: IR Deleted After GlobalDCEPass +; CHECK-NOT: IR Dump After GlobalDCEPass + +declare void @f() -- 2.7.4