12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- //===--- IRPrintingPasses.cpp - Module and Function printing passes -------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // PrintModulePass and PrintFunctionPass implementations.
- //
- //===----------------------------------------------------------------------===//
- #include "llvm/IRPrinter/IRPrintingPasses.h"
- #include "llvm/ADT/StringRef.h"
- #include "llvm/Analysis/ModuleSummaryAnalysis.h"
- #include "llvm/IR/Function.h"
- #include "llvm/IR/Module.h"
- #include "llvm/IR/PrintPasses.h"
- #include "llvm/Pass.h"
- #include "llvm/Support/Debug.h"
- #include "llvm/Support/raw_ostream.h"
- using namespace llvm;
- PrintModulePass::PrintModulePass() : OS(dbgs()) {}
- PrintModulePass::PrintModulePass(raw_ostream &OS, const std::string &Banner,
- bool ShouldPreserveUseListOrder,
- bool EmitSummaryIndex)
- : OS(OS), Banner(Banner),
- ShouldPreserveUseListOrder(ShouldPreserveUseListOrder),
- EmitSummaryIndex(EmitSummaryIndex) {}
- PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &AM) {
- if (llvm::isFunctionInPrintList("*")) {
- if (!Banner.empty())
- OS << Banner << "\n";
- M.print(OS, nullptr, ShouldPreserveUseListOrder);
- } else {
- bool BannerPrinted = false;
- for (const auto &F : M.functions()) {
- if (llvm::isFunctionInPrintList(F.getName())) {
- if (!BannerPrinted && !Banner.empty()) {
- OS << Banner << "\n";
- BannerPrinted = true;
- }
- F.print(OS);
- }
- }
- }
- ModuleSummaryIndex *Index =
- EmitSummaryIndex ? &(AM.getResult<ModuleSummaryIndexAnalysis>(M))
- : nullptr;
- if (Index) {
- if (Index->modulePaths().empty())
- Index->addModule("", 0);
- Index->print(OS);
- }
- return PreservedAnalyses::all();
- }
- PrintFunctionPass::PrintFunctionPass() : OS(dbgs()) {}
- PrintFunctionPass::PrintFunctionPass(raw_ostream &OS, const std::string &Banner)
- : OS(OS), Banner(Banner) {}
- PreservedAnalyses PrintFunctionPass::run(Function &F,
- FunctionAnalysisManager &) {
- if (isFunctionInPrintList(F.getName())) {
- if (forcePrintModuleIR())
- OS << Banner << " (function: " << F.getName() << ")\n" << *F.getParent();
- else
- OS << Banner << '\n' << static_cast<Value &>(F);
- }
- return PreservedAnalyses::all();
- }
|