[NewPM] Fix -print-changed when a -filter-print-funcs function is removed
authorArthur Eubanks <aeubanks@google.com>
Fri, 9 Apr 2021 21:13:29 +0000 (14:13 -0700)
committerArthur Eubanks <aeubanks@google.com>
Mon, 12 Apr 2021 18:55:17 +0000 (11:55 -0700)
-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
llvm/test/Other/print-changed-deleted.ll [new file with mode: 0644]

index 7148203..557b099 100644 (file)
@@ -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 (file)
index 0000000..9e59b84
--- /dev/null
@@ -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()