diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp --- a/llvm/lib/Passes/StandardInstrumentations.cpp +++ b/llvm/lib/Passes/StandardInstrumentations.cpp @@ -86,39 +86,39 @@ llvm_unreachable("Unknown IR unit"); } -void printIR(const Function *F, StringRef Banner, StringRef Extra = StringRef(), - bool Brief = false) { +void printIR(raw_ostream &OS, const Function *F, StringRef Banner, + StringRef Extra = StringRef(), bool Brief = false) { if (Brief) { - dbgs() << F->getName() << '\n'; + OS << F->getName() << '\n'; return; } if (!llvm::isFunctionInPrintList(F->getName())) return; - dbgs() << Banner << Extra << "\n" << static_cast(*F); + OS << Banner << Extra << "\n" << static_cast(*F); } -void printIR(const Module *M, StringRef Banner, StringRef Extra = StringRef(), - bool Brief = false) { +void printIR(raw_ostream &OS, const Module *M, StringRef Banner, + StringRef Extra = StringRef(), bool Brief = false) { if (Brief) { - dbgs() << M->getName() << '\n'; + OS << M->getName() << '\n'; return; } if (llvm::isFunctionInPrintList("*") || llvm::forcePrintModuleIR()) { - dbgs() << Banner << Extra << "\n"; - M->print(dbgs(), nullptr, false); + OS << Banner << Extra << "\n"; + M->print(OS, nullptr, false); } else { for (const auto &F : M->functions()) { - printIR(&F, Banner, Extra); + printIR(OS, &F, Banner, Extra); } } } -void printIR(const LazyCallGraph::SCC *C, StringRef Banner, +void printIR(raw_ostream &OS, const LazyCallGraph::SCC *C, StringRef Banner, StringRef Extra = StringRef(), bool Brief = false) { if (Brief) { - dbgs() << *C << '\n'; + OS << *C << '\n'; return; } @@ -127,47 +127,48 @@ const Function &F = N.getFunction(); if (!F.isDeclaration() && llvm::isFunctionInPrintList(F.getName())) { if (!BannerPrinted) { - dbgs() << Banner << Extra << "\n"; + OS << Banner << Extra << "\n"; BannerPrinted = true; } - F.print(dbgs()); + F.print(OS); } } } -void printIR(const Loop *L, StringRef Banner, bool Brief = false) { +void printIR(raw_ostream &OS, const Loop *L, StringRef Banner, + bool Brief = false) { if (Brief) { - dbgs() << *L; + OS << *L; return; } const Function *F = L->getHeader()->getParent(); if (!llvm::isFunctionInPrintList(F->getName())) return; - llvm::printLoop(const_cast(*L), dbgs(), std::string(Banner)); + llvm::printLoop(const_cast(*L), OS, std::string(Banner)); } /// Generic IR-printing helper that unpacks a pointer to IRUnit wrapped into /// llvm::Any and does actual print job. -void unwrapAndPrint(Any IR, StringRef Banner, bool ForceModule = false, - bool Brief = false) { +void unwrapAndPrint(raw_ostream &OS, Any IR, StringRef Banner, + bool ForceModule = false, bool Brief = false) { if (ForceModule) { if (auto UnwrappedModule = unwrapModule(IR)) - printIR(UnwrappedModule->first, Banner, UnwrappedModule->second); + printIR(OS, UnwrappedModule->first, Banner, UnwrappedModule->second); return; } if (any_isa(IR)) { const Module *M = any_cast(IR); assert(M && "module should be valid for printing"); - printIR(M, Banner, "", Brief); + printIR(OS, M, Banner, "", Brief); return; } if (any_isa(IR)) { const Function *F = any_cast(IR); assert(F && "function should be valid for printing"); - printIR(F, Banner, "", Brief); + printIR(OS, F, Banner, "", Brief); return; } @@ -175,14 +176,14 @@ const LazyCallGraph::SCC *C = any_cast(IR); assert(C && "scc should be valid for printing"); std::string Extra = std::string(formatv(" (scc: {0})", C->getName())); - printIR(C, Banner, Extra, Brief); + printIR(OS, C, Banner, Extra, Brief); return; } if (any_isa(IR)) { const Loop *L = any_cast(IR); assert(L && "Loop should be valid for printing"); - printIR(L, Banner, Brief); + printIR(OS, L, Banner, Brief); return; } llvm_unreachable("Unknown wrapped IR type"); @@ -226,7 +227,7 @@ return; SmallString<20> Banner = formatv("*** IR Dump Before {0} ***", PassID); - unwrapAndPrint(IR, Banner, llvm::forcePrintModuleIR()); + unwrapAndPrint(dbgs(), IR, Banner, llvm::forcePrintModuleIR()); return; } @@ -241,7 +242,7 @@ popModuleDesc(PassID); SmallString<20> Banner = formatv("*** IR Dump After {0} ***", PassID); - unwrapAndPrint(IR, Banner, llvm::forcePrintModuleIR()); + unwrapAndPrint(dbgs(), IR, Banner, llvm::forcePrintModuleIR()); } void PrintIRInstrumentation::printAfterPassInvalidated(StringRef PassID) { @@ -262,7 +263,7 @@ SmallString<20> Banner = formatv("*** IR Dump After {0} *** invalidated: ", PassID); - printIR(M, Banner, Extra); + printIR(dbgs(), M, Banner, Extra); } void PrintIRInstrumentation::registerCallbacks( @@ -315,7 +316,7 @@ "Unexpectedly skipping special pass"); dbgs() << "Skipping pass: " << PassID << " on "; - unwrapAndPrint(IR, "", false, true); + unwrapAndPrint(dbgs(), IR, "", false, true); }); PIC.registerBeforeNonSkippedPassCallback( @@ -324,12 +325,12 @@ return; dbgs() << "Running pass: " << PassID << " on "; - unwrapAndPrint(IR, "", false, true); + unwrapAndPrint(dbgs(), IR, "", false, true); }); PIC.registerBeforeAnalysisCallback([](StringRef PassID, Any IR) { dbgs() << "Running analysis: " << PassID << " on "; - unwrapAndPrint(IR, "", false, true); + unwrapAndPrint(dbgs(), IR, "", false, true); }); }