[llvm] bd5befb - Revert "Reland A new option -print-on-crash that prints the IR as it was upon entering the last pass when there is a crash."

Jamie Schmeiser via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 7 12:24:31 PDT 2021


Author: Jamie Schmeiser
Date: 2021-10-07T15:23:48-04:00
New Revision: bd5befb55087199ee1c0c3e344847cd06a2ca839

URL: https://github.com/llvm/llvm-project/commit/bd5befb55087199ee1c0c3e344847cd06a2ca839
DIFF: https://github.com/llvm/llvm-project/commit/bd5befb55087199ee1c0c3e344847cd06a2ca839.diff

LOG: Revert "Reland A new option -print-on-crash that prints the IR as it was upon entering the last pass when there is a crash."

This reverts commit 13d1592716a65444314f501109ec9ca344ef1f87.

Added: 
    

Modified: 
    llvm/include/llvm/Passes/StandardInstrumentations.h
    llvm/lib/Passes/PassBuilder.cpp
    llvm/lib/Passes/PassRegistry.def
    llvm/lib/Passes/StandardInstrumentations.cpp

Removed: 
    llvm/test/Other/print-on-crash.ll


################################################################################
diff  --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h
index 6729ae5d484f1..2f573585e766d 100644
--- a/llvm/include/llvm/Passes/StandardInstrumentations.h
+++ b/llvm/include/llvm/Passes/StandardInstrumentations.h
@@ -187,6 +187,17 @@ template <typename IRUnitT> class ChangeReporter {
   // Register required callbacks.
   void registerRequiredCallbacks(PassInstrumentationCallbacks &PIC);
 
+  // Return true when this is a defined function for which printing
+  // of changes is desired.
+  bool isInterestingFunction(const Function &F);
+
+  // Return true when this is a pass for which printing of changes is desired.
+  bool isInterestingPass(StringRef PassID);
+
+  // Return true when this is a pass on IR for which printing
+  // of changes is desired.
+  bool isInteresting(Any IR, StringRef PassID);
+
   // Called on the first IR processed.
   virtual void handleInitialIR(Any IR) = 0;
   // Called before and after a pass to get the representation of the IR.
@@ -398,25 +409,6 @@ class VerifyInstrumentation {
   void registerCallbacks(PassInstrumentationCallbacks &PIC);
 };
 
-// Print IR on crash.
-class PrintCrashIRInstrumentation {
-public:
-  PrintCrashIRInstrumentation()
-      : SavedIR("*** Dump of IR Before Last Pass Unknown ***") {}
-  ~PrintCrashIRInstrumentation();
-  void registerCallbacks(PassInstrumentationCallbacks &PIC);
-  void reportCrashIR();
-
-protected:
-  std::string SavedIR;
-
-private:
-  // The crash reporter that will report on a crash.
-  static PrintCrashIRInstrumentation *CrashReporter;
-  // Crash handler registered when print-on-crash is specified.
-  static void SignalHandler(void *);
-};
-
 /// This class provides an interface to register all the standard pass
 /// instrumentations and manages their state (if any).
 class StandardInstrumentations {
@@ -429,7 +421,6 @@ class StandardInstrumentations {
   IRChangedPrinter PrintChangedIR;
   PseudoProbeVerifier PseudoProbeVerification;
   InLineChangePrinter PrintChangedDiff;
-  PrintCrashIRInstrumentation PrintCrashIR;
   VerifyInstrumentation Verify;
 
   bool VerifyEach;

diff  --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 642453c143409..c3e7bc23ad23c 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -357,13 +357,6 @@ bool shouldPopulateClassToPassNames() {
          !printAfterPasses().empty();
 }
 
-// A pass for testing -print-on-crash.
-// DO NOT USE THIS EXCEPT FOR TESTING!
-class TriggerCrashPass : public PassInfoMixin<TriggerCrashPass> {
-public:
-  PreservedAnalyses run(Module &, ModuleAnalysisManager &) { assert(false); }
-};
-
 } // namespace
 
 PassBuilder::PassBuilder(TargetMachine *TM, PipelineTuningOptions PTO,

diff  --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 9f8c2cb11e04b..655c472878a00 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -106,7 +106,6 @@ MODULE_PASS("strip-debug-declare", StripDebugDeclarePass())
 MODULE_PASS("strip-nondebug", StripNonDebugSymbolsPass())
 MODULE_PASS("strip-nonlinetable-debuginfo", StripNonLineTableDebugInfoPass())
 MODULE_PASS("synthetic-counts-propagation", SyntheticCountsPropagation())
-MODULE_PASS("trigger-crash", TriggerCrashPass())
 MODULE_PASS("verify", VerifierPass())
 MODULE_PASS("wholeprogramdevirt", WholeProgramDevirtPass())
 MODULE_PASS("dfsan", DataFlowSanitizerPass())

diff  --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index 9c374b8c5092a..fbe4f25242c2d 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -27,12 +27,10 @@
 #include "llvm/IR/PrintPasses.h"
 #include "llvm/IR/Verifier.h"
 #include "llvm/Support/CommandLine.h"
-#include "llvm/Support/CrashRecoveryContext.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/Program.h"
-#include "llvm/Support/Signals.h"
 #include "llvm/Support/raw_ostream.h"
 #include <unordered_set>
 #include <vector>
@@ -121,12 +119,6 @@ static cl::opt<std::string>
     DiffBinary("print-changed-
diff -path", cl::Hidden, cl::init("
diff "),
                cl::desc("system 
diff  used by change reporters"));
 
-// An option to print the IR that was being processed when a pass crashes.
-static cl::opt<bool>
-    PrintCrashIR("print-on-crash",
-                 cl::desc("Print the last form of the IR before crash"),
-                 cl::init(false), cl::Hidden);
-
 namespace {
 
 // Perform a system based 
diff  between \p Before and \p After, using
@@ -376,11 +368,20 @@ bool isIgnored(StringRef PassID) {
                         "DevirtSCCRepeatedPass", "ModuleInlinerWrapperPass"});
 }
 
-bool isInterestingFunction(const Function &F) {
+} // namespace
+
+template <typename IRUnitT>
+ChangeReporter<IRUnitT>::~ChangeReporter<IRUnitT>() {
+  assert(BeforeStack.empty() && "Problem with Change Printer stack.");
+}
+
+template <typename IRUnitT>
+bool ChangeReporter<IRUnitT>::isInterestingFunction(const Function &F) {
   return isFunctionInPrintList(F.getName());
 }
 
-bool isInterestingPass(StringRef PassID) {
+template <typename IRUnitT>
+bool ChangeReporter<IRUnitT>::isInterestingPass(StringRef PassID) {
   if (isIgnored(PassID))
     return false;
 
@@ -391,7 +392,8 @@ bool isInterestingPass(StringRef PassID) {
 
 // Return true when this is a pass on IR for which printing
 // of changes is desired.
-bool isInteresting(Any IR, StringRef PassID) {
+template <typename IRUnitT>
+bool ChangeReporter<IRUnitT>::isInteresting(Any IR, StringRef PassID) {
   if (!isInterestingPass(PassID))
     return false;
   if (any_isa<const Function *>(IR))
@@ -399,13 +401,6 @@ bool isInteresting(Any IR, StringRef PassID) {
   return true;
 }
 
-} // namespace
-
-template <typename IRUnitT>
-ChangeReporter<IRUnitT>::~ChangeReporter<IRUnitT>() {
-  assert(BeforeStack.empty() && "Problem with Change Printer stack.");
-}
-
 template <typename IRUnitT>
 void ChangeReporter<IRUnitT>::saveIRBeforePass(Any IR, StringRef PassID) {
   // Always need to place something on the stack because invalidated passes
@@ -1228,51 +1223,6 @@ StandardInstrumentations::StandardInstrumentations(
               PrintChanged == ChangePrinter::PrintChangedColourDiffQuiet),
       Verify(DebugLogging), VerifyEach(VerifyEach) {}
 
-PrintCrashIRInstrumentation *PrintCrashIRInstrumentation::CrashReporter =
-    nullptr;
-
-void PrintCrashIRInstrumentation::reportCrashIR() { dbgs() << SavedIR; }
-
-void PrintCrashIRInstrumentation::SignalHandler(void *) {
-  // Called by signal handlers so do not lock here
-  // Is the PrintCrashIRInstrumentation still alive?
-  if (!CrashReporter)
-    return;
-
-  assert(PrintCrashIR && "Did not expect to get here without option set.");
-  CrashReporter->reportCrashIR();
-}
-
-PrintCrashIRInstrumentation::~PrintCrashIRInstrumentation() {
-  if (!CrashReporter)
-    return;
-
-  assert(PrintCrashIR && "Did not expect to get here without option set.");
-  CrashReporter = nullptr;
-}
-
-void PrintCrashIRInstrumentation::registerCallbacks(
-    PassInstrumentationCallbacks &PIC) {
-  if (!PrintCrashIR || CrashReporter)
-    return;
-
-  sys::AddSignalHandler(SignalHandler, nullptr);
-  CrashReporter = this;
-
-  PIC.registerBeforeNonSkippedPassCallback([this](StringRef PassID, Any IR) {
-    SavedIR.clear();
-    raw_string_ostream OS(SavedIR);
-    OS << formatv("*** Dump of {0}IR Before Last Pass {1}",
-                  llvm::forcePrintModuleIR() ? "Module " : "", PassID);
-    if (!isInteresting(IR, PassID)) {
-      OS << " Filtered Out ***\n";
-      return;
-    }
-    OS << " Started ***\n";
-    unwrapAndPrint(OS, IR);
-  });
-}
-
 void StandardInstrumentations::registerCallbacks(
     PassInstrumentationCallbacks &PIC, FunctionAnalysisManager *FAM) {
   PrintIR.registerCallbacks(PIC);
@@ -1287,7 +1237,6 @@ void StandardInstrumentations::registerCallbacks(
   if (VerifyEach)
     Verify.registerCallbacks(PIC);
   PrintChangedDiff.registerCallbacks(PIC);
-  PrintCrashIR.registerCallbacks(PIC);
 }
 
 namespace llvm {

diff  --git a/llvm/test/Other/print-on-crash.ll b/llvm/test/Other/print-on-crash.ll
deleted file mode 100644
index 7e8ec2dc09ce6..0000000000000
--- a/llvm/test/Other/print-on-crash.ll
+++ /dev/null
@@ -1,32 +0,0 @@
-; A test that the hidden option -print-on-crash properly sets a signal handler
-; which gets called when a pass crashes.  The trigger-crash pass asserts.
-
-; REQUIRES: asserts
-
-; RUN: not --crash opt -print-on-crash -passes=trigger-crash < %s 2>&1 | FileCheck %s --check-prefix=CHECK_SIMPLE
-
-; A test that the signal handler set by the  hidden option -print-on-crash
-; is not called when no pass crashes.
-
-; RUN: opt -print-on-crash -passes="default<O2>" < %s 2>&1 | FileCheck %s --check-prefix=CHECK_NO_CRASH
-
-; RUN: not --crash opt -print-on-crash -print-module-scope -passes=trigger-crash < %s 2>&1 | FileCheck %s --check-prefix=CHECK_MODULE
-
-; RUN: not --crash opt -print-on-crash -print-module-scope -passes=trigger-crash -filter-passes="(anonymous namespace)::TriggerCrashPass" < %s 2>&1 | FileCheck %s --check-prefix=CHECK_MODULE
-
-; RUN: not --crash opt -print-on-crash -print-module-scope -passes=trigger-crash -filter-passes=blah < %s 2>&1 | FileCheck %s --check-prefix=CHECK_FILTERED
-
-; CHECK_SIMPLE: *** Dump of IR Before Last Pass {{.*}} Started ***
-; CHECK_SIMPLE: @main
-; CHECK_SIMPLE: entry:
-; CHECK_NO_CRASH-NOT: *** Dump of IR
-; CHECK_MODULE: *** Dump of Module IR Before Last Pass {{.*}} Started ***
-; CHECK_MODULE: ; ModuleID = {{.*}}
-; CHECK_FILTERED: *** Dump of Module IR Before Last Pass {{.*}} Filtered Out ***
-
-define i32 @main() {
-entry:
-  %retval = alloca i32, align 4
-  store i32 0, i32* %retval, align 4
-  ret i32 0
-}


        


More information about the llvm-commits mailing list