X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FIR%2FIRPrintingPasses.cpp;h=822dbeb08b3305d146d182a182ff4565a12dce12;hb=78e9cd40a2ea27cc9300d900a7dccc75940f9eb0;hp=b8e2a2ba5942b4ce549b16bf17d16ff459dd0579;hpb=313e399b48a3929a3cfa908749599b0c8d2069d5;p=oota-llvm.git diff --git a/lib/IR/IRPrintingPasses.cpp b/lib/IR/IRPrintingPasses.cpp index b8e2a2ba594..822dbeb08b3 100644 --- a/lib/IR/IRPrintingPasses.cpp +++ b/lib/IR/IRPrintingPasses.cpp @@ -14,50 +14,78 @@ #include "llvm/IR/IRPrintingPasses.h" #include "llvm/IR/Function.h" #include "llvm/IR/Module.h" +#include "llvm/IR/PassManager.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) + : OS(OS), Banner(Banner), + ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {} + +PreservedAnalyses PrintModulePass::run(Module &M) { + OS << Banner; + if (llvm::isFunctionInPrintList("*")) + M.print(OS, nullptr, ShouldPreserveUseListOrder); + else { + for(const auto &F : M.functions()) + if (llvm::isFunctionInPrintList(F.getName())) + F.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) { + if (isFunctionInPrintList(F.getName())) + OS << Banner << static_cast(F); + return PreservedAnalyses::all(); +} + namespace { -class PrintModulePass : public ModulePass { - raw_ostream &Out; - std::string Banner; +class PrintModulePassWrapper : public ModulePass { + PrintModulePass P; public: static char ID; - PrintModulePass() : ModulePass(ID), Out(dbgs()) {} - PrintModulePass(raw_ostream &Out, const std::string &Banner) - : ModulePass(ID), Out(Out), Banner(Banner) {} + PrintModulePassWrapper() : ModulePass(ID) {} + PrintModulePassWrapper(raw_ostream &OS, const std::string &Banner, + bool ShouldPreserveUseListOrder) + : ModulePass(ID), P(OS, Banner, ShouldPreserveUseListOrder) {} - bool runOnModule(Module &M) { - Out << Banner << M; + bool runOnModule(Module &M) override { + P.run(M); return false; } - virtual void getAnalysisUsage(AnalysisUsage &AU) const { + void getAnalysisUsage(AnalysisUsage &AU) const override { AU.setPreservesAll(); } }; -class PrintFunctionPass : public FunctionPass { - raw_ostream &Out; - std::string Banner; +class PrintFunctionPassWrapper : public FunctionPass { + PrintFunctionPass P; public: static char ID; - PrintFunctionPass() : FunctionPass(ID), Out(dbgs()) {} - PrintFunctionPass(raw_ostream &Out, const std::string &Banner) - : FunctionPass(ID), Out(Out), Banner(Banner) {} + PrintFunctionPassWrapper() : FunctionPass(ID) {} + PrintFunctionPassWrapper(raw_ostream &OS, const std::string &Banner) + : FunctionPass(ID), P(OS, Banner) {} // This pass just prints a banner followed by the function as it's processed. - bool runOnFunction(Function &F) { - Out << Banner << static_cast(F); + bool runOnFunction(Function &F) override { + P.run(F); return false; } - virtual void getAnalysisUsage(AnalysisUsage &AU) const { + void getAnalysisUsage(AnalysisUsage &AU) const override { AU.setPreservesAll(); } }; @@ -72,36 +100,37 @@ public: PrintBasicBlockPass(raw_ostream &Out, const std::string &Banner) : BasicBlockPass(ID), Out(Out), Banner(Banner) {} - bool runOnBasicBlock(BasicBlock &BB) { + bool runOnBasicBlock(BasicBlock &BB) override { Out << Banner << BB; return false; } - virtual void getAnalysisUsage(AnalysisUsage &AU) const { + void getAnalysisUsage(AnalysisUsage &AU) const override { AU.setPreservesAll(); } }; } -char PrintModulePass::ID = 0; -INITIALIZE_PASS(PrintModulePass, "print-module", "Print module to stderr", - false, false) -char PrintFunctionPass::ID = 0; -INITIALIZE_PASS(PrintFunctionPass, "print-function", "Print function to stderr", - false, false) +char PrintModulePassWrapper::ID = 0; +INITIALIZE_PASS(PrintModulePassWrapper, "print-module", + "Print module to stderr", false, false) +char PrintFunctionPassWrapper::ID = 0; +INITIALIZE_PASS(PrintFunctionPassWrapper, "print-function", + "Print function to stderr", false, false) char PrintBasicBlockPass::ID = 0; INITIALIZE_PASS(PrintBasicBlockPass, "print-bb", "Print BB to stderr", false, false) ModulePass *llvm::createPrintModulePass(llvm::raw_ostream &OS, - const std::string &Banner) { - return new PrintModulePass(OS, Banner); + const std::string &Banner, + bool ShouldPreserveUseListOrder) { + return new PrintModulePassWrapper(OS, Banner, ShouldPreserveUseListOrder); } FunctionPass *llvm::createPrintFunctionPass(llvm::raw_ostream &OS, const std::string &Banner) { - return new PrintFunctionPass(OS, Banner); + return new PrintFunctionPassWrapper(OS, Banner); } BasicBlockPass *llvm::createPrintBasicBlockPass(llvm::raw_ostream &OS,